From 8126dce94dc12f504964e74047386372c3f07ecc Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 27 Aug 2014 23:00:19 +0200 Subject: [PATCH 001/166] update: add sceleton for OpenGEX importer. Signed-off-by: Kim Kulling --- code/CMakeLists.txt | 9 +++- code/ImporterRegistry.cpp | 6 +++ code/OgreImporter.h | 100 +++++++++++++++++++------------------- code/OpenGEXImporter.cpp | 96 ++++++++++++++++++++++++++++++++++++ code/OpenGEXImporter.h | 80 ++++++++++++++++++++++++++++++ 5 files changed, 239 insertions(+), 52 deletions(-) create mode 100644 code/OpenGEXImporter.cpp create mode 100644 code/OpenGEXImporter.h diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 224ae7f57..527e72511 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -251,8 +251,6 @@ SET( LWS_SRCS ) SOURCE_GROUP( LWS FILES ${LWS_SRCS}) - - SET( MD2_SRCS MD2FileData.h MD2Loader.cpp @@ -346,6 +344,12 @@ SET( Ogre_SRCS ) SOURCE_GROUP( Ogre FILES ${Ogre_SRCS}) +SET( OpenGEX_SRCS + OpenGEXImporter.cpp + OpenGEXImporter.h +) +SOURCE_GROUP( OpenGEX FILES ${OpenGEX_SRCS}) + SET( Ply_SRCS PlyLoader.cpp PlyLoader.h @@ -675,6 +679,7 @@ SET( assimp_src ${OFFFormat_SRCS} ${Obj_SRCS} ${Ogre_SRCS} + ${OpenGEX_SRCS} ${Ply_SRCS} ${Q3D_SRCS} ${Q3BSP_SRCS} diff --git a/code/ImporterRegistry.cpp b/code/ImporterRegistry.cpp index dff195854..ec804d141 100644 --- a/code/ImporterRegistry.cpp +++ b/code/ImporterRegistry.cpp @@ -142,6 +142,9 @@ corresponding preprocessor flag to selectively disable formats. #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER # include "OgreImporter.h" #endif +#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER +# include "OpenGEXImporter.h" +#endif #ifndef ASSIMP_BUILD_NO_MS3D_IMPORTER # include "MS3DLoader.h" #endif @@ -270,6 +273,9 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out) #if (!defined ASSIMP_BUILD_NO_OGRE_IMPORTER) out.push_back( new Ogre::OgreImporter()); #endif +#if (!defined ASSIMP_BUILD_NO_OPEMGEX_IMPORTER ) + out.push_back( new OpenGEX::OpenGEXImporter() ); +#endif #if (!defined ASSIMP_BUILD_NO_MS3D_IMPORTER) out.push_back( new MS3DImporter()); #endif diff --git a/code/OgreImporter.h b/code/OgreImporter.h index 892696407..1185eeeb0 100644 --- a/code/OgreImporter.h +++ b/code/OgreImporter.h @@ -36,63 +36,63 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- -*/ - +*/ + #ifndef AI_OGREIMPORTER_H_INC #define AI_OGREIMPORTER_H_INC #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER - -#include "BaseImporter.h" - -#include "OgreStructs.h" -#include "OgreParsingUtils.h" - -namespace Assimp -{ -namespace Ogre -{ - + +#include "BaseImporter.h" + +#include "OgreStructs.h" +#include "OgreParsingUtils.h" + +namespace Assimp +{ +namespace Ogre +{ + /** Importer for Ogre mesh, skeleton and material formats. - @todo Support vertex colors. - @todo Support poses/animations from the mesh file. - Currently only skeleton file animations are supported. */ -class OgreImporter : public BaseImporter -{ -public: - /// BaseImporter override. - virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const; - - /// BaseImporter override. + @todo Support vertex colors. + @todo Support poses/animations from the mesh file. + Currently only skeleton file animations are supported. */ +class OgreImporter : public BaseImporter +{ +public: + /// BaseImporter override. + virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const; + + /// BaseImporter override. virtual void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler); /// BaseImporter override. - virtual const aiImporterDesc *GetInfo() const; - - /// BaseImporter override. - virtual void SetupProperties(const Importer *pImp); - -private: - /// Read materials referenced by the @c mesh to @c pScene. - void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, Mesh *mesh); - void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, MeshXml *mesh); - void AssignMaterials(aiScene *pScene, std::vector &materials); - - /// Reads material - aiMaterial* ReadMaterial(const std::string &pFile, Assimp::IOSystem *pIOHandler, const std::string MaterialName); - - // These functions parse blocks from a material file from @c ss. Starting parsing from "{" and ending it to "}". - bool ReadTechnique(const std::string &techniqueName, 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); - - std::string m_userDefinedMaterialLibFile; - bool m_detectTextureTypeFromFilename; - - std::map m_textures; -}; -} // Ogre -} // Assimp - + virtual const aiImporterDesc *GetInfo() const; + + /// BaseImporter override. + virtual void SetupProperties(const Importer *pImp); + +private: + /// Read materials referenced by the @c mesh to @c pScene. + void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, Mesh *mesh); + void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, MeshXml *mesh); + void AssignMaterials(aiScene *pScene, std::vector &materials); + + /// Reads material + aiMaterial* ReadMaterial(const std::string &pFile, Assimp::IOSystem *pIOHandler, const std::string MaterialName); + + // These functions parse blocks from a material file from @c ss. Starting parsing from "{" and ending it to "}". + bool ReadTechnique(const std::string &techniqueName, 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); + + std::string m_userDefinedMaterialLibFile; + bool m_detectTextureTypeFromFilename; + + std::map m_textures; +}; +} // Ogre +} // Assimp + #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER #endif // AI_OGREIMPORTER_H_INC diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp new file mode 100644 index 000000000..361ef4c4e --- /dev/null +++ b/code/OpenGEXImporter.cpp @@ -0,0 +1,96 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2014, 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. + +---------------------------------------------------------------------- +*/ +#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER + +#include "AssimpPCH.h" +#include "OpenGEXImporter.h" + +static const aiImporterDesc desc = { + "Open Game Engine Exchange", + "", + "", + "", + aiImporterFlags_SupportTextFlavour, + 0, + 0, + 0, + 0, + "ogex" +}; + +namespace Assimp { +namespace OpenGEX { + +//------------------------------------------------------------------------------------------------ +OpenGEXImporter::OpenGEXImporter() { + +} + +//------------------------------------------------------------------------------------------------ +OpenGEXImporter::~OpenGEXImporter() { + +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXImporter::CanRead( const std::string &file, IOSystem *pIOHandler, bool checkSig ) const { + return false; +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::InternReadFile( const std::string &file, aiScene *pScene, IOSystem *pIOHandler ) { + +} + +//------------------------------------------------------------------------------------------------ +const aiImporterDesc *OpenGEXImporter::GetInfo() const { + return &desc; +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::SetupProperties( const Importer *pImp ) { + +} + +//------------------------------------------------------------------------------------------------ + +} // Namespace OpenGEX +} // Namespace Assimp + +#endif // ASSIMP_BUILD_NO_OPEMGEX_IMPORTER diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h new file mode 100644 index 000000000..3cf55ff01 --- /dev/null +++ b/code/OpenGEXImporter.h @@ -0,0 +1,80 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2012, 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. + +---------------------------------------------------------------------- +*/ +#ifndef AI_OPENGEX_IMPORTER_H +#define AI_OPENGEX_IMPORTER_H + +#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER + +#include "BaseImporter.h" + +namespace Assimp { +namespace OpenGEX { + +/** @brief This class is used to implement the OpenGEX importer + * + * See http://opengex.org/OpenGEX.pdf for spec. + */ +class OpenGEXImporter : public BaseImporter { +public: + /// The class constructor. + OpenGEXImporter(); + + /// The class destructor. + virtual ~OpenGEXImporter(); + + /// BaseImporter override. + virtual bool CanRead( const std::string &file, IOSystem *pIOHandler, bool checkSig ) const; + + /// 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 ); +}; + +} // Namespace OpenGEX +} // Namespace Assimp + +#endif // ASSIMP_BUILD_NO_OPEMGEX_IMPORTER + +#endif // AI_OPENGEX_IMPORTER_H From 7f45f5fc954322110862d1a720cafa8dfa61df23 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 27 Aug 2014 23:01:35 +0200 Subject: [PATCH 002/166] bugfix: fix license. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 3cf55ff01..f658c9fa1 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -2,7 +2,7 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2014, assimp team All rights reserved. Redistribution and use of this software in source and binary forms, From ed9a466c30968aeb6ec6244ebfee2d073fc4e3c6 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 4 Sep 2014 19:41:14 +0200 Subject: [PATCH 003/166] update: - add OpenGEX parser sceleton - add base datatypes for OpenGEX support. --- code/CMakeLists.txt | 3 + code/OpenGEXParser.cpp | 59 +++++++ code/OpenGEXParser.h | 66 ++++++++ code/OpenGEXStructs.h | 262 +++++++++++++++++++++++++++++++ test/models/OpenGEX/Example.ogex | 95 +++++++++++ 5 files changed, 485 insertions(+) create mode 100644 code/OpenGEXParser.cpp create mode 100644 code/OpenGEXParser.h create mode 100644 code/OpenGEXStructs.h create mode 100644 test/models/OpenGEX/Example.ogex diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 527e72511..aad2c04a7 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -347,6 +347,9 @@ SOURCE_GROUP( Ogre FILES ${Ogre_SRCS}) SET( OpenGEX_SRCS OpenGEXImporter.cpp OpenGEXImporter.h + OpenGEXParser.cpp + OpenGEXParser.h + OpenGEXStructs.h ) SOURCE_GROUP( OpenGEX FILES ${OpenGEX_SRCS}) diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp new file mode 100644 index 000000000..96b19f048 --- /dev/null +++ b/code/OpenGEXParser.cpp @@ -0,0 +1,59 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2014, 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. + +---------------------------------------------------------------------- +*/ +#include "AssimpPCH.h" +#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER + +#include "OpenGEXParser.h" + +namespace Assimp { +namespace OpenGEX { + +OpenGEXParser::OpenGEXParser() { + +} + +OpenGEXParser::~OpenGEXParser() { + +} + +} // Namespace openGEX +} // Namespace Assimp + +#endif ASSIMP_BUILD_NO_OPEMGEX_IMPORTER \ No newline at end of file diff --git a/code/OpenGEXParser.h b/code/OpenGEXParser.h new file mode 100644 index 000000000..34b48e561 --- /dev/null +++ b/code/OpenGEXParser.h @@ -0,0 +1,66 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2014, 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. + +---------------------------------------------------------------------- +*/ +#ifndef ASSIMP_OPENGEX_OPENGEXPARSER_H_INC +#define ASSIMP_OPENGEX_OPENGEXPARSER_H_INC + +#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER + +namespace Assimp { +namespace OpenGEX { + +class OpenGEXParser { +public: + OpenGEXParser(); + ~OpenGEXParser(); + +private: + OpenGEXParser( const OpenGEXParser & ); + OpenGEXParser &operator = ( const OpenGEXParser & ); + +private: + +}; + +} // Namespace openGEX +} // Namespace Assimp + +#endif // ASSIMP_BUILD_NO_OPEMGEX_IMPORTER + +#endif // ASSIMP_OPENGEX_OPENGEXPARSER_H_INC diff --git a/code/OpenGEXStructs.h b/code/OpenGEXStructs.h new file mode 100644 index 000000000..5a0899710 --- /dev/null +++ b/code/OpenGEXStructs.h @@ -0,0 +1,262 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2014, 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. + +---------------------------------------------------------------------- +*/ +#ifndef AI_OPENGEXSTRUCTS_H_INC +#define AI_OPENGEXSTRUCTS_H_INC + +#include +#include + +namespace Assimp { +namespace OpenGEX { + +struct Skin; +struct Object; +struct LightObject; +struct CameraObject; +struct Material; +struct BoneNode; +struct BoneCountArray; +struct BoneIndexArray; +struct BoneWeightArray; + +struct Metric { + std::string metricKey; +}; + +struct VertexArray { + std::string arrayAttrib; + unsigned int morphIndex; +}; + +struct IndexArray { + unsigned int materialIndex; + unsigned int restartIndex; + std::string frontFace; +}; + +struct Mesh { + unsigned int meshLevel; + std::string meshPrimitive; + Skin *skinStructure; +}; + +struct Node { + std::string nodeName; +}; + +struct GeometryNode { + bool visibleFlag[ 2 ]; + bool shadowFlag[ 2 ]; + bool motionBlurFlag[ 2 ]; +}; + +struct LightNode { + bool shadowFlag[ 2 ]; + const LightObject *lightObjectStructure; +}; + +struct CameraNode { + const CameraObject *cameraObjectStructure; +}; + +struct GeometryObject { + Object *object; + bool visibleFlag; + bool shadowFlag; + bool motionBlurFlag; + std::map meshMap; +}; + +struct LightObject { + Object *object; + std::string typeString; + bool shadowFlag; +}; + + +struct CameraObject { + float focalLength; + float nearDepth; + float farDepth; +}; + +struct Matrix { + bool objectFlag; +}; + +struct Transform { + Matrix *matrix; + int transformCount; + const float *transformArray; +}; + +struct Translation { + std::string translationKind; +}; + +struct Rotation { + std::string rotationKind; +}; + +struct Scale { + std::string scaleKind; +}; + +struct Name { + std::string name; +}; + + +struct ObjectRef { + Object *targetStructure; +}; + +struct MaterialRef { + unsigned int materialIndex; + const Material *targetStructure; +}; + +struct BoneRefArray { + int boneCount; + const BoneNode **boneNodeArray; +}; + +struct BoneCount { + int vertexCount; + const unsigned short *boneCountArray; + unsigned short *arrayStorage; +}; + +struct BoneIndex { + int boneIndexCount; + const unsigned short *boneIndexArray; + unsigned short *arrayStorage; +}; + + +struct BoneWeight { + int boneWeightCount; + const float *boneWeightArray; +}; + +struct Skeleton { + const BoneRefArray *boneRefArrayStructure; + const Transform *transformStructure; +}; + +struct Skin { + const Skeleton *skeletonStructure; + const BoneCountArray *boneCountArrayStructure; + const BoneIndexArray *boneIndexArrayStructure; + const BoneWeightArray *boneWeightArrayStructure; +}; + +struct Material { + bool twoSidedFlag; + const char *materialName; +}; + +struct Attrib { + std::string attribString; +}; + +struct Param { + float param; +}; + +struct Color { + float color[ 4 ]; +}; + +struct Texture { + std::string textureName; + unsigned int texcoordIndex; +}; + +struct Atten { + std::string attenKind; + std::string curveType; + + float beginParam; + float endParam; + + float scaleParam; + float offsetParam; + + float constantParam; + float linearParam; + float quadraticParam; + + float powerParam; +}; + +struct Key { + std::string keyKind; + bool scalarFlag; +}; + +struct Curve { + std::string curveType; + const Key *keyValueStructure; + const Key *keyControlStructure[ 2 ]; + const Key *keyTensionStructure; + const Key *keyContinuityStructure; + const Key *keyBiasStructure; +}; + +struct Animation { + int clipIndex; + bool beginFlag; + bool endFlag; + float beginTime; + float endTime; +}; + +struct OpenGexDataDescription { + float distanceScale; + float angleScale; + float timeScale; + int upDirection; +}; + +} // Namespace OpenGEX +} // Namespace Assimp + +#endif // AI_OPENGEXSTRUCTS_H_INC diff --git a/test/models/OpenGEX/Example.ogex b/test/models/OpenGEX/Example.ogex new file mode 100644 index 000000000..8aa1f9f4f --- /dev/null +++ b/test/models/OpenGEX/Example.ogex @@ -0,0 +1,95 @@ +Metric (key = "distance") {float {1}} +Metric (key = "angle") {float {1}} +Metric (key = "time") {float {1}} +Metric (key = "up") {string {"z"}} + +GeometryNode $node1 +{ + Name {string {"Box001"}} + ObjectRef {ref {$geometry1}} + MaterialRef {ref {$material1}} + + Transform + { + float[16] + { + {0x3F800000, 0x00000000, 0x00000000, 0x00000000, // {1, 0, 0, 0 + 0x00000000, 0x3F800000, 0x00000000, 0x00000000, // 0, 1, 0, 0 + 0x00000000, 0x00000000, 0x3F800000, 0x00000000, // 0, 0, 1, 0 + 0xBEF33B00, 0x411804DE, 0x00000000, 0x3F800000} // -0.47506, 9.50119, 0, 1} + } + } +} + +GeometryNode $node2 +{ + Name {string {"Box002"}} + ObjectRef {ref {$geometry1}} + MaterialRef {ref {$material1}} + + Transform + { + float[16] + { + {0x3F800000, 0x00000000, 0x00000000, 0x00000000, // {1, 0, 0, 0 + 0x00000000, 0x3F800000, 0x00000000, 0x00000000, // 0, 1, 0, 0 + 0x00000000, 0x00000000, 0x3F800000, 0x00000000, // 0, 0, 1, 0 + 0x43041438, 0x411804DE, 0x00000000, 0x3F800000} // 132.079, 9.50119, 0, 1} + } + } +} + +GeometryObject $geometry1 // Box001, Box002 +{ + Mesh (primitive = "triangles") + { + VertexArray (attrib = "position") + { + float[3] // 24 + { + {0xC2501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0x424C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x42BA3928}, + {0xC2501375, 0xC24C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x42BA3928}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x42BA3928}, + {0x42501375, 0x424C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x42BA3928}, {0x42501375, 0x424C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x42BA3928} + } + } + + VertexArray (attrib = "normal") + { + float[3] // 24 + { + {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000}, + {0x00000000, 0xBF800000, 0x00000000}, {0x00000000, 0xBF800000, 0x00000000}, {0x00000000, 0xBF800000, 0x00000000}, {0x80000000, 0xBF800000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, + {0x00000000, 0x3F800000, 0x00000000}, {0x00000000, 0x3F800000, 0x00000000}, {0x00000000, 0x3F800000, 0x00000000}, {0x80000000, 0x3F800000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000} + } + } + + VertexArray (attrib = "texcoord") + { + float[2] // 24 + { + {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, + {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, + {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000} + } + } + + IndexArray + { + unsigned_int32[3] // 12 + { + {0, 1, 2}, {2, 3, 0}, {4, 5, 6}, {6, 7, 4}, {8, 9, 10}, {10, 11, 8}, {12, 13, 14}, {14, 15, 12}, {16, 17, 18}, {18, 19, 16}, {20, 21, 22}, {22, 23, 20} + } + } + } +} + +Material $material1 +{ + Name {string {"03 - Default"}} + + Color (attrib = "diffuse") {float[3] {{0.588235, 0.588235, 0.588235}}} + Texture (attrib = "diffuse") + { + string {"texture/Concrete.tga"} + } +} From c3b35f3933db2734fd3d0ab8dbb7323e656f4b0a Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 6 Sep 2014 09:19:28 +0200 Subject: [PATCH 004/166] update: add endline. --- code/OpenGEXParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp index 96b19f048..dd7006e1e 100644 --- a/code/OpenGEXParser.cpp +++ b/code/OpenGEXParser.cpp @@ -56,4 +56,4 @@ OpenGEXParser::~OpenGEXParser() { } // Namespace openGEX } // Namespace Assimp -#endif ASSIMP_BUILD_NO_OPEMGEX_IMPORTER \ No newline at end of file +#endif ASSIMP_BUILD_NO_OPEMGEX_IMPORTER From 75d3c8e9f22d7be44c3e3811bcaf110d482d0d96 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 12 Sep 2014 12:00:03 +0200 Subject: [PATCH 005/166] update: metric parsing ongoing. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 27 ++++- code/OpenGEXImporter.h | 5 + code/OpenGEXParser.cpp | 223 ++++++++++++++++++++++++++++++++++++++- code/OpenGEXParser.h | 21 +++- code/OpenGEXStructs.h | 5 +- 5 files changed, 274 insertions(+), 7 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 361ef4c4e..f385cc11d 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -41,6 +41,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AssimpPCH.h" #include "OpenGEXImporter.h" +#include "OpenGEXParser.h" +#include "DefaultIOSystem.h" + +#include static const aiImporterDesc desc = { "Open Game Engine Exchange", @@ -70,12 +74,29 @@ OpenGEXImporter::~OpenGEXImporter() { //------------------------------------------------------------------------------------------------ bool OpenGEXImporter::CanRead( const std::string &file, IOSystem *pIOHandler, bool checkSig ) const { - return false; + bool canRead( false ); + if( !checkSig ) { + canRead = SimpleExtensionCheck( file, "ogex" ); + } else { + static const char *token[] = { "Metric", "GeometryNode", "VertexArray (attrib", "IndexArray" }; + canRead = BaseImporter::SearchFileHeaderForToken( pIOHandler, file, token, 4 ); + } + + return canRead; } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::InternReadFile( const std::string &file, aiScene *pScene, IOSystem *pIOHandler ) { +void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pScene, IOSystem *pIOHandler ) { + // open source file + IOStream *file = pIOHandler->Open( filename, "rb" ); + if( !file ) { + throw DeadlyImportError( "Failed to open file " + filename ); + } + std::vector buffer; + TextFileToBuffer( file, buffer ); + OpenGEXParser myParser( buffer ); + myParser.parse(); } //------------------------------------------------------------------------------------------------ @@ -85,7 +106,7 @@ const aiImporterDesc *OpenGEXImporter::GetInfo() const { //------------------------------------------------------------------------------------------------ void OpenGEXImporter::SetupProperties( const Importer *pImp ) { - + } //------------------------------------------------------------------------------------------------ diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index f658c9fa1..821692c25 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -70,6 +70,11 @@ public: /// BaseImporter override. virtual void SetupProperties( const Importer *pImp ); + +protected: + void ParseMetric(); + void ParseGeoObject(); + void ParseMaterial(); }; } // Namespace OpenGEX diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp index dd7006e1e..7e73520ac 100644 --- a/code/OpenGEXParser.cpp +++ b/code/OpenGEXParser.cpp @@ -41,18 +41,239 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER #include "OpenGEXParser.h" +#include "OpenGEXStructs.h" +#include "ParsingUtils.h" +#include "fast_atof.h" + +#include namespace Assimp { namespace OpenGEX { -OpenGEXParser::OpenGEXParser() { +//------------------------------------------------------------------------------------------------ +static const std::string Metric = "Metric"; +static const std::string GeometryNode = "GeometryNode"; +static const std::string GeometryObject = "GeometryObject"; +static const std::string Material = "Material"; +static const size_t NumObjects = 4; + +static const std::string RootNodes[ NumObjects ] = { + Metric, + GeometryNode, + GeometryObject, + Material +}; + +static bool containsNode( const char *bufferPtr, size_t size, const std::string *nodes, size_t numNodes, + const std::string *tokenFound ) { + tokenFound = NULL; + if( 0 == numNodes ) { + return false; + } + + bool found( false ); + for( size_t i = 0; i < numNodes; ++i ) { + if( TokenMatch( bufferPtr, nodes[ i ].c_str(), nodes[ i ].size() ) ) { + tokenFound = &nodes[ i ]; + found = true; + break; + } + } + + return found; +} + +//------------------------------------------------------------------------------------------------ +OpenGEXParser::OpenGEXParser( const std::vector &buffer ) +: m_buffer( buffer ) +, m_index( 0 ) +, m_buffersize( buffer.size() ) { } +//------------------------------------------------------------------------------------------------ OpenGEXParser::~OpenGEXParser() { } +//------------------------------------------------------------------------------------------------ +void OpenGEXParser::parse() { + while( parseNextNode() ) { + + } +} + +//------------------------------------------------------------------------------------------------ +std::string OpenGEXParser::getNextToken() { + std::string token; + while( m_index < m_buffersize && IsSpace( m_buffer[ m_index ] ) ) { + ++m_index; + } + + while( m_index < m_buffersize && !IsSpace( m_buffer[ m_index ] ) ) { + token += m_buffer[ m_index ]; + m_index++; + } + + if( token == "//" ) { + skipComments(); + token = getNextToken(); + } + + return token; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::skipComments() { + bool skipped( false ); + if( strncmp( &m_buffer[ m_index ], "//", 2 ) == 0) { + while( !IsLineEnd( m_buffer[ m_index ] ) ) { + ++m_index; + } + skipped = true; + } + + return skipped; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::parseNextNode() { + std::string token( getNextToken() ); + std::string rootNodeName; + if( containsNode( token.c_str(), token.size(), RootNodes, NumObjects, &rootNodeName ) ) { + if( !getNodeHeader( rootNodeName ) ) { + return false; + } + + if( !getNodeData() ) { + return false; + } + } + + return true; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::getNodeHeader( const std::string &name ) { + if( name == Metric ) { + std::string token( getNextToken() ); + + } + + return false; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::getBracketOpen() { + const std::string token( getNextToken() ); + if( "{" == token ) { + return true; + } + + return false; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::getBracketClose() { + const std::string token( getNextToken() ); + if( "}" == token ) { + return true; + } + + return false; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::getStringData( std::string &data ) { + if( !getBracketOpen() ) { + return false; + } + + if( !getBracketClose() ) { + return false; + } + return false; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::getFloatData( size_t num, float *data ) { + ai_assert( nullptr != data ); + + if( !getBracketOpen() ) { + return false; + } + + bool ok( true ); + size_t dataIdx( 0 ); + for( unsigned int i = 0; i < num; ++i ) { + data[ dataIdx ] = fast_atof( &m_buffer[ m_index ] ); + ++dataIdx; + std::string tk = getNextToken(); + if( tk == "," ) { + if( i >= ( num - 1 ) ) { + ok = false; + break; + } + } + } + + if( !getBracketClose() ) { + return false; + } + + return ok; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::getNodeData() { + if( !getBracketOpen() ) { + return false; + } + + if( !onMetricNode() ) { + return false; + } + + if( !getBracketClose() ) { + return false; + } + + return true; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::getMetricAttribute( std::string &attribName ) { + return false; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::onMetricNode() { + std::string attribName; + if( !getMetricAttribute( attribName ) ) { + return false; + } + + if( "distance" == attribName ) { + float distance( 0.0f ); + getFloatData( 1, &distance ); + } else if( "angle" == attribName ) { + float angle( 0.0f ); + getFloatData( 1, &angle ); + } else if( "time" == attribName ) { + float time( 0.0f ); + getFloatData( 1, &time ); + } else if( "up" == attribName ) { + std::string up; + getStringData( up ); + } else { + return false; + } + + return true; +} + +//------------------------------------------------------------------------------------------------ + } // Namespace openGEX } // Namespace Assimp diff --git a/code/OpenGEXParser.h b/code/OpenGEXParser.h index 34b48e561..0bdb7909a 100644 --- a/code/OpenGEXParser.h +++ b/code/OpenGEXParser.h @@ -41,21 +41,38 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define ASSIMP_OPENGEX_OPENGEXPARSER_H_INC #ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER +#include namespace Assimp { namespace OpenGEX { class OpenGEXParser { public: - OpenGEXParser(); + OpenGEXParser( const std::vector &buffer ); ~OpenGEXParser(); + void parse(); + +protected: + std::string getNextToken(); + bool skipComments(); + bool parseNextNode(); + bool getNodeHeader( const std::string &name ); + bool getBracketOpen(); + bool getBracketClose(); + bool getStringData( std::string &data ); + bool getFloatData( size_t num, float *data ); + bool getNodeData(); + bool getMetricAttribute( std::string &attribName ); + bool onMetricNode(); private: OpenGEXParser( const OpenGEXParser & ); OpenGEXParser &operator = ( const OpenGEXParser & ); private: - + const std::vector &m_buffer; + size_t m_index; + size_t m_buffersize; }; } // Namespace openGEX diff --git a/code/OpenGEXStructs.h b/code/OpenGEXStructs.h index 5a0899710..d54bf32d1 100644 --- a/code/OpenGEXStructs.h +++ b/code/OpenGEXStructs.h @@ -57,7 +57,10 @@ struct BoneIndexArray; struct BoneWeightArray; struct Metric { - std::string metricKey; + float m_distance; + float m_angle; + float m_time; + float m_up; }; struct VertexArray { From db582ee024bfbd37af9ca6a53917e1345fa5f84c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 12 Sep 2014 18:12:18 +0200 Subject: [PATCH 006/166] bugfix: replace nullptr with NULL: Signed-off-by: Kim Kulling --- code/OpenGEXParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp index 7e73520ac..19fdcb990 100644 --- a/code/OpenGEXParser.cpp +++ b/code/OpenGEXParser.cpp @@ -197,7 +197,7 @@ bool OpenGEXParser::getStringData( std::string &data ) { //------------------------------------------------------------------------------------------------ bool OpenGEXParser::getFloatData( size_t num, float *data ) { - ai_assert( nullptr != data ); + ai_assert( NULL != data ); if( !getBracketOpen() ) { return false; From 6843c42da10c58ff1fe6dcb9d035be04eebe7b69 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 28 Oct 2014 21:45:09 +0100 Subject: [PATCH 007/166] update: - merge master into branch - fix metrix header parsing. Signed-off-by: Kim Kulling --- code/OpenGEXParser.cpp | 117 +++++++++++++++++++++++++++++------------ code/OpenGEXParser.h | 18 ++++++- 2 files changed, 98 insertions(+), 37 deletions(-) diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp index 19fdcb990..efb1ff7b0 100644 --- a/code/OpenGEXParser.cpp +++ b/code/OpenGEXParser.cpp @@ -55,8 +55,7 @@ static const std::string Metric = "Metric"; static const std::string GeometryNode = "GeometryNode"; static const std::string GeometryObject = "GeometryObject"; static const std::string Material = "Material"; -static const size_t NumObjects = 4; - +static const size_t NumObjects = 4; static const std::string RootNodes[ NumObjects ] = { Metric, GeometryNode, @@ -64,9 +63,31 @@ static const std::string RootNodes[ NumObjects ] = { Material }; -static bool containsNode( const char *bufferPtr, size_t size, const std::string *nodes, size_t numNodes, - const std::string *tokenFound ) { - tokenFound = NULL; +static const size_t NumSeparator = 4; +static const std::string Separator[ NumSeparator ] = { + "(", ")", "{", "}" +}; + + +static const size_t NumToken = 8; +static const std::string Token[ NumToken ] = { + RootNodes[ 0 ], + RootNodes[ 1 ], + RootNodes[ 2 ], + RootNodes[ 3 ], + Separator[ 0 ], + Separator[ 1 ], + Separator[ 2 ], + Separator[ 3 ] +}; + +static bool isSeparator( char in ) { + return ( in == '(' || in == ')' || in == '{' || in == '}' ); +} + +static bool containsNode( const char *bufferPtr, size_t size, const std::string *nodes, + size_t numNodes, std::string &tokenFound ) { + tokenFound = ""; if( 0 == numNodes ) { return false; } @@ -74,7 +95,7 @@ static bool containsNode( const char *bufferPtr, size_t size, const std::string bool found( false ); for( size_t i = 0; i < numNodes; ++i ) { if( TokenMatch( bufferPtr, nodes[ i ].c_str(), nodes[ i ].size() ) ) { - tokenFound = &nodes[ i ]; + tokenFound = nodes[ i ]; found = true; break; } @@ -83,12 +104,27 @@ static bool containsNode( const char *bufferPtr, size_t size, const std::string return found; } +static OpenGEXParser::TokenType getTokenTypeByName( const char *in ) { + ai_assert( NULL != in ); + + OpenGEXParser::TokenType type( OpenGEXParser::None ); + for( size_t i = 0; i < NumToken; ++i ) { + if( TokenMatch( in, Token[ i ].c_str(), Token[ i ].size() ) ) { + type = static_cast( i+1 ); + break; + } + } + + return type; +} + //------------------------------------------------------------------------------------------------ OpenGEXParser::OpenGEXParser( const std::vector &buffer ) : m_buffer( buffer ) , m_index( 0 ) -, m_buffersize( buffer.size() ) { - +, m_buffersize( buffer.size() ) +, m_nodeTypeStack() { + // empty } //------------------------------------------------------------------------------------------------ @@ -107,10 +143,10 @@ void OpenGEXParser::parse() { std::string OpenGEXParser::getNextToken() { std::string token; while( m_index < m_buffersize && IsSpace( m_buffer[ m_index ] ) ) { - ++m_index; + m_index++; } - while( m_index < m_buffersize && !IsSpace( m_buffer[ m_index ] ) ) { + while( m_index < m_buffersize && !IsSpace( m_buffer[ m_index ] ) && !isSeparator( m_buffer[ m_index ] ) ) { token += m_buffer[ m_index ]; m_index++; } @@ -120,6 +156,13 @@ std::string OpenGEXParser::getNextToken() { token = getNextToken(); } + if( token.empty() ) { + if( isSeparator( m_buffer[ m_index ] ) ) { + token += m_buffer[ m_index ]; + m_index++; + } + } + return token; } @@ -140,7 +183,8 @@ bool OpenGEXParser::skipComments() { bool OpenGEXParser::parseNextNode() { std::string token( getNextToken() ); std::string rootNodeName; - if( containsNode( token.c_str(), token.size(), RootNodes, NumObjects, &rootNodeName ) ) { + if( containsNode( token.c_str(), token.size(), RootNodes, NumObjects, rootNodeName ) ) { + m_nodeTypeStack.push_back( getTokenTypeByName( rootNodeName.c_str() ) ); if( !getNodeHeader( rootNodeName ) ) { return false; } @@ -148,6 +192,8 @@ bool OpenGEXParser::parseNextNode() { if( !getNodeData() ) { return false; } + + m_nodeTypeStack.pop_back(); } return true; @@ -155,12 +201,15 @@ bool OpenGEXParser::parseNextNode() { //------------------------------------------------------------------------------------------------ bool OpenGEXParser::getNodeHeader( const std::string &name ) { - if( name == Metric ) { - std::string token( getNextToken() ); - + bool success( false ); + if( m_nodeTypeStack.back() == MetricNode ) { + std::string attribName, value; + if( getMetricAttributeKey( attribName, value ) ) { + success = true; + } } - return false; + return success; } //------------------------------------------------------------------------------------------------ @@ -226,33 +275,31 @@ bool OpenGEXParser::getFloatData( size_t num, float *data ) { //------------------------------------------------------------------------------------------------ bool OpenGEXParser::getNodeData() { - if( !getBracketOpen() ) { - return false; - } - - if( !onMetricNode() ) { - return false; - } - - if( !getBracketClose() ) { - return false; - } - return true; } //------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getMetricAttribute( std::string &attribName ) { - return false; +bool OpenGEXParser::getMetricAttributeKey( std::string &attribName, std::string &value ) { + bool ok( false ); + attribName = ""; + std::string token( getNextToken() ); + if( token[ 0 ] == '(' ) { + // get attribute + attribName = getNextToken(); + std::string equal = getNextToken(); + value = getNextToken(); + + token = getNextToken(); + if( token[ 0 ] == ')' ) { + ok = true; + } + } + + return ok; } //------------------------------------------------------------------------------------------------ -bool OpenGEXParser::onMetricNode() { - std::string attribName; - if( !getMetricAttribute( attribName ) ) { - return false; - } - +bool OpenGEXParser::onMetricNode( const std::string &attribName ) { if( "distance" == attribName ) { float distance( 0.0f ); getFloatData( 1, &distance ); diff --git a/code/OpenGEXParser.h b/code/OpenGEXParser.h index 0bdb7909a..1733366f7 100644 --- a/code/OpenGEXParser.h +++ b/code/OpenGEXParser.h @@ -47,6 +47,19 @@ namespace Assimp { namespace OpenGEX { class OpenGEXParser { +public: + enum TokenType { + None = 0, + MetricNode, + GeometryNode, + GeometryObject, + Material, + BracketIn, + BracketOut, + CurlyBracketIn, + CurlyBracketOut, + }; + public: OpenGEXParser( const std::vector &buffer ); ~OpenGEXParser(); @@ -62,8 +75,8 @@ protected: bool getStringData( std::string &data ); bool getFloatData( size_t num, float *data ); bool getNodeData(); - bool getMetricAttribute( std::string &attribName ); - bool onMetricNode(); + bool getMetricAttributeKey( std::string &attribName, std::string &value ); + bool onMetricNode( const std::string &attribName ); private: OpenGEXParser( const OpenGEXParser & ); @@ -71,6 +84,7 @@ private: private: const std::vector &m_buffer; + std::vector m_nodeTypeStack; size_t m_index; size_t m_buffersize; }; From 1a5695ff485ec28f50db62f6376bab1fdf5d584e Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 2 Nov 2014 19:01:04 +0100 Subject: [PATCH 008/166] update: add parsing of metric nodes. Signed-off-by: Kim Kulling --- code/OpenGEXParser.cpp | 84 ++++++++++++++++++++++++++++++------------ code/OpenGEXParser.h | 26 +++++++++++-- 2 files changed, 84 insertions(+), 26 deletions(-) diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp index efb1ff7b0..0acf209a6 100644 --- a/code/OpenGEXParser.cpp +++ b/code/OpenGEXParser.cpp @@ -118,6 +118,16 @@ static OpenGEXParser::TokenType getTokenTypeByName( const char *in ) { return type; } +static void removeQuotes( std::string &attribName ) { + std::string tmp; + for( unsigned int i = 0; i < attribName.size(); ++i ) { + if( attribName[ i ] != '\"' ) { + tmp += attribName[ i ]; + } + } + attribName = tmp; +} + //------------------------------------------------------------------------------------------------ OpenGEXParser::OpenGEXParser( const std::vector &buffer ) : m_buffer( buffer ) @@ -182,14 +192,14 @@ bool OpenGEXParser::skipComments() { //------------------------------------------------------------------------------------------------ bool OpenGEXParser::parseNextNode() { std::string token( getNextToken() ); - std::string rootNodeName; + std::string rootNodeName, nodeType; if( containsNode( token.c_str(), token.size(), RootNodes, NumObjects, rootNodeName ) ) { m_nodeTypeStack.push_back( getTokenTypeByName( rootNodeName.c_str() ) ); - if( !getNodeHeader( rootNodeName ) ) { + if( !getNodeHeader( nodeType ) ) { return false; } - if( !getNodeData() ) { + if( !getNodeData( nodeType ) ) { return false; } @@ -200,11 +210,10 @@ bool OpenGEXParser::parseNextNode() { } //------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getNodeHeader( const std::string &name ) { +bool OpenGEXParser::getNodeHeader( std::string &name ) { bool success( false ); if( m_nodeTypeStack.back() == MetricNode ) { - std::string attribName, value; - if( getMetricAttributeKey( attribName, value ) ) { + if( getMetricAttributeKey( name ) ) { success = true; } } @@ -248,6 +257,9 @@ bool OpenGEXParser::getStringData( std::string &data ) { bool OpenGEXParser::getFloatData( size_t num, float *data ) { ai_assert( NULL != data ); + std::string tk; + tk = getNextToken(); + if( !getBracketOpen() ) { return false; } @@ -257,7 +269,7 @@ bool OpenGEXParser::getFloatData( size_t num, float *data ) { for( unsigned int i = 0; i < num; ++i ) { data[ dataIdx ] = fast_atof( &m_buffer[ m_index ] ); ++dataIdx; - std::string tk = getNextToken(); + tk = getNextToken(); if( tk == "," ) { if( i >= ( num - 1 ) ) { ok = false; @@ -274,24 +286,41 @@ bool OpenGEXParser::getFloatData( size_t num, float *data ) { } //------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getNodeData() { - return true; +bool OpenGEXParser::getNodeData( const std::string &nodeType ) { + bool success( false ); + + if( !getBracketOpen() ) { + return false; + } + + TokenType type( m_nodeTypeStack.back() ); + if( type == MetricNode ) { + success = onMetricNode( nodeType ); + } + + if( !getBracketClose() ) { + return false; + } + + return success; } //------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getMetricAttributeKey( std::string &attribName, std::string &value ) { +bool OpenGEXParser::getMetricAttributeKey( std::string &attribName ) { bool ok( false ); attribName = ""; std::string token( getNextToken() ); if( token[ 0 ] == '(' ) { // get attribute - attribName = getNextToken(); - std::string equal = getNextToken(); - value = getNextToken(); - token = getNextToken(); - if( token[ 0 ] == ')' ) { - ok = true; + if( "key" == token ) { + std::string equal = getNextToken(); + attribName = getNextToken(); + token = getNextToken(); + if( token[ 0 ] == ')' ) { + ok = true; + removeQuotes( attribName ); + } } } @@ -300,28 +329,37 @@ bool OpenGEXParser::getMetricAttributeKey( std::string &attribName, std::string //------------------------------------------------------------------------------------------------ bool OpenGEXParser::onMetricNode( const std::string &attribName ) { + bool success( true ); if( "distance" == attribName ) { float distance( 0.0f ); - getFloatData( 1, &distance ); + if( getFloatData( 1, &distance ) ) { + m_model.m_metrics.m_distance = distance; + } } else if( "angle" == attribName ) { float angle( 0.0f ); - getFloatData( 1, &angle ); + if( getFloatData( 1, &angle ) ) { + m_model.m_metrics.m_angle = angle; + } } else if( "time" == attribName ) { float time( 0.0f ); - getFloatData( 1, &time ); + if( getFloatData( 1, &time ) ) { + m_model.m_metrics.m_time = time; + } } else if( "up" == attribName ) { std::string up; - getStringData( up ); + if( getStringData( up ) ) { + m_model.m_metrics.m_up = up; + } } else { - return false; + success = false; } - return true; + return success; } //------------------------------------------------------------------------------------------------ -} // Namespace openGEX +} // Namespace OpenGEX } // Namespace Assimp #endif ASSIMP_BUILD_NO_OPEMGEX_IMPORTER diff --git a/code/OpenGEXParser.h b/code/OpenGEXParser.h index 1733366f7..f6ef2df14 100644 --- a/code/OpenGEXParser.h +++ b/code/OpenGEXParser.h @@ -41,11 +41,30 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define ASSIMP_OPENGEX_OPENGEXPARSER_H_INC #ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER + #include +#include namespace Assimp { namespace OpenGEX { +struct OpenGEXModel { + struct Metrics { + float m_distance; + float m_angle; + float m_time; + std::string m_up; + + Metrics() + : m_distance( 0.0f ) + , m_angle( 0.0f ) + , m_time( 0.0f ) + , m_up() { + // empty + } + } m_metrics; +}; + class OpenGEXParser { public: enum TokenType { @@ -69,13 +88,13 @@ protected: std::string getNextToken(); bool skipComments(); bool parseNextNode(); - bool getNodeHeader( const std::string &name ); + bool getNodeHeader( std::string &name ); bool getBracketOpen(); bool getBracketClose(); bool getStringData( std::string &data ); bool getFloatData( size_t num, float *data ); - bool getNodeData(); - bool getMetricAttributeKey( std::string &attribName, std::string &value ); + bool getNodeData( const std::string &nodeType ); + bool getMetricAttributeKey( std::string &attribName ); bool onMetricNode( const std::string &attribName ); private: @@ -85,6 +104,7 @@ private: private: const std::vector &m_buffer; std::vector m_nodeTypeStack; + OpenGEXModel m_model; size_t m_index; size_t m_buffersize; }; From dbf95362133a5ae4ab377f547f33679c1a7c3c1b Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 2 Nov 2014 20:30:45 +0100 Subject: [PATCH 009/166] bugfix: add correct handling for metric line end for example file. Signed-off-by: Kim Kulling --- .gitignore | 1 + code/OpenGEXParser.cpp | 30 +++++++++++++++++++++--------- code/OpenGEXParser.h | 1 + 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index f4940f273..67299f752 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ test/gtest/src/gtest-stamp/gtest-build.cmake test/gtest/src/gtest-stamp/Debug/gtest-patch *.cache test/gtest/src/gtest-stamp/Debug/gtest-build +*.lib diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp index 0acf209a6..03f222d1c 100644 --- a/code/OpenGEXParser.cpp +++ b/code/OpenGEXParser.cpp @@ -189,6 +189,17 @@ bool OpenGEXParser::skipComments() { return skipped; } +//------------------------------------------------------------------------------------------------ +void OpenGEXParser::readUntilEndOfLine() { + while( !IsLineEnd( m_buffer[ m_index ] ) ) { + ++m_index; + } + ++m_index; + if( IsLineEnd( m_buffer[ m_index ] ) ) { + ++m_index; + } +} + //------------------------------------------------------------------------------------------------ bool OpenGEXParser::parseNextNode() { std::string token( getNextToken() ); @@ -202,8 +213,11 @@ bool OpenGEXParser::parseNextNode() { if( !getNodeData( nodeType ) ) { return false; } + + readUntilEndOfLine(); m_nodeTypeStack.pop_back(); + } return true; @@ -329,21 +343,19 @@ bool OpenGEXParser::getMetricAttributeKey( std::string &attribName ) { //------------------------------------------------------------------------------------------------ bool OpenGEXParser::onMetricNode( const std::string &attribName ) { + float value( 0.0f ); bool success( true ); if( "distance" == attribName ) { - float distance( 0.0f ); - if( getFloatData( 1, &distance ) ) { - m_model.m_metrics.m_distance = distance; + if( getFloatData( 1, &value ) ) { + m_model.m_metrics.m_distance = value; } } else if( "angle" == attribName ) { - float angle( 0.0f ); - if( getFloatData( 1, &angle ) ) { - m_model.m_metrics.m_angle = angle; + if( getFloatData( 1, &value ) ) { + m_model.m_metrics.m_angle = value; } } else if( "time" == attribName ) { - float time( 0.0f ); - if( getFloatData( 1, &time ) ) { - m_model.m_metrics.m_time = time; + if( getFloatData( 1, &value ) ) { + m_model.m_metrics.m_time = value; } } else if( "up" == attribName ) { std::string up; diff --git a/code/OpenGEXParser.h b/code/OpenGEXParser.h index f6ef2df14..82b30e4ae 100644 --- a/code/OpenGEXParser.h +++ b/code/OpenGEXParser.h @@ -87,6 +87,7 @@ public: protected: std::string getNextToken(); bool skipComments(); + void readUntilEndOfLine(); bool parseNextNode(); bool getNodeHeader( std::string &name ); bool getBracketOpen(); From 9f80a2a2a9e51a688e44baf75cc235a0e9895e2f Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 29 Nov 2014 11:33:49 +0100 Subject: [PATCH 010/166] update parser. Signed-off-by: Kim Kulling --- code/OpenGEXParser.cpp | 36 ++++++++++++++++++++++++++++++++++-- code/OpenGEXParser.h | 3 +++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp index 03f222d1c..3dcc83e44 100644 --- a/code/OpenGEXParser.cpp +++ b/code/OpenGEXParser.cpp @@ -226,10 +226,19 @@ bool OpenGEXParser::parseNextNode() { //------------------------------------------------------------------------------------------------ bool OpenGEXParser::getNodeHeader( std::string &name ) { bool success( false ); - if( m_nodeTypeStack.back() == MetricNode ) { + TokenType tokenType( m_nodeTypeStack.back() ); + if( tokenType == MetricNode ) { if( getMetricAttributeKey( name ) ) { success = true; } + } else if( tokenType == GeometryNode ) { + + } else if( tokenType == GeometryObject ) { + + } else if( tokenType == Material ) { + + } else { + DefaultLogger::get()->warn( "Unknown token type in file." ); } return success; @@ -307,9 +316,17 @@ bool OpenGEXParser::getNodeData( const std::string &nodeType ) { return false; } - TokenType type( m_nodeTypeStack.back() ); + const TokenType type( m_nodeTypeStack.back() ); if( type == MetricNode ) { success = onMetricNode( nodeType ); + } else if( type == GeometryNode ) { + success = onGeometryNode(); + } else if( type == GeometryObject ) { + success = onGeometryObject(); + } else if( type == Material ) { + success = onMaterial(); + } else { + DefaultLogger::get()->warn( "Unknown token type in file." ); } if( !getBracketClose() ) { @@ -369,6 +386,21 @@ bool OpenGEXParser::onMetricNode( const std::string &attribName ) { return success; } +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::onGeometryNode() { + return true; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::onGeometryObject() { + return true; +} + +//------------------------------------------------------------------------------------------------ +bool OpenGEXParser::onMaterial() { + return true; +} + //------------------------------------------------------------------------------------------------ } // Namespace OpenGEX diff --git a/code/OpenGEXParser.h b/code/OpenGEXParser.h index 82b30e4ae..64debe43c 100644 --- a/code/OpenGEXParser.h +++ b/code/OpenGEXParser.h @@ -97,6 +97,9 @@ protected: bool getNodeData( const std::string &nodeType ); bool getMetricAttributeKey( std::string &attribName ); bool onMetricNode( const std::string &attribName ); + bool onGeometryNode(); + bool onGeometryObject(); + bool onMaterial(); private: OpenGEXParser( const OpenGEXParser & ); From 1ee4c06e4bb06809e0ff374e40b8d7555d0d544a Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 31 Jan 2015 11:07:48 +0100 Subject: [PATCH 011/166] add openddl-parser to contrib. Signed-off-by: Kim Kulling --- .gitignore | 2 +- CMakeLists.txt | 1 + code/CMakeLists.txt | 1 - contrib/openddlparser/CMakeLists.txt | 63 ++ contrib/openddlparser/README.md | 111 +++ contrib/openddlparser/code/DDLNode.cpp | 162 ++++ contrib/openddlparser/code/OpenDDLParser.cpp | 852 ++++++++++++++++++ contrib/openddlparser/code/Value.cpp | 243 +++++ .../include/openddlparser/DDLNode.h | 87 ++ .../include/openddlparser/OpenDDLCommon.h | 148 +++ .../openddlparser/OpenDDLParserUtils.h | 233 +++++ .../include/openddlparser/Value.h | 85 ++ 12 files changed, 1986 insertions(+), 2 deletions(-) create mode 100644 contrib/openddlparser/CMakeLists.txt create mode 100644 contrib/openddlparser/README.md create mode 100644 contrib/openddlparser/code/DDLNode.cpp create mode 100644 contrib/openddlparser/code/OpenDDLParser.cpp create mode 100644 contrib/openddlparser/code/Value.cpp create mode 100644 contrib/openddlparser/include/openddlparser/DDLNode.h create mode 100644 contrib/openddlparser/include/openddlparser/OpenDDLCommon.h create mode 100644 contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h create mode 100644 contrib/openddlparser/include/openddlparser/Value.h diff --git a/.gitignore b/.gitignore index 55995220d..cf0c2a94f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ build # Output bin/ lib/ -contrib/ + # Generated assimp.pc diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c8661f55..7c9468b95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,6 +154,7 @@ else(NOT ZLIB_FOUND) endif(NOT ZLIB_FOUND) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) +add_subdirectory( contrib/openddlparser ) # Search for unzip if (PKG_CONFIG_FOUND) PKG_CHECK_MODULES(UNZIP minizip) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 1edaa8725..70034ed66 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -634,7 +634,6 @@ SET( unzip_SRCS ) SOURCE_GROUP( unzip FILES ${unzip_SRCS}) - # VC2010 fixes if(MSVC10) option( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF ) diff --git a/contrib/openddlparser/CMakeLists.txt b/contrib/openddlparser/CMakeLists.txt new file mode 100644 index 000000000..d551c9857 --- /dev/null +++ b/contrib/openddlparser/CMakeLists.txt @@ -0,0 +1,63 @@ +CMAKE_MINIMUM_REQUIRED( VERSION 2.6 ) +PROJECT( OpenDDL-Parser ) +SET ( OPENDDL_PARSER_VERSION_MAJOR 0 ) +SET ( OPENDDL_PARSER_VERSION_MINOR 1 ) +SET ( OPENDDL_PARSER_VERSION_PATCH 0 ) +SET ( OPENDDL_PARSER_VERSION ${CPPCORE_VERSION_MAJOR}.${CPPCORE_VERSION_MINOR}.${CPPCORE_VERSION_PATCH} ) +SET ( PROJECT_VERSION "${OPENDDL_PARSER_VERSION}" ) + +if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX ) + find_package(Threads) +else() + add_definitions( -D_CRT_SECURE_NO_WARNINGS ) +endif() + +add_definitions( -DOPENDDLPARSER_BUILD ) +add_definitions( -D_VARIADIC_MAX=10 ) + +INCLUDE_DIRECTORIES( + ./ + include/ + contrib/gtest-1.7.0/include + contrib/gtest-1.7.0/ +) + +link_directories( + ./ +) + +SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib ) +SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib ) +SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin ) + +if( WIN32 AND NOT CYGWIN ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc" ) # Force to always compile with W4 + if( CMAKE_CXX_FLAGS MATCHES "/W[0-4]" ) + string( REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" ) + else() + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4" ) + endif() +elseif( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX ) + # Update if necessary + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic -std=c++0x") +elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic -std=c++11") +endif() + +SET ( openddl_parser_src + code/OpenDDLParser.cpp + code/DDLNode.cpp + code/Value.cpp + include/openddlparser/OpenDDLParser.h + include/openddlparser/OpenDDLParserUtils.h + include/openddlparser/OpenDDLCommon.h + include/openddlparser/DDLNode.h + include/openddlparser/Value.h + README.md +) + +SOURCE_GROUP( code FILES ${openddl_parser_src} ) + +ADD_LIBRARY( openddl_parser SHARED + ${openddl_parser_src} +) diff --git a/contrib/openddlparser/README.md b/contrib/openddlparser/README.md new file mode 100644 index 000000000..195de6932 --- /dev/null +++ b/contrib/openddlparser/README.md @@ -0,0 +1,111 @@ +The OpenDDL-Parser +================== + +A simple and fast OpenDDL Parser +Current build status: [![Build Status](https://travis-ci.org/kimkulling/openddl-parser.png)](https://travis-ci.org/kimkulling/openddl-parser) + +Get the source code +=================== +You can get the code from our git repository, which is located at GitHub. You can clone the repository like: + +> git clone https://github.com/kimkulling/openddl-parser.git + +Build from repo +=============== +To build the library you need to install cmake first ( see http://www.cmake.org/ for more information ). Make also sure that a compiler toolchain is installed on your machine. +After installing it you can open a console and type: + +> cmake CMakeLists.txt + +This command will generate a build environment for your installed build enrironment ( for Visual Studio the project files will be generated, for gcc the makefiles will be generated ). +When using an IDE open the IDE and run the build. When using GNU-make type in your console: + +> make + +and that's all. + +Use the library +=============== +To use the OpenDDL-parser you need to build the lib first. Now add the +> /include + +to your include-path and the + +> /lib + +to your lib-folder. Link the openddl.lib to your application. + +Here is a small example how to use the lib: + +```cpp + +#include +#include +#include + +USE_ODDLPARSER_NS; + +int main( int argc, char *argv[] ) { + if( argc < 3 ) { + return 1; + } + + char *filename( nullptr ); + if( 0 == strncmp( FileOption, argv[ 1 ], strlen( FileOption ) ) ) { + filename = argv[ 2 ]; + } + std::cout << "file to import: " << filename << std::endl; + if( nullptr == filename ) { + std::cerr << "Invalid filename." << std::endl; + return Error; + } + + FILE *fileStream = fopen( filename, "r+" ); + if( NULL == filename ) { + std::cerr << "Cannot open file " << filename << std::endl; + return 1; + } + + // obtain file size: + fseek( fileStream, 0, SEEK_END ); + const size_t size( ftell( fileStream ) ); + rewind( fileStream ); + if( size > 0 ) { + char *buffer = new char[ size ]; + const size_t readSize( fread( buffer, sizeof( char ), size, fileStream ) ); + assert( readSize == size ); + OpenDDLParser theParser; + theParser.setBuffer( buffer, size ); + const bool result( theParser.parse() ); + if( !result ) { + std::cerr << "Error while parsing file " << filename << "." << std::endl; + } + } + return 0; +} + +``` + +How to access the imported data +=============================== +The data is organized as a tree. You can get the root tree with the following code: + +``` +OpenDDLParser theParser; +theParser.setBuffer( buffer, size ); +const bool result( theParser.parse() ); +if ( result ) { + DDLNode *root = theParser.getRoot(); + + DDLNode::DllNodeList childs = root->getChildNodeList(); + for ( size_t i=0; igetProperty(); // to get properties + std:.string type = child->getType(); // to get the node type + Value *values = child->getValue(); // to get the data; + } +} + +``` + +The instance called root contains the data. diff --git a/contrib/openddlparser/code/DDLNode.cpp b/contrib/openddlparser/code/DDLNode.cpp new file mode 100644 index 000000000..30977ca2e --- /dev/null +++ b/contrib/openddlparser/code/DDLNode.cpp @@ -0,0 +1,162 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#include +#include + +#include + +BEGIN_ODDLPARSER_NS + +DDLNode::DllNodeList DDLNode::s_allocatedNodes; + +template +inline +static void releaseDataType( T *ptr ) { + if( nullptr == ptr ) { + return; + } + + T *current( nullptr ); + while( ptr ) { + current = ptr; + ptr = ptr->m_next; + delete current; + } +} + +DDLNode::DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode *parent ) +: m_type( type ) +, m_name( name ) +, m_parent( parent ) +, m_children() +, m_properties( nullptr ) +, m_value( nullptr ) +, m_idx( idx ) +, m_dtArrayList( nullptr ) { + if( m_parent ) { + m_parent->m_children.push_back( this ); + } +} + +DDLNode::~DDLNode() { + releaseDataType( m_properties ); + releaseDataType( m_value ); + + delete m_dtArrayList; + m_dtArrayList = nullptr; + if( s_allocatedNodes[ m_idx ] == this ) { + s_allocatedNodes[ m_idx ] = nullptr; + } +} + +void DDLNode::attachParent( DDLNode *parent ) { + if( m_parent == parent ) { + return; + } + + m_parent = parent; + if( nullptr != m_parent ) { + m_parent->m_children.push_back( this ); + } +} + +void DDLNode::detachParent() { + if( m_parent ) { + std::vector::iterator it; + it = std::find( m_parent->m_children.begin(), m_parent->m_children.end(), this ); + if( m_parent->m_children.end() != it ) { + m_parent->m_children.erase( it ); + } + m_parent = nullptr; + } +} + +DDLNode *DDLNode::getParent() const { + return m_parent; +} + +const DDLNode::DllNodeList &DDLNode::getChildNodeList() const { + return m_children; +} + +void DDLNode::setType( const std::string &type ) { + m_type = type; +} + +const std::string &DDLNode::getType() const { + return m_type; +} + + +void DDLNode::setName( const std::string &name ) { + m_name = name; +} + +const std::string &DDLNode::getName() const { + return m_name; +} + +void DDLNode::setProperties( Property *first ) { + m_properties = first; +} + +Property *DDLNode::getProperties() const { + return m_properties; +} + +void DDLNode::setValue( Value *val ) { + m_value = val; +} + +Value *DDLNode::getValue() const { + return m_value; +} + +void DDLNode::setDataArrayList( DataArrayList *dtArrayList ) { + m_dtArrayList = dtArrayList; +} + +DataArrayList *DDLNode::getDataArrayList() const { + return m_dtArrayList; +} + +DDLNode *DDLNode::create( const std::string &type, const std::string &name, DDLNode *parent ) { + const size_t idx( s_allocatedNodes.size() ); + DDLNode *node = new DDLNode( type, name, idx, parent ); + s_allocatedNodes.push_back( node ); + + return node; +} + +void DDLNode::releaseNodes() { + if( s_allocatedNodes.size() > 0 ) { + for( DllNodeList::iterator it = s_allocatedNodes.begin(); it != s_allocatedNodes.end(); it++ ) { + if( *it ) { + delete *it; + } + } + s_allocatedNodes.clear(); + } +} + +END_ODDLPARSER_NS diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp new file mode 100644 index 000000000..675d58511 --- /dev/null +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -0,0 +1,852 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#include + +#include +#include +#include +#include + +#ifdef _WIN32 +# include +#endif // _WIN32 + +#define DEBUG_HEADER_NAME + +BEGIN_ODDLPARSER_NS + +static const char *Version = "0.1.0"; + +static const char* PrimitiveTypeToken[ Value::ddl_types_max ] = { + "bool", + "int8", + "int16", + "int32", + "int64", + "unsigned_int8", + "unsigned_int16", + "unsigned_int32", + "unsigned_int64", + "half", + "float", + "double", + "string", + "ref" +}; + +static const char *BoolTrue = "true"; +static const char *BoolFalse = "false"; +static const char *RefToken = "ref"; + +static void logInvalidTokenError( char *in, char *exp, OpenDDLParser::logCallback callback ) { + std::stringstream stream; + stream << "Invalid token " << *in << ", " << exp << " expected." << std::endl; + callback( ddl_error_msg, stream.str() ); +} + +static bool isIntegerType( Value::ValueType integerType ) { + if( integerType != Value::ddl_int8 && integerType != Value::ddl_int16 && integerType != Value::ddl_int32 && integerType != Value::ddl_int64 ) { + return false; + } + + return true; +} + +static DDLNode *createDDLNode( Identifier *id, Property *first, OpenDDLParser *parser ) { + if( nullptr == id || nullptr == parser ) { + return nullptr; + } + + const std::string type( id->m_buffer ); + DDLNode *parent( parser->top() ); + DDLNode *node = DDLNode::create( type, "", parent ); + if( nullptr != first ) { + node->setProperties( first ); + } + + return node; +} + +static void logMessage( LogSeverity severity, const std::string &msg ) { + std::string log; + if( ddl_debug_msg == severity ) { + log += "Debug:"; + } else if( ddl_info_msg == severity ) { + log += "Info :"; + } else if( ddl_warn_msg == severity ) { + log += "Warn :"; + } else if( ddl_error_msg == severity ) { + log += "Error:"; + } else { + log += "None :"; + } + + log += msg; + std::cout << log; +} + +OpenDDLParser::OpenDDLParser() +: m_logCallback( logMessage ) +, m_ownsBuffer( false ) +,m_buffer( nullptr ) +, m_len( 0 ) +, m_stack() +, m_context( nullptr ) { + // empty +} + +OpenDDLParser::OpenDDLParser( char *buffer, size_t len, bool ownsIt ) +: m_logCallback( &logMessage ) +, m_ownsBuffer( false ) +, m_buffer( nullptr ) +, m_len( 0 ) +, m_context( nullptr ) { + if( 0 != m_len ) { + setBuffer( buffer, len, ownsIt ); + } +} + +OpenDDLParser::~OpenDDLParser() { + clear(); +} + +void OpenDDLParser::setLogCallback( logCallback callback ) { + if( nullptr != callback ) { + // install user-specific log callback + m_logCallback = callback; + } else { + // install default log callback + m_logCallback = &logMessage; + } +} + +OpenDDLParser::logCallback OpenDDLParser::getLogCallback() const { + return m_logCallback; +} + +void OpenDDLParser::setBuffer( char *buffer, size_t len, bool ownsIt ) { + if( m_buffer && m_ownsBuffer ) { + delete[] m_buffer; + m_buffer = nullptr; + m_len = 0; + } + + m_ownsBuffer = ownsIt; + if( m_ownsBuffer ) { + // when we are owning the buffer we will do a deep copy + m_buffer = new char[ len ]; + m_len = len; + ::memcpy( m_buffer, buffer, len ); + } else { + // when we are not owning the buffer, we just do a shallow copy + m_buffer = buffer; + m_len = len; + } +} + +char *OpenDDLParser::getBuffer() const { + return m_buffer; +} + +size_t OpenDDLParser::getBufferSize() const { + return m_len; +} + +void OpenDDLParser::clear() { + if( m_ownsBuffer ) { + delete [] m_buffer; + } + m_buffer = nullptr; + m_len = 0; + + if( m_context ) { + m_context->m_root = nullptr; + } + + DDLNode::releaseNodes(); +} + +bool OpenDDLParser::parse() { + if( 0 == m_len ) { + return false; + } + + normalizeBuffer( m_buffer, m_len ); + + m_context = new Context; + m_context->m_root = DDLNode::create( "root", "", nullptr ); + pushNode( m_context->m_root ); + + // do the main parsing + char *current( &m_buffer[ 0 ] ); + char *end( &m_buffer[ m_len - 1 ] + 1 ); + while( current != end ) { + current = parseNextNode( current, end ); + } + return true; +} + +char *OpenDDLParser::parseNextNode( char *in, char *end ) { + in = parseHeader( in, end ); + in = parseStructure( in, end ); + + return in; +} + +char *OpenDDLParser::parseHeader( char *in, char *end ) { + if( nullptr == in || in == end ) { + return in; + } + + Identifier *id( nullptr ); + in = OpenDDLParser::parseIdentifier( in, end, &id ); + +#ifdef DEBUG_HEADER_NAME + if( id ) { + std::cout << id->m_buffer << std::endl; + } +#endif // DEBUG_HEADER_NAME + + in = getNextToken( in, end ); + Property *first( nullptr ); + if( nullptr != id ) { + if( *in == '(' ) { + in++; + Property *prop( nullptr ), *prev( nullptr ); + while( *in != ')' && in != end ) { + in = parseProperty( in, end, &prop ); + in = getNextToken( in, end ); + + if( *in != ',' && *in != ')' ) { + logInvalidTokenError( in, ")", m_logCallback ); + return in; + } + if( nullptr != prop && *in != ',' ) { + if( nullptr == first ) { + first = prop; + } + if( nullptr != prev ) { + prev->m_next = prop; + } + prev = prop; + } + } + in++; + } + + // store the node + DDLNode *node( createDDLNode( id, first, this ) ); + if( nullptr != node ) { + pushNode( node ); + } else { + std::cerr << "nullptr returned by creating DDLNode." << std::endl; + } + + Name *name( nullptr ); + in = OpenDDLParser::parseName( in, end, &name ); + if( nullptr != name ) { + const std::string nodeName( name->m_id->m_buffer ); + node->setName( nodeName ); + } + } + + return in; +} + +char *OpenDDLParser::parseStructure( char *in, char *end ) { + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + if( *in == '{' ) { + in++; + in = getNextToken( in, end ); + Value::ValueType type( Value::ddl_none ); + size_t arrayLen( 0 ); + in = OpenDDLParser::parsePrimitiveDataType( in, end, type, arrayLen ); + if( Value::ddl_none != type ) { + in = getNextToken( in, end ); + if( *in == '{' ) { + DataArrayList *dtArrayList( nullptr ); + Value *values( nullptr ); + if( 1 == arrayLen ) { + in = parseDataList( in, end, &values ); + if( nullptr != values ){ + DDLNode *currentNode( top() ); + if( nullptr != currentNode ) { + currentNode->setValue( values ); + } + } + } else if( arrayLen > 1 ) { + in = parseDataArrayList( in, end, &dtArrayList ); + if( nullptr != dtArrayList ) { + DDLNode *currentNode( top() ); + if( nullptr != currentNode ) { + currentNode->setDataArrayList( dtArrayList ); + } + } + } else { + std::cerr << "0 for array is invalid." << std::endl; + } + } + + in = getNextToken( in, end ); + if( *in != '}' ) { + logInvalidTokenError( in, "}", m_logCallback ); + } + } else { + in = parseHeader( in, end ); + in = parseStructure( in, end ); + } + } else { + in++; + logInvalidTokenError( in, "{", m_logCallback ); + return in; + + } + + in++; + + return in; +} + +void OpenDDLParser::pushNode( DDLNode *node ) { + if( nullptr == node ) { + return; + } + + m_stack.push_back( node ); +} + +DDLNode *OpenDDLParser::popNode() { + if( m_stack.empty() ) { + return nullptr; + } + + DDLNode *topNode( top() ); + m_stack.pop_back(); + + return topNode; +} + +DDLNode *OpenDDLParser::top() { + if( m_stack.empty() ) { + return nullptr; + } + + DDLNode *top( m_stack.back() ); + return top; +} + +DDLNode *OpenDDLParser::getRoot() const { + if( nullptr == m_context ) { + return nullptr; + } + + return m_context->m_root; +} + +Context *OpenDDLParser::getContext() const { + return m_context; +} + +void OpenDDLParser::normalizeBuffer( char *buffer, size_t len ) { + if( nullptr == buffer || 0 == len ) { + return; + } + + size_t writeIdx( 0 ); + char *end( &buffer[ len ] + 1 ); + for( size_t readIdx = 0; readIdx( c, end ) ) { + buffer[ writeIdx ] = buffer[ readIdx ]; + writeIdx++; + } else { + readIdx++; + // skip the comment and the rest of the line + while( !isEndofLine( buffer[ readIdx ] ) ) { + readIdx++; + } + buffer[writeIdx] = '\n'; + writeIdx++; + } + } + + if( writeIdx < len ) { + buffer[ writeIdx ] = '\0'; + } +} + +char *OpenDDLParser::parseName( char *in, char *end, Name **name ) { + *name = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + // ignore blanks + in = getNextToken( in, end ); + if( *in != '$' && *in != '%' ) { + return in; + } + + NameType ntype( GlobalName ); + if( *in == '%' ) { + ntype = LocalName; + } + + Name *currentName( nullptr ); + Identifier *id( nullptr ); + in = parseIdentifier( in, end, &id ); + if( id ) { + currentName = new Name( ntype, id ); + if( currentName ) { + *name = currentName; + } + } + + return in; +} + +char *OpenDDLParser::parseIdentifier( char *in, char *end, Identifier **id ) { + *id = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + // ignore blanks + in = getNextToken( in, end ); + + // staring with a number is forbidden + if( isNumeric( *in ) ) { + return in; + } + + // get size of id + size_t idLen( 0 ); + char *start( in ); + while( !isSeparator( *in ) && ( in != end ) && *in != '(' && *in != ')' ) { + in++; + idLen++; + } + + const size_t len( idLen + 1 ); + Identifier *newId = new Identifier( len, new char[ len ] ); + ::strncpy( newId->m_buffer, start, newId->m_len-1 ); + newId->m_buffer[ newId->m_len - 1 ] = '\0'; + *id = newId; + + return in; +} + +char *OpenDDLParser::parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len ) { + type = Value::ddl_none; + len = 0; + if( nullptr == in || in == end ) { + return in; + } + + for( unsigned int i = 0; i < Value::ddl_types_max; i++ ) { + const size_t prim_len( strlen( PrimitiveTypeToken[ i ] ) ); + if( 0 == strncmp( in, PrimitiveTypeToken[ i ], prim_len ) ) { + type = ( Value::ValueType ) i; + break; + } + } + + if( Value::ddl_none == type ) { + in = getNextToken( in, end ); + return in; + } else { + in += strlen( PrimitiveTypeToken[ type ] ); + } + + bool ok( true ); + if( *in == '[' ) { + ok = false; + in++; + char *start( in ); + while ( in != end ) { + in++; + if( *in == ']' ) { + len = atoi( start ); + ok = true; + in++; + break; + } + } + } else { + len = 1; + } + if( !ok ) { + type = Value::ddl_none; + } + + return in; +} + +char *OpenDDLParser::parseReference( char *in, char *end, std::vector &names ) { + if( nullptr == in || in == end ) { + return in; + } + + if( 0 != strncmp( in, RefToken, strlen( RefToken ) ) ) { + return false; + } else { + const size_t refTokenLen( strlen( RefToken ) ); + in += refTokenLen; + } + + in = getNextToken( in, end ); + if( '{' != *in ) { + return in; + } else { + in++; + } + + in = getNextToken( in, end ); + Name *nextName( nullptr ); + in = parseName( in, end, &nextName ); + if( nextName ) { + names.push_back( nextName ); + } + while( '}' != *in ) { + in = getNextSeparator( in, end ); + if( ',' == *in ) { + in = parseName( in, end, &nextName ); + if( nextName ) { + names.push_back( nextName ); + } + } else { + break; + } + } + + return in; +} + +char *OpenDDLParser::parseBooleanLiteral( char *in, char *end, Value **boolean ) { + *boolean = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + char *start( in ); + size_t len( 0 ); + while( !isSeparator( *in ) && in != end ) { + in++; + len++; + } + len++; + int res = ::strncmp( BoolTrue, start, strlen( BoolTrue ) ); + if( 0 != res ) { + res = ::strncmp( BoolFalse, start, strlen( BoolFalse ) ); + if( 0 != res ) { + *boolean = nullptr; + return in; + } + *boolean = ValueAllocator::allocPrimData( Value::ddl_bool ); + (*boolean)->setBool( false ); + } else { + *boolean = ValueAllocator::allocPrimData( Value::ddl_bool ); + (*boolean)->setBool( true ); + } + + return in; +} + +char *OpenDDLParser::parseIntegerLiteral( char *in, char *end, Value **integer, Value::ValueType integerType ) { + *integer = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + if( !isIntegerType( integerType ) ) { + return in; + } + + in = getNextToken( in, end ); + char *start( in ); + while( !isSeparator( *in ) && in != end ) { + in++; + } + + if( isNumeric( *start ) ) { + const int value( atoi( start ) ); + *integer = ValueAllocator::allocPrimData( integerType ); + switch( integerType ) { + case Value::ddl_int8: + ( *integer )->setInt8( (int8) value ); + break; + case Value::ddl_int16: + ( *integer )->setInt16( ( int16 ) value ); + break; + case Value::ddl_int32: + ( *integer )->setInt32( ( int32 ) value ); + break; + case Value::ddl_int64: + ( *integer )->setInt64( ( int64 ) value ); + break; + default: + break; + } + } + + return in; +} + +char *OpenDDLParser::parseFloatingLiteral( char *in, char *end, Value **floating ) { + *floating = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + char *start( in ); + while( !isSeparator( *in ) && in != end ) { + in++; + } + + // parse the float value + bool ok( false ); + if( isNumeric( *start ) ) { + ok = true; + } else { + if( *start == '-' ) { + if( isNumeric( *(start+1) ) ) { + ok = true; + } + } + } + + if( ok ) { + const float value( ( float ) atof( start ) ); + *floating = ValueAllocator::allocPrimData( Value::ddl_float ); + ( *floating )->setFloat( value ); + } + + return in; +} + +char *OpenDDLParser::parseStringLiteral( char *in, char *end, Value **stringData ) { + *stringData = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + size_t len( 0 ); + char *start( in ); + if( *start == '\"' ) { + start++; + in++; + while( *in != '\"' && in != end ) { + in++; + len++; + } + + *stringData = ValueAllocator::allocPrimData( Value::ddl_string, len + 1 ); + ::strncpy( ( char* ) ( *stringData )->m_data, start, len ); + ( *stringData )->m_data[len] = '\0'; + in++; + } + + return in; +} + +static void createPropertyWithData( Identifier *id, Value *primData, Property **prop ) { + if( nullptr != primData ) { + ( *prop ) = new Property( id ); + ( *prop )->m_primData = primData; + } +} + +char *OpenDDLParser::parseHexaLiteral( char *in, char *end, Value **data ) { + *data = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + if( *in != '0' ) { + return in; + } + + in++; + if( *in != 'x' && *in != 'X' ) { + return in; + } + + in++; + bool ok( true ); + char *start( in ); + int pos( 0 ); + while( !isSeparator( *in ) && in != end ) { + if( ( *in < '0' && *in > '9' ) || ( *in < 'a' && *in > 'f' ) || ( *in < 'A' && *in > 'F' ) ) { + ok = false; + break; + } + pos++; + in++; + } + + if( !ok ) { + return in; + } + + int value( 0 ); + while( pos > 0 ) { + pos--; + value += hex2Decimal( *start ) * static_cast( pow( 16.0, pos ) ); + start++; + } + + *data = ValueAllocator::allocPrimData( Value::ddl_int32 ); + (*data)->setInt32( value ); + + return in; +} + +char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) { + *prop = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + Identifier *id( nullptr ); + in = parseIdentifier( in, end, &id ); + if( nullptr != id ) { + in = getNextToken( in, end ); + if( *in == '=' ) { + in++; + in = getNextToken( in, end ); + Value *primData( nullptr ); + if( isInteger( in, end ) ) { + in = parseIntegerLiteral( in, end, &primData ); + createPropertyWithData( id, primData, prop ); + } else if( isFloat( in, end ) ) { + in = parseFloatingLiteral( in, end, &primData ); + createPropertyWithData( id, primData, prop ); + } else if( isStringLiteral( *in ) ) { // string data + in = parseStringLiteral( in, end, &primData ); + createPropertyWithData( id, primData, prop ); + } else { // reference data + std::vector names; + in = parseReference( in, end, names ); + if( !names.empty() ) { + Reference *ref = new Reference( names.size(), &names[ 0 ] ); + ( *prop ) = new Property( id ); + ( *prop )->m_ref = ref; + } + } + } + } + + return in; +} + +char *OpenDDLParser::parseDataList( char *in, char *end, Value **data ) { + *data = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + if( *in == '{' ) { + in++; + Value *current( nullptr ), *prev( nullptr ); + while( '}' != *in ) { + current = nullptr; + in = getNextToken( in, end ); + if( isInteger( in, end ) ) { + in = parseIntegerLiteral( in, end, ¤t ); + } else if( isFloat( in, end ) ) { + in = parseFloatingLiteral( in, end, ¤t ); + } else if( isStringLiteral( *in ) ) { + in = parseStringLiteral( in, end, ¤t ); + } else if( isHexLiteral( in, end ) ) { + in = parseHexaLiteral( in, end, ¤t ); + } + + if( nullptr != current ) { + if( nullptr == *data ) { + *data = current; + prev = current; + } else { + prev->setNext( current ); + prev = current; + } + } + + in = getNextSeparator( in, end ); + if( ',' != *in && '}' != *in && !isSpace( *in ) ) { + break; + } + } + in++; + } + + return in; +} + +char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **dataList ) { + *dataList = nullptr; + if( nullptr == in || in == end ) { + return in; + } + + in = getNextToken( in, end ); + if( *in == '{' ) { + in++; + Value *current( nullptr ); + DataArrayList *prev( nullptr ), *currentDataList( nullptr ); + do { + in = parseDataList( in, end, ¤t ); + if( nullptr != current ) { + if( nullptr == prev ) { + *dataList = new DataArrayList; + (*dataList)->m_dataList = current; + prev = *dataList; + } else { + currentDataList = new DataArrayList; + if( nullptr != prev ) { + prev->m_next = currentDataList; + prev = currentDataList; + } + } + } + } while( ',' == *in && in != end ); + } + + return in; +} + +const char *OpenDDLParser::getVersion() { + return Version; +} + +END_ODDLPARSER_NS diff --git a/contrib/openddlparser/code/Value.cpp b/contrib/openddlparser/code/Value.cpp new file mode 100644 index 000000000..71e97a566 --- /dev/null +++ b/contrib/openddlparser/code/Value.cpp @@ -0,0 +1,243 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#include +#include +#include + +BEGIN_ODDLPARSER_NS + +Value::Value() +: m_type( ddl_none ) +, m_size( 0 ) +, m_data( nullptr ) +, m_next( nullptr ) { + // empty +} + +Value::~Value() { + // empty +} + +void Value::setBool( bool value ) { + assert( ddl_bool == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +bool Value::getBool() { + assert( ddl_bool == m_type ); + return ( bool ) ( *m_data ); +} + +void Value::setInt8( int8 value ) { + assert( ddl_int8 == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +int8 Value::getInt8() { + assert( ddl_int8 == m_type ); + return ( int8 ) ( *m_data ); +} + +void Value::setInt16( int16 value ) { + assert( ddl_int16 == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +int16 Value::getInt16() { + assert( ddl_int16 == m_type ); + return ( int16 ) ( *m_data ); +} + +void Value::setInt32( int32 value ) { + assert( ddl_int32 == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +int32 Value::getInt32() { + assert( ddl_int32 == m_type ); + return ( int32 ) ( *m_data ); +} + +void Value::setInt64( int64 value ) { + assert( ddl_int32 == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +int64 Value::getInt64() { + return ( int64 ) ( *m_data ); +} + +void Value::setFloat( float value ) { + assert( ddl_float == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +float Value::getFloat() const { + float v; + ::memcpy( &v, m_data, m_size ); + return v; +} + +void Value::setDouble( double value ) { + assert( ddl_double == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +double Value::getDouble() const { + double v; + ::memcpy( &v, m_data, m_size ); + return v; +} + +void Value::dump() { + switch( m_type ) { + case ddl_none: + std::cout << "None" << std::endl; + break; + case ddl_bool: + std::cout << getBool() << std::endl; + break; + case ddl_int8: + std::cout << getInt8() << std::endl; + break; + case ddl_int16: + std::cout << getInt16() << std::endl; + break; + case ddl_int32: + std::cout << getInt32() << std::endl; + break; + case ddl_int64: + std::cout << getInt64() << std::endl; + break; + case ddl_unsigned_int8: + std::cout << "Not supported" << std::endl; + break; + case ddl_unsigned_int16: + std::cout << "Not supported" << std::endl; + break; + case ddl_unsigned_int32: + std::cout << "Not supported" << std::endl; + break; + case ddl_unsigned_int64: + std::cout << "Not supported" << std::endl; + break; + case ddl_half: + std::cout << "Not supported" << std::endl; + break; + case ddl_float: + std::cout << getFloat() << std::endl; + break; + case ddl_double: + std::cout << getDouble() << std::endl; + break; + case ddl_string: + std::cout << "Not supported" << std::endl; + break; + case ddl_ref: + std::cout << "Not supported" << std::endl; + break; + default: + break; + } +} + +void Value::setNext( Value *next ) { + m_next = next; +} + +Value *Value::getNext() const { + return m_next; +} + +Value *ValueAllocator::allocPrimData( Value::ValueType type, size_t len ) { + if( type == Value::ddl_none || Value::ddl_types_max == type ) { + return nullptr; + } + + Value *data = new Value; + data->m_type = type; + switch( type ) { + case Value::ddl_bool: + data->m_size = sizeof( bool ); + break; + case Value::ddl_int8: + data->m_size = sizeof( char ); + break; + case Value::ddl_int16: + data->m_size = sizeof( short ); + break; + case Value::ddl_int32: + data->m_size = sizeof( int ); + break; + case Value::ddl_int64: + data->m_size = sizeof( long ); + break; + case Value::ddl_unsigned_int8: + data->m_size = sizeof( unsigned char ); + break; + case Value::ddl_unsigned_int32: + data->m_size = sizeof( unsigned int ); + break; + case Value::ddl_unsigned_int64: + data->m_size = sizeof( unsigned long ); + break; + case Value::ddl_half: + data->m_size = sizeof( short ); + break; + case Value::ddl_float: + data->m_size = sizeof( float ); + break; + case Value::ddl_double: + data->m_size = sizeof( double ); + break; + case Value::ddl_string: + data->m_size = sizeof( char ); + break; + case Value::ddl_ref: + data->m_size = sizeof( char ); + break; + case Value::ddl_none: + case Value::ddl_types_max: + default: + break; + } + + if( data->m_size ) { + data->m_size *= len; + data->m_data = new unsigned char[ data->m_size ]; + } + + return data; +} + +void ValueAllocator::releasePrimData( Value **data ) { + if( !data ) { + return; + } + + delete *data; + *data = nullptr; +} + + +END_ODDLPARSER_NS diff --git a/contrib/openddlparser/include/openddlparser/DDLNode.h b/contrib/openddlparser/include/openddlparser/DDLNode.h new file mode 100644 index 000000000..ceaff3d5e --- /dev/null +++ b/contrib/openddlparser/include/openddlparser/DDLNode.h @@ -0,0 +1,87 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#pragma once +#ifndef OPENDDLPARSER_DDLNODE_H_INC +#define OPENDDLPARSER_DDLNODE_H_INC + +#include + +#include +#include + +BEGIN_ODDLPARSER_NS + +class Value; +class OpenDDLParser; + +struct Identifier; +struct Reference; +struct Property; +struct DataArrayList; + +class DLL_ODDLPARSER_EXPORT DDLNode { +public: + friend class OpenDDLParser; + + typedef std::vector DllNodeList; + +public: + ~DDLNode(); + void attachParent( DDLNode *parent ); + void detachParent(); + DDLNode *getParent() const; + const DllNodeList &getChildNodeList() const; + void setType( const std::string &name ); + const std::string &getType() const; + void setName( const std::string &name ); + const std::string &getName() const; + void setProperties( Property *first ); + Property *getProperties() const; + void setValue( Value *val ); + Value *getValue() const; + void setDataArrayList( DataArrayList *dtArrayList ); + DataArrayList *getDataArrayList() const; + static DDLNode *create( const std::string &type, const std::string &name, DDLNode *parent = nullptr ); + +private: + DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode *parent = nullptr ); + DDLNode(); + DDLNode( const DDLNode & ); + DDLNode &operator = ( const DDLNode & ); + static void releaseNodes(); + +private: + std::string m_type; + std::string m_name; + DDLNode *m_parent; + std::vector m_children; + Property *m_properties; + Value *m_value; + DataArrayList *m_dtArrayList; + size_t m_idx; + static DllNodeList s_allocatedNodes; +}; + +END_ODDLPARSER_NS + +#endif // OPENDDLPARSER_DDLNODE_H_INC diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h new file mode 100644 index 000000000..490ea46ac --- /dev/null +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -0,0 +1,148 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#pragma once +#ifndef OPENDDLPARSER_OPENDDLPARSERCOMMON_H_INC +#define OPENDDLPARSER_OPENDDLPARSERCOMMON_H_INC + +#include +#include + +#ifdef _WIN32 +# define TAG_DLL_EXPORT __declspec(dllexport) +# define TAG_DLL_IMPORT __declspec(dllimport ) +# ifdef OPENDDLPARSER_BUILD +# define DLL_ODDLPARSER_EXPORT TAG_DLL_EXPORT +# else +# define DLL_ODDLPARSER_EXPORT TAG_DLL_IMPORT +# endif // OPENDDLPARSER_BUILD +# pragma warning( disable : 4251 ) +#else +# define DLL_ODDLPARSER_EXPORT +#endif // _WIN32 + +#define BEGIN_ODDLPARSER_NS namespace ODDLParser { +#define END_ODDLPARSER_NS } +#define USE_ODDLPARSER_NS using namespace ODDLParser; + +BEGIN_ODDLPARSER_NS + +class DDLNode; +class Value; + +struct Name; +struct Identifier; +struct Reference; +struct Property; +struct DataArrayList; + +typedef char int8; +typedef short int16; +typedef int int32; +typedef long int64; + +enum NameType { + GlobalName, + LocalName +}; + +struct Name { + NameType m_type; + Identifier *m_id; + + Name( NameType type, Identifier *id ) + : m_type( type ) + , m_id( id ) { + // empty + } +}; + +struct Reference { + size_t m_numRefs; + Name **m_referencedName; + + Reference( size_t numrefs, Name **names ) + : m_numRefs( numrefs ) + , m_referencedName( names ) { + // empty + } +}; + +struct Identifier { + size_t m_len; + char *m_buffer; + + Identifier( size_t len, char *buffer ) + : m_len( len ) + , m_buffer( buffer ) { + // empty + } +}; + +struct Property { + Identifier *m_id; + Value *m_primData; + Reference *m_ref; + Property *m_next; + + Property( Identifier *id ) + : m_id( id ) + , m_primData( nullptr ) + , m_ref( nullptr ) + , m_next( nullptr ) { + // empty + } +}; + +struct DataArrayList { + size_t m_numItems; + Value *m_dataList; + DataArrayList *m_next; + + DataArrayList() + : m_numItems( 0 ) + , m_dataList( nullptr ) + , m_next( nullptr ) { + // empty + } +}; + +struct Context { + Property *m_properties; + DDLNode *m_root; + + Context() + : m_properties( nullptr ) + , m_root( nullptr ) { + // empty + } +}; + +END_ODDLPARSER_NS + +#define ODDL_NO_COPYING( classname ) \ +private: \ + classname( const classname & ); \ + classname &operator = ( const classname & ); + +#endif // OPENDDLPARSER_OPENDDLPARSERCOMMON_H_INC + diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h new file mode 100644 index 000000000..9e978ade2 --- /dev/null +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h @@ -0,0 +1,233 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#pragma once +#ifndef OPENDDLPARSER_OPENDDLPARSERUTILS_H_INC +#define OPENDDLPARSER_OPENDDLPARSERUTILS_H_INC + +#include + +BEGIN_ODDLPARSER_NS + +template +inline +bool isComment( T *in, T *end ) { + if( *in == '/' ) { + if( in + 1 != end ) { + if( *( in + 1 ) == '/' ) { + return true; + } + } + } + return false; +} + +template +inline +bool isUpperCase( T in ) { + return ( in >= 'A' && in <= 'Z' ); +} + +template +inline +bool isLowerCase( T in ) { + return ( in >= 'a' && in <= 'z' ); +} + +template +inline +bool isSpace( const T in ) { + return ( ' ' == in || '\t' == in ); +} + +template +inline +bool isNewLine( const T in ) { + return ( '\n' == in ); +} + +template +inline +bool isSeparator( T in ) { + if( isSpace( in ) || ',' == in || '{' == in || '}' == in || '[' == in ) { + return true; + } + return false; +} + +static const unsigned char chartype_table[ 256 ] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0-15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 32-47 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, // 48-63 + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 64-79 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80-95 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 96-111 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 112-127 + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // > 127 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +template +inline +bool isNumeric( const T in ) { + return ( in >= '0' && in <= '9' ); + //return ( chartype_table[in] ); + /*if (in >= '0' && in <= '9' ) + return true; + + return false;*/ +} + +template +inline +bool isInteger( T *in, T *end ) { + if( in != end ) { + if( *in == '-' ) { + in++; + } + } + + bool result( false ); + while( '}' != *in && ',' != *in && !isSpace( *in ) && in != end ) { + result = isNumeric( *in ); + if( !result ) { + break; + } + in++; + } + + return result; +} + +template +inline +bool isFloat( T *in, T *end ) { + if( in != end ) { + if( *in == '-' ) { + in++; + } + } + + // check for <1>.0f + bool result( false ); + while( !isSpace( *in ) && in != end ) { + if( *in == '.' ) { + result = true; + break; + } + result = isNumeric( *in ); + if( !result ) { + return false; + } + in++; + } + + // check for 1<.>0f + if( *in == '.' ) { + in++; + } else { + return false; + } + + // check for 1.<0>f + while( !isSpace( *in ) && in != end && *in != ',' ) { + result = isNumeric( *in ); + if( !result ) { + return false; + } + in++; + } + + return result; +} + +template +inline +bool isCharacter( const T in ) { + return ( in >= 'a' && in <= 'z' || in >= 'A' && in <= 'Z' ); +} + +template +inline +bool isStringLiteral( const T in ) { + return ( in == '\"' ); +} + +template +inline +bool isHexLiteral( T *in, T *end ) { + if( *in == '0' ) { + if( in + 1 != end ) { + if( *( in + 1 ) == 'x' || *( in + 1 ) == 'X' ) { + return true; + } + } + } + + return false; +} + +template +inline +bool isEndofLine( const T in ) { + return ( '\n' == in ); +} + +template +inline +static T *getNextSeparator( T *in, T *end ) { + while( !isSeparator( *in ) || in == end ) { + in++; + } + return in; +} + +static const int ErrorHex2Decimal = 9999; + +inline +int hex2Decimal( char in ) { + if( isNumeric( in ) ) { + return (int) in-48; + } + char hexCodeLower( 'a' ), hexCodeUpper( 'A' ); + for( int i = 0; i<16; i++ ) { + if( in == hexCodeLower + i || in == hexCodeUpper + i ) { + return i+10; + } + } + + return ErrorHex2Decimal; +} + +END_ODDLPARSER_NS + +#endif // OPENDDLPARSER_OPENDDLPARSERUTILS_H_INC diff --git a/contrib/openddlparser/include/openddlparser/Value.h b/contrib/openddlparser/include/openddlparser/Value.h new file mode 100644 index 000000000..665c407ed --- /dev/null +++ b/contrib/openddlparser/include/openddlparser/Value.h @@ -0,0 +1,85 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#pragma once +#ifndef OPENDDLPARSER_VALUE_H_INC +#define OPENDDLPARSER_VALUE_H_INC + +#include + +BEGIN_ODDLPARSER_NS + +class DLL_ODDLPARSER_EXPORT Value { +public: + enum ValueType { + ddl_none = -1, + ddl_bool = 0, + ddl_int8, + ddl_int16, + ddl_int32, + ddl_int64, + ddl_unsigned_int8, + ddl_unsigned_int16, + ddl_unsigned_int32, + ddl_unsigned_int64, + ddl_half, + ddl_float, + ddl_double, + ddl_string, + ddl_ref, + ddl_types_max + }; + + Value(); + ~Value(); + void setBool( bool value ); + bool getBool(); + void setInt8( int8 value ); + int8 getInt8(); + void setInt16( int16 value ); + int16 getInt16(); + void setInt32( int32 value ); + int32 getInt32(); + void setInt64( int64 value ); + int64 getInt64(); + void setFloat( float value ); + float getFloat() const; + void setDouble( double value ); + double getDouble() const; + void dump(); + void setNext( Value *next ); + Value *getNext() const; + + ValueType m_type; + size_t m_size; + unsigned char *m_data; + Value *m_next; +}; + +struct DLL_ODDLPARSER_EXPORT ValueAllocator { + static Value *allocPrimData( Value::ValueType type, size_t len = 1 ); + static void releasePrimData( Value **data ); +}; + +END_ODDLPARSER_NS + +#endif // OPENDDLPARSER_VALUE_H_INC From 8e87613bb3f19d312e801381a6b0576797fcc0ed Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 31 Jan 2015 11:31:39 +0100 Subject: [PATCH 012/166] add mmissing header. Signed-off-by: Kim Kulling --- .../include/openddlparser/OpenDDLParser.h | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 contrib/openddlparser/include/openddlparser/OpenDDLParser.h diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h new file mode 100644 index 000000000..76c5ca7ef --- /dev/null +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h @@ -0,0 +1,117 @@ +/*----------------------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2014 Kim Kulling + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-----------------------------------------------------------------------------------------------*/ +#pragma once +#ifndef OPENDDLPARSER_OPENDDLPARSER_H_INC +#define OPENDDLPARSER_OPENDDLPARSER_H_INC + +#include +#include +#include +#include + +#include +#include + +BEGIN_ODDLPARSER_NS + +class DDLNode; +class Value; + +struct Identifier; +struct Reference; +struct Property; + +template +inline +T *getNextToken( T *in, T *end ) { + while( ( isSpace( *in ) || isNewLine( *in ) || ',' == *in ) && ( in != end ) ) { + in++; + } + return in; +} + +enum LogSeverity { + ddl_debug_msg = 0, + ddl_info_msg, + ddl_warn_msg, + ddl_error_msg, +}; + +class DLL_ODDLPARSER_EXPORT OpenDDLParser { +public: + typedef void( *logCallback )( LogSeverity severity, const std::string &msg ); + +public: + OpenDDLParser(); + OpenDDLParser( char *buffer, size_t len, bool ownsIt = false ); + ~OpenDDLParser(); + void setLogCallback( logCallback callback ); + logCallback getLogCallback() const; + void setBuffer( char *buffer, size_t len, bool ownsIt = false ); + char *getBuffer() const; + size_t getBufferSize() const; + void clear(); + bool parse(); + char *parseNextNode( char *current, char *end ); + char *parseHeader( char *in, char *end ); + char *parseStructure( char *in, char *end ); + void pushNode( DDLNode *node ); + DDLNode *popNode(); + DDLNode *top(); + DDLNode *getRoot() const; + Context *getContext() const; + +public: // static parser helpers + static void normalizeBuffer( char *buffer, size_t len ); + static char *parseName( char *in, char *end, Name **name ); + static char *parseIdentifier( char *in, char *end, Identifier **id ); + static char *parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len ); + static char *parseReference( char *in, char *end, std::vector &names ); + static char *parseBooleanLiteral( char *in, char *end, Value **boolean ); + static char *parseIntegerLiteral( char *in, char *end, Value **integer, Value::ValueType integerType = Value::ddl_int32 ); + static char *parseFloatingLiteral( char *in, char *end, Value **floating ); + static char *parseStringLiteral( char *in, char *end, Value **stringData ); + static char *parseHexaLiteral( char *in, char *end, Value **data ); + static char *parseProperty( char *in, char *end, Property **prop ); + static char *parseDataList( char *in, char *end, Value **data ); + static char *parseDataArrayList( char *in, char *end, DataArrayList **dataList ); + static const char *getVersion(); + +private: + OpenDDLParser( const OpenDDLParser & ); + OpenDDLParser &operator = ( const OpenDDLParser & ); + +private: + logCallback m_logCallback; + bool m_ownsBuffer; + char *m_buffer; + size_t m_len; + //DDLNode *m_root; + typedef std::vector DDLNodeStack; + DDLNodeStack m_stack; + Context *m_context; +}; + +END_ODDLPARSER_NS + +#endif // OPENDDLPARSER_OPENDDLPARSER_H_INC From e1c6a16b8527147f7ec9ae134b9ae5334da18707 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 31 Jan 2015 11:46:13 +0100 Subject: [PATCH 013/166] support of openddlparser lib without x++11. Signed-off-by: Kim Kulling --- contrib/openddlparser/CMakeLists.txt | 1 + contrib/openddlparser/code/DDLNode.cpp | 18 +-- contrib/openddlparser/code/OpenDDLParser.cpp | 130 +++++++++--------- contrib/openddlparser/code/Value.cpp | 9 +- .../include/openddlparser/OpenDDLCommon.h | 20 ++- .../include/openddlparser/OpenDDLParser.h | 1 - 6 files changed, 92 insertions(+), 87 deletions(-) diff --git a/contrib/openddlparser/CMakeLists.txt b/contrib/openddlparser/CMakeLists.txt index d551c9857..a39d0219f 100644 --- a/contrib/openddlparser/CMakeLists.txt +++ b/contrib/openddlparser/CMakeLists.txt @@ -13,6 +13,7 @@ else() endif() add_definitions( -DOPENDDLPARSER_BUILD ) +add_definitions( -DOPENDDL_NO_USE_CPP11 ) add_definitions( -D_VARIADIC_MAX=10 ) INCLUDE_DIRECTORIES( diff --git a/contrib/openddlparser/code/DDLNode.cpp b/contrib/openddlparser/code/DDLNode.cpp index 30977ca2e..94e8eb4d7 100644 --- a/contrib/openddlparser/code/DDLNode.cpp +++ b/contrib/openddlparser/code/DDLNode.cpp @@ -32,11 +32,11 @@ DDLNode::DllNodeList DDLNode::s_allocatedNodes; template inline static void releaseDataType( T *ptr ) { - if( nullptr == ptr ) { + if( ddl_nullptr == ptr ) { return; } - T *current( nullptr ); + T *current( ddl_nullptr ); while( ptr ) { current = ptr; ptr = ptr->m_next; @@ -49,10 +49,10 @@ DDLNode::DDLNode( const std::string &type, const std::string &name, size_t idx, , m_name( name ) , m_parent( parent ) , m_children() -, m_properties( nullptr ) -, m_value( nullptr ) +, m_properties( ddl_nullptr ) +, m_value( ddl_nullptr ) , m_idx( idx ) -, m_dtArrayList( nullptr ) { +, m_dtArrayList( ddl_nullptr ) { if( m_parent ) { m_parent->m_children.push_back( this ); } @@ -63,9 +63,9 @@ DDLNode::~DDLNode() { releaseDataType( m_value ); delete m_dtArrayList; - m_dtArrayList = nullptr; + m_dtArrayList = ddl_nullptr; if( s_allocatedNodes[ m_idx ] == this ) { - s_allocatedNodes[ m_idx ] = nullptr; + s_allocatedNodes[ m_idx ] = ddl_nullptr; } } @@ -75,7 +75,7 @@ void DDLNode::attachParent( DDLNode *parent ) { } m_parent = parent; - if( nullptr != m_parent ) { + if( ddl_nullptr != m_parent ) { m_parent->m_children.push_back( this ); } } @@ -87,7 +87,7 @@ void DDLNode::detachParent() { if( m_parent->m_children.end() != it ) { m_parent->m_children.erase( it ); } - m_parent = nullptr; + m_parent = ddl_nullptr; } } diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 675d58511..3ae26fdf2 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -73,14 +73,14 @@ static bool isIntegerType( Value::ValueType integerType ) { } static DDLNode *createDDLNode( Identifier *id, Property *first, OpenDDLParser *parser ) { - if( nullptr == id || nullptr == parser ) { - return nullptr; + if( nullptr == id || ddl_nullptr == parser ) { + return ddl_nullptr; } const std::string type( id->m_buffer ); DDLNode *parent( parser->top() ); DDLNode *node = DDLNode::create( type, "", parent ); - if( nullptr != first ) { + if( ddl_nullptr != first ) { node->setProperties( first ); } @@ -108,19 +108,19 @@ static void logMessage( LogSeverity severity, const std::string &msg ) { OpenDDLParser::OpenDDLParser() : m_logCallback( logMessage ) , m_ownsBuffer( false ) -,m_buffer( nullptr ) +, m_buffer( ddl_nullptr ) , m_len( 0 ) , m_stack() -, m_context( nullptr ) { +, m_context( ddl_nullptr ) { // empty } OpenDDLParser::OpenDDLParser( char *buffer, size_t len, bool ownsIt ) : m_logCallback( &logMessage ) , m_ownsBuffer( false ) -, m_buffer( nullptr ) +, m_buffer( ddl_nullptr ) , m_len( 0 ) -, m_context( nullptr ) { +, m_context( ddl_nullptr ) { if( 0 != m_len ) { setBuffer( buffer, len, ownsIt ); } @@ -147,7 +147,7 @@ OpenDDLParser::logCallback OpenDDLParser::getLogCallback() const { void OpenDDLParser::setBuffer( char *buffer, size_t len, bool ownsIt ) { if( m_buffer && m_ownsBuffer ) { delete[] m_buffer; - m_buffer = nullptr; + m_buffer = ddl_nullptr; m_len = 0; } @@ -176,11 +176,11 @@ void OpenDDLParser::clear() { if( m_ownsBuffer ) { delete [] m_buffer; } - m_buffer = nullptr; + m_buffer = ddl_nullptr; m_len = 0; if( m_context ) { - m_context->m_root = nullptr; + m_context->m_root = ddl_nullptr; } DDLNode::releaseNodes(); @@ -194,7 +194,7 @@ bool OpenDDLParser::parse() { normalizeBuffer( m_buffer, m_len ); m_context = new Context; - m_context->m_root = DDLNode::create( "root", "", nullptr ); + m_context->m_root = DDLNode::create( "root", "", ddl_nullptr ); pushNode( m_context->m_root ); // do the main parsing @@ -218,7 +218,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { return in; } - Identifier *id( nullptr ); + Identifier *id( ddl_nullptr ); in = OpenDDLParser::parseIdentifier( in, end, &id ); #ifdef DEBUG_HEADER_NAME @@ -228,11 +228,11 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { #endif // DEBUG_HEADER_NAME in = getNextToken( in, end ); - Property *first( nullptr ); - if( nullptr != id ) { + Property *first( ddl_nullptr ); + if( ddl_nullptr != id ) { if( *in == '(' ) { in++; - Property *prop( nullptr ), *prev( nullptr ); + Property *prop( ddl_nullptr ), *prev( ddl_nullptr ); while( *in != ')' && in != end ) { in = parseProperty( in, end, &prop ); in = getNextToken( in, end ); @@ -241,11 +241,11 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { logInvalidTokenError( in, ")", m_logCallback ); return in; } - if( nullptr != prop && *in != ',' ) { - if( nullptr == first ) { + if( ddl_nullptr != prop && *in != ',' ) { + if( ddl_nullptr == first ) { first = prop; } - if( nullptr != prev ) { + if( ddl_nullptr != prev ) { prev->m_next = prop; } prev = prop; @@ -262,9 +262,9 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { std::cerr << "nullptr returned by creating DDLNode." << std::endl; } - Name *name( nullptr ); + Name *name( ddl_nullptr ); in = OpenDDLParser::parseName( in, end, &name ); - if( nullptr != name ) { + if( ddl_nullptr != name ) { const std::string nodeName( name->m_id->m_buffer ); node->setName( nodeName ); } @@ -288,21 +288,21 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { if( Value::ddl_none != type ) { in = getNextToken( in, end ); if( *in == '{' ) { - DataArrayList *dtArrayList( nullptr ); - Value *values( nullptr ); + DataArrayList *dtArrayList( ddl_nullptr ); + Value *values( ddl_nullptr ); if( 1 == arrayLen ) { in = parseDataList( in, end, &values ); - if( nullptr != values ){ + if( ddl_nullptr != values ){ DDLNode *currentNode( top() ); - if( nullptr != currentNode ) { + if( ddl_nullptr != currentNode ) { currentNode->setValue( values ); } } } else if( arrayLen > 1 ) { in = parseDataArrayList( in, end, &dtArrayList ); - if( nullptr != dtArrayList ) { + if( ddl_nullptr != dtArrayList ) { DDLNode *currentNode( top() ); - if( nullptr != currentNode ) { + if( ddl_nullptr != currentNode ) { currentNode->setDataArrayList( dtArrayList ); } } @@ -341,7 +341,7 @@ void OpenDDLParser::pushNode( DDLNode *node ) { DDLNode *OpenDDLParser::popNode() { if( m_stack.empty() ) { - return nullptr; + return ddl_nullptr; } DDLNode *topNode( top() ); @@ -352,7 +352,7 @@ DDLNode *OpenDDLParser::popNode() { DDLNode *OpenDDLParser::top() { if( m_stack.empty() ) { - return nullptr; + return ddl_nullptr; } DDLNode *top( m_stack.back() ); @@ -361,7 +361,7 @@ DDLNode *OpenDDLParser::top() { DDLNode *OpenDDLParser::getRoot() const { if( nullptr == m_context ) { - return nullptr; + return ddl_nullptr; } return m_context->m_root; @@ -401,8 +401,8 @@ void OpenDDLParser::normalizeBuffer( char *buffer, size_t len ) { } char *OpenDDLParser::parseName( char *in, char *end, Name **name ) { - *name = nullptr; - if( nullptr == in || in == end ) { + *name = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } @@ -417,8 +417,8 @@ char *OpenDDLParser::parseName( char *in, char *end, Name **name ) { ntype = LocalName; } - Name *currentName( nullptr ); - Identifier *id( nullptr ); + Name *currentName( ddl_nullptr ); + Identifier *id( ddl_nullptr ); in = parseIdentifier( in, end, &id ); if( id ) { currentName = new Name( ntype, id ); @@ -431,8 +431,8 @@ char *OpenDDLParser::parseName( char *in, char *end, Name **name ) { } char *OpenDDLParser::parseIdentifier( char *in, char *end, Identifier **id ) { - *id = nullptr; - if( nullptr == in || in == end ) { + *id = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } @@ -464,7 +464,7 @@ char *OpenDDLParser::parseIdentifier( char *in, char *end, Identifier **id ) { char *OpenDDLParser::parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len ) { type = Value::ddl_none; len = 0; - if( nullptr == in || in == end ) { + if( ddl_nullptr == in || in == end ) { return in; } @@ -508,7 +508,7 @@ char *OpenDDLParser::parsePrimitiveDataType( char *in, char *end, Value::ValueTy } char *OpenDDLParser::parseReference( char *in, char *end, std::vector &names ) { - if( nullptr == in || in == end ) { + if( ddl_nullptr == in || in == end ) { return in; } @@ -527,7 +527,7 @@ char *OpenDDLParser::parseReference( char *in, char *end, std::vector &na } in = getNextToken( in, end ); - Name *nextName( nullptr ); + Name *nextName( ddl_nullptr ); in = parseName( in, end, &nextName ); if( nextName ) { names.push_back( nextName ); @@ -548,8 +548,8 @@ char *OpenDDLParser::parseReference( char *in, char *end, std::vector &na } char *OpenDDLParser::parseBooleanLiteral( char *in, char *end, Value **boolean ) { - *boolean = nullptr; - if( nullptr == in || in == end ) { + *boolean = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } @@ -565,7 +565,7 @@ char *OpenDDLParser::parseBooleanLiteral( char *in, char *end, Value **boolean ) if( 0 != res ) { res = ::strncmp( BoolFalse, start, strlen( BoolFalse ) ); if( 0 != res ) { - *boolean = nullptr; + *boolean = ddl_nullptr; return in; } *boolean = ValueAllocator::allocPrimData( Value::ddl_bool ); @@ -579,7 +579,7 @@ char *OpenDDLParser::parseBooleanLiteral( char *in, char *end, Value **boolean ) } char *OpenDDLParser::parseIntegerLiteral( char *in, char *end, Value **integer, Value::ValueType integerType ) { - *integer = nullptr; + *integer = ddl_nullptr; if( nullptr == in || in == end ) { return in; } @@ -619,8 +619,8 @@ char *OpenDDLParser::parseIntegerLiteral( char *in, char *end, Value **integer, } char *OpenDDLParser::parseFloatingLiteral( char *in, char *end, Value **floating ) { - *floating = nullptr; - if( nullptr == in || in == end ) { + *floating = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } @@ -652,8 +652,8 @@ char *OpenDDLParser::parseFloatingLiteral( char *in, char *end, Value **floating } char *OpenDDLParser::parseStringLiteral( char *in, char *end, Value **stringData ) { - *stringData = nullptr; - if( nullptr == in || in == end ) { + *stringData = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } @@ -685,8 +685,8 @@ static void createPropertyWithData( Identifier *id, Value *primData, Property ** } char *OpenDDLParser::parseHexaLiteral( char *in, char *end, Value **data ) { - *data = nullptr; - if( nullptr == in || in == end ) { + *data = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } @@ -731,20 +731,20 @@ char *OpenDDLParser::parseHexaLiteral( char *in, char *end, Value **data ) { } char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) { - *prop = nullptr; - if( nullptr == in || in == end ) { + *prop = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } in = getNextToken( in, end ); - Identifier *id( nullptr ); + Identifier *id( ddl_nullptr ); in = parseIdentifier( in, end, &id ); if( nullptr != id ) { in = getNextToken( in, end ); if( *in == '=' ) { in++; in = getNextToken( in, end ); - Value *primData( nullptr ); + Value *primData( ddl_nullptr ); if( isInteger( in, end ) ) { in = parseIntegerLiteral( in, end, &primData ); createPropertyWithData( id, primData, prop ); @@ -770,17 +770,17 @@ char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) { } char *OpenDDLParser::parseDataList( char *in, char *end, Value **data ) { - *data = nullptr; - if( nullptr == in || in == end ) { + *data = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } in = getNextToken( in, end ); if( *in == '{' ) { in++; - Value *current( nullptr ), *prev( nullptr ); + Value *current( ddl_nullptr ), *prev( ddl_nullptr ); while( '}' != *in ) { - current = nullptr; + current = ddl_nullptr; in = getNextToken( in, end ); if( isInteger( in, end ) ) { in = parseIntegerLiteral( in, end, ¤t ); @@ -792,8 +792,8 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data ) { in = parseHexaLiteral( in, end, ¤t ); } - if( nullptr != current ) { - if( nullptr == *data ) { + if( ddl_nullptr != current ) { + if( ddl_nullptr == *data ) { *data = current; prev = current; } else { @@ -814,26 +814,26 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data ) { } char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **dataList ) { - *dataList = nullptr; - if( nullptr == in || in == end ) { + *dataList = ddl_nullptr; + if( ddl_nullptr == in || in == end ) { return in; } in = getNextToken( in, end ); if( *in == '{' ) { in++; - Value *current( nullptr ); - DataArrayList *prev( nullptr ), *currentDataList( nullptr ); + Value *current( ddl_nullptr ); + DataArrayList *prev( ddl_nullptr ), *currentDataList( ddl_nullptr ); do { in = parseDataList( in, end, ¤t ); - if( nullptr != current ) { - if( nullptr == prev ) { + if( ddl_nullptr != current ) { + if( ddl_nullptr == prev ) { *dataList = new DataArrayList; (*dataList)->m_dataList = current; prev = *dataList; } else { currentDataList = new DataArrayList; - if( nullptr != prev ) { + if( ddl_nullptr != prev ) { prev->m_next = currentDataList; prev = currentDataList; } diff --git a/contrib/openddlparser/code/Value.cpp b/contrib/openddlparser/code/Value.cpp index 71e97a566..802e8dd61 100644 --- a/contrib/openddlparser/code/Value.cpp +++ b/contrib/openddlparser/code/Value.cpp @@ -29,8 +29,8 @@ BEGIN_ODDLPARSER_NS Value::Value() : m_type( ddl_none ) , m_size( 0 ) -, m_data( nullptr ) -, m_next( nullptr ) { +, m_data( ddl_nullptr ) +, m_next( ddl_nullptr ) { // empty } @@ -171,7 +171,7 @@ Value *Value::getNext() const { Value *ValueAllocator::allocPrimData( Value::ValueType type, size_t len ) { if( type == Value::ddl_none || Value::ddl_types_max == type ) { - return nullptr; + return ddl_nullptr; } Value *data = new Value; @@ -236,8 +236,7 @@ void ValueAllocator::releasePrimData( Value **data ) { } delete *data; - *data = nullptr; + *data = ddl_nullptr; } - END_ODDLPARSER_NS diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index 490ea46ac..4a3c16782 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -46,6 +46,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. BEGIN_ODDLPARSER_NS +#ifndef OPENDDL_NO_USE_CPP11 +# define ddl_nullptr nullptr +#else +# define ddl_nullptr NULL +#endif + class DDLNode; class Value; @@ -106,9 +112,9 @@ struct Property { Property( Identifier *id ) : m_id( id ) - , m_primData( nullptr ) - , m_ref( nullptr ) - , m_next( nullptr ) { + , m_primData( ddl_nullptr ) + , m_ref( ddl_nullptr ) + , m_next( ddl_nullptr ) { // empty } }; @@ -120,8 +126,8 @@ struct DataArrayList { DataArrayList() : m_numItems( 0 ) - , m_dataList( nullptr ) - , m_next( nullptr ) { + , m_dataList( ddl_nullptr ) + , m_next( ddl_nullptr ) { // empty } }; @@ -131,8 +137,8 @@ struct Context { DDLNode *m_root; Context() - : m_properties( nullptr ) - , m_root( nullptr ) { + : m_properties( ddl_nullptr ) + , m_root( ddl_nullptr ) { // empty } }; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h index 76c5ca7ef..6457e8b74 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h @@ -106,7 +106,6 @@ private: bool m_ownsBuffer; char *m_buffer; size_t m_len; - //DDLNode *m_root; typedef std::vector DDLNodeStack; DDLNodeStack m_stack; Context *m_context; From 0e579bfb06debfec01b68c6a32ea40618500a121 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 31 Jan 2015 12:01:18 +0100 Subject: [PATCH 014/166] openddl-parser: latest greatest. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 3ae26fdf2..0acd9dd39 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -513,7 +513,7 @@ char *OpenDDLParser::parseReference( char *in, char *end, std::vector &na } if( 0 != strncmp( in, RefToken, strlen( RefToken ) ) ) { - return false; + return in; } else { const size_t refTokenLen( strlen( RefToken ) ); in += refTokenLen; From e9dcad418183e0786613a97d424e3ad607401d22 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 31 Jan 2015 21:23:50 +0100 Subject: [PATCH 015/166] openddl-parser: latest greatest. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/DDLNode.cpp | 8 -------- contrib/openddlparser/code/OpenDDLParser.cpp | 12 +++++++----- .../openddlparser/include/openddlparser/DDLNode.h | 2 -- .../include/openddlparser/OpenDDLCommon.h | 14 ++++++++++++++ 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/contrib/openddlparser/code/DDLNode.cpp b/contrib/openddlparser/code/DDLNode.cpp index 94e8eb4d7..d7c034ba1 100644 --- a/contrib/openddlparser/code/DDLNode.cpp +++ b/contrib/openddlparser/code/DDLNode.cpp @@ -116,14 +116,6 @@ const std::string &DDLNode::getName() const { return m_name; } -void DDLNode::setProperties( Property *first ) { - m_properties = first; -} - -Property *DDLNode::getProperties() const { - return m_properties; -} - void DDLNode::setValue( Value *val ) { m_value = val; } diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 0acd9dd39..66f55f057 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -72,7 +72,7 @@ static bool isIntegerType( Value::ValueType integerType ) { return true; } -static DDLNode *createDDLNode( Identifier *id, Property *first, OpenDDLParser *parser ) { +static DDLNode *createDDLNode( Identifier *id, OpenDDLParser *parser ) { if( nullptr == id || ddl_nullptr == parser ) { return ddl_nullptr; } @@ -80,9 +80,6 @@ static DDLNode *createDDLNode( Identifier *id, Property *first, OpenDDLParser *p const std::string type( id->m_buffer ); DDLNode *parent( parser->top() ); DDLNode *node = DDLNode::create( type, "", parent ); - if( ddl_nullptr != first ) { - node->setProperties( first ); - } return node; } @@ -254,8 +251,13 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { in++; } + // set the properties + if( ddl_nullptr != first ) { + m_context->setProperties( first ); + } + // store the node - DDLNode *node( createDDLNode( id, first, this ) ); + DDLNode *node( createDDLNode( id, this ) ); if( nullptr != node ) { pushNode( node ); } else { diff --git a/contrib/openddlparser/include/openddlparser/DDLNode.h b/contrib/openddlparser/include/openddlparser/DDLNode.h index ceaff3d5e..85b542b5e 100644 --- a/contrib/openddlparser/include/openddlparser/DDLNode.h +++ b/contrib/openddlparser/include/openddlparser/DDLNode.h @@ -55,8 +55,6 @@ public: const std::string &getType() const; void setName( const std::string &name ); const std::string &getName() const; - void setProperties( Property *first ); - Property *getProperties() const; void setValue( Value *val ); Value *getValue() const; void setDataArrayList( DataArrayList *dtArrayList ); diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index 4a3c16782..65530c866 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -141,8 +141,22 @@ struct Context { , m_root( ddl_nullptr ) { // empty } + + void setProperties( Property *first ); + Property *getProperties() const; }; + +inline +void Context::setProperties( Property *first ) { + m_properties = first; +} + +inline +Property *Context::getProperties() const { + return m_properties; +} + END_ODDLPARSER_NS #define ODDL_NO_COPYING( classname ) \ From 56132ed9bbcc1b4d4ac8ff5d672be45be13ad1ed Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Tue, 3 Feb 2015 21:14:37 +0100 Subject: [PATCH 016/166] Regression test suite: make Python files 2.7 backwards-compatible to ease use on Windows where oftentimes only one is easily accessible. Drop deprecated logic to locate assimp binary, we now require the binary to use to be specified in the command line. --- test/regression/gen_db.py | 29 +++++++++++---- test/regression/run.py | 38 ++++++++++++++----- test/regression/utils.py | 77 ++++----------------------------------- 3 files changed, 59 insertions(+), 85 deletions(-) diff --git a/test/regression/gen_db.py b/test/regression/gen_db.py index ef10a298d..d405af9db 100644 --- a/test/regression/gen_db.py +++ b/test/regression/gen_db.py @@ -40,8 +40,15 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # --------------------------------------------------------------------------- -"""Generate the regression database db.zip from the files in the -/test/models directory. Older databases are overwritten with no prompt. +""" +Generate the regression database db.zip from the files in the /test/models +directory. Older databases are overwritten with no prompt but can be restored +using Git as needed. + +Use --help for usage. + +On Windows, use ``py run.py `` to make sure command line parameters +are forwarded to the script. """ import sys @@ -52,9 +59,14 @@ import zipfile import settings import utils -usage = """gen_db [-i=...] [-e=...] [-p] [-n] +usage = """gen_db [assimp_binary] [-i=...] [-e=...] [-p] [-n] + +The assimp_cmd (or assimp) binary to use is specified by the first +command line argument and defaults to ``assimp``. + +To build, set ``ASSIMP_BUILD_ASSIMP_TOOLS=ON`` in CMake. If generating +configs for an IDE, make sure to build the assimp_cmd project. -(lists of file extensions are comma delimited, i.e. `3ds,lwo,x`) -i,--include: List of file extensions to update dumps for. If omitted, all file extensions are updated except those in `exclude`. @@ -66,6 +78,8 @@ usage = """gen_db [-i=...] [-e=...] [-p] [-n] Dont' change anything. -n,--nozip: Don't pack to ZIP archive. Keep all dumps in individual files. + +(lists of file extensions are comma delimited, i.e. `3ds,lwo,x`) """ # ------------------------------------------------------------------------------- @@ -87,7 +101,7 @@ def process_dir(d, outfile, file_filter): outf = os.path.join(os.getcwd(), settings.database_name, utils.hashing(fullp, pp)) - cmd = [utils.assimp_bin_path,"dump",fullp,outf,"-b","-s","-l"] + pp.split() + cmd = [ assimp_bin_path, "dump", fullp, outf, "-b", "-s", "-l" ] + pp.split() outfile.write("assimp dump "+"-"*80+"\n") outfile.flush() if subprocess.call(cmd, stdout=outfile, stderr=outfile, shell=False): @@ -158,7 +172,8 @@ def gen_db(ext_list,outfile): # ------------------------------------------------------------------------------- if __name__ == "__main__": - utils.find_assimp_or_die() + assimp_bin_path = sys.argv[1] if len(sys.argv) > 1 else 'assimp' + def clean(f): f = f.strip("* \'") return "."+f if f[:1] != '.' else f @@ -184,7 +199,7 @@ if __name__ == "__main__": outfile = open(os.path.join("..", "results", "gen_regression_db_output.txt"), "w") if ext_list is None: - (ext_list, err) = subprocess.Popen([utils.assimp_bin_path, "listext"], + (ext_list, err) = subprocess.Popen([assimp_bin_path, "listext"], stdout=subprocess.PIPE).communicate() ext_list = str(ext_list).lower().split(";") diff --git a/test/regression/run.py b/test/regression/run.py index 6d776b362..427f48d47 100644 --- a/test/regression/run.py +++ b/test/regression/run.py @@ -41,8 +41,16 @@ # --------------------------------------------------------------------------- """ -Run the regression test suite using the settings from settings.py. +Run the regression test suite using settings from settings.py. +The assimp_cmd (or assimp) binary to use is specified by the first +command line argument and defaults to ``assimp``. + +To build, set ``ASSIMP_BUILD_ASSIMP_TOOLS=ON`` in CMake. If generating +configs for an IDE, make sure to build the assimp_cmd project. + +On Windows, use ``py run.py `` to make sure the command +line parameter is forwarded to the script. """ import sys @@ -124,8 +132,11 @@ class results: def report_results(self): """Write results to ../results/run_regression_suite_failures.txt""" + count_success = len(self.success) + count_fail = len(self.failures) + percent_good = float(count_success) / (count_success + count_fail) print("\n" + ('='*60) + "\n" + "SUCCESS: {0}\nFAILURE: {1}\nPercentage good: {2}".format( - len(self.success), len(self.failures), len(self.success)/(len(self.success)+len(self.failures)) ) + + count_success, count_fail, percent_good) + "\n" + ('='*60) + "\n") with open(os.path.join('..', 'results',outfilename_failur), "wt") as f: @@ -138,7 +149,7 @@ class results: + " for more details\n\n") # ------------------------------------------------------------------------------- -def mkoutputdir_andgetpath(fullpath, myhash, app): +def prepare_output_dir(fullpath, myhash, app): outfile = os.path.join(settings.results, "tmp", os.path.split(fullpath)[1] + "_" + myhash) try: os.mkdir(outfile) @@ -167,13 +178,16 @@ def process_dir(d, outfile_results, zipin, result): for pppreset in settings.pp_configs_to_test: filehash = utils.hashing(fullpath, pppreset) failure = False + try: input_expected = zipin.open(filehash, "r").read() # empty dump files indicate 'expected import failure' if not len(input_expected): failure = True except KeyError: - #print("Didn't find "+fullpath+" (Hash is "+filehash+") in database") + # TODO(acgessler): Keep track of this and report as error in the end. + print("Didn't find "+fullpath+" (Hash is "+filehash+") in database. Outdated "+\ + "regression database? Use gen_db.zip to re-generate.") continue # Ignore extensions via settings.py configured list @@ -184,13 +198,18 @@ def process_dir(d, outfile_results, zipin, result): print("-"*60 + "\n " + os.path.realpath(fullpath) + " pp: " + pppreset) - outfile_actual = mkoutputdir_andgetpath(fullpath, filehash, "ACTUAL") - outfile_expect = mkoutputdir_andgetpath(fullpath, filehash, "EXPECT") + outfile_actual = prepare_output_dir(fullpath, filehash, "ACTUAL") + outfile_expect = prepare_output_dir(fullpath, filehash, "EXPECT") outfile_results.write("assimp dump "+"-"*80+"\n") outfile_results.flush() - command = [utils.assimp_bin_path,"dump",fullpath,outfile_actual,"-b","-s","-l"]+pppreset.split() + command = [assimp_bin_path, + "dump", + fullpath, outfile_actual, "-b", "-s", "-l" ] +\ + pppreset.split() + r = subprocess.call(command, **shellparams) + print(r) if r and not failure: result.fail(fullpath, outfile_expect, pppreset, IMPORT_FAILURE, r) @@ -216,7 +235,7 @@ def process_dir(d, outfile_results, zipin, result): outfile_results.write("assimp cmpdump "+"-"*80+"\n") outfile_results.flush() - command = [utils.assimp_bin_path,'cmpdump',outfile_actual,outfile_expect] + command = [ assimp_bin_path, 'cmpdump', outfile_actual, outfile_expect ] if subprocess.call(command, **shellparams) != 0: result.fail(fullpath, outfile_expect, pppreset, DATABASE_VALUE_MISMATCH) continue @@ -235,7 +254,6 @@ def del_folder_with_contents(folder): # ------------------------------------------------------------------------------- def run_test(): - utils.find_assimp_or_die() tmp_target_path = os.path.join(settings.results, "tmp") try: os.mkdir(tmp_target_path) @@ -261,6 +279,8 @@ def run_test(): # ------------------------------------------------------------------------------- if __name__ == "__main__": + assimp_bin_path = sys.argv[1] if len(sys.argv) > 1 else 'assimp' + print('Using assimp binary: ' + assimp_bin_path) run_test() # vim: ai ts=4 sts=4 et sw=4 diff --git a/test/regression/utils.py b/test/regression/utils.py index 73c8336ca..8e358e9b0 100644 --- a/test/regression/utils.py +++ b/test/regression/utils.py @@ -40,7 +40,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # --------------------------------------------------------------------------- -"""Shared stuff for the gen_db and run scripts """ +"""Shared stuff for the gen_db and run scripts""" # ------------------------------------------------------------------------------- def hashing(file,pp): @@ -51,75 +51,14 @@ def hashing(file,pp): and platforms, so we implement the hashing manually. """ - def myhash(instring): - # sdbm hash - res = 0 - for t in instring: - res = (ord(t) + (res<<6) + (res<<16) - res) % 2**32 - return res + file = file.replace('\\','/')+":"+pp + # SDBM hash + res = 0 + for t in file: + res = (ord(t) + (res<<6) + (res<<16) - res) % 2**32 - return hex(myhash(file.replace('\\','/')+":"+pp)) + # Python 2.7 normalization: strip 'L' suffix. + return hex(res).rstrip('L') -assimp_bin_path = None -# ------------------------------------------------------------------------------- -def find_assimp_or_die(): - """Find assimp_cmd's binary for the current platform. - - The path to the binary is stored in assimp_bin_path, the process - is aborted if it can't be found. - - """ - - import os - import platform - import sys - - def locate_file(f_list): - for f in f_list: - try: - fl = open(f,"rb") - except IOError: - continue - fl.close() - return f - return None - - global assimp_bin_path - if os.name == "nt": - search_x86 = [ - os.path.join("assimp.exe"), - os.path.join("..","..","bin","assimpcmd_release-dll_Win32","assimp.exe"), - os.path.join("..","..","bin","x86","assimp"), - os.path.join("..","..","bin","Release","assimp.exe") - ] - if platform.machine() == "x86": - search = search_x86 - else: # amd64, hopefully - search = [ - os.path.join("..","..","bin","assimpcmd_release-dll_x64","assimp.exe"), - os.path.join("..","..","bin","x64","assimp") - ] - # x64 platform does not guarantee a x64 build. Also look for x86 as last paths. - search += search_x86 - - assimp_bin_path = locate_file(search) - if assimp_bin_path is None: - print("Can't locate assimp_cmd binary") - print("Looked in", search) - sys.exit(-5) - - print("Located assimp/assimp_cmd binary from", assimp_bin_path) - elif os.name == "posix": - #search = [os.path.join("..","..","bin","gcc","assimp"), - # os.path.join("/usr","local","bin",'assimp')] - assimp_bin_path = "assimp" - print("Taking system-wide assimp binary") - else: - print("Unsupported operating system") - sys.exit(-5) - -if __name__ == '__main__': - find_assimp_or_die() - # vim: ai ts=4 sts=4 et sw=4 From b2ea487bda3152134baf9d7cc3a94699e34c86fd Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Tue, 3 Feb 2015 21:16:16 +0100 Subject: [PATCH 017/166] Regression test suite: Test files in proper lexicographic order instead of relying on OS directory iteration order. This ensures failures are listed in the same order. --- test/regression/run.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/regression/run.py b/test/regression/run.py index 427f48d47..73172cf04 100644 --- a/test/regression/run.py +++ b/test/regression/run.py @@ -165,7 +165,7 @@ def process_dir(d, outfile_results, zipin, result): shellparams = {'stdout':outfile_results, 'stderr':outfile_results, 'shell':False} print("Processing directory " + d) - for f in os.listdir(d): + for f in sorted(os.listdir(d)): fullpath = os.path.join(d, f) if os.path.isdir(fullpath) and not f == ".svn": process_dir(fullpath, outfile_results, zipin, result) From 20b3ce6a40fc02c845c48c3919c1c5180bef3b8e Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 7 Feb 2015 12:47:53 +0100 Subject: [PATCH 018/166] replace opengexparser by using openddl-parser. Signed-off-by: Kim Kulling --- CMakeLists.txt | 3 + code/CMakeLists.txt | 4 +- code/ImporterRegistry.cpp | 88 ++-- code/OpenGEXImporter.cpp | 37 +- code/OpenGEXImporter.h | 7 +- code/OpenGEXParser.cpp | 409 ------------------ code/OpenGEXParser.h | 121 ------ contrib/openddlparser/code/DDLNode.cpp | 8 + contrib/openddlparser/code/OpenDDLParser.cpp | 101 +++-- .../include/openddlparser/DDLNode.h | 2 + .../include/openddlparser/OpenDDLCommon.h | 27 +- .../include/openddlparser/OpenDDLParser.h | 23 +- .../include/openddlparser/Value.h | 30 +- 13 files changed, 190 insertions(+), 670 deletions(-) delete mode 100644 code/OpenGEXParser.cpp delete mode 100644 code/OpenGEXParser.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 618f46a54..267f471c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,6 +155,9 @@ endif(NOT ZLIB_FOUND) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) add_subdirectory( contrib/openddlparser ) +INCLUDE_DIRECTORIES( contrib/openddlparser/include ) +SET( OPENDDL_PARSER_LIBRARIES openddl_parser ) + # Search for unzip if (PKG_CONFIG_FOUND) PKG_CHECK_MODULES(UNZIP minizip) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 162e9a2ef..40ddb1215 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -353,8 +353,6 @@ SOURCE_GROUP( Ogre FILES ${Ogre_SRCS}) SET( OpenGEX_SRCS OpenGEXImporter.cpp OpenGEXImporter.h - OpenGEXParser.cpp - OpenGEXParser.h OpenGEXStructs.h ) SOURCE_GROUP( OpenGEX FILES ${OpenGEX_SRCS}) @@ -729,7 +727,7 @@ SET( assimp_src ADD_LIBRARY( assimp ${assimp_src} ) -TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES}) +TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES} ) if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM) set(ASSIMP_ANDROID_JNIIOSYSTEM_PATH port/AndroidJNI) diff --git a/code/ImporterRegistry.cpp b/code/ImporterRegistry.cpp index ec804d141..ea9e7526c 100644 --- a/code/ImporterRegistry.cpp +++ b/code/ImporterRegistry.cpp @@ -178,130 +178,130 @@ namespace Assimp { // ------------------------------------------------------------------------------------------------ void GetImporterInstanceList(std::vector< BaseImporter* >& out) { - // ---------------------------------------------------------------------------- - // Add an instance of each worker class here - // (register_new_importers_here) - // ---------------------------------------------------------------------------- - out.reserve(64); + // ---------------------------------------------------------------------------- + // Add an instance of each worker class here + // (register_new_importers_here) + // ---------------------------------------------------------------------------- + out.reserve(64); #if (!defined ASSIMP_BUILD_NO_X_IMPORTER) - out.push_back( new XFileImporter()); + out.push_back( new XFileImporter()); #endif #if (!defined ASSIMP_BUILD_NO_OBJ_IMPORTER) - out.push_back( new ObjFileImporter()); + out.push_back( new ObjFileImporter()); #endif #if (!defined ASSIMP_BUILD_NO_3DS_IMPORTER) - out.push_back( new Discreet3DSImporter()); + out.push_back( new Discreet3DSImporter()); #endif #if (!defined ASSIMP_BUILD_NO_MD3_IMPORTER) - out.push_back( new MD3Importer()); + out.push_back( new MD3Importer()); #endif #if (!defined ASSIMP_BUILD_NO_MD2_IMPORTER) - out.push_back( new MD2Importer()); + out.push_back( new MD2Importer()); #endif #if (!defined ASSIMP_BUILD_NO_PLY_IMPORTER) - out.push_back( new PLYImporter()); + out.push_back( new PLYImporter()); #endif #if (!defined ASSIMP_BUILD_NO_MDL_IMPORTER) - out.push_back( new MDLImporter()); + out.push_back( new MDLImporter()); #endif #if (!defined ASSIMP_BUILD_NO_ASE_IMPORTER) - out.push_back( new ASEImporter()); + out.push_back( new ASEImporter()); #endif #if (!defined ASSIMP_BUILD_NO_HMP_IMPORTER) - out.push_back( new HMPImporter()); + out.push_back( new HMPImporter()); #endif #if (!defined ASSIMP_BUILD_NO_SMD_IMPORTER) - out.push_back( new SMDImporter()); + out.push_back( new SMDImporter()); #endif #if (!defined ASSIMP_BUILD_NO_MDC_IMPORTER) - out.push_back( new MDCImporter()); + out.push_back( new MDCImporter()); #endif #if (!defined ASSIMP_BUILD_NO_MD5_IMPORTER) - out.push_back( new MD5Importer()); + out.push_back( new MD5Importer()); #endif #if (!defined ASSIMP_BUILD_NO_STL_IMPORTER) - out.push_back( new STLImporter()); + out.push_back( new STLImporter()); #endif #if (!defined ASSIMP_BUILD_NO_LWO_IMPORTER) - out.push_back( new LWOImporter()); + out.push_back( new LWOImporter()); #endif #if (!defined ASSIMP_BUILD_NO_DXF_IMPORTER) - out.push_back( new DXFImporter()); + out.push_back( new DXFImporter()); #endif #if (!defined ASSIMP_BUILD_NO_NFF_IMPORTER) - out.push_back( new NFFImporter()); + out.push_back( new NFFImporter()); #endif #if (!defined ASSIMP_BUILD_NO_RAW_IMPORTER) - out.push_back( new RAWImporter()); + out.push_back( new RAWImporter()); #endif #if (!defined ASSIMP_BUILD_NO_OFF_IMPORTER) - out.push_back( new OFFImporter()); + out.push_back( new OFFImporter()); #endif #if (!defined ASSIMP_BUILD_NO_AC_IMPORTER) - out.push_back( new AC3DImporter()); + out.push_back( new AC3DImporter()); #endif #if (!defined ASSIMP_BUILD_NO_BVH_IMPORTER) - out.push_back( new BVHLoader()); + out.push_back( new BVHLoader()); #endif #if (!defined ASSIMP_BUILD_NO_IRRMESH_IMPORTER) - out.push_back( new IRRMeshImporter()); + out.push_back( new IRRMeshImporter()); #endif #if (!defined ASSIMP_BUILD_NO_IRR_IMPORTER) - out.push_back( new IRRImporter()); + out.push_back( new IRRImporter()); #endif #if (!defined ASSIMP_BUILD_NO_Q3D_IMPORTER) - out.push_back( new Q3DImporter()); + out.push_back( new Q3DImporter()); #endif #if (!defined ASSIMP_BUILD_NO_B3D_IMPORTER) - out.push_back( new B3DImporter()); + out.push_back( new B3DImporter()); #endif #if (!defined ASSIMP_BUILD_NO_COLLADA_IMPORTER) - out.push_back( new ColladaLoader()); + out.push_back( new ColladaLoader()); #endif #if (!defined ASSIMP_BUILD_NO_TERRAGEN_IMPORTER) - out.push_back( new TerragenImporter()); + out.push_back( new TerragenImporter()); #endif #if (!defined ASSIMP_BUILD_NO_CSM_IMPORTER) - out.push_back( new CSMImporter()); + out.push_back( new CSMImporter()); #endif #if (!defined ASSIMP_BUILD_NO_3D_IMPORTER) - out.push_back( new UnrealImporter()); + out.push_back( new UnrealImporter()); #endif #if (!defined ASSIMP_BUILD_NO_LWS_IMPORTER) - out.push_back( new LWSImporter()); + out.push_back( new LWSImporter()); #endif #if (!defined ASSIMP_BUILD_NO_OGRE_IMPORTER) - out.push_back( new Ogre::OgreImporter()); + out.push_back( new Ogre::OgreImporter()); #endif #if (!defined ASSIMP_BUILD_NO_OPEMGEX_IMPORTER ) out.push_back( new OpenGEX::OpenGEXImporter() ); #endif #if (!defined ASSIMP_BUILD_NO_MS3D_IMPORTER) - out.push_back( new MS3DImporter()); + out.push_back( new MS3DImporter()); #endif #if (!defined ASSIMP_BUILD_NO_COB_IMPORTER) - out.push_back( new COBImporter()); + out.push_back( new COBImporter()); #endif #if (!defined ASSIMP_BUILD_NO_BLEND_IMPORTER) - out.push_back( new BlenderImporter()); + out.push_back( new BlenderImporter()); #endif #if (!defined ASSIMP_BUILD_NO_Q3BSP_IMPORTER) - out.push_back( new Q3BSPFileImporter() ); + out.push_back( new Q3BSPFileImporter() ); #endif #if (!defined ASSIMP_BUILD_NO_NDO_IMPORTER) - out.push_back( new NDOImporter() ); + out.push_back( new NDOImporter() ); #endif #if (!defined ASSIMP_BUILD_NO_IFC_IMPORTER) - out.push_back( new IFCImporter() ); + out.push_back( new IFCImporter() ); #endif #if ( !defined ASSIMP_BUILD_NO_XGL_IMPORTER ) - out.push_back( new XGLImporter() ); + out.push_back( new XGLImporter() ); #endif #if ( !defined ASSIMP_BUILD_NO_FBX_IMPORTER ) - out.push_back( new FBXImporter() ); + out.push_back( new FBXImporter() ); #endif #if ( !defined ASSIMP_BUILD_NO_ASSBIN_IMPORTER ) - out.push_back( new AssbinImporter() ); + out.push_back( new AssbinImporter() ); #endif } diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index f385cc11d..7de3eaaea 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -41,9 +41,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AssimpPCH.h" #include "OpenGEXImporter.h" -#include "OpenGEXParser.h" #include "DefaultIOSystem.h" +#include + #include static const aiImporterDesc desc = { @@ -62,6 +63,8 @@ static const aiImporterDesc desc = { namespace Assimp { namespace OpenGEX { + USE_ODDLPARSER_NS + //------------------------------------------------------------------------------------------------ OpenGEXImporter::OpenGEXImporter() { @@ -95,8 +98,14 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce std::vector buffer; TextFileToBuffer( file, buffer ); - OpenGEXParser myParser( buffer ); - myParser.parse(); + + OpenDDLParser myParser; + myParser.setBuffer( &buffer[ 0 ], buffer.size() ); + bool success( myParser.parse() ); + if( success ) { + Context *ctx = myParser.getContext(); + importMetric( ctx ); + } } //------------------------------------------------------------------------------------------------ @@ -109,6 +118,28 @@ void OpenGEXImporter::SetupProperties( const Importer *pImp ) { } +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::importMetric( Context *ctx ) { + if( NULL == ctx || NULL == ctx->getProperties() ) { + return; + } + + Property *prop = ctx->getProperties(); + while( NULL != prop ) { + prop = prop->m_next; + } +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::ParseGeoObject() { + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::ParseMaterial() { + +} + //------------------------------------------------------------------------------------------------ } // Namespace OpenGEX diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 821692c25..601721704 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -44,6 +44,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "BaseImporter.h" + +namespace ODDLParser { + struct Context; +} + namespace Assimp { namespace OpenGEX { @@ -72,7 +77,7 @@ public: virtual void SetupProperties( const Importer *pImp ); protected: - void ParseMetric(); + void importMetric( ODDLParser::Context *ctx ); void ParseGeoObject(); void ParseMaterial(); }; diff --git a/code/OpenGEXParser.cpp b/code/OpenGEXParser.cpp deleted file mode 100644 index 3dcc83e44..000000000 --- a/code/OpenGEXParser.cpp +++ /dev/null @@ -1,409 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2014, 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. - ----------------------------------------------------------------------- -*/ -#include "AssimpPCH.h" -#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER - -#include "OpenGEXParser.h" -#include "OpenGEXStructs.h" -#include "ParsingUtils.h" -#include "fast_atof.h" - -#include - -namespace Assimp { -namespace OpenGEX { - -//------------------------------------------------------------------------------------------------ -static const std::string Metric = "Metric"; -static const std::string GeometryNode = "GeometryNode"; -static const std::string GeometryObject = "GeometryObject"; -static const std::string Material = "Material"; -static const size_t NumObjects = 4; -static const std::string RootNodes[ NumObjects ] = { - Metric, - GeometryNode, - GeometryObject, - Material -}; - -static const size_t NumSeparator = 4; -static const std::string Separator[ NumSeparator ] = { - "(", ")", "{", "}" -}; - - -static const size_t NumToken = 8; -static const std::string Token[ NumToken ] = { - RootNodes[ 0 ], - RootNodes[ 1 ], - RootNodes[ 2 ], - RootNodes[ 3 ], - Separator[ 0 ], - Separator[ 1 ], - Separator[ 2 ], - Separator[ 3 ] -}; - -static bool isSeparator( char in ) { - return ( in == '(' || in == ')' || in == '{' || in == '}' ); -} - -static bool containsNode( const char *bufferPtr, size_t size, const std::string *nodes, - size_t numNodes, std::string &tokenFound ) { - tokenFound = ""; - if( 0 == numNodes ) { - return false; - } - - bool found( false ); - for( size_t i = 0; i < numNodes; ++i ) { - if( TokenMatch( bufferPtr, nodes[ i ].c_str(), nodes[ i ].size() ) ) { - tokenFound = nodes[ i ]; - found = true; - break; - } - } - - return found; -} - -static OpenGEXParser::TokenType getTokenTypeByName( const char *in ) { - ai_assert( NULL != in ); - - OpenGEXParser::TokenType type( OpenGEXParser::None ); - for( size_t i = 0; i < NumToken; ++i ) { - if( TokenMatch( in, Token[ i ].c_str(), Token[ i ].size() ) ) { - type = static_cast( i+1 ); - break; - } - } - - return type; -} - -static void removeQuotes( std::string &attribName ) { - std::string tmp; - for( unsigned int i = 0; i < attribName.size(); ++i ) { - if( attribName[ i ] != '\"' ) { - tmp += attribName[ i ]; - } - } - attribName = tmp; -} - -//------------------------------------------------------------------------------------------------ -OpenGEXParser::OpenGEXParser( const std::vector &buffer ) -: m_buffer( buffer ) -, m_index( 0 ) -, m_buffersize( buffer.size() ) -, m_nodeTypeStack() { - // empty -} - -//------------------------------------------------------------------------------------------------ -OpenGEXParser::~OpenGEXParser() { - -} - -//------------------------------------------------------------------------------------------------ -void OpenGEXParser::parse() { - while( parseNextNode() ) { - - } -} - -//------------------------------------------------------------------------------------------------ -std::string OpenGEXParser::getNextToken() { - std::string token; - while( m_index < m_buffersize && IsSpace( m_buffer[ m_index ] ) ) { - m_index++; - } - - while( m_index < m_buffersize && !IsSpace( m_buffer[ m_index ] ) && !isSeparator( m_buffer[ m_index ] ) ) { - token += m_buffer[ m_index ]; - m_index++; - } - - if( token == "//" ) { - skipComments(); - token = getNextToken(); - } - - if( token.empty() ) { - if( isSeparator( m_buffer[ m_index ] ) ) { - token += m_buffer[ m_index ]; - m_index++; - } - } - - return token; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::skipComments() { - bool skipped( false ); - if( strncmp( &m_buffer[ m_index ], "//", 2 ) == 0) { - while( !IsLineEnd( m_buffer[ m_index ] ) ) { - ++m_index; - } - skipped = true; - } - - return skipped; -} - -//------------------------------------------------------------------------------------------------ -void OpenGEXParser::readUntilEndOfLine() { - while( !IsLineEnd( m_buffer[ m_index ] ) ) { - ++m_index; - } - ++m_index; - if( IsLineEnd( m_buffer[ m_index ] ) ) { - ++m_index; - } -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::parseNextNode() { - std::string token( getNextToken() ); - std::string rootNodeName, nodeType; - if( containsNode( token.c_str(), token.size(), RootNodes, NumObjects, rootNodeName ) ) { - m_nodeTypeStack.push_back( getTokenTypeByName( rootNodeName.c_str() ) ); - if( !getNodeHeader( nodeType ) ) { - return false; - } - - if( !getNodeData( nodeType ) ) { - return false; - } - - readUntilEndOfLine(); - - m_nodeTypeStack.pop_back(); - - } - - return true; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getNodeHeader( std::string &name ) { - bool success( false ); - TokenType tokenType( m_nodeTypeStack.back() ); - if( tokenType == MetricNode ) { - if( getMetricAttributeKey( name ) ) { - success = true; - } - } else if( tokenType == GeometryNode ) { - - } else if( tokenType == GeometryObject ) { - - } else if( tokenType == Material ) { - - } else { - DefaultLogger::get()->warn( "Unknown token type in file." ); - } - - return success; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getBracketOpen() { - const std::string token( getNextToken() ); - if( "{" == token ) { - return true; - } - - return false; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getBracketClose() { - const std::string token( getNextToken() ); - if( "}" == token ) { - return true; - } - - return false; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getStringData( std::string &data ) { - if( !getBracketOpen() ) { - return false; - } - - if( !getBracketClose() ) { - return false; - } - return false; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getFloatData( size_t num, float *data ) { - ai_assert( NULL != data ); - - std::string tk; - tk = getNextToken(); - - if( !getBracketOpen() ) { - return false; - } - - bool ok( true ); - size_t dataIdx( 0 ); - for( unsigned int i = 0; i < num; ++i ) { - data[ dataIdx ] = fast_atof( &m_buffer[ m_index ] ); - ++dataIdx; - tk = getNextToken(); - if( tk == "," ) { - if( i >= ( num - 1 ) ) { - ok = false; - break; - } - } - } - - if( !getBracketClose() ) { - return false; - } - - return ok; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getNodeData( const std::string &nodeType ) { - bool success( false ); - - if( !getBracketOpen() ) { - return false; - } - - const TokenType type( m_nodeTypeStack.back() ); - if( type == MetricNode ) { - success = onMetricNode( nodeType ); - } else if( type == GeometryNode ) { - success = onGeometryNode(); - } else if( type == GeometryObject ) { - success = onGeometryObject(); - } else if( type == Material ) { - success = onMaterial(); - } else { - DefaultLogger::get()->warn( "Unknown token type in file." ); - } - - if( !getBracketClose() ) { - return false; - } - - return success; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::getMetricAttributeKey( std::string &attribName ) { - bool ok( false ); - attribName = ""; - std::string token( getNextToken() ); - if( token[ 0 ] == '(' ) { - // get attribute - token = getNextToken(); - if( "key" == token ) { - std::string equal = getNextToken(); - attribName = getNextToken(); - token = getNextToken(); - if( token[ 0 ] == ')' ) { - ok = true; - removeQuotes( attribName ); - } - } - } - - return ok; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::onMetricNode( const std::string &attribName ) { - float value( 0.0f ); - bool success( true ); - if( "distance" == attribName ) { - if( getFloatData( 1, &value ) ) { - m_model.m_metrics.m_distance = value; - } - } else if( "angle" == attribName ) { - if( getFloatData( 1, &value ) ) { - m_model.m_metrics.m_angle = value; - } - } else if( "time" == attribName ) { - if( getFloatData( 1, &value ) ) { - m_model.m_metrics.m_time = value; - } - } else if( "up" == attribName ) { - std::string up; - if( getStringData( up ) ) { - m_model.m_metrics.m_up = up; - } - } else { - success = false; - } - - return success; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::onGeometryNode() { - return true; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::onGeometryObject() { - return true; -} - -//------------------------------------------------------------------------------------------------ -bool OpenGEXParser::onMaterial() { - return true; -} - -//------------------------------------------------------------------------------------------------ - -} // Namespace OpenGEX -} // Namespace Assimp - -#endif ASSIMP_BUILD_NO_OPEMGEX_IMPORTER diff --git a/code/OpenGEXParser.h b/code/OpenGEXParser.h deleted file mode 100644 index 64debe43c..000000000 --- a/code/OpenGEXParser.h +++ /dev/null @@ -1,121 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2014, 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. - ----------------------------------------------------------------------- -*/ -#ifndef ASSIMP_OPENGEX_OPENGEXPARSER_H_INC -#define ASSIMP_OPENGEX_OPENGEXPARSER_H_INC - -#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER - -#include -#include - -namespace Assimp { -namespace OpenGEX { - -struct OpenGEXModel { - struct Metrics { - float m_distance; - float m_angle; - float m_time; - std::string m_up; - - Metrics() - : m_distance( 0.0f ) - , m_angle( 0.0f ) - , m_time( 0.0f ) - , m_up() { - // empty - } - } m_metrics; -}; - -class OpenGEXParser { -public: - enum TokenType { - None = 0, - MetricNode, - GeometryNode, - GeometryObject, - Material, - BracketIn, - BracketOut, - CurlyBracketIn, - CurlyBracketOut, - }; - -public: - OpenGEXParser( const std::vector &buffer ); - ~OpenGEXParser(); - void parse(); - -protected: - std::string getNextToken(); - bool skipComments(); - void readUntilEndOfLine(); - bool parseNextNode(); - bool getNodeHeader( std::string &name ); - bool getBracketOpen(); - bool getBracketClose(); - bool getStringData( std::string &data ); - bool getFloatData( size_t num, float *data ); - bool getNodeData( const std::string &nodeType ); - bool getMetricAttributeKey( std::string &attribName ); - bool onMetricNode( const std::string &attribName ); - bool onGeometryNode(); - bool onGeometryObject(); - bool onMaterial(); - -private: - OpenGEXParser( const OpenGEXParser & ); - OpenGEXParser &operator = ( const OpenGEXParser & ); - -private: - const std::vector &m_buffer; - std::vector m_nodeTypeStack; - OpenGEXModel m_model; - size_t m_index; - size_t m_buffersize; -}; - -} // Namespace openGEX -} // Namespace Assimp - -#endif // ASSIMP_BUILD_NO_OPEMGEX_IMPORTER - -#endif // ASSIMP_OPENGEX_OPENGEXPARSER_H_INC diff --git a/contrib/openddlparser/code/DDLNode.cpp b/contrib/openddlparser/code/DDLNode.cpp index d7c034ba1..aba11d8ae 100644 --- a/contrib/openddlparser/code/DDLNode.cpp +++ b/contrib/openddlparser/code/DDLNode.cpp @@ -116,6 +116,14 @@ const std::string &DDLNode::getName() const { return m_name; } +void DDLNode::setProperties( Property *prop ) { + m_properties = prop; +} + +Property *DDLNode::getProperties() const { + return m_properties; +} + void DDLNode::setValue( Value *val ) { m_value = val; } diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 66f55f057..684eb20b7 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -104,22 +104,18 @@ static void logMessage( LogSeverity severity, const std::string &msg ) { OpenDDLParser::OpenDDLParser() : m_logCallback( logMessage ) -, m_ownsBuffer( false ) -, m_buffer( ddl_nullptr ) -, m_len( 0 ) +, m_buffer() , m_stack() , m_context( ddl_nullptr ) { // empty } -OpenDDLParser::OpenDDLParser( char *buffer, size_t len, bool ownsIt ) +OpenDDLParser::OpenDDLParser( char *buffer, size_t len ) : m_logCallback( &logMessage ) -, m_ownsBuffer( false ) -, m_buffer( ddl_nullptr ) -, m_len( 0 ) +, m_buffer() , m_context( ddl_nullptr ) { - if( 0 != m_len ) { - setBuffer( buffer, len, ownsIt ); + if( 0 != len ) { + setBuffer( buffer, len ); } } @@ -141,41 +137,36 @@ OpenDDLParser::logCallback OpenDDLParser::getLogCallback() const { return m_logCallback; } -void OpenDDLParser::setBuffer( char *buffer, size_t len, bool ownsIt ) { - if( m_buffer && m_ownsBuffer ) { - delete[] m_buffer; - m_buffer = ddl_nullptr; - m_len = 0; +void OpenDDLParser::setBuffer( char *buffer, size_t len ) { + clear(); + if( 0 == len ) { + return; } - m_ownsBuffer = ownsIt; - if( m_ownsBuffer ) { - // when we are owning the buffer we will do a deep copy - m_buffer = new char[ len ]; - m_len = len; - ::memcpy( m_buffer, buffer, len ); - } else { - // when we are not owning the buffer, we just do a shallow copy - m_buffer = buffer; - m_len = len; - } + m_buffer.resize( len ); + ::memcpy(&m_buffer[ 0 ], buffer, len ); } -char *OpenDDLParser::getBuffer() const { - return m_buffer; +void OpenDDLParser::setBuffer( const std::vector &buffer ) { + clear(); + m_buffer.resize( buffer.size() ); + std::copy( buffer.begin(), buffer.end(), m_buffer.begin() ); +} + +const char *OpenDDLParser::getBuffer() const { + if( m_buffer.empty() ) { + return ddl_nullptr; + } + + return &m_buffer[ 0 ]; } size_t OpenDDLParser::getBufferSize() const { - return m_len; + return m_buffer.size(); } void OpenDDLParser::clear() { - if( m_ownsBuffer ) { - delete [] m_buffer; - } - m_buffer = ddl_nullptr; - m_len = 0; - + m_buffer.resize( 0 ); if( m_context ) { m_context->m_root = ddl_nullptr; } @@ -184,11 +175,11 @@ void OpenDDLParser::clear() { } bool OpenDDLParser::parse() { - if( 0 == m_len ) { + if( m_buffer.empty() ) { return false; } - normalizeBuffer( m_buffer, m_len ); + normalizeBuffer( m_buffer ); m_context = new Context; m_context->m_root = DDLNode::create( "root", "", ddl_nullptr ); @@ -196,9 +187,11 @@ bool OpenDDLParser::parse() { // do the main parsing char *current( &m_buffer[ 0 ] ); - char *end( &m_buffer[ m_len - 1 ] + 1 ); - while( current != end ) { + char *end( &m_buffer[ m_buffer.size() - 1 ] + 1 ); + size_t pos( current - &m_buffer[ 0 ] ); + while( pos < m_buffer.size() ) { current = parseNextNode( current, end ); + pos = current - &m_buffer[ 0 ]; } return true; } @@ -219,7 +212,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { in = OpenDDLParser::parseIdentifier( in, end, &id ); #ifdef DEBUG_HEADER_NAME - if( id ) { + if( ddl_nullptr != id ) { std::cout << id->m_buffer << std::endl; } #endif // DEBUG_HEADER_NAME @@ -253,7 +246,11 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { // set the properties if( ddl_nullptr != first ) { - m_context->setProperties( first ); + std::cout << id->m_buffer << std::endl; + DDLNode *current( top() ); + if( current ) { + current->setProperties( first ); + } } // store the node @@ -317,6 +314,9 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { if( *in != '}' ) { logInvalidTokenError( in, "}", m_logCallback ); } + else { + in++; + } } else { in = parseHeader( in, end ); in = parseStructure( in, end ); @@ -327,6 +327,7 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { return in; } + in = getNextToken( in, end ); in++; @@ -373,33 +374,29 @@ Context *OpenDDLParser::getContext() const { return m_context; } -void OpenDDLParser::normalizeBuffer( char *buffer, size_t len ) { - if( nullptr == buffer || 0 == len ) { +void OpenDDLParser::normalizeBuffer( std::vector &buffer) { + if( buffer.empty() ) { return; } - size_t writeIdx( 0 ); - char *end( &buffer[ len ] + 1 ); + std::vector newBuffer; + const size_t len( buffer.size() ); + char *end( &buffer[ len-1 ] + 1 ); for( size_t readIdx = 0; readIdx( c, end ) ) { - buffer[ writeIdx ] = buffer[ readIdx ]; - writeIdx++; + newBuffer.push_back( buffer[ readIdx ] ); } else { readIdx++; // skip the comment and the rest of the line while( !isEndofLine( buffer[ readIdx ] ) ) { readIdx++; } - buffer[writeIdx] = '\n'; - writeIdx++; + newBuffer.push_back( '\n' ); } } - - if( writeIdx < len ) { - buffer[ writeIdx ] = '\0'; - } + buffer = newBuffer; } char *OpenDDLParser::parseName( char *in, char *end, Name **name ) { diff --git a/contrib/openddlparser/include/openddlparser/DDLNode.h b/contrib/openddlparser/include/openddlparser/DDLNode.h index 85b542b5e..d5b4a56c9 100644 --- a/contrib/openddlparser/include/openddlparser/DDLNode.h +++ b/contrib/openddlparser/include/openddlparser/DDLNode.h @@ -55,6 +55,8 @@ public: const std::string &getType() const; void setName( const std::string &name ); const std::string &getName() const; + void setProperties( Property *prop ); + Property *getProperties() const; void setValue( Value *val ); Value *getValue() const; void setDataArrayList( DataArrayList *dtArrayList ); diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index 65530c866..789bc15ad 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -25,6 +25,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define OPENDDLPARSER_OPENDDLPARSERCOMMON_H_INC #include +#include + #include #ifdef _WIN32 @@ -133,29 +135,24 @@ struct DataArrayList { }; struct Context { - Property *m_properties; DDLNode *m_root; Context() - : m_properties( ddl_nullptr ) - , m_root( ddl_nullptr ) { + : m_root( ddl_nullptr ) { // empty } - - void setProperties( Property *first ); - Property *getProperties() const; }; +struct BufferIt { + std::vector m_buffer; + size_t m_idx; -inline -void Context::setProperties( Property *first ) { - m_properties = first; -} - -inline -Property *Context::getProperties() const { - return m_properties; -} + BufferIt( const std::vector &buffer ) + : m_buffer( buffer ) + , m_idx( 0 ) { + // empty + } +}; END_ODDLPARSER_NS diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h index 6457e8b74..4f003a0e4 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h @@ -50,11 +50,12 @@ T *getNextToken( T *in, T *end ) { return in; } +/// @brief Defines the log severity. enum LogSeverity { - ddl_debug_msg = 0, - ddl_info_msg, - ddl_warn_msg, - ddl_error_msg, + ddl_debug_msg = 0, ///< Debug message, for debugging + ddl_info_msg, ///< Info messages, normal mode + ddl_warn_msg, ///< Parser warnings + ddl_error_msg ///< Parser errors }; class DLL_ODDLPARSER_EXPORT OpenDDLParser { @@ -63,12 +64,13 @@ public: public: OpenDDLParser(); - OpenDDLParser( char *buffer, size_t len, bool ownsIt = false ); + OpenDDLParser( char *buffer, size_t len ); ~OpenDDLParser(); void setLogCallback( logCallback callback ); logCallback getLogCallback() const; - void setBuffer( char *buffer, size_t len, bool ownsIt = false ); - char *getBuffer() const; + void setBuffer( char *buffer, size_t len ); + void setBuffer( const std::vector &buffer ); + const char *getBuffer() const; size_t getBufferSize() const; void clear(); bool parse(); @@ -82,7 +84,7 @@ public: Context *getContext() const; public: // static parser helpers - static void normalizeBuffer( char *buffer, size_t len ); + static void normalizeBuffer( std::vector &buffer ); static char *parseName( char *in, char *end, Name **name ); static char *parseIdentifier( char *in, char *end, Identifier **id ); static char *parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len ); @@ -103,9 +105,8 @@ private: private: logCallback m_logCallback; - bool m_ownsBuffer; - char *m_buffer; - size_t m_len; + std::vector m_buffer; + typedef std::vector DDLNodeStack; DDLNodeStack m_stack; Context *m_context; diff --git a/contrib/openddlparser/include/openddlparser/Value.h b/contrib/openddlparser/include/openddlparser/Value.h index 665c407ed..0d719f994 100644 --- a/contrib/openddlparser/include/openddlparser/Value.h +++ b/contrib/openddlparser/include/openddlparser/Value.h @@ -28,20 +28,28 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. BEGIN_ODDLPARSER_NS +///------------------------------------------------------------------------------------------------ +/// @brief This class implements a value. +/// +/// Values are used to store data types like boolean, integer, floats, double and many mode. To get +/// an overview please check the enum VylueType ( @see Value::ValueType ). +/// Values can be single items or lists of items. They are implemented as linked lists. +///------------------------------------------------------------------------------------------------ class DLL_ODDLPARSER_EXPORT Value { public: + /// @brief This enum describes the data type stored in the value. enum ValueType { - ddl_none = -1, - ddl_bool = 0, - ddl_int8, - ddl_int16, - ddl_int32, - ddl_int64, - ddl_unsigned_int8, - ddl_unsigned_int16, - ddl_unsigned_int32, - ddl_unsigned_int64, - ddl_half, + ddl_none = -1, ///< Nothing specified + ddl_bool = 0, ///< A boolean type + ddl_int8, ///< Integer type, 8 bytes + ddl_int16, ///< Integer type, 16 bytes + ddl_int32, ///< Integer type, 32 bytes + ddl_int64, ///< Integer type, 64 bytes + ddl_unsigned_int8, ///< Unsigned integer type, 8 bytes + ddl_unsigned_int16, ///< Unsigned integer type, 16 bytes + ddl_unsigned_int32, ///< Unsigned integer type, 32 bytes + ddl_unsigned_int64, ///< Unsigned integer type, 64 bytes + ddl_half, ddl_float, ddl_double, ddl_string, From 303a6893fc6805e260bea6df816ae7b8fbb65781 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 7 Feb 2015 13:23:32 +0100 Subject: [PATCH 019/166] fix the build. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 7de3eaaea..673deb6f8 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -120,14 +120,9 @@ void OpenGEXImporter::SetupProperties( const Importer *pImp ) { //------------------------------------------------------------------------------------------------ void OpenGEXImporter::importMetric( Context *ctx ) { - if( NULL == ctx || NULL == ctx->getProperties() ) { + if( NULL == ctx ) { return; } - - Property *prop = ctx->getProperties(); - while( NULL != prop ) { - prop = prop->m_next; - } } //------------------------------------------------------------------------------------------------ From 065ad7173aa464bc42d4d6459a89dca8d659c84d Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 7 Feb 2015 18:26:57 +0100 Subject: [PATCH 020/166] fix build: no c++11 support Signed-off-by: Kim Kulling --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 267f471c5..023263739 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,8 @@ set (PROJECT_VERSION "${ASSIMP_VERSION}") set(ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources") +add_definitions( -DOPENDDL_NO_USE_CPP11 ) + # Get the current working branch execute_process( COMMAND git rev-parse --abbrev-ref HEAD From 124f40897627f34334fe1fd286a0ea174cd6de31 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 7 Feb 2015 19:52:06 +0100 Subject: [PATCH 021/166] add property parsing. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 55 +++++++++++++++++++++++++++++++++++++--- code/OpenGEXImporter.h | 4 ++- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 673deb6f8..af9b550b5 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -60,6 +60,23 @@ static const aiImporterDesc desc = { "ogex" }; +namespace Grammar { + static const char *MetricType = "Metric"; + static const char *NameType = "Name"; + static const char *ObjectRefType = "ObjectRef"; + static const char *MaterialRefType = "MaterialRef"; + static const char *MetricKeyType = "key"; + static const char *GeometryNodeType = "GeometryNode"; + static const char *GeometryObjectType = "GeometryObject"; + static const char *TransformType = "Transform"; + static const char *MeshType = "Mesh"; + static const char *VertexArrayType = "VertexArray"; + static const char *IndexArrayType = "IndexArray"; + static const char *MaterialType = "Material"; + static const char *ColorType = "Color"; + static const char *TextureType = "Texture"; +} // Namespace Grammar + namespace Assimp { namespace OpenGEX { @@ -104,7 +121,7 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce bool success( myParser.parse() ); if( success ) { Context *ctx = myParser.getContext(); - importMetric( ctx ); + handleNodes( ctx->m_root ); } } @@ -115,14 +132,44 @@ const aiImporterDesc *OpenGEXImporter::GetInfo() const { //------------------------------------------------------------------------------------------------ void OpenGEXImporter::SetupProperties( const Importer *pImp ) { - + if( NULL == pImp ) { + return; + } } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::importMetric( Context *ctx ) { - if( NULL == ctx ) { +void OpenGEXImporter::handleNodes( ODDLParser::DDLNode *node ) { + if( NULL == node ) { return; } + + DDLNode::DllNodeList childs = node->getChildNodeList(); + for( DDLNode::DllNodeList::iterator it = childs.begin(); it != childs.end(); it++ ) { + if( ( *it )->getType() == Grammar::MetricType ) { + importMetric( *it ); + } + } +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::importMetric( DDLNode *node ) { + if( NULL == node ) { + return; + } + + Property *prop( node->getProperties() ); + while( NULL != prop ) { + if( NULL != prop->m_id ) { + if( Value::ddl_string == prop->m_primData->m_type ) { + std::string valName( (char*) prop->m_primData->m_data ); + Value *val( node->getValue() ); + if( NULL != val ) { + + } + } + } + prop = prop->m_next; + } } //------------------------------------------------------------------------------------------------ diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 601721704..58641775e 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -46,6 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace ODDLParser { + class DDLNode; struct Context; } @@ -77,7 +78,8 @@ public: virtual void SetupProperties( const Importer *pImp ); protected: - void importMetric( ODDLParser::Context *ctx ); + void handleNodes( ODDLParser::DDLNode *node ); + void importMetric( ODDLParser::DDLNode *node ); void ParseGeoObject(); void ParseMaterial(); }; From c3e2fa07613afe25f269c330fa6347b9fea92d0b Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 10 Feb 2015 19:31:23 +0100 Subject: [PATCH 022/166] - untabify obj parser. - bugfix openddl: latest version Signed-off-by: Kim Kulling --- code/ObjFileImporter.cpp | 946 +++++++++---------- code/ObjFileImporter.h | 74 +- code/ObjFileParser.h | 118 +-- contrib/openddlparser/code/OpenDDLParser.cpp | 24 +- 4 files changed, 582 insertions(+), 580 deletions(-) diff --git a/code/ObjFileImporter.cpp b/code/ObjFileImporter.cpp index b44ca4f05..8f201aa5a 100644 --- a/code/ObjFileImporter.cpp +++ b/code/ObjFileImporter.cpp @@ -48,16 +48,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "ObjFileData.h" static const aiImporterDesc desc = { - "Wavefront Object Importer", - "", - "", - "surfaces not supported", - aiImporterFlags_SupportTextFlavour, - 0, - 0, - 0, - 0, - "obj" + "Wavefront Object Importer", + "", + "", + "surfaces not supported", + aiImporterFlags_SupportTextFlavour, + 0, + 0, + 0, + 0, + "obj" }; static const unsigned int ObjMinSize = 16; @@ -69,99 +69,99 @@ using namespace std; // ------------------------------------------------------------------------------------------------ // Default constructor ObjFileImporter::ObjFileImporter() : - m_Buffer(), - m_pRootObject( NULL ), - m_strAbsPath( "" ) + m_Buffer(), + m_pRootObject( NULL ), + m_strAbsPath( "" ) { DefaultIOSystem io; - m_strAbsPath = io.getOsSeparator(); + m_strAbsPath = io.getOsSeparator(); } // ------------------------------------------------------------------------------------------------ // Destructor. ObjFileImporter::~ObjFileImporter() { - delete m_pRootObject; - m_pRootObject = NULL; + delete m_pRootObject; + m_pRootObject = NULL; } // ------------------------------------------------------------------------------------------------ // Returns true, if file is an obj file. bool ObjFileImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler , bool checkSig ) const { - if(!checkSig) //Check File Extension - { - return SimpleExtensionCheck(pFile,"obj"); - } - else //Check file Header - { - static const char *pTokens[] = { "mtllib", "usemtl", "v ", "vt ", "vn ", "o ", "g ", "s ", "f " }; - return BaseImporter::SearchFileHeaderForToken(pIOHandler, pFile, pTokens, 9 ); - } + if(!checkSig) //Check File Extension + { + return SimpleExtensionCheck(pFile,"obj"); + } + else //Check file Header + { + static const char *pTokens[] = { "mtllib", "usemtl", "v ", "vt ", "vn ", "o ", "g ", "s ", "f " }; + return BaseImporter::SearchFileHeaderForToken(pIOHandler, pFile, pTokens, 9 ); + } } // ------------------------------------------------------------------------------------------------ const aiImporterDesc* ObjFileImporter::GetInfo () const { - return &desc; + return &desc; } // ------------------------------------------------------------------------------------------------ // Obj-file import implementation void ObjFileImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) { - // Read file into memory - const std::string mode = "rb"; - boost::scoped_ptr file( pIOHandler->Open( pFile, mode)); + // Read file into memory + const std::string mode = "rb"; + boost::scoped_ptr file( pIOHandler->Open( pFile, mode)); if( !file.get() ) { throw DeadlyImportError( "Failed to open file " + pFile + "." ); } - // Get the file-size and validate it, throwing an exception when fails - size_t fileSize = file->FileSize(); + // Get the file-size and validate it, throwing an exception when fails + size_t fileSize = file->FileSize(); if( fileSize < ObjMinSize ) { - throw DeadlyImportError( "OBJ-file is too small."); + throw DeadlyImportError( "OBJ-file is too small."); } - // Allocate buffer and read file into it - TextFileToBuffer(file.get(),m_Buffer); + // Allocate buffer and read file into it + TextFileToBuffer(file.get(),m_Buffer); - // Get the model name - std::string strModelName; - std::string::size_type pos = pFile.find_last_of( "\\/" ); - if ( pos != std::string::npos ) - { - strModelName = pFile.substr(pos+1, pFile.size() - pos - 1); - } - else - { - strModelName = pFile; - } + // Get the model name + std::string strModelName; + std::string::size_type pos = pFile.find_last_of( "\\/" ); + if ( pos != std::string::npos ) + { + strModelName = pFile.substr(pos+1, pFile.size() - pos - 1); + } + else + { + strModelName = pFile; + } - // process all '\' - std::vector ::iterator iter = m_Buffer.begin(); - while (iter != m_Buffer.end()) - { - if (*iter == '\\') - { - // remove '\' - iter = m_Buffer.erase(iter); - // remove next character - while (*iter == '\r' || *iter == '\n') - iter = m_Buffer.erase(iter); - } - else - ++iter; - } + // process all '\' + std::vector ::iterator iter = m_Buffer.begin(); + while (iter != m_Buffer.end()) + { + if (*iter == '\\') + { + // remove '\' + iter = m_Buffer.erase(iter); + // remove next character + while (*iter == '\r' || *iter == '\n') + iter = m_Buffer.erase(iter); + } + else + ++iter; + } - // parse the file into a temporary representation - ObjFileParser parser(m_Buffer, strModelName, pIOHandler); + // parse the file into a temporary representation + ObjFileParser parser(m_Buffer, strModelName, pIOHandler); - // And create the proper return structures out of it - CreateDataFromImport(parser.GetModel(), pScene); + // And create the proper return structures out of it + CreateDataFromImport(parser.GetModel(), pScene); - // Clean up allocated storage for the next import - m_Buffer.clear(); + // Clean up allocated storage for the next import + m_Buffer.clear(); } // ------------------------------------------------------------------------------------------------ @@ -170,98 +170,98 @@ void ObjFileImporter::CreateDataFromImport(const ObjFile::Model* pModel, aiScene if( 0L == pModel ) { return; } - - // Create the root node of the scene - pScene->mRootNode = new aiNode; - if ( !pModel->m_ModelName.empty() ) - { - // Set the name of the scene - pScene->mRootNode->mName.Set(pModel->m_ModelName); - } - else - { - // This is a fatal error, so break down the application - ai_assert(false); - } + + // Create the root node of the scene + pScene->mRootNode = new aiNode; + if ( !pModel->m_ModelName.empty() ) + { + // Set the name of the scene + pScene->mRootNode->mName.Set(pModel->m_ModelName); + } + else + { + // This is a fatal error, so break down the application + ai_assert(false); + } - // Create nodes for the whole scene - std::vector MeshArray; - for (size_t index = 0; index < pModel->m_Objects.size(); index++) - { - createNodes(pModel, pModel->m_Objects[ index ], pScene->mRootNode, pScene, MeshArray); - } + // Create nodes for the whole scene + std::vector MeshArray; + for (size_t index = 0; index < pModel->m_Objects.size(); index++) + { + createNodes(pModel, pModel->m_Objects[ index ], pScene->mRootNode, pScene, MeshArray); + } - // Create mesh pointer buffer for this scene - if (pScene->mNumMeshes > 0) - { - pScene->mMeshes = new aiMesh*[ MeshArray.size() ]; - for (size_t index =0; index < MeshArray.size(); index++) - { - pScene->mMeshes [ index ] = MeshArray[ index ]; - } - } + // Create mesh pointer buffer for this scene + if (pScene->mNumMeshes > 0) + { + pScene->mMeshes = new aiMesh*[ MeshArray.size() ]; + for (size_t index =0; index < MeshArray.size(); index++) + { + pScene->mMeshes [ index ] = MeshArray[ index ]; + } + } - // Create all materials - createMaterials( pModel, pScene ); + // Create all materials + createMaterials( pModel, pScene ); } // ------------------------------------------------------------------------------------------------ // Creates all nodes of the model aiNode *ObjFileImporter::createNodes(const ObjFile::Model* pModel, const ObjFile::Object* pObject, - aiNode *pParent, aiScene* pScene, - std::vector &MeshArray ) + aiNode *pParent, aiScene* pScene, + std::vector &MeshArray ) { - ai_assert( NULL != pModel ); + ai_assert( NULL != pModel ); if( NULL == pObject ) { return NULL; } - - // Store older mesh size to be able to computes mesh offsets for new mesh instances - const size_t oldMeshSize = MeshArray.size(); - aiNode *pNode = new aiNode; + + // Store older mesh size to be able to computes mesh offsets for new mesh instances + const size_t oldMeshSize = MeshArray.size(); + aiNode *pNode = new aiNode; - pNode->mName = pObject->m_strObjName; - - // If we have a parent node, store it + pNode->mName = pObject->m_strObjName; + + // If we have a parent node, store it if( pParent != NULL ) { appendChildToParentNode( pParent, pNode ); } - for ( unsigned int i=0; i< pObject->m_Meshes.size(); i++ ) - { - unsigned int meshId = pObject->m_Meshes[ i ]; - aiMesh *pMesh = createTopology( pModel, pObject, meshId ); + for ( unsigned int i=0; i< pObject->m_Meshes.size(); i++ ) + { + unsigned int meshId = pObject->m_Meshes[ i ]; + aiMesh *pMesh = createTopology( pModel, pObject, meshId ); if( pMesh && pMesh->mNumFaces > 0 ) { - MeshArray.push_back( pMesh ); - } - } + MeshArray.push_back( pMesh ); + } + } - // Create all nodes from the sub-objects stored in the current object - if ( !pObject->m_SubObjects.empty() ) - { - size_t numChilds = pObject->m_SubObjects.size(); - pNode->mNumChildren = static_cast( numChilds ); - pNode->mChildren = new aiNode*[ numChilds ]; - pNode->mNumMeshes = 1; - pNode->mMeshes = new unsigned int[ 1 ]; - } + // Create all nodes from the sub-objects stored in the current object + if ( !pObject->m_SubObjects.empty() ) + { + size_t numChilds = pObject->m_SubObjects.size(); + pNode->mNumChildren = static_cast( numChilds ); + pNode->mChildren = new aiNode*[ numChilds ]; + pNode->mNumMeshes = 1; + pNode->mMeshes = new unsigned int[ 1 ]; + } - // Set mesh instances into scene- and node-instances - const size_t meshSizeDiff = MeshArray.size()- oldMeshSize; - if ( meshSizeDiff > 0 ) - { - pNode->mMeshes = new unsigned int[ meshSizeDiff ]; - pNode->mNumMeshes = static_cast( meshSizeDiff ); - size_t index = 0; - for (size_t i = oldMeshSize; i < MeshArray.size(); i++) - { - pNode->mMeshes[ index ] = pScene->mNumMeshes; - pScene->mNumMeshes++; - index++; - } - } - - return pNode; + // Set mesh instances into scene- and node-instances + const size_t meshSizeDiff = MeshArray.size()- oldMeshSize; + if ( meshSizeDiff > 0 ) + { + pNode->mMeshes = new unsigned int[ meshSizeDiff ]; + pNode->mNumMeshes = static_cast( meshSizeDiff ); + size_t index = 0; + for (size_t i = oldMeshSize; i < MeshArray.size(); i++) + { + pNode->mMeshes[ index ] = pScene->mNumMeshes; + pScene->mNumMeshes++; + index++; + } + } + + return pNode; } // ------------------------------------------------------------------------------------------------ @@ -269,83 +269,83 @@ aiNode *ObjFileImporter::createNodes(const ObjFile::Model* pModel, const ObjFile aiMesh *ObjFileImporter::createTopology( const ObjFile::Model* pModel, const ObjFile::Object* pData, unsigned int uiMeshIndex ) { - // Checking preconditions - ai_assert( NULL != pModel ); + // Checking preconditions + ai_assert( NULL != pModel ); if( NULL == pData ) { return NULL; } - // Create faces - ObjFile::Mesh *pObjMesh = pModel->m_Meshes[ uiMeshIndex ]; + // Create faces + ObjFile::Mesh *pObjMesh = pModel->m_Meshes[ uiMeshIndex ]; if( !pObjMesh ) { return NULL; } ai_assert( NULL != pObjMesh ); aiMesh* pMesh = new aiMesh; - for (size_t index = 0; index < pObjMesh->m_Faces.size(); index++) - { - ObjFile::Face *const inp = pObjMesh->m_Faces[ index ]; + for (size_t index = 0; index < pObjMesh->m_Faces.size(); index++) + { + ObjFile::Face *const inp = pObjMesh->m_Faces[ index ]; ai_assert( NULL != inp ); - if (inp->m_PrimitiveType == aiPrimitiveType_LINE) { - pMesh->mNumFaces += inp->m_pVertices->size() - 1; - pMesh->mPrimitiveTypes |= aiPrimitiveType_LINE; - } else if (inp->m_PrimitiveType == aiPrimitiveType_POINT) { - pMesh->mNumFaces += inp->m_pVertices->size(); - pMesh->mPrimitiveTypes |= aiPrimitiveType_POINT; - } else { - ++pMesh->mNumFaces; - if (inp->m_pVertices->size() > 3) { - pMesh->mPrimitiveTypes |= aiPrimitiveType_POLYGON; - } else { - pMesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; - } - } - } + if (inp->m_PrimitiveType == aiPrimitiveType_LINE) { + pMesh->mNumFaces += inp->m_pVertices->size() - 1; + pMesh->mPrimitiveTypes |= aiPrimitiveType_LINE; + } else if (inp->m_PrimitiveType == aiPrimitiveType_POINT) { + pMesh->mNumFaces += inp->m_pVertices->size(); + pMesh->mPrimitiveTypes |= aiPrimitiveType_POINT; + } else { + ++pMesh->mNumFaces; + if (inp->m_pVertices->size() > 3) { + pMesh->mPrimitiveTypes |= aiPrimitiveType_POLYGON; + } else { + pMesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; + } + } + } - unsigned int uiIdxCount( 0u ); - if ( pMesh->mNumFaces > 0 ) - { - pMesh->mFaces = new aiFace[ pMesh->mNumFaces ]; - if ( pObjMesh->m_uiMaterialIndex != ObjFile::Mesh::NoMaterial ) - { - pMesh->mMaterialIndex = pObjMesh->m_uiMaterialIndex; - } + unsigned int uiIdxCount( 0u ); + if ( pMesh->mNumFaces > 0 ) + { + pMesh->mFaces = new aiFace[ pMesh->mNumFaces ]; + if ( pObjMesh->m_uiMaterialIndex != ObjFile::Mesh::NoMaterial ) + { + pMesh->mMaterialIndex = pObjMesh->m_uiMaterialIndex; + } - unsigned int outIndex( 0 ); + unsigned int outIndex( 0 ); - // Copy all data from all stored meshes - for (size_t index = 0; index < pObjMesh->m_Faces.size(); index++) - { - ObjFile::Face* const inp = pObjMesh->m_Faces[ index ]; - if (inp->m_PrimitiveType == aiPrimitiveType_LINE) { - for(size_t i = 0; i < inp->m_pVertices->size() - 1; ++i) { - aiFace& f = pMesh->mFaces[ outIndex++ ]; - uiIdxCount += f.mNumIndices = 2; - f.mIndices = new unsigned int[2]; - } - continue; - } - else if (inp->m_PrimitiveType == aiPrimitiveType_POINT) { - for(size_t i = 0; i < inp->m_pVertices->size(); ++i) { - aiFace& f = pMesh->mFaces[ outIndex++ ]; - uiIdxCount += f.mNumIndices = 1; - f.mIndices = new unsigned int[1]; - } - continue; - } + // Copy all data from all stored meshes + for (size_t index = 0; index < pObjMesh->m_Faces.size(); index++) + { + ObjFile::Face* const inp = pObjMesh->m_Faces[ index ]; + if (inp->m_PrimitiveType == aiPrimitiveType_LINE) { + for(size_t i = 0; i < inp->m_pVertices->size() - 1; ++i) { + aiFace& f = pMesh->mFaces[ outIndex++ ]; + uiIdxCount += f.mNumIndices = 2; + f.mIndices = new unsigned int[2]; + } + continue; + } + else if (inp->m_PrimitiveType == aiPrimitiveType_POINT) { + for(size_t i = 0; i < inp->m_pVertices->size(); ++i) { + aiFace& f = pMesh->mFaces[ outIndex++ ]; + uiIdxCount += f.mNumIndices = 1; + f.mIndices = new unsigned int[1]; + } + continue; + } - aiFace *pFace = &pMesh->mFaces[ outIndex++ ]; - const unsigned int uiNumIndices = (unsigned int) pObjMesh->m_Faces[ index ]->m_pVertices->size(); - uiIdxCount += pFace->mNumIndices = (unsigned int) uiNumIndices; - if (pFace->mNumIndices > 0) { - pFace->mIndices = new unsigned int[ uiNumIndices ]; - } - } - } + aiFace *pFace = &pMesh->mFaces[ outIndex++ ]; + const unsigned int uiNumIndices = (unsigned int) pObjMesh->m_Faces[ index ]->m_pVertices->size(); + uiIdxCount += pFace->mNumIndices = (unsigned int) uiNumIndices; + if (pFace->mNumIndices > 0) { + pFace->mIndices = new unsigned int[ uiNumIndices ]; + } + } + } - // Create mesh vertices - createVertexArray(pModel, pData, uiMeshIndex, pMesh, uiIdxCount); + // Create mesh vertices + createVertexArray(pModel, pData, uiMeshIndex, pMesh, uiIdxCount); return pMesh; } @@ -353,335 +353,335 @@ aiMesh *ObjFileImporter::createTopology( const ObjFile::Model* pModel, const Obj // ------------------------------------------------------------------------------------------------ // Creates a vertex array void ObjFileImporter::createVertexArray(const ObjFile::Model* pModel, - const ObjFile::Object* pCurrentObject, - unsigned int uiMeshIndex, - aiMesh* pMesh, - unsigned int uiIdxCount) + const ObjFile::Object* pCurrentObject, + unsigned int uiMeshIndex, + aiMesh* pMesh, + unsigned int uiIdxCount) { - // Checking preconditions - ai_assert( NULL != pCurrentObject ); - - // Break, if no faces are stored in object - if ( pCurrentObject->m_Meshes.empty() ) - return; + // Checking preconditions + ai_assert( NULL != pCurrentObject ); + + // Break, if no faces are stored in object + if ( pCurrentObject->m_Meshes.empty() ) + return; - // Get current mesh - ObjFile::Mesh *pObjMesh = pModel->m_Meshes[ uiMeshIndex ]; - if ( NULL == pObjMesh || pObjMesh->m_uiNumIndices < 1) - return; + // Get current mesh + ObjFile::Mesh *pObjMesh = pModel->m_Meshes[ uiMeshIndex ]; + if ( NULL == pObjMesh || pObjMesh->m_uiNumIndices < 1) + return; - // Copy vertices of this mesh instance - pMesh->mNumVertices = uiIdxCount; - pMesh->mVertices = new aiVector3D[ pMesh->mNumVertices ]; - - // Allocate buffer for normal vectors - if ( !pModel->m_Normals.empty() && pObjMesh->m_hasNormals ) - pMesh->mNormals = new aiVector3D[ pMesh->mNumVertices ]; - - // Allocate buffer for texture coordinates - if ( !pModel->m_TextureCoord.empty() && pObjMesh->m_uiUVCoordinates[0] ) - { - pMesh->mNumUVComponents[ 0 ] = 2; - pMesh->mTextureCoords[ 0 ] = new aiVector3D[ pMesh->mNumVertices ]; - } - - // Copy vertices, normals and textures into aiMesh instance - unsigned int newIndex = 0, outIndex = 0; - for ( size_t index=0; index < pObjMesh->m_Faces.size(); index++ ) - { - // Get source face - ObjFile::Face *pSourceFace = pObjMesh->m_Faces[ index ]; + // Copy vertices of this mesh instance + pMesh->mNumVertices = uiIdxCount; + pMesh->mVertices = new aiVector3D[ pMesh->mNumVertices ]; + + // Allocate buffer for normal vectors + if ( !pModel->m_Normals.empty() && pObjMesh->m_hasNormals ) + pMesh->mNormals = new aiVector3D[ pMesh->mNumVertices ]; + + // Allocate buffer for texture coordinates + if ( !pModel->m_TextureCoord.empty() && pObjMesh->m_uiUVCoordinates[0] ) + { + pMesh->mNumUVComponents[ 0 ] = 2; + pMesh->mTextureCoords[ 0 ] = new aiVector3D[ pMesh->mNumVertices ]; + } + + // Copy vertices, normals and textures into aiMesh instance + unsigned int newIndex = 0, outIndex = 0; + for ( size_t index=0; index < pObjMesh->m_Faces.size(); index++ ) + { + // Get source face + ObjFile::Face *pSourceFace = pObjMesh->m_Faces[ index ]; - // Copy all index arrays - for ( size_t vertexIndex = 0, outVertexIndex = 0; vertexIndex < pSourceFace->m_pVertices->size(); vertexIndex++ ) - { - const unsigned int vertex = pSourceFace->m_pVertices->at( vertexIndex ); - if ( vertex >= pModel->m_Vertices.size() ) - throw DeadlyImportError( "OBJ: vertex index out of range" ); - - pMesh->mVertices[ newIndex ] = pModel->m_Vertices[ vertex ]; - - // Copy all normals - if ( !pModel->m_Normals.empty() && vertexIndex < pSourceFace->m_pNormals->size()) - { - const unsigned int normal = pSourceFace->m_pNormals->at( vertexIndex ); - if ( normal >= pModel->m_Normals.size() ) - throw DeadlyImportError("OBJ: vertex normal index out of range"); + // Copy all index arrays + for ( size_t vertexIndex = 0, outVertexIndex = 0; vertexIndex < pSourceFace->m_pVertices->size(); vertexIndex++ ) + { + const unsigned int vertex = pSourceFace->m_pVertices->at( vertexIndex ); + if ( vertex >= pModel->m_Vertices.size() ) + throw DeadlyImportError( "OBJ: vertex index out of range" ); + + pMesh->mVertices[ newIndex ] = pModel->m_Vertices[ vertex ]; + + // Copy all normals + if ( !pModel->m_Normals.empty() && vertexIndex < pSourceFace->m_pNormals->size()) + { + const unsigned int normal = pSourceFace->m_pNormals->at( vertexIndex ); + if ( normal >= pModel->m_Normals.size() ) + throw DeadlyImportError("OBJ: vertex normal index out of range"); - pMesh->mNormals[ newIndex ] = pModel->m_Normals[ normal ]; - } - - // Copy all texture coordinates - if ( !pModel->m_TextureCoord.empty() && vertexIndex < pSourceFace->m_pTexturCoords->size()) - { - const unsigned int tex = pSourceFace->m_pTexturCoords->at( vertexIndex ); - ai_assert( tex < pModel->m_TextureCoord.size() ); - - if ( tex >= pModel->m_TextureCoord.size() ) - throw DeadlyImportError("OBJ: texture coordinate index out of range"); + pMesh->mNormals[ newIndex ] = pModel->m_Normals[ normal ]; + } + + // Copy all texture coordinates + if ( !pModel->m_TextureCoord.empty() && vertexIndex < pSourceFace->m_pTexturCoords->size()) + { + const unsigned int tex = pSourceFace->m_pTexturCoords->at( vertexIndex ); + ai_assert( tex < pModel->m_TextureCoord.size() ); + + if ( tex >= pModel->m_TextureCoord.size() ) + throw DeadlyImportError("OBJ: texture coordinate index out of range"); - const aiVector3D &coord3d = pModel->m_TextureCoord[ tex ]; + const aiVector3D &coord3d = pModel->m_TextureCoord[ tex ]; pMesh->mTextureCoords[ 0 ][ newIndex ] = aiVector3D( coord3d.x, coord3d.y, coord3d.z ); - } + } - ai_assert( pMesh->mNumVertices > newIndex ); + ai_assert( pMesh->mNumVertices > newIndex ); - // Get destination face - aiFace *pDestFace = &pMesh->mFaces[ outIndex ]; + // Get destination face + aiFace *pDestFace = &pMesh->mFaces[ outIndex ]; - const bool last = ( vertexIndex == pSourceFace->m_pVertices->size() - 1 ); - if (pSourceFace->m_PrimitiveType != aiPrimitiveType_LINE || !last) - { - pDestFace->mIndices[ outVertexIndex ] = newIndex; - outVertexIndex++; - } + const bool last = ( vertexIndex == pSourceFace->m_pVertices->size() - 1 ); + if (pSourceFace->m_PrimitiveType != aiPrimitiveType_LINE || !last) + { + pDestFace->mIndices[ outVertexIndex ] = newIndex; + outVertexIndex++; + } - if (pSourceFace->m_PrimitiveType == aiPrimitiveType_POINT) - { - outIndex++; - outVertexIndex = 0; - } - else if (pSourceFace->m_PrimitiveType == aiPrimitiveType_LINE) - { - outVertexIndex = 0; + if (pSourceFace->m_PrimitiveType == aiPrimitiveType_POINT) + { + outIndex++; + outVertexIndex = 0; + } + else if (pSourceFace->m_PrimitiveType == aiPrimitiveType_LINE) + { + outVertexIndex = 0; - if(!last) - outIndex++; + if(!last) + outIndex++; - if (vertexIndex) { - if(!last) { - pMesh->mVertices[ newIndex+1 ] = pMesh->mVertices[ newIndex ]; - if ( !pSourceFace->m_pNormals->empty() && !pModel->m_Normals.empty()) { - pMesh->mNormals[ newIndex+1 ] = pMesh->mNormals[newIndex ]; - } - if ( !pModel->m_TextureCoord.empty() ) { - for ( size_t i=0; i < pMesh->GetNumUVChannels(); i++ ) { - pMesh->mTextureCoords[ i ][ newIndex+1 ] = pMesh->mTextureCoords[ i ][ newIndex ]; - } - } - ++newIndex; - } + if (vertexIndex) { + if(!last) { + pMesh->mVertices[ newIndex+1 ] = pMesh->mVertices[ newIndex ]; + if ( !pSourceFace->m_pNormals->empty() && !pModel->m_Normals.empty()) { + pMesh->mNormals[ newIndex+1 ] = pMesh->mNormals[newIndex ]; + } + if ( !pModel->m_TextureCoord.empty() ) { + for ( size_t i=0; i < pMesh->GetNumUVChannels(); i++ ) { + pMesh->mTextureCoords[ i ][ newIndex+1 ] = pMesh->mTextureCoords[ i ][ newIndex ]; + } + } + ++newIndex; + } - pDestFace[-1].mIndices[1] = newIndex; - } - } - else if (last) { - outIndex++; - } - ++newIndex; - } - } + pDestFace[-1].mIndices[1] = newIndex; + } + } + else if (last) { + outIndex++; + } + ++newIndex; + } + } } // ------------------------------------------------------------------------------------------------ // Counts all stored meshes void ObjFileImporter::countObjects(const std::vector &rObjects, int &iNumMeshes) { - iNumMeshes = 0; - if ( rObjects.empty() ) - return; + iNumMeshes = 0; + if ( rObjects.empty() ) + return; - iNumMeshes += static_cast( rObjects.size() ); - for (std::vector::const_iterator it = rObjects.begin(); - it != rObjects.end(); - ++it) - { - if (!(*it)->m_SubObjects.empty()) - { - countObjects((*it)->m_SubObjects, iNumMeshes); - } - } + iNumMeshes += static_cast( rObjects.size() ); + for (std::vector::const_iterator it = rObjects.begin(); + it != rObjects.end(); + ++it) + { + if (!(*it)->m_SubObjects.empty()) + { + countObjects((*it)->m_SubObjects, iNumMeshes); + } + } } // ------------------------------------------------------------------------------------------------ // Add clamp mode property to material if necessary void ObjFileImporter::addTextureMappingModeProperty(aiMaterial* mat, aiTextureType type, int clampMode) { - ai_assert( NULL != mat); - mat->AddProperty(&clampMode, 1, AI_MATKEY_MAPPINGMODE_U(type, 0)); - mat->AddProperty(&clampMode, 1, AI_MATKEY_MAPPINGMODE_V(type, 0)); + ai_assert( NULL != mat); + mat->AddProperty(&clampMode, 1, AI_MATKEY_MAPPINGMODE_U(type, 0)); + mat->AddProperty(&clampMode, 1, AI_MATKEY_MAPPINGMODE_V(type, 0)); } // ------------------------------------------------------------------------------------------------ // Creates the material void ObjFileImporter::createMaterials(const ObjFile::Model* pModel, aiScene* pScene ) { - ai_assert( NULL != pScene ); - if ( NULL == pScene ) - return; + ai_assert( NULL != pScene ); + if ( NULL == pScene ) + return; - const unsigned int numMaterials = (unsigned int) pModel->m_MaterialLib.size(); - pScene->mNumMaterials = 0; - if ( pModel->m_MaterialLib.empty() ) { - DefaultLogger::get()->debug("OBJ: no materials specified"); - return; - } - - pScene->mMaterials = new aiMaterial*[ numMaterials ]; - for ( unsigned int matIndex = 0; matIndex < numMaterials; matIndex++ ) - { - // Store material name - std::map::const_iterator it; - it = pModel->m_MaterialMap.find( pModel->m_MaterialLib[ matIndex ] ); - - // No material found, use the default material - if ( pModel->m_MaterialMap.end() == it ) - continue; + const unsigned int numMaterials = (unsigned int) pModel->m_MaterialLib.size(); + pScene->mNumMaterials = 0; + if ( pModel->m_MaterialLib.empty() ) { + DefaultLogger::get()->debug("OBJ: no materials specified"); + return; + } + + pScene->mMaterials = new aiMaterial*[ numMaterials ]; + for ( unsigned int matIndex = 0; matIndex < numMaterials; matIndex++ ) + { + // Store material name + std::map::const_iterator it; + it = pModel->m_MaterialMap.find( pModel->m_MaterialLib[ matIndex ] ); + + // No material found, use the default material + if ( pModel->m_MaterialMap.end() == it ) + continue; - aiMaterial* mat = new aiMaterial; - ObjFile::Material *pCurrentMaterial = (*it).second; - mat->AddProperty( &pCurrentMaterial->MaterialName, AI_MATKEY_NAME ); + aiMaterial* mat = new aiMaterial; + ObjFile::Material *pCurrentMaterial = (*it).second; + mat->AddProperty( &pCurrentMaterial->MaterialName, AI_MATKEY_NAME ); - // convert illumination model - int sm = 0; - switch (pCurrentMaterial->illumination_model) - { - case 0: - sm = aiShadingMode_NoShading; - break; - case 1: - sm = aiShadingMode_Gouraud; - break; - case 2: - sm = aiShadingMode_Phong; - break; - default: - sm = aiShadingMode_Gouraud; - DefaultLogger::get()->error("OBJ: unexpected illumination model (0-2 recognized)"); - } - - mat->AddProperty( &sm, 1, AI_MATKEY_SHADING_MODEL); + // convert illumination model + int sm = 0; + switch (pCurrentMaterial->illumination_model) + { + case 0: + sm = aiShadingMode_NoShading; + break; + case 1: + sm = aiShadingMode_Gouraud; + break; + case 2: + sm = aiShadingMode_Phong; + break; + default: + sm = aiShadingMode_Gouraud; + DefaultLogger::get()->error("OBJ: unexpected illumination model (0-2 recognized)"); + } + + mat->AddProperty( &sm, 1, AI_MATKEY_SHADING_MODEL); - // multiplying the specular exponent with 2 seems to yield better results - pCurrentMaterial->shineness *= 4.f; + // multiplying the specular exponent with 2 seems to yield better results + pCurrentMaterial->shineness *= 4.f; - // Adding material colors - mat->AddProperty( &pCurrentMaterial->ambient, 1, AI_MATKEY_COLOR_AMBIENT ); - mat->AddProperty( &pCurrentMaterial->diffuse, 1, AI_MATKEY_COLOR_DIFFUSE ); - mat->AddProperty( &pCurrentMaterial->specular, 1, AI_MATKEY_COLOR_SPECULAR ); - mat->AddProperty( &pCurrentMaterial->emissive, 1, AI_MATKEY_COLOR_EMISSIVE ); - mat->AddProperty( &pCurrentMaterial->shineness, 1, AI_MATKEY_SHININESS ); - mat->AddProperty( &pCurrentMaterial->alpha, 1, AI_MATKEY_OPACITY ); + // Adding material colors + mat->AddProperty( &pCurrentMaterial->ambient, 1, AI_MATKEY_COLOR_AMBIENT ); + mat->AddProperty( &pCurrentMaterial->diffuse, 1, AI_MATKEY_COLOR_DIFFUSE ); + mat->AddProperty( &pCurrentMaterial->specular, 1, AI_MATKEY_COLOR_SPECULAR ); + mat->AddProperty( &pCurrentMaterial->emissive, 1, AI_MATKEY_COLOR_EMISSIVE ); + mat->AddProperty( &pCurrentMaterial->shineness, 1, AI_MATKEY_SHININESS ); + mat->AddProperty( &pCurrentMaterial->alpha, 1, AI_MATKEY_OPACITY ); - // Adding refraction index - mat->AddProperty( &pCurrentMaterial->ior, 1, AI_MATKEY_REFRACTI ); + // Adding refraction index + mat->AddProperty( &pCurrentMaterial->ior, 1, AI_MATKEY_REFRACTI ); - // Adding textures - if ( 0 != pCurrentMaterial->texture.length ) - { - mat->AddProperty( &pCurrentMaterial->texture, AI_MATKEY_TEXTURE_DIFFUSE(0)); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureDiffuseType]) - { - addTextureMappingModeProperty(mat, aiTextureType_DIFFUSE); - } - } + // Adding textures + if ( 0 != pCurrentMaterial->texture.length ) + { + mat->AddProperty( &pCurrentMaterial->texture, AI_MATKEY_TEXTURE_DIFFUSE(0)); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureDiffuseType]) + { + addTextureMappingModeProperty(mat, aiTextureType_DIFFUSE); + } + } - if ( 0 != pCurrentMaterial->textureAmbient.length ) - { - mat->AddProperty( &pCurrentMaterial->textureAmbient, AI_MATKEY_TEXTURE_AMBIENT(0)); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureAmbientType]) - { - addTextureMappingModeProperty(mat, aiTextureType_AMBIENT); - } - } + if ( 0 != pCurrentMaterial->textureAmbient.length ) + { + mat->AddProperty( &pCurrentMaterial->textureAmbient, AI_MATKEY_TEXTURE_AMBIENT(0)); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureAmbientType]) + { + addTextureMappingModeProperty(mat, aiTextureType_AMBIENT); + } + } - if ( 0 != pCurrentMaterial->textureEmissive.length ) - mat->AddProperty( &pCurrentMaterial->textureEmissive, AI_MATKEY_TEXTURE_EMISSIVE(0)); + if ( 0 != pCurrentMaterial->textureEmissive.length ) + mat->AddProperty( &pCurrentMaterial->textureEmissive, AI_MATKEY_TEXTURE_EMISSIVE(0)); - if ( 0 != pCurrentMaterial->textureSpecular.length ) - { - mat->AddProperty( &pCurrentMaterial->textureSpecular, AI_MATKEY_TEXTURE_SPECULAR(0)); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureSpecularType]) - { - addTextureMappingModeProperty(mat, aiTextureType_SPECULAR); - } - } + if ( 0 != pCurrentMaterial->textureSpecular.length ) + { + mat->AddProperty( &pCurrentMaterial->textureSpecular, AI_MATKEY_TEXTURE_SPECULAR(0)); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureSpecularType]) + { + addTextureMappingModeProperty(mat, aiTextureType_SPECULAR); + } + } - if ( 0 != pCurrentMaterial->textureBump.length ) - { - mat->AddProperty( &pCurrentMaterial->textureBump, AI_MATKEY_TEXTURE_HEIGHT(0)); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureBumpType]) - { - addTextureMappingModeProperty(mat, aiTextureType_HEIGHT); - } - } + if ( 0 != pCurrentMaterial->textureBump.length ) + { + mat->AddProperty( &pCurrentMaterial->textureBump, AI_MATKEY_TEXTURE_HEIGHT(0)); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureBumpType]) + { + addTextureMappingModeProperty(mat, aiTextureType_HEIGHT); + } + } - if ( 0 != pCurrentMaterial->textureNormal.length ) - { - mat->AddProperty( &pCurrentMaterial->textureNormal, AI_MATKEY_TEXTURE_NORMALS(0)); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureNormalType]) - { - addTextureMappingModeProperty(mat, aiTextureType_NORMALS); - } - } + if ( 0 != pCurrentMaterial->textureNormal.length ) + { + mat->AddProperty( &pCurrentMaterial->textureNormal, AI_MATKEY_TEXTURE_NORMALS(0)); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureNormalType]) + { + addTextureMappingModeProperty(mat, aiTextureType_NORMALS); + } + } - if ( 0 != pCurrentMaterial->textureDisp.length ) - { - mat->AddProperty( &pCurrentMaterial->textureDisp, AI_MATKEY_TEXTURE_DISPLACEMENT(0) ); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureDispType]) - { - addTextureMappingModeProperty(mat, aiTextureType_DISPLACEMENT); - } - } + if ( 0 != pCurrentMaterial->textureDisp.length ) + { + mat->AddProperty( &pCurrentMaterial->textureDisp, AI_MATKEY_TEXTURE_DISPLACEMENT(0) ); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureDispType]) + { + addTextureMappingModeProperty(mat, aiTextureType_DISPLACEMENT); + } + } - if ( 0 != pCurrentMaterial->textureOpacity.length ) - { - mat->AddProperty( &pCurrentMaterial->textureOpacity, AI_MATKEY_TEXTURE_OPACITY(0)); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureOpacityType]) - { - addTextureMappingModeProperty(mat, aiTextureType_OPACITY); - } - } + if ( 0 != pCurrentMaterial->textureOpacity.length ) + { + mat->AddProperty( &pCurrentMaterial->textureOpacity, AI_MATKEY_TEXTURE_OPACITY(0)); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureOpacityType]) + { + addTextureMappingModeProperty(mat, aiTextureType_OPACITY); + } + } - if ( 0 != pCurrentMaterial->textureSpecularity.length ) - { - mat->AddProperty( &pCurrentMaterial->textureSpecularity, AI_MATKEY_TEXTURE_SHININESS(0)); - if (pCurrentMaterial->clamp[ObjFile::Material::TextureSpecularityType]) - { - addTextureMappingModeProperty(mat, aiTextureType_SHININESS); - } - } - - // Store material property info in material array in scene - pScene->mMaterials[ pScene->mNumMaterials ] = mat; - pScene->mNumMaterials++; - } - - // Test number of created materials. - ai_assert( pScene->mNumMaterials == numMaterials ); + if ( 0 != pCurrentMaterial->textureSpecularity.length ) + { + mat->AddProperty( &pCurrentMaterial->textureSpecularity, AI_MATKEY_TEXTURE_SHININESS(0)); + if (pCurrentMaterial->clamp[ObjFile::Material::TextureSpecularityType]) + { + addTextureMappingModeProperty(mat, aiTextureType_SHININESS); + } + } + + // Store material property info in material array in scene + pScene->mMaterials[ pScene->mNumMaterials ] = mat; + pScene->mNumMaterials++; + } + + // Test number of created materials. + ai_assert( pScene->mNumMaterials == numMaterials ); } // ------------------------------------------------------------------------------------------------ // Appends this node to the parent node void ObjFileImporter::appendChildToParentNode(aiNode *pParent, aiNode *pChild) { - // Checking preconditions - ai_assert( NULL != pParent ); - ai_assert( NULL != pChild ); + // Checking preconditions + ai_assert( NULL != pParent ); + ai_assert( NULL != pChild ); - // Assign parent to child - pChild->mParent = pParent; - - // If already children was assigned to the parent node, store them in a - std::vector temp; - if (pParent->mChildren != NULL) - { - ai_assert( 0 != pParent->mNumChildren ); - for (size_t index = 0; index < pParent->mNumChildren; index++) - { - temp.push_back(pParent->mChildren [ index ] ); - } - delete [] pParent->mChildren; - } - - // Copy node instances into parent node - pParent->mNumChildren++; - pParent->mChildren = new aiNode*[ pParent->mNumChildren ]; - for (size_t index = 0; index < pParent->mNumChildren-1; index++) - { - pParent->mChildren[ index ] = temp [ index ]; - } - pParent->mChildren[ pParent->mNumChildren-1 ] = pChild; + // Assign parent to child + pChild->mParent = pParent; + + // If already children was assigned to the parent node, store them in a + std::vector temp; + if (pParent->mChildren != NULL) + { + ai_assert( 0 != pParent->mNumChildren ); + for (size_t index = 0; index < pParent->mNumChildren; index++) + { + temp.push_back(pParent->mChildren [ index ] ); + } + delete [] pParent->mChildren; + } + + // Copy node instances into parent node + pParent->mNumChildren++; + pParent->mChildren = new aiNode*[ pParent->mNumChildren ]; + for (size_t index = 0; index < pParent->mNumChildren-1; index++) + { + pParent->mChildren[ index ] = temp [ index ]; + } + pParent->mChildren[ pParent->mNumChildren-1 ] = pChild; } // ------------------------------------------------------------------------------------------------ diff --git a/code/ObjFileImporter.h b/code/ObjFileImporter.h index 716cf65d1..0168c2673 100644 --- a/code/ObjFileImporter.h +++ b/code/ObjFileImporter.h @@ -64,57 +64,57 @@ struct Model; class ObjFileImporter : public BaseImporter { public: - /// \brief Default constructor - ObjFileImporter(); + /// \brief Default constructor + ObjFileImporter(); - /// \brief Destructor - ~ObjFileImporter(); + /// \brief Destructor + ~ObjFileImporter(); public: - /// \brief Returns whether the class can handle the format of the given file. - /// \remark See BaseImporter::CanRead() for details. - bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; + /// \brief Returns whether the class can handle the format of the given file. + /// \remark See BaseImporter::CanRead() for details. + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; private: - //! \brief Appends the supported extension. - const aiImporterDesc* GetInfo () const; + //! \brief Appends the supported extension. + const aiImporterDesc* GetInfo () const; - //! \brief File import implementation. - void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); - - //! \brief Create the data from imported content. - void CreateDataFromImport(const ObjFile::Model* pModel, aiScene* pScene); - - //! \brief Creates all nodes stored in imported content. - aiNode *createNodes(const ObjFile::Model* pModel, const ObjFile::Object* pData, - aiNode *pParent, aiScene* pScene, std::vector &MeshArray); + //! \brief File import implementation. + void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); + + //! \brief Create the data from imported content. + void CreateDataFromImport(const ObjFile::Model* pModel, aiScene* pScene); + + //! \brief Creates all nodes stored in imported content. + aiNode *createNodes(const ObjFile::Model* pModel, const ObjFile::Object* pData, + aiNode *pParent, aiScene* pScene, std::vector &MeshArray); - //! \brief Creates topology data like faces and meshes for the geometry. + //! \brief Creates topology data like faces and meshes for the geometry. aiMesh *createTopology( const ObjFile::Model* pModel, const ObjFile::Object* pData, - unsigned int uiMeshIndex ); - - //! \brief Creates vertices from model. - void createVertexArray(const ObjFile::Model* pModel, const ObjFile::Object* pCurrentObject, - unsigned int uiMeshIndex, aiMesh* pMesh,unsigned int uiIdxCount); + unsigned int uiMeshIndex ); + + //! \brief Creates vertices from model. + void createVertexArray(const ObjFile::Model* pModel, const ObjFile::Object* pCurrentObject, + unsigned int uiMeshIndex, aiMesh* pMesh,unsigned int uiIdxCount); - //! \brief Object counter helper method. - void countObjects(const std::vector &rObjects, int &iNumMeshes); + //! \brief Object counter helper method. + void countObjects(const std::vector &rObjects, int &iNumMeshes); - //! \brief Material creation. - void createMaterials(const ObjFile::Model* pModel, aiScene* pScene); - void addTextureMappingModeProperty(aiMaterial* mat, aiTextureType type, int clampMode = 1); + //! \brief Material creation. + void createMaterials(const ObjFile::Model* pModel, aiScene* pScene); + void addTextureMappingModeProperty(aiMaterial* mat, aiTextureType type, int clampMode = 1); - //! \brief Appends a child node to a parent node and updates the data structures. - void appendChildToParentNode(aiNode *pParent, aiNode *pChild); + //! \brief Appends a child node to a parent node and updates the data structures. + void appendChildToParentNode(aiNode *pParent, aiNode *pChild); private: - //! Data buffer - std::vector m_Buffer; - //! Pointer to root object instance - ObjFile::Object *m_pRootObject; - //! Absolute pathname of model in file system - std::string m_strAbsPath; + //! Data buffer + std::vector m_Buffer; + //! Pointer to root object instance + ObjFile::Object *m_pRootObject; + //! Absolute pathname of model in file system + std::string m_strAbsPath; }; // ------------------------------------------------------------------------------------------------ diff --git a/code/ObjFileParser.h b/code/ObjFileParser.h index 500e8d0f9..d22ca3d8e 100644 --- a/code/ObjFileParser.h +++ b/code/ObjFileParser.h @@ -63,76 +63,76 @@ class IOSystem; class ObjFileParser { public: - static const size_t BUFFERSIZE = 4096; - typedef std::vector DataArray; - typedef std::vector::iterator DataArrayIt; - typedef std::vector::const_iterator ConstDataArrayIt; + static const size_t BUFFERSIZE = 4096; + typedef std::vector DataArray; + typedef std::vector::iterator DataArrayIt; + typedef std::vector::const_iterator ConstDataArrayIt; public: - /// \brief Constructor with data array. - ObjFileParser(std::vector &Data,const std::string &strModelName, IOSystem* io); - /// \brief Destructor - ~ObjFileParser(); - /// \brief Model getter. - ObjFile::Model *GetModel() const; + /// \brief Constructor with data array. + ObjFileParser(std::vector &Data,const std::string &strModelName, IOSystem* io); + /// \brief Destructor + ~ObjFileParser(); + /// \brief Model getter. + ObjFile::Model *GetModel() const; private: - /// Parse the loaded file - void parseFile(); - /// Method to copy the new delimited word in the current line. - void copyNextWord(char *pBuffer, size_t length); - /// Method to copy the new line. - void copyNextLine(char *pBuffer, size_t length); + /// Parse the loaded file + void parseFile(); + /// Method to copy the new delimited word in the current line. + void copyNextWord(char *pBuffer, size_t length); + /// Method to copy the new line. + void copyNextLine(char *pBuffer, size_t length); /// Stores the vector void getVector( std::vector &point3d_array ); /// Stores the following 3d vector. - void getVector3( std::vector &point3d_array ); - /// Stores the following 3d vector. - void getVector2(std::vector &point2d_array); + void getVector3( std::vector &point3d_array ); + /// Stores the following 3d vector. + void getVector2(std::vector &point2d_array); /// Stores the following face. - void getFace(aiPrimitiveType type); - /// Reads the material description. + void getFace(aiPrimitiveType type); + /// Reads the material description. void getMaterialDesc(); - /// Gets a comment. - void getComment(); - /// Gets a a material library. - void getMaterialLib(); - /// Creates a new material. - void getNewMaterial(); - /// Gets the group name from file. - void getGroupName(); - /// Gets the group number from file. - void getGroupNumber(); - /// Gets the group number and resolution from file. - void getGroupNumberAndResolution(); - /// Returns the index of the material. Is -1 if not material was found. - int getMaterialIndex( const std::string &strMaterialName ); - /// Parse object name - void getObjectName(); - /// Creates a new object. - void createObject(const std::string &strObjectName); - /// Creates a new mesh. - void createMesh(); - /// Returns true, if a new mesh instance must be created. - bool needsNewMesh( const std::string &rMaterialName ); - /// Error report in token - void reportErrorTokenInFace(); + /// Gets a comment. + void getComment(); + /// Gets a a material library. + void getMaterialLib(); + /// Creates a new material. + void getNewMaterial(); + /// Gets the group name from file. + void getGroupName(); + /// Gets the group number from file. + void getGroupNumber(); + /// Gets the group number and resolution from file. + void getGroupNumberAndResolution(); + /// Returns the index of the material. Is -1 if not material was found. + int getMaterialIndex( const std::string &strMaterialName ); + /// Parse object name + void getObjectName(); + /// Creates a new object. + void createObject(const std::string &strObjectName); + /// Creates a new mesh. + void createMesh(); + /// Returns true, if a new mesh instance must be created. + bool needsNewMesh( const std::string &rMaterialName ); + /// Error report in token + void reportErrorTokenInFace(); private: - /// Default material name - static const std::string DEFAULT_MATERIAL; - //! Iterator to current position in buffer - DataArrayIt m_DataIt; - //! Iterator to end position of buffer - DataArrayIt m_DataItEnd; - //! Pointer to model instance - ObjFile::Model *m_pModel; - //! Current line (for debugging) - unsigned int m_uiLine; - //! Helper buffer - char m_buffer[BUFFERSIZE]; - /// Pointer to IO system instance. - IOSystem *m_pIO; + /// Default material name + static const std::string DEFAULT_MATERIAL; + //! Iterator to current position in buffer + DataArrayIt m_DataIt; + //! Iterator to end position of buffer + DataArrayIt m_DataItEnd; + //! Pointer to model instance + ObjFile::Model *m_pModel; + //! Current line (for debugging) + unsigned int m_uiLine; + //! Helper buffer + char m_buffer[BUFFERSIZE]; + /// Pointer to IO system instance. + IOSystem *m_pIO; }; } // Namespace Assimp diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 684eb20b7..b869aa2a1 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -244,15 +244,6 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { in++; } - // set the properties - if( ddl_nullptr != first ) { - std::cout << id->m_buffer << std::endl; - DDLNode *current( top() ); - if( current ) { - current->setProperties( first ); - } - } - // store the node DDLNode *node( createDDLNode( id, this ) ); if( nullptr != node ) { @@ -261,6 +252,11 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { std::cerr << "nullptr returned by creating DDLNode." << std::endl; } + // set the properties + if( ddl_nullptr != first ) { + node->setProperties( first ); + } + Name *name( ddl_nullptr ); in = OpenDDLParser::parseName( in, end, &name ); if( ddl_nullptr != name ) { @@ -277,6 +273,7 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { return in; } + bool error( false ); in = getNextToken( in, end ); if( *in == '{' ) { in++; @@ -307,6 +304,7 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { } } else { std::cerr << "0 for array is invalid." << std::endl; + error = true; } } @@ -324,12 +322,16 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { } else { in++; logInvalidTokenError( in, "{", m_logCallback ); + error = true; return in; } in = getNextToken( in, end ); - - in++; + + // pop node from stack after successful parsing + if( !error ) { + popNode(); + } return in; } From 556bc9c1f34c0d344535617a464f4eb87992f49e Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 10 Feb 2015 20:09:03 +0100 Subject: [PATCH 023/166] fix build Signed-off-by: Kim Kulling --- contrib/openddlparser/include/openddlparser/DDLNode.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/openddlparser/include/openddlparser/DDLNode.h b/contrib/openddlparser/include/openddlparser/DDLNode.h index d5b4a56c9..bb5f87b79 100644 --- a/contrib/openddlparser/include/openddlparser/DDLNode.h +++ b/contrib/openddlparser/include/openddlparser/DDLNode.h @@ -61,10 +61,10 @@ public: Value *getValue() const; void setDataArrayList( DataArrayList *dtArrayList ); DataArrayList *getDataArrayList() const; - static DDLNode *create( const std::string &type, const std::string &name, DDLNode *parent = nullptr ); + static DDLNode *create( const std::string &type, const std::string &name, DDLNode *parent = ddl_nullptr ); private: - DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode *parent = nullptr ); + DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode *parent = ddl_nullptr ); DDLNode(); DDLNode( const DDLNode & ); DDLNode &operator = ( const DDLNode & ); From 9e87fa178af58fda5d2acb6a2d32c86128217e6c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 10 Feb 2015 20:09:26 +0100 Subject: [PATCH 024/166] add property parsing to opengex parser. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 167 ++++++++++++++++++++++++++++++++------- code/OpenGEXImporter.h | 17 ++++ 2 files changed, 157 insertions(+), 27 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index af9b550b5..83bde51fe 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -61,35 +61,116 @@ static const aiImporterDesc desc = { }; namespace Grammar { - static const char *MetricType = "Metric"; - static const char *NameType = "Name"; - static const char *ObjectRefType = "ObjectRef"; - static const char *MaterialRefType = "MaterialRef"; - static const char *MetricKeyType = "key"; - static const char *GeometryNodeType = "GeometryNode"; - static const char *GeometryObjectType = "GeometryObject"; - static const char *TransformType = "Transform"; - static const char *MeshType = "Mesh"; - static const char *VertexArrayType = "VertexArray"; - static const char *IndexArrayType = "IndexArray"; - static const char *MaterialType = "Material"; - static const char *ColorType = "Color"; - static const char *TextureType = "Texture"; + static const char *MetricType = "Metric"; + static const char *Metric_DistanceType = "distance"; + static const char *Metric_AngleType = "angle"; + static const char *Metric_TimeType = "time"; + static const char *Metric_UpType = "up"; + static const char *NameType = "Name"; + static const char *ObjectRefType = "ObjectRef"; + static const char *MaterialRefType = "MaterialRef"; + static const char *MetricKeyType = "key"; + static const char *GeometryNodeType = "GeometryNode"; + static const char *GeometryObjectType = "GeometryObject"; + static const char *TransformType = "Transform"; + static const char *MeshType = "Mesh"; + static const char *VertexArrayType = "VertexArray"; + static const char *IndexArrayType = "IndexArray"; + static const char *MaterialType = "Material"; + static const char *ColorType = "Color"; + static const char *TextureType = "Texture"; + + enum TokenType { + NoneType = -1, + MetricToken, + NameToken, + ObjectRefToken, + MaterialRefToken, + MetricKeyToken, + GeometryNodeToken, + GeometryObjectToken, + TransformToken, + MeshToken, + VertexArrayToken, + IndexArrayToken, + MaterialToken, + ColorToken, + TextureToken + }; + + static const char *ValidMetricToken[ 4 ] = { + Metric_DistanceType, + Metric_AngleType, + Metric_TimeType, + Metric_UpType + }; + + static int isValidMetricType( const char *token ) { + if( NULL == token ) { + return false; + } + + int idx( -1 ); + for( size_t i = 0; i < 4; i++ ) { + if( 0 == strncmp( ValidMetricToken[ i ], token, strlen( token ) ) ) { + idx = (int) i; + break; + } + } + + return idx; + } + + static TokenType matchTokenType( const char *tokenType ) { + if( 0 == strncmp( MetricType, tokenType, strlen( tokenType ) ) ) { + return MetricToken; + } else if( 0 == strncmp( NameType, tokenType, strlen( tokenType ) ) ) { + return NameToken; + } else if( 0 == strncmp( ObjectRefType, tokenType, strlen( tokenType ) ) ) { + return ObjectRefToken; + } else if( 0 == strncmp( MaterialRefType, tokenType, strlen( tokenType ) ) ) { + return MaterialRefToken; + } else if( 0 == strncmp( MetricKeyType, tokenType, strlen( tokenType ) ) ) { + return MetricKeyToken; + } else if( 0 == strncmp( GeometryNodeType, tokenType, strlen( tokenType ) ) ) { + return GeometryNodeToken; + } else if( 0 == strncmp( GeometryObjectType, tokenType, strlen( tokenType ) ) ) { + return GeometryObjectToken; + } else if( 0 == strncmp( TransformType, tokenType, strlen( tokenType ) ) ) { + return TransformToken; + } else if( 0 == strncmp( MeshType, tokenType, strlen( tokenType ) ) ) { + return MeshToken; + } else if( 0 == strncmp( VertexArrayType, tokenType, strlen( tokenType ) ) ) { + return VertexArrayToken; + } else if( 0 == strncmp( IndexArrayType, tokenType, strlen( tokenType ) ) ) { + return IndexArrayToken; + } else if( 0 == strncmp( MaterialType, tokenType, strlen( tokenType ) ) ) { + return MaterialToken; + } else if( 0 == strncmp( ColorType, tokenType, strlen( tokenType ) ) ) { + return ColorToken; + } else if( 0 == strncmp( TextureType, tokenType, strlen( tokenType ) ) ) { + return TextureToken; + } + + return NoneType; + } + } // Namespace Grammar namespace Assimp { namespace OpenGEX { - USE_ODDLPARSER_NS +USE_ODDLPARSER_NS //------------------------------------------------------------------------------------------------ -OpenGEXImporter::OpenGEXImporter() { - +OpenGEXImporter::OpenGEXImporter() +: m_ctx( NULL ) { + // empty } //------------------------------------------------------------------------------------------------ OpenGEXImporter::~OpenGEXImporter() { - + m_ctx = NULL; } //------------------------------------------------------------------------------------------------ @@ -120,8 +201,8 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce myParser.setBuffer( &buffer[ 0 ], buffer.size() ); bool success( myParser.parse() ); if( success ) { - Context *ctx = myParser.getContext(); - handleNodes( ctx->m_root ); + m_ctx = myParser.getContext(); + handleNodes( m_ctx->m_root ); } } @@ -138,22 +219,45 @@ void OpenGEXImporter::SetupProperties( const Importer *pImp ) { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleNodes( ODDLParser::DDLNode *node ) { +void OpenGEXImporter::handleNodes( DDLNode *node ) { if( NULL == node ) { return; } DDLNode::DllNodeList childs = node->getChildNodeList(); for( DDLNode::DllNodeList::iterator it = childs.begin(); it != childs.end(); it++ ) { - if( ( *it )->getType() == Grammar::MetricType ) { - importMetric( *it ); + Grammar::TokenType tokenType( Grammar::matchTokenType( ( *it )->getType().c_str() ) ); + switch( tokenType ) { + case Grammar::MetricToken: + importMetric( *it ); + break; + + case Grammar::NameToken: + case Grammar::ObjectRefToken: + case Grammar::MaterialRefToken: + case Grammar::MetricKeyToken: + case Grammar::GeometryNodeToken: + case Grammar::GeometryObjectToken: + case Grammar::TransformToken: + case Grammar::MeshToken: + case Grammar::VertexArrayToken: + case Grammar::IndexArrayToken: + case Grammar::MaterialToken: + case Grammar::ColorToken: + case Grammar::TextureToken: + default: + break; } } } //------------------------------------------------------------------------------------------------ void OpenGEXImporter::importMetric( DDLNode *node ) { - if( NULL == node ) { + if( NULL == node || NULL == m_ctx ) { + return; + } + + if( m_ctx->m_root != node->getParent() ) { return; } @@ -162,9 +266,18 @@ void OpenGEXImporter::importMetric( DDLNode *node ) { if( NULL != prop->m_id ) { if( Value::ddl_string == prop->m_primData->m_type ) { std::string valName( (char*) prop->m_primData->m_data ); - Value *val( node->getValue() ); - if( NULL != val ) { - + int type( Grammar::isValidMetricType( valName.c_str() ) ); + if( -1 != type ) { + Value *val( node->getValue() ); + if( NULL != val ) { + if( Value::ddl_float == val->m_type ) { + m_metrics[ type ].m_floatValue = val->getFloat(); + } else if( Value::ddl_int32 == val->m_type ) { + m_metrics[ type ].m_floatValue = val->getInt32(); + } else { + throw DeadlyImportError( "OpenGEX: invalid data type for Metric node." ); + } + } } } } diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 58641775e..9e8b06ff3 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -53,6 +53,19 @@ namespace ODDLParser { namespace Assimp { namespace OpenGEX { +struct MetricInfo { + enum Type { + Distance = 0, + Angle, + Time, + Up, + Max + }; + + std::string m_stringValue; + float m_floatValue; +}; + /** @brief This class is used to implement the OpenGEX importer * * See http://opengex.org/OpenGEX.pdf for spec. @@ -82,6 +95,10 @@ protected: void importMetric( ODDLParser::DDLNode *node ); void ParseGeoObject(); void ParseMaterial(); + +private: + ODDLParser::Context *m_ctx; + MetricInfo m_metrics[ MetricInfo::Max ]; }; } // Namespace OpenGEX From bd1168af30b89f3c02a3c04369cbebc64867b977 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 10 Feb 2015 20:46:02 +0100 Subject: [PATCH 025/166] fix invalid line endling handling. Signed-off-by: Kim Kulling --- code/ObjFileParser.cpp | 914 +++++++++--------- code/ParsingUtils.h | 70 +- .../openddlparser/OpenDDLParserUtils.h | 2 +- 3 files changed, 493 insertions(+), 493 deletions(-) diff --git a/code/ObjFileParser.cpp b/code/ObjFileParser.cpp index 34bb01e0a..c4dff0ba0 100644 --- a/code/ObjFileParser.cpp +++ b/code/ObjFileParser.cpp @@ -57,177 +57,177 @@ const std::string ObjFileParser::DEFAULT_MATERIAL = AI_DEFAULT_MATERIAL_NAME; // ------------------------------------------------------------------- // Constructor with loaded data and directories. ObjFileParser::ObjFileParser(std::vector &Data,const std::string &strModelName, IOSystem *io ) : - m_DataIt(Data.begin()), - m_DataItEnd(Data.end()), - m_pModel(NULL), - m_uiLine(0), - m_pIO( io ) + m_DataIt(Data.begin()), + m_DataItEnd(Data.end()), + m_pModel(NULL), + m_uiLine(0), + m_pIO( io ) { - std::fill_n(m_buffer,BUFFERSIZE,0); + std::fill_n(m_buffer,BUFFERSIZE,0); - // Create the model instance to store all the data - m_pModel = new ObjFile::Model(); - m_pModel->m_ModelName = strModelName; - + // Create the model instance to store all the data + m_pModel = new ObjFile::Model(); + m_pModel->m_ModelName = strModelName; + // create default material and store it - m_pModel->m_pDefaultMaterial = new ObjFile::Material(); - m_pModel->m_pDefaultMaterial->MaterialName.Set( DEFAULT_MATERIAL ); + m_pModel->m_pDefaultMaterial = new ObjFile::Material(); + m_pModel->m_pDefaultMaterial->MaterialName.Set( DEFAULT_MATERIAL ); m_pModel->m_MaterialLib.push_back( DEFAULT_MATERIAL ); - m_pModel->m_MaterialMap[ DEFAULT_MATERIAL ] = m_pModel->m_pDefaultMaterial; - - // Start parsing the file - parseFile(); + m_pModel->m_MaterialMap[ DEFAULT_MATERIAL ] = m_pModel->m_pDefaultMaterial; + + // Start parsing the file + parseFile(); } // ------------------------------------------------------------------- // Destructor ObjFileParser::~ObjFileParser() { - delete m_pModel; - m_pModel = NULL; + delete m_pModel; + m_pModel = NULL; } // ------------------------------------------------------------------- // Returns a pointer to the model instance. ObjFile::Model *ObjFileParser::GetModel() const { - return m_pModel; + return m_pModel; } // ------------------------------------------------------------------- // File parsing method. void ObjFileParser::parseFile() { - if (m_DataIt == m_DataItEnd) - return; + if (m_DataIt == m_DataItEnd) + return; - while (m_DataIt != m_DataItEnd) - { - switch (*m_DataIt) - { - case 'v': // Parse a vertex texture coordinate - { - ++m_DataIt; - if (*m_DataIt == ' ' || *m_DataIt == '\t') { - // read in vertex definition - getVector3(m_pModel->m_Vertices); - } else if (*m_DataIt == 't') { - // read in texture coordinate ( 2D or 3D ) + while (m_DataIt != m_DataItEnd) + { + switch (*m_DataIt) + { + case 'v': // Parse a vertex texture coordinate + { + ++m_DataIt; + if (*m_DataIt == ' ' || *m_DataIt == '\t') { + // read in vertex definition + getVector3(m_pModel->m_Vertices); + } else if (*m_DataIt == 't') { + // read in texture coordinate ( 2D or 3D ) ++m_DataIt; getVector( m_pModel->m_TextureCoord ); - } else if (*m_DataIt == 'n') { - // Read in normal vector definition - ++m_DataIt; - getVector3( m_pModel->m_Normals ); - } - } - break; + } else if (*m_DataIt == 'n') { + // Read in normal vector definition + ++m_DataIt; + getVector3( m_pModel->m_Normals ); + } + } + break; - case 'p': // Parse a face, line or point statement - case 'l': - case 'f': - { - getFace(*m_DataIt == 'f' ? aiPrimitiveType_POLYGON : (*m_DataIt == 'l' - ? aiPrimitiveType_LINE : aiPrimitiveType_POINT)); - } - break; + case 'p': // Parse a face, line or point statement + case 'l': + case 'f': + { + getFace(*m_DataIt == 'f' ? aiPrimitiveType_POLYGON : (*m_DataIt == 'l' + ? aiPrimitiveType_LINE : aiPrimitiveType_POINT)); + } + break; - case '#': // Parse a comment - { - getComment(); - } - break; + case '#': // Parse a comment + { + getComment(); + } + break; - case 'u': // Parse a material desc. setter - { - getMaterialDesc(); - } - break; + case 'u': // Parse a material desc. setter + { + getMaterialDesc(); + } + break; - case 'm': // Parse a material library or merging group ('mg') - { - if (*(m_DataIt + 1) == 'g') - getGroupNumberAndResolution(); - else - getMaterialLib(); - } - break; + case 'm': // Parse a material library or merging group ('mg') + { + if (*(m_DataIt + 1) == 'g') + getGroupNumberAndResolution(); + else + getMaterialLib(); + } + break; - case 'g': // Parse group name - { - getGroupName(); - } - break; + case 'g': // Parse group name + { + getGroupName(); + } + break; - case 's': // Parse group number - { - getGroupNumber(); - } - break; + case 's': // Parse group number + { + getGroupNumber(); + } + break; - case 'o': // Parse object name - { - getObjectName(); - } - break; - - default: - { - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); - } - break; - } - } + case 'o': // Parse object name + { + getObjectName(); + } + break; + + default: + { + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + } + break; + } + } } // ------------------------------------------------------------------- // Copy the next word in a temporary buffer void ObjFileParser::copyNextWord(char *pBuffer, size_t length) { - size_t index = 0; - m_DataIt = getNextWord(m_DataIt, m_DataItEnd); + size_t index = 0; + m_DataIt = getNextWord(m_DataIt, m_DataItEnd); while( m_DataIt != m_DataItEnd && !IsSpaceOrNewLine( *m_DataIt ) ) { - pBuffer[index] = *m_DataIt; - index++; + pBuffer[index] = *m_DataIt; + index++; if( index == length - 1 ) { break; } - ++m_DataIt; - } + ++m_DataIt; + } - ai_assert(index < length); - pBuffer[index] = '\0'; + ai_assert(index < length); + pBuffer[index] = '\0'; } // ------------------------------------------------------------------- // Copy the next line into a temporary buffer void ObjFileParser::copyNextLine(char *pBuffer, size_t length) { - size_t index = 0u; + size_t index = 0u; - // some OBJ files have line continuations using \ (such as in C++ et al) - bool continuation = false; - for (;m_DataIt != m_DataItEnd && index < length-1; ++m_DataIt) - { - const char c = *m_DataIt; - if (c == '\\') { - continuation = true; - continue; - } - - if (c == '\n' || c == '\r') { - if(continuation) { - pBuffer[ index++ ] = ' '; - continue; - } - break; - } + // some OBJ files have line continuations using \ (such as in C++ et al) + bool continuation = false; + for (;m_DataIt != m_DataItEnd && index < length-1; ++m_DataIt) + { + const char c = *m_DataIt; + if (c == '\\') { + continuation = true; + continue; + } + + if (c == '\n' || c == '\r') { + if(continuation) { + pBuffer[ index++ ] = ' '; + continue; + } + break; + } - continuation = false; - pBuffer[ index++ ] = c; - } - ai_assert(index < length); - pBuffer[ index ] = '\0'; + continuation = false; + pBuffer[ index++ ] = c; + } + ai_assert(index < length); + pBuffer[ index ] = '\0'; } // ------------------------------------------------------------------- @@ -268,391 +268,391 @@ void ObjFileParser::getVector( std::vector &point3d_array ) { // ------------------------------------------------------------------- // Get values for a new 3D vector instance void ObjFileParser::getVector3(std::vector &point3d_array) { - float x, y, z; - copyNextWord(m_buffer, BUFFERSIZE); - x = (float) fast_atof(m_buffer); - - copyNextWord(m_buffer, BUFFERSIZE); - y = (float) fast_atof(m_buffer); + float x, y, z; + copyNextWord(m_buffer, BUFFERSIZE); + x = (float) fast_atof(m_buffer); + + copyNextWord(m_buffer, BUFFERSIZE); + y = (float) fast_atof(m_buffer); copyNextWord( m_buffer, BUFFERSIZE ); z = ( float ) fast_atof( m_buffer ); - point3d_array.push_back( aiVector3D( x, y, z ) ); - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + point3d_array.push_back( aiVector3D( x, y, z ) ); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- // Get values for a new 2D vector instance void ObjFileParser::getVector2( std::vector &point2d_array ) { - float x, y; - copyNextWord(m_buffer, BUFFERSIZE); - x = (float) fast_atof(m_buffer); - - copyNextWord(m_buffer, BUFFERSIZE); - y = (float) fast_atof(m_buffer); + float x, y; + copyNextWord(m_buffer, BUFFERSIZE); + x = (float) fast_atof(m_buffer); + + copyNextWord(m_buffer, BUFFERSIZE); + y = (float) fast_atof(m_buffer); - point2d_array.push_back(aiVector2D(x, y)); + point2d_array.push_back(aiVector2D(x, y)); - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- // Get values for a new face instance void ObjFileParser::getFace(aiPrimitiveType type) { - copyNextLine(m_buffer, BUFFERSIZE); - if (m_DataIt == m_DataItEnd) - return; + copyNextLine(m_buffer, BUFFERSIZE); + if (m_DataIt == m_DataItEnd) + return; - char *pPtr = m_buffer; - char *pEnd = &pPtr[BUFFERSIZE]; - pPtr = getNextToken(pPtr, pEnd); - if (pPtr == pEnd || *pPtr == '\0') - return; + char *pPtr = m_buffer; + char *pEnd = &pPtr[BUFFERSIZE]; + pPtr = getNextToken(pPtr, pEnd); + if (pPtr == pEnd || *pPtr == '\0') + return; - std::vector *pIndices = new std::vector; - std::vector *pTexID = new std::vector; - std::vector *pNormalID = new std::vector; - bool hasNormal = false; + std::vector *pIndices = new std::vector; + std::vector *pTexID = new std::vector; + std::vector *pNormalID = new std::vector; + bool hasNormal = false; - const int vSize = m_pModel->m_Vertices.size(); - const int vtSize = m_pModel->m_TextureCoord.size(); - const int vnSize = m_pModel->m_Normals.size(); + const int vSize = m_pModel->m_Vertices.size(); + const int vtSize = m_pModel->m_TextureCoord.size(); + const int vnSize = m_pModel->m_Normals.size(); - const bool vt = (!m_pModel->m_TextureCoord.empty()); - const bool vn = (!m_pModel->m_Normals.empty()); - int iStep = 0, iPos = 0; - while (pPtr != pEnd) - { - iStep = 1; + const bool vt = (!m_pModel->m_TextureCoord.empty()); + const bool vn = (!m_pModel->m_Normals.empty()); + int iStep = 0, iPos = 0; + while (pPtr != pEnd) + { + iStep = 1; - if (IsLineEnd(*pPtr)) - break; + if (IsLineEnd(*pPtr)) + break; - if (*pPtr=='/' ) - { - if (type == aiPrimitiveType_POINT) { - DefaultLogger::get()->error("Obj: Separator unexpected in point statement"); - } - if (iPos == 0) - { - //if there are no texture coordinates in the file, but normals - if (!vt && vn) { - iPos = 1; - iStep++; - } - } - iPos++; - } + if (*pPtr=='/' ) + { + if (type == aiPrimitiveType_POINT) { + DefaultLogger::get()->error("Obj: Separator unexpected in point statement"); + } + if (iPos == 0) + { + //if there are no texture coordinates in the file, but normals + if (!vt && vn) { + iPos = 1; + iStep++; + } + } + iPos++; + } else if( IsSpaceOrNewLine( *pPtr ) ) - { - iPos = 0; - } - else - { - //OBJ USES 1 Base ARRAYS!!!! - const int iVal = atoi( pPtr ); + { + iPos = 0; + } + else + { + //OBJ USES 1 Base ARRAYS!!!! + const int iVal = atoi( pPtr ); - // increment iStep position based off of the sign and # of digits - int tmp = iVal; - if (iVal < 0) - ++iStep; - while ( ( tmp = tmp / 10 )!=0 ) - ++iStep; + // increment iStep position based off of the sign and # of digits + int tmp = iVal; + if (iVal < 0) + ++iStep; + while ( ( tmp = tmp / 10 )!=0 ) + ++iStep; - if ( iVal > 0 ) - { - // Store parsed index - if ( 0 == iPos ) - { - pIndices->push_back( iVal-1 ); - } - else if ( 1 == iPos ) - { - pTexID->push_back( iVal-1 ); - } - else if ( 2 == iPos ) - { - pNormalID->push_back( iVal-1 ); - hasNormal = true; - } - else - { - reportErrorTokenInFace(); - } - } - else if ( iVal < 0 ) - { - // Store relatively index - if ( 0 == iPos ) - { - pIndices->push_back( vSize + iVal ); - } - else if ( 1 == iPos ) - { - pTexID->push_back( vtSize + iVal ); - } - else if ( 2 == iPos ) - { - pNormalID->push_back( vnSize + iVal ); - hasNormal = true; - } - else - { - reportErrorTokenInFace(); - } - } - } - pPtr += iStep; - } + if ( iVal > 0 ) + { + // Store parsed index + if ( 0 == iPos ) + { + pIndices->push_back( iVal-1 ); + } + else if ( 1 == iPos ) + { + pTexID->push_back( iVal-1 ); + } + else if ( 2 == iPos ) + { + pNormalID->push_back( iVal-1 ); + hasNormal = true; + } + else + { + reportErrorTokenInFace(); + } + } + else if ( iVal < 0 ) + { + // Store relatively index + if ( 0 == iPos ) + { + pIndices->push_back( vSize + iVal ); + } + else if ( 1 == iPos ) + { + pTexID->push_back( vtSize + iVal ); + } + else if ( 2 == iPos ) + { + pNormalID->push_back( vnSize + iVal ); + hasNormal = true; + } + else + { + reportErrorTokenInFace(); + } + } + } + pPtr += iStep; + } - if ( pIndices->empty() ) - { - DefaultLogger::get()->error("Obj: Ignoring empty face"); - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); - return; - } + if ( pIndices->empty() ) + { + DefaultLogger::get()->error("Obj: Ignoring empty face"); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + return; + } - ObjFile::Face *face = new ObjFile::Face( pIndices, pNormalID, pTexID, type ); - - // Set active material, if one set - if (NULL != m_pModel->m_pCurrentMaterial) - face->m_pMaterial = m_pModel->m_pCurrentMaterial; - else - face->m_pMaterial = m_pModel->m_pDefaultMaterial; + ObjFile::Face *face = new ObjFile::Face( pIndices, pNormalID, pTexID, type ); + + // Set active material, if one set + if (NULL != m_pModel->m_pCurrentMaterial) + face->m_pMaterial = m_pModel->m_pCurrentMaterial; + else + face->m_pMaterial = m_pModel->m_pDefaultMaterial; - // Create a default object, if nothing is there - if ( NULL == m_pModel->m_pCurrent ) - createObject( "defaultobject" ); - - // Assign face to mesh - if ( NULL == m_pModel->m_pCurrentMesh ) - { - createMesh(); - } - - // Store the face - m_pModel->m_pCurrentMesh->m_Faces.push_back( face ); - m_pModel->m_pCurrentMesh->m_uiNumIndices += (unsigned int)face->m_pVertices->size(); - m_pModel->m_pCurrentMesh->m_uiUVCoordinates[ 0 ] += (unsigned int)face->m_pTexturCoords[0].size(); - if( !m_pModel->m_pCurrentMesh->m_hasNormals && hasNormal ) - { - m_pModel->m_pCurrentMesh->m_hasNormals = true; - } - // Skip the rest of the line - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + // Create a default object, if nothing is there + if ( NULL == m_pModel->m_pCurrent ) + createObject( "defaultobject" ); + + // Assign face to mesh + if ( NULL == m_pModel->m_pCurrentMesh ) + { + createMesh(); + } + + // Store the face + m_pModel->m_pCurrentMesh->m_Faces.push_back( face ); + m_pModel->m_pCurrentMesh->m_uiNumIndices += (unsigned int)face->m_pVertices->size(); + m_pModel->m_pCurrentMesh->m_uiUVCoordinates[ 0 ] += (unsigned int)face->m_pTexturCoords[0].size(); + if( !m_pModel->m_pCurrentMesh->m_hasNormals && hasNormal ) + { + m_pModel->m_pCurrentMesh->m_hasNormals = true; + } + // Skip the rest of the line + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- // Get values for a new material description void ObjFileParser::getMaterialDesc() { - // Each material request a new object. - // Sometimes the object is already created (see 'o' tag by example), but it is not initialized ! - // So, we create a new object only if the current on is already initialized ! - if (m_pModel->m_pCurrent != NULL && - ( m_pModel->m_pCurrent->m_Meshes.size() > 1 || - (m_pModel->m_pCurrent->m_Meshes.size() == 1 && m_pModel->m_Meshes[m_pModel->m_pCurrent->m_Meshes[0]]->m_Faces.size() != 0) ) - ) - m_pModel->m_pCurrent = NULL; + // Each material request a new object. + // Sometimes the object is already created (see 'o' tag by example), but it is not initialized ! + // So, we create a new object only if the current on is already initialized ! + if (m_pModel->m_pCurrent != NULL && + ( m_pModel->m_pCurrent->m_Meshes.size() > 1 || + (m_pModel->m_pCurrent->m_Meshes.size() == 1 && m_pModel->m_Meshes[m_pModel->m_pCurrent->m_Meshes[0]]->m_Faces.size() != 0) ) + ) + m_pModel->m_pCurrent = NULL; - // Get next data for material data - m_DataIt = getNextToken(m_DataIt, m_DataItEnd); - if (m_DataIt == m_DataItEnd) - return; + // Get next data for material data + m_DataIt = getNextToken(m_DataIt, m_DataItEnd); + if (m_DataIt == m_DataItEnd) + return; - char *pStart = &(*m_DataIt); + char *pStart = &(*m_DataIt); while( m_DataIt != m_DataItEnd && !IsSpaceOrNewLine( *m_DataIt ) ) { ++m_DataIt; } - // Get name - std::string strName(pStart, &(*m_DataIt)); - if ( strName.empty()) - return; + // Get name + std::string strName(pStart, &(*m_DataIt)); + if ( strName.empty()) + return; - // Search for material - std::map::iterator it = m_pModel->m_MaterialMap.find( strName ); - if ( it == m_pModel->m_MaterialMap.end() ) - { - // Not found, use default material - m_pModel->m_pCurrentMaterial = m_pModel->m_pDefaultMaterial; - DefaultLogger::get()->error("OBJ: failed to locate material " + strName + ", skipping"); - } - else - { - // Found, using detected material - m_pModel->m_pCurrentMaterial = (*it).second; - if ( needsNewMesh( strName )) - { - createMesh(); - } - m_pModel->m_pCurrentMesh->m_uiMaterialIndex = getMaterialIndex( strName ); - } + // Search for material + std::map::iterator it = m_pModel->m_MaterialMap.find( strName ); + if ( it == m_pModel->m_MaterialMap.end() ) + { + // Not found, use default material + m_pModel->m_pCurrentMaterial = m_pModel->m_pDefaultMaterial; + DefaultLogger::get()->error("OBJ: failed to locate material " + strName + ", skipping"); + } + else + { + // Found, using detected material + m_pModel->m_pCurrentMaterial = (*it).second; + if ( needsNewMesh( strName )) + { + createMesh(); + } + m_pModel->m_pCurrentMesh->m_uiMaterialIndex = getMaterialIndex( strName ); + } - // Skip rest of line - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + // Skip rest of line + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- // Get a comment, values will be skipped void ObjFileParser::getComment() { - while (m_DataIt != m_DataItEnd) - { - if ( '\n' == (*m_DataIt)) - { - ++m_DataIt; - break; - } - else - { - ++m_DataIt; - } - } + while (m_DataIt != m_DataItEnd) + { + if ( '\n' == (*m_DataIt)) + { + ++m_DataIt; + break; + } + else + { + ++m_DataIt; + } + } } // ------------------------------------------------------------------- // Get material library from file. void ObjFileParser::getMaterialLib() { - // Translate tuple - m_DataIt = getNextToken(m_DataIt, m_DataItEnd); + // Translate tuple + m_DataIt = getNextToken(m_DataIt, m_DataItEnd); if( m_DataIt == m_DataItEnd ) { return; } - - char *pStart = &(*m_DataIt); + + char *pStart = &(*m_DataIt); while( m_DataIt != m_DataItEnd && !IsLineEnd( *m_DataIt ) ) { ++m_DataIt; } - // Check for existence - const std::string strMatName(pStart, &(*m_DataIt)); - IOStream *pFile = m_pIO->Open(strMatName); + // Check for existence + const std::string strMatName(pStart, &(*m_DataIt)); + IOStream *pFile = m_pIO->Open(strMatName); - if (!pFile ) - { - DefaultLogger::get()->error("OBJ: Unable to locate material file " + strMatName); - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); - return; - } + if (!pFile ) + { + DefaultLogger::get()->error("OBJ: Unable to locate material file " + strMatName); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + return; + } - // Import material library data from file - std::vector buffer; - BaseImporter::TextFileToBuffer(pFile,buffer); - m_pIO->Close( pFile ); + // Import material library data from file + std::vector buffer; + BaseImporter::TextFileToBuffer(pFile,buffer); + m_pIO->Close( pFile ); - // Importing the material library - ObjFileMtlImporter mtlImporter( buffer, strMatName, m_pModel ); + // Importing the material library + ObjFileMtlImporter mtlImporter( buffer, strMatName, m_pModel ); } // ------------------------------------------------------------------- // Set a new material definition as the current material. void ObjFileParser::getNewMaterial() { - m_DataIt = getNextToken(m_DataIt, m_DataItEnd); - m_DataIt = getNextWord(m_DataIt, m_DataItEnd); + m_DataIt = getNextToken(m_DataIt, m_DataItEnd); + m_DataIt = getNextWord(m_DataIt, m_DataItEnd); if( m_DataIt == m_DataItEnd ) { return; } - char *pStart = &(*m_DataIt); - std::string strMat( pStart, *m_DataIt ); + char *pStart = &(*m_DataIt); + std::string strMat( pStart, *m_DataIt ); while( m_DataIt != m_DataItEnd && IsSpaceOrNewLine( *m_DataIt ) ) { ++m_DataIt; } - std::map::iterator it = m_pModel->m_MaterialMap.find( strMat ); - if ( it == m_pModel->m_MaterialMap.end() ) - { - // Show a warning, if material was not found - DefaultLogger::get()->warn("OBJ: Unsupported material requested: " + strMat); - m_pModel->m_pCurrentMaterial = m_pModel->m_pDefaultMaterial; - } - else - { - // Set new material - if ( needsNewMesh( strMat ) ) - { - createMesh(); - } - m_pModel->m_pCurrentMesh->m_uiMaterialIndex = getMaterialIndex( strMat ); - } + std::map::iterator it = m_pModel->m_MaterialMap.find( strMat ); + if ( it == m_pModel->m_MaterialMap.end() ) + { + // Show a warning, if material was not found + DefaultLogger::get()->warn("OBJ: Unsupported material requested: " + strMat); + m_pModel->m_pCurrentMaterial = m_pModel->m_pDefaultMaterial; + } + else + { + // Set new material + if ( needsNewMesh( strMat ) ) + { + createMesh(); + } + m_pModel->m_pCurrentMesh->m_uiMaterialIndex = getMaterialIndex( strMat ); + } - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- int ObjFileParser::getMaterialIndex( const std::string &strMaterialName ) { - int mat_index = -1; + int mat_index = -1; if( strMaterialName.empty() ) { return mat_index; } - for (size_t index = 0; index < m_pModel->m_MaterialLib.size(); ++index) - { - if ( strMaterialName == m_pModel->m_MaterialLib[ index ]) - { - mat_index = (int)index; - break; - } - } - return mat_index; + for (size_t index = 0; index < m_pModel->m_MaterialLib.size(); ++index) + { + if ( strMaterialName == m_pModel->m_MaterialLib[ index ]) + { + mat_index = (int)index; + break; + } + } + return mat_index; } // ------------------------------------------------------------------- // Getter for a group name. void ObjFileParser::getGroupName() { - std::string strGroupName; + std::string strGroupName; - m_DataIt = getName(m_DataIt, m_DataItEnd, strGroupName); + m_DataIt = getName(m_DataIt, m_DataItEnd, strGroupName); if( isEndOfBuffer( m_DataIt, m_DataItEnd ) ) { return; } - // Change active group, if necessary - if ( m_pModel->m_strActiveGroup != strGroupName ) - { - // Search for already existing entry - ObjFile::Model::ConstGroupMapIt it = m_pModel->m_Groups.find(strGroupName); - - // We are mapping groups into the object structure - createObject( strGroupName ); - - // New group name, creating a new entry - if (it == m_pModel->m_Groups.end()) - { - std::vector *pFaceIDArray = new std::vector; - m_pModel->m_Groups[ strGroupName ] = pFaceIDArray; - m_pModel->m_pGroupFaceIDs = (pFaceIDArray); - } - else - { - m_pModel->m_pGroupFaceIDs = (*it).second; - } - m_pModel->m_strActiveGroup = strGroupName; - } - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + // Change active group, if necessary + if ( m_pModel->m_strActiveGroup != strGroupName ) + { + // Search for already existing entry + ObjFile::Model::ConstGroupMapIt it = m_pModel->m_Groups.find(strGroupName); + + // We are mapping groups into the object structure + createObject( strGroupName ); + + // New group name, creating a new entry + if (it == m_pModel->m_Groups.end()) + { + std::vector *pFaceIDArray = new std::vector; + m_pModel->m_Groups[ strGroupName ] = pFaceIDArray; + m_pModel->m_pGroupFaceIDs = (pFaceIDArray); + } + else + { + m_pModel->m_pGroupFaceIDs = (*it).second; + } + m_pModel->m_strActiveGroup = strGroupName; + } + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- // Not supported void ObjFileParser::getGroupNumber() { - // Not used + // Not used - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- // Not supported void ObjFileParser::getGroupNumberAndResolution() { - // Not used + // Not used - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- @@ -660,105 +660,105 @@ void ObjFileParser::getGroupNumberAndResolution() // identify it. void ObjFileParser::getObjectName() { - m_DataIt = getNextToken(m_DataIt, m_DataItEnd); + m_DataIt = getNextToken(m_DataIt, m_DataItEnd); if( m_DataIt == m_DataItEnd ) { return; } - char *pStart = &(*m_DataIt); + char *pStart = &(*m_DataIt); while( m_DataIt != m_DataItEnd && !IsSpaceOrNewLine( *m_DataIt ) ) { ++m_DataIt; } - std::string strObjectName(pStart, &(*m_DataIt)); - if (!strObjectName.empty()) - { - // Reset current object - m_pModel->m_pCurrent = NULL; - - // Search for actual object - for (std::vector::const_iterator it = m_pModel->m_Objects.begin(); - it != m_pModel->m_Objects.end(); - ++it) - { - if ((*it)->m_strObjName == strObjectName) - { - m_pModel->m_pCurrent = *it; - break; - } - } + std::string strObjectName(pStart, &(*m_DataIt)); + if (!strObjectName.empty()) + { + // Reset current object + m_pModel->m_pCurrent = NULL; + + // Search for actual object + for (std::vector::const_iterator it = m_pModel->m_Objects.begin(); + it != m_pModel->m_Objects.end(); + ++it) + { + if ((*it)->m_strObjName == strObjectName) + { + m_pModel->m_pCurrent = *it; + break; + } + } - // Allocate a new object, if current one was not found before + // Allocate a new object, if current one was not found before if( NULL == m_pModel->m_pCurrent ) { createObject( strObjectName ); } - } - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + } + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } // ------------------------------------------------------------------- // Creates a new object instance void ObjFileParser::createObject(const std::string &strObjectName) { - ai_assert( NULL != m_pModel ); - //ai_assert( !strObjectName.empty() ); + ai_assert( NULL != m_pModel ); + //ai_assert( !strObjectName.empty() ); - m_pModel->m_pCurrent = new ObjFile::Object; - m_pModel->m_pCurrent->m_strObjName = strObjectName; - m_pModel->m_Objects.push_back( m_pModel->m_pCurrent ); - - createMesh(); + m_pModel->m_pCurrent = new ObjFile::Object; + m_pModel->m_pCurrent->m_strObjName = strObjectName; + m_pModel->m_Objects.push_back( m_pModel->m_pCurrent ); + + createMesh(); - if( m_pModel->m_pCurrentMaterial ) - { - m_pModel->m_pCurrentMesh->m_uiMaterialIndex = - getMaterialIndex( m_pModel->m_pCurrentMaterial->MaterialName.data ); - m_pModel->m_pCurrentMesh->m_pMaterial = m_pModel->m_pCurrentMaterial; - } + if( m_pModel->m_pCurrentMaterial ) + { + m_pModel->m_pCurrentMesh->m_uiMaterialIndex = + getMaterialIndex( m_pModel->m_pCurrentMaterial->MaterialName.data ); + m_pModel->m_pCurrentMesh->m_pMaterial = m_pModel->m_pCurrentMaterial; + } } // ------------------------------------------------------------------- // Creates a new mesh void ObjFileParser::createMesh() { - ai_assert( NULL != m_pModel ); - m_pModel->m_pCurrentMesh = new ObjFile::Mesh; - m_pModel->m_Meshes.push_back( m_pModel->m_pCurrentMesh ); - unsigned int meshId = m_pModel->m_Meshes.size()-1; - if ( NULL != m_pModel->m_pCurrent ) - { - m_pModel->m_pCurrent->m_Meshes.push_back( meshId ); - } - else - { - DefaultLogger::get()->error("OBJ: No object detected to attach a new mesh instance."); - } + ai_assert( NULL != m_pModel ); + m_pModel->m_pCurrentMesh = new ObjFile::Mesh; + m_pModel->m_Meshes.push_back( m_pModel->m_pCurrentMesh ); + unsigned int meshId = m_pModel->m_Meshes.size()-1; + if ( NULL != m_pModel->m_pCurrent ) + { + m_pModel->m_pCurrent->m_Meshes.push_back( meshId ); + } + else + { + DefaultLogger::get()->error("OBJ: No object detected to attach a new mesh instance."); + } } // ------------------------------------------------------------------- // Returns true, if a new mesh must be created. bool ObjFileParser::needsNewMesh( const std::string &rMaterialName ) { - if(m_pModel->m_pCurrentMesh == 0) - { - // No mesh data yet - return true; - } - bool newMat = false; - int matIdx = getMaterialIndex( rMaterialName ); - int curMatIdx = m_pModel->m_pCurrentMesh->m_uiMaterialIndex; - if ( curMatIdx != int(ObjFile::Mesh::NoMaterial) || curMatIdx != matIdx ) - { - // New material -> only one material per mesh, so we need to create a new - // material - newMat = true; - } - return newMat; + if(m_pModel->m_pCurrentMesh == 0) + { + // No mesh data yet + return true; + } + bool newMat = false; + int matIdx = getMaterialIndex( rMaterialName ); + int curMatIdx = m_pModel->m_pCurrentMesh->m_uiMaterialIndex; + if ( curMatIdx != int(ObjFile::Mesh::NoMaterial) || curMatIdx != matIdx ) + { + // New material -> only one material per mesh, so we need to create a new + // material + newMat = true; + } + return newMat; } // ------------------------------------------------------------------- // Shows an error in parsing process. void ObjFileParser::reportErrorTokenInFace() { - m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); - DefaultLogger::get()->error("OBJ: Not supported token in face description detected"); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); + DefaultLogger::get()->error("OBJ: Not supported token in face description detected"); } // ------------------------------------------------------------------- diff --git a/code/ParsingUtils.h b/code/ParsingUtils.h index 25495fd51..ce15f790f 100644 --- a/code/ParsingUtils.h +++ b/code/ParsingUtils.h @@ -64,7 +64,7 @@ static const unsigned int BufferSize = 4096; template AI_FORCE_INLINE char_t ToLower( char_t in) { - return (in >= (char_t)'A' && in <= (char_t)'Z') ? (char_t)(in+0x20) : in; + return (in >= (char_t)'A' && in <= (char_t)'Z') ? (char_t)(in+0x20) : in; } // --------------------------------------------------------------------------------- @@ -77,35 +77,35 @@ AI_FORCE_INLINE char_t ToUpper( char_t in) { template AI_FORCE_INLINE bool IsUpper( char_t in) { - return (in >= (char_t)'A' && in <= (char_t)'Z'); + return (in >= (char_t)'A' && in <= (char_t)'Z'); } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool IsLower( char_t in) { - return (in >= (char_t)'a' && in <= (char_t)'z'); + return (in >= (char_t)'a' && in <= (char_t)'z'); } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool IsSpace( char_t in) { - return (in == (char_t)' ' || in == (char_t)'\t'); + return (in == (char_t)' ' || in == (char_t)'\t'); } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool IsLineEnd( char_t in) { - return (in==(char_t)'\r'||in==(char_t)'\n'||in==(char_t)'\0'||in==(char_t)'\f'); + return (in==(char_t)'\r'||in==(char_t)'\n'||in==(char_t)'\0'||in==(char_t)'\f'); } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool IsSpaceOrNewLine( char_t in) { - return IsSpace(in) || IsLineEnd(in); + return IsSpace(in) || IsLineEnd(in); } // --------------------------------------------------------------------------------- @@ -115,15 +115,15 @@ AI_FORCE_INLINE bool SkipSpaces( const char_t* in, const char_t** out) while( *in == ( char_t )' ' || *in == ( char_t )'\t' ) { ++in; } - *out = in; - return !IsLineEnd(*in); + *out = in; + return !IsLineEnd(*in); } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool SkipSpaces( const char_t** inout) { - return SkipSpaces(*inout,inout); + return SkipSpaces(*inout,inout); } // --------------------------------------------------------------------------------- @@ -134,19 +134,19 @@ AI_FORCE_INLINE bool SkipLine( const char_t* in, const char_t** out) ++in; } - // files are opened in binary mode. Ergo there are both NL and CR + // files are opened in binary mode. Ergo there are both NL and CR while( *in == ( char_t )'\r' || *in == ( char_t )'\n' ) { ++in; } - *out = in; - return *in != (char_t)'\0'; + *out = in; + return *in != (char_t)'\0'; } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool SkipLine( const char_t** inout) { - return SkipLine(*inout,inout); + return SkipLine(*inout,inout); } // --------------------------------------------------------------------------------- @@ -156,15 +156,15 @@ AI_FORCE_INLINE bool SkipSpacesAndLineEnd( const char_t* in, const char_t** out) while( *in == ( char_t )' ' || *in == ( char_t )'\t' || *in == ( char_t )'\r' || *in == ( char_t )'\n' ) { ++in; } - *out = in; - return *in != '\0'; + *out = in; + return *in != '\0'; } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool SkipSpacesAndLineEnd( const char_t** inout) { - return SkipSpacesAndLineEnd(*inout,inout); + return SkipSpacesAndLineEnd(*inout,inout); } // --------------------------------------------------------------------------------- @@ -175,12 +175,12 @@ AI_FORCE_INLINE bool GetNextLine( const char_t*& buffer, char_t out[ BufferSize return false; } - char* _out = out; + char* _out = out; char* const end = _out + BufferSize; while( !IsLineEnd( *buffer ) && _out < end ) { *_out++ = *buffer++; } - *_out = (char_t)'\0'; + *_out = (char_t)'\0'; while( IsLineEnd( *buffer ) && '\0' != *buffer ) { ++buffer; @@ -193,19 +193,19 @@ AI_FORCE_INLINE bool GetNextLine( const char_t*& buffer, char_t out[ BufferSize template AI_FORCE_INLINE bool IsNumeric( char_t in) { - return ( in >= '0' && in <= '9' ) || '-' == in || '+' == in; + return ( in >= '0' && in <= '9' ) || '-' == in || '+' == in; } // --------------------------------------------------------------------------------- template AI_FORCE_INLINE bool TokenMatch(char_t*& in, const char* token, unsigned int len) { - if (!::strncmp(token,in,len) && IsSpaceOrNewLine(in[len])) { - in += len+1; - return true; - } + if (!::strncmp(token,in,len) && IsSpaceOrNewLine(in[len])) { + in += len+1; + return true; + } - return false; + return false; } // --------------------------------------------------------------------------------- /** @brief Case-ignoring version of TokenMatch @@ -215,25 +215,25 @@ AI_FORCE_INLINE bool TokenMatch(char_t*& in, const char* token, unsigned int len */ AI_FORCE_INLINE bool TokenMatchI(const char*& in, const char* token, unsigned int len) { - if (!ASSIMP_strincmp(token,in,len) && IsSpaceOrNewLine(in[len])) { - in += len+1; - return true; - } - return false; + if (!ASSIMP_strincmp(token,in,len) && IsSpaceOrNewLine(in[len])) { + in += len+1; + return true; + } + return false; } // --------------------------------------------------------------------------------- AI_FORCE_INLINE void SkipToken(const char*& in) { - SkipSpaces(&in); - while (!IsSpaceOrNewLine(*in))++in; + SkipSpaces(&in); + while (!IsSpaceOrNewLine(*in))++in; } // --------------------------------------------------------------------------------- AI_FORCE_INLINE std::string GetNextToken(const char*& in) { - SkipSpacesAndLineEnd(&in); - const char* cur = in; - while (!IsSpaceOrNewLine(*in))++in; - return std::string(cur,(size_t)(in-cur)); + SkipSpacesAndLineEnd(&in); + const char* cur = in; + while (!IsSpaceOrNewLine(*in))++in; + return std::string(cur,(size_t)(in-cur)); } // --------------------------------------------------------------------------------- diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h index 9e978ade2..179a51326 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h @@ -62,7 +62,7 @@ bool isSpace( const T in ) { template inline bool isNewLine( const T in ) { - return ( '\n' == in ); + return ( '\n' == in || ( '\r' == in ) ); } template From f5f0c9f7cf15ca6ecabc8e6ec82346191f204b00 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 14 Feb 2015 16:11:46 +0100 Subject: [PATCH 026/166] update openddl-parser. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/Value.cpp | 16 +++++++++++++++- .../openddlparser/include/openddlparser/Value.h | 4 ++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/contrib/openddlparser/code/Value.cpp b/contrib/openddlparser/code/Value.cpp index 802e8dd61..5e88d6572 100644 --- a/contrib/openddlparser/code/Value.cpp +++ b/contrib/openddlparser/code/Value.cpp @@ -21,6 +21,7 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -----------------------------------------------------------------------------------------------*/ #include + #include #include @@ -109,6 +110,15 @@ double Value::getDouble() const { return v; } +void Value::setString( const std::string &str ) { + assert( ddl_string == m_type ); + ::memcpy( m_data, str.c_str(), str.size() ); + m_data[ str.size() ] = '\0'; +} +const char *Value::getString() const { + return (const char*) m_data; +} + void Value::dump() { switch( m_type ) { case ddl_none: @@ -223,7 +233,11 @@ Value *ValueAllocator::allocPrimData( Value::ValueType type, size_t len ) { } if( data->m_size ) { - data->m_size *= len; + size_t len1( len ); + if( Value::ddl_string == type ) { + len1++; + } + data->m_size *= len1; data->m_data = new unsigned char[ data->m_size ]; } diff --git a/contrib/openddlparser/include/openddlparser/Value.h b/contrib/openddlparser/include/openddlparser/Value.h index 0d719f994..48eb6e771 100644 --- a/contrib/openddlparser/include/openddlparser/Value.h +++ b/contrib/openddlparser/include/openddlparser/Value.h @@ -26,6 +26,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include +#include + BEGIN_ODDLPARSER_NS ///------------------------------------------------------------------------------------------------ @@ -73,6 +75,8 @@ public: float getFloat() const; void setDouble( double value ); double getDouble() const; + void setString( const std::string &str ); + const char *getString() const; void dump(); void setNext( Value *next ); Value *getNext() const; From 029286891799b1d306e59408903247b69b6dfc52 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 14 Feb 2015 16:12:09 +0100 Subject: [PATCH 027/166] add geomentry node handling. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 41 +++++++++++++++----- code/OpenGEXImporter.h | 15 +++++-- contrib/openddlparser/code/OpenDDLParser.cpp | 2 +- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 83bde51fe..0b940d39e 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -164,7 +164,8 @@ USE_ODDLPARSER_NS //------------------------------------------------------------------------------------------------ OpenGEXImporter::OpenGEXImporter() -: m_ctx( NULL ) { +: m_ctx( NULL ) +, m_currentNode( NULL ) { // empty } @@ -202,7 +203,7 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce bool success( myParser.parse() ); if( success ) { m_ctx = myParser.getContext(); - handleNodes( m_ctx->m_root ); + handleNodes( m_ctx->m_root, pScene ); } } @@ -219,7 +220,7 @@ void OpenGEXImporter::SetupProperties( const Importer *pImp ) { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleNodes( DDLNode *node ) { +void OpenGEXImporter::handleNodes( DDLNode *node, aiScene *pScene ) { if( NULL == node ) { return; } @@ -229,14 +230,20 @@ void OpenGEXImporter::handleNodes( DDLNode *node ) { Grammar::TokenType tokenType( Grammar::matchTokenType( ( *it )->getType().c_str() ) ); switch( tokenType ) { case Grammar::MetricToken: - importMetric( *it ); + handleMetricNode( *it, pScene ); break; case Grammar::NameToken: + handleNameNode( *it, pScene ); + break; + case Grammar::ObjectRefToken: case Grammar::MaterialRefToken: case Grammar::MetricKeyToken: case Grammar::GeometryNodeToken: + handleGeometryNode( *it, pScene ); + break; + case Grammar::GeometryObjectToken: case Grammar::TransformToken: case Grammar::MeshToken: @@ -252,7 +259,7 @@ void OpenGEXImporter::handleNodes( DDLNode *node ) { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::importMetric( DDLNode *node ) { +void OpenGEXImporter::handleMetricNode( DDLNode *node, aiScene *pScene ) { if( NULL == node || NULL == m_ctx ) { return; } @@ -267,13 +274,15 @@ void OpenGEXImporter::importMetric( DDLNode *node ) { if( Value::ddl_string == prop->m_primData->m_type ) { std::string valName( (char*) prop->m_primData->m_data ); int type( Grammar::isValidMetricType( valName.c_str() ) ); - if( -1 != type ) { + if( Grammar::NoneType != type ) { Value *val( node->getValue() ); if( NULL != val ) { if( Value::ddl_float == val->m_type ) { m_metrics[ type ].m_floatValue = val->getFloat(); } else if( Value::ddl_int32 == val->m_type ) { m_metrics[ type ].m_floatValue = val->getInt32(); + } else if( Value::ddl_string == val->m_type ) { + m_metrics[type].m_stringValue = std::string( val->getString() ); } else { throw DeadlyImportError( "OpenGEX: invalid data type for Metric node." ); } @@ -286,13 +295,27 @@ void OpenGEXImporter::importMetric( DDLNode *node ) { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::ParseGeoObject() { +void OpenGEXImporter::handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + if( NULL == m_currentNode ) { + throw DeadlyImportError( "No parent node for name." ); + return; + } + Value *val( node->getValue() ); + if( NULL != val ) { + if( Value::ddl_string != val->m_type ) { + throw DeadlyImportError( "OpenGEX: invalid data type for value in node name." ); + } + + std::string name( val->getString() ); + m_currentNode->mName.Set( name.c_str() ); + } } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::ParseMaterial() { - +void OpenGEXImporter::handleGeometryNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + m_currentNode = new aiNode; + handleNodes( node, pScene ); } //------------------------------------------------------------------------------------------------ diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 9e8b06ff3..2bea23b45 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -64,6 +64,12 @@ struct MetricInfo { std::string m_stringValue; float m_floatValue; + + MetricInfo() + : m_stringValue( "" ) + , m_floatValue( 0.0f ) { + // empty + } }; /** @brief This class is used to implement the OpenGEX importer @@ -91,14 +97,15 @@ public: virtual void SetupProperties( const Importer *pImp ); protected: - void handleNodes( ODDLParser::DDLNode *node ); - void importMetric( ODDLParser::DDLNode *node ); - void ParseGeoObject(); - void ParseMaterial(); + void handleNodes( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleMetricNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleGeometryNode( ODDLParser::DDLNode *node, aiScene *pScene ); private: ODDLParser::Context *m_ctx; MetricInfo m_metrics[ MetricInfo::Max ]; + aiNode *m_currentNode; }; } // Namespace OpenGEX diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index b869aa2a1..c85f498de 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -669,7 +669,7 @@ char *OpenDDLParser::parseStringLiteral( char *in, char *end, Value **stringData len++; } - *stringData = ValueAllocator::allocPrimData( Value::ddl_string, len + 1 ); + *stringData = ValueAllocator::allocPrimData( Value::ddl_string, len ); ::strncpy( ( char* ) ( *stringData )->m_data, start, len ); ( *stringData )->m_data[len] = '\0'; in++; From aae0f7e7b1bb5eef5db518c1a1f250fde79708c1 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Feb 2015 22:12:19 +0100 Subject: [PATCH 028/166] 3DSExporter: export materials first, then meshes. Our own importer requires this. --- code/3DSExporter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/3DSExporter.cpp b/code/3DSExporter.cpp index 8ad367058..de47bc064 100644 --- a/code/3DSExporter.cpp +++ b/code/3DSExporter.cpp @@ -188,8 +188,8 @@ Discreet3DSExporter:: Discreet3DSExporter(boost::shared_ptr outfile, c { ChunkWriter chunk(writer, Discreet3DS::CHUNK_OBJMESH); - WriteMeshes(); WriteMaterials(); + WriteMeshes(); { ChunkWriter chunk(writer, Discreet3DS::CHUNK_MASTER_SCALE); From ce1302cd716194255d51c01237eaa429d9acbb51 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Feb 2015 22:20:34 +0100 Subject: [PATCH 029/166] Fix VC12 warning "empty but controlled statement found". --- code/ColladaParser.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp index 9e68c9332..353c50812 100644 --- a/code/ColladaParser.cpp +++ b/code/ColladaParser.cpp @@ -1950,9 +1950,11 @@ void ColladaParser::ReadIndexData( Mesh* pMesh) } } - // small sanity check - if (primType != Prim_TriFans && primType != Prim_TriStrips) - ai_assert(actualPrimitives == numPrimitives); +#ifdef ASSIMP_BUILD_DEBUG + if (primType != Prim_TriFans && primType != Prim_TriStrips) { + ai_assert(actualPrimitives == numPrimitives) + } +#endif // only when we're done reading all

tags (and thus know the final vertex count) can we commit the submesh subgroup.mNumFaces = actualPrimitives; From 51b790c482075c370a1f59ad031767703e976b2c Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Feb 2015 22:25:04 +0100 Subject: [PATCH 030/166] ColladaLoader: format. --- code/ColladaLoader.cpp | 390 ++++++++++++++++++++--------------------- 1 file changed, 195 insertions(+), 195 deletions(-) diff --git a/code/ColladaLoader.cpp b/code/ColladaLoader.cpp index 5771bc7af..2f3942689 100644 --- a/code/ColladaLoader.cpp +++ b/code/ColladaLoader.cpp @@ -73,7 +73,7 @@ static const aiImporterDesc desc = { // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer ColladaLoader::ColladaLoader() -: noSkeletonMesh(), ignoreUpDirection(false), mNodeNameCounter() + : noSkeletonMesh(), ignoreUpDirection(false), mNodeNameCounter() {} // ------------------------------------------------------------------------------------------------ @@ -87,16 +87,16 @@ bool ColladaLoader::CanRead( const std::string& pFile, IOSystem* pIOHandler, boo { // check file extension std::string extension = GetExtension(pFile); - + if( extension == "dae") return true; // XML - too generic, we need to open the file and search for typical keywords if( extension == "xml" || !extension.length() || checkSig) { /* If CanRead() is called in order to check whether we - * support a specific file extension in general pIOHandler - * might be NULL and it's our duty to return true here. - */ + * support a specific file extension in general pIOHandler + * might be NULL and it's our duty to return true here. + */ if (!pIOHandler)return true; const char* tokens[] = {"collada"}; return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); @@ -157,26 +157,26 @@ void ColladaLoader::InternReadFile( const std::string& pFile, aiScene* pScene, I // ... then fill the materials with the now adjusted settings FillMaterials(parser, pScene); - // Apply unitsize scale calculation - pScene->mRootNode->mTransformation *= aiMatrix4x4(parser.mUnitSize, 0, 0, 0, - 0, parser.mUnitSize, 0, 0, - 0, 0, parser.mUnitSize, 0, - 0, 0, 0, 1); - if( !ignoreUpDirection ) { - // Convert to Y_UP, if different orientation + // Apply unitsize scale calculation + pScene->mRootNode->mTransformation *= aiMatrix4x4(parser.mUnitSize, 0, 0, 0, + 0, parser.mUnitSize, 0, 0, + 0, 0, parser.mUnitSize, 0, + 0, 0, 0, 1); + if( !ignoreUpDirection ) { + // Convert to Y_UP, if different orientation if( parser.mUpDirection == ColladaParser::UP_X) pScene->mRootNode->mTransformation *= aiMatrix4x4( - 0, -1, 0, 0, - 1, 0, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1); + 0, -1, 0, 0, + 1, 0, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); else if( parser.mUpDirection == ColladaParser::UP_Z) pScene->mRootNode->mTransformation *= aiMatrix4x4( - 1, 0, 0, 0, - 0, 0, 1, 0, - 0, -1, 0, 0, - 0, 0, 0, 1); - } + 1, 0, 0, 0, + 0, 0, 1, 0, + 0, -1, 0, 0, + 0, 0, 0, 1); + } // store all meshes StoreSceneMeshes( pScene); @@ -195,7 +195,7 @@ void ColladaLoader::InternReadFile( const std::string& pFile, aiScene* pScene, I // If no meshes have been loaded, it's probably just an animated skeleton. if (!pScene->mNumMeshes) { - + if (!noSkeletonMesh) { SkeletonMeshBuilder hero(pScene); } @@ -251,14 +251,14 @@ aiNode* ColladaLoader::BuildHierarchy( const ColladaParser& pParser, const Colla // ------------------------------------------------------------------------------------------------ // Resolve node instances void ColladaLoader::ResolveNodeInstances( const ColladaParser& pParser, const Collada::Node* pNode, - std::vector& resolved) + std::vector& resolved) { // reserve enough storage resolved.reserve(pNode->mNodeInstances.size()); // ... and iterate through all nodes to be instanced as children of pNode for (std::vector::const_iterator it = pNode->mNodeInstances.begin(), - end = pNode->mNodeInstances.end(); it != end; ++it) + end = pNode->mNodeInstances.end(); it != end; ++it) { // find the corresponding node in the library const ColladaParser::NodeLibrary::const_iterator itt = pParser.mNodeLibrary.find((*it).mNode); @@ -272,7 +272,7 @@ void ColladaLoader::ResolveNodeInstances( const ColladaParser& pParser, const Co } if (!nd) DefaultLogger::get()->error("Collada: Unable to resolve reference to instanced node " + (*it).mNode); - + else { // attach this node to the list of children resolved.push_back(nd); @@ -283,7 +283,7 @@ void ColladaLoader::ResolveNodeInstances( const ColladaParser& pParser, const Co // ------------------------------------------------------------------------------------------------ // Resolve UV channels void ColladaLoader::ApplyVertexToEffectSemanticMapping(Collada::Sampler& sampler, - const Collada::SemanticMappingTable& table) + const Collada::SemanticMappingTable& table) { std::map::const_iterator it = table.mMap.find(sampler.mUVChannel); if (it != table.mMap.end()) { @@ -308,7 +308,7 @@ void ColladaLoader::BuildLightsForNode( const ColladaParser& pParser, const Coll continue; } const Collada::Light* srcLight = &srcLightIt->second; - + // now fill our ai data structure aiLight* out = new aiLight(); out->mName = pTarget->mName; @@ -326,7 +326,7 @@ void ColladaLoader::BuildLightsForNode( const ColladaParser& pParser, const Coll // convert falloff angle and falloff exponent in our representation, if given if (out->mType == aiLightSource_SPOT) { - + out->mAngleInnerCone = AI_DEG_TO_RAD( srcLight->mFalloffAngle ); // ... some extension magic. @@ -387,7 +387,7 @@ void ColladaLoader::BuildCamerasForNode( const ColladaParser& pParser, const Col // ... but for the rest some values are optional // and we need to compute the others in any combination. - if (srcCamera->mAspect != 10e10f) + if (srcCamera->mAspect != 10e10f) out->mAspect = srcCamera->mAspect; if (srcCamera->mHorFov != 10e10f) { @@ -395,12 +395,12 @@ void ColladaLoader::BuildCamerasForNode( const ColladaParser& pParser, const Col if (srcCamera->mVerFov != 10e10f && srcCamera->mAspect == 10e10f) { out->mAspect = tan(AI_DEG_TO_RAD(srcCamera->mHorFov)) / - tan(AI_DEG_TO_RAD(srcCamera->mVerFov)); + tan(AI_DEG_TO_RAD(srcCamera->mVerFov)); } } else if (srcCamera->mAspect != 10e10f && srcCamera->mVerFov != 10e10f) { out->mHorizontalFOV = 2.0f * AI_RAD_TO_DEG(atan(srcCamera->mAspect * - tan(AI_DEG_TO_RAD(srcCamera->mVerFov) * 0.5f))); + tan(AI_DEG_TO_RAD(srcCamera->mVerFov) * 0.5f))); } // Collada uses degrees, we use radians @@ -518,11 +518,11 @@ void ColladaLoader::BuildMeshesForNode( const ColladaParser& pParser, const Coll // assign the material index dstMesh->mMaterialIndex = matIdx; - if(dstMesh->mName.length == 0) - { - dstMesh->mName = mid.mMeshOrController; - } - } + if(dstMesh->mName.length == 0) + { + dstMesh->mName = mid.mMeshOrController; + } + } } } @@ -538,11 +538,11 @@ void ColladaLoader::BuildMeshesForNode( const ColladaParser& pParser, const Coll // ------------------------------------------------------------------------------------------------ // Creates a mesh for the given ColladaMesh face subset and returns the newly created mesh aiMesh* ColladaLoader::CreateMesh( const ColladaParser& pParser, const Collada::Mesh* pSrcMesh, const Collada::SubMesh& pSubMesh, - const Collada::Controller* pSrcController, size_t pStartVertex, size_t pStartFace) + const Collada::Controller* pSrcController, size_t pStartVertex, size_t pStartFace) { aiMesh* dstMesh = new aiMesh; - - dstMesh->mName = pSrcMesh->mName; + + dstMesh->mName = pSrcMesh->mName; // count the vertices addressed by its faces const size_t numVertices = std::accumulate( pSrcMesh->mFaceSize.begin() + pStartFace, @@ -589,7 +589,7 @@ aiMesh* ColladaLoader::CreateMesh( const ColladaParser& pParser, const Collada:: dstMesh->mTextureCoords[real] = new aiVector3D[numVertices]; for( size_t b = 0; b < numVertices; ++b) dstMesh->mTextureCoords[real][b] = pSrcMesh->mTexCoords[a][pStartVertex+b]; - + dstMesh->mNumUVComponents[real] = pSrcMesh->mNumUVComponents[a]; ++real; } @@ -624,8 +624,8 @@ aiMesh* ColladaLoader::CreateMesh( const ColladaParser& pParser, const Collada:: if( pSrcController) { // refuse if the vertex count does not match -// if( pSrcController->mWeightCounts.size() != dstMesh->mNumVertices) -// throw DeadlyImportError( "Joint Controller vertex count does not match mesh vertex count"); + // if( pSrcController->mWeightCounts.size() != dstMesh->mNumVertices) + // throw DeadlyImportError( "Joint Controller vertex count does not match mesh vertex count"); // resolve references - joint names const Collada::Accessor& jointNamesAcc = pParser.ResolveLibraryReference( pParser.mAccessorLibrary, pSrcController->mJointNameSource); @@ -937,7 +937,7 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars // find the collada node corresponding to the aiNode const Collada::Node* srcNode = FindNode( pParser.mRootNode, nodeName); -// ai_assert( srcNode != NULL); + // ai_assert( srcNode != NULL); if( !srcNode) continue; @@ -990,7 +990,7 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars { entry.mTransformId = srcChannel.mTarget.substr(slashPos + 1, bracketPos - slashPos - 1); std::string subElement = srcChannel.mTarget.substr(bracketPos); - + if (subElement == "(0)(0)") entry.mSubElement = 0; else if (subElement == "(1)(0)") @@ -1058,134 +1058,134 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars if( e.mTimeAccessor->mCount != e.mValueAccessor->mCount) throw DeadlyImportError( boost::str( boost::format( "Time count / value count mismatch in animation channel \"%s\".") % e.mChannel->mTarget)); - if( e.mTimeAccessor->mCount > 0 ) - { - // find bounding times - startTime = std::min( startTime, ReadFloat( *e.mTimeAccessor, *e.mTimeData, 0, 0)); - endTime = std::max( endTime, ReadFloat( *e.mTimeAccessor, *e.mTimeData, e.mTimeAccessor->mCount-1, 0)); - } + if( e.mTimeAccessor->mCount > 0 ) + { + // find bounding times + startTime = std::min( startTime, ReadFloat( *e.mTimeAccessor, *e.mTimeData, 0, 0)); + endTime = std::max( endTime, ReadFloat( *e.mTimeAccessor, *e.mTimeData, e.mTimeAccessor->mCount-1, 0)); + } } - std::vector resultTrafos; - if( !entries.empty() && entries.front().mTimeAccessor->mCount > 0 ) - { - // create a local transformation chain of the node's transforms - std::vector transforms = srcNode->mTransforms; + std::vector resultTrafos; + if( !entries.empty() && entries.front().mTimeAccessor->mCount > 0 ) + { + // create a local transformation chain of the node's transforms + std::vector transforms = srcNode->mTransforms; - // now for every unique point in time, find or interpolate the key values for that time - // and apply them to the transform chain. Then the node's present transformation can be calculated. - float time = startTime; - while( 1) - { - for( std::vector::iterator it = entries.begin(); it != entries.end(); ++it) - { - Collada::ChannelEntry& e = *it; + // now for every unique point in time, find or interpolate the key values for that time + // and apply them to the transform chain. Then the node's present transformation can be calculated. + float time = startTime; + while( 1) + { + for( std::vector::iterator it = entries.begin(); it != entries.end(); ++it) + { + Collada::ChannelEntry& e = *it; - // find the keyframe behind the current point in time - size_t pos = 0; - float postTime = 0.f; - while( 1) - { - if( pos >= e.mTimeAccessor->mCount) - break; - postTime = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos, 0); - if( postTime >= time) - break; - ++pos; - } + // find the keyframe behind the current point in time + size_t pos = 0; + float postTime = 0.f; + while( 1) + { + if( pos >= e.mTimeAccessor->mCount) + break; + postTime = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos, 0); + if( postTime >= time) + break; + ++pos; + } - pos = std::min( pos, e.mTimeAccessor->mCount-1); + pos = std::min( pos, e.mTimeAccessor->mCount-1); - // read values from there - float temp[16]; - for( size_t c = 0; c < e.mValueAccessor->mSize; ++c) - temp[c] = ReadFloat( *e.mValueAccessor, *e.mValueData, pos, c); + // read values from there + float temp[16]; + for( size_t c = 0; c < e.mValueAccessor->mSize; ++c) + temp[c] = ReadFloat( *e.mValueAccessor, *e.mValueData, pos, c); - // if not exactly at the key time, interpolate with previous value set - if( postTime > time && pos > 0) - { - float preTime = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos-1, 0); - float factor = (time - postTime) / (preTime - postTime); + // if not exactly at the key time, interpolate with previous value set + if( postTime > time && pos > 0) + { + float preTime = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos-1, 0); + float factor = (time - postTime) / (preTime - postTime); - for( size_t c = 0; c < e.mValueAccessor->mSize; ++c) - { - float v = ReadFloat( *e.mValueAccessor, *e.mValueData, pos-1, c); - temp[c] += (v - temp[c]) * factor; - } - } + for( size_t c = 0; c < e.mValueAccessor->mSize; ++c) + { + float v = ReadFloat( *e.mValueAccessor, *e.mValueData, pos-1, c); + temp[c] += (v - temp[c]) * factor; + } + } - // Apply values to current transformation - std::copy( temp, temp + e.mValueAccessor->mSize, transforms[e.mTransformIndex].f + e.mSubElement); - } + // Apply values to current transformation + std::copy( temp, temp + e.mValueAccessor->mSize, transforms[e.mTransformIndex].f + e.mSubElement); + } - // Calculate resulting transformation - aiMatrix4x4 mat = pParser.CalculateResultTransform( transforms); + // Calculate resulting transformation + aiMatrix4x4 mat = pParser.CalculateResultTransform( transforms); - // out of lazyness: we store the time in matrix.d4 - mat.d4 = time; - resultTrafos.push_back( mat); + // out of lazyness: we store the time in matrix.d4 + mat.d4 = time; + resultTrafos.push_back( mat); - // find next point in time to evaluate. That's the closest frame larger than the current in any channel - float nextTime = 1e20f; - for( std::vector::iterator it = entries.begin(); it != entries.end(); ++it) - { - Collada::ChannelEntry& e = *it; + // find next point in time to evaluate. That's the closest frame larger than the current in any channel + float nextTime = 1e20f; + for( std::vector::iterator it = entries.begin(); it != entries.end(); ++it) + { + Collada::ChannelEntry& e = *it; - // find the next time value larger than the current - size_t pos = 0; - while( pos < e.mTimeAccessor->mCount) - { - float t = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos, 0); - if( t > time) - { - nextTime = std::min( nextTime, t); - break; - } - ++pos; - } - } + // find the next time value larger than the current + size_t pos = 0; + while( pos < e.mTimeAccessor->mCount) + { + float t = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos, 0); + if( t > time) + { + nextTime = std::min( nextTime, t); + break; + } + ++pos; + } + } - // no more keys on any channel after the current time -> we're done - if( nextTime > 1e19) - break; + // no more keys on any channel after the current time -> we're done + if( nextTime > 1e19) + break; - // else construct next keyframe at this following time point - time = nextTime; - } - } + // else construct next keyframe at this following time point + time = nextTime; + } + } // there should be some keyframes, but we aren't that fixated on valid input data -// ai_assert( resultTrafos.size() > 0); + // ai_assert( resultTrafos.size() > 0); // build an animation channel for the given node out of these trafo keys - if( !resultTrafos.empty() ) - { - aiNodeAnim* dstAnim = new aiNodeAnim; - dstAnim->mNodeName = nodeName; - dstAnim->mNumPositionKeys = resultTrafos.size(); - dstAnim->mNumRotationKeys= resultTrafos.size(); - dstAnim->mNumScalingKeys = resultTrafos.size(); - dstAnim->mPositionKeys = new aiVectorKey[resultTrafos.size()]; - dstAnim->mRotationKeys = new aiQuatKey[resultTrafos.size()]; - dstAnim->mScalingKeys = new aiVectorKey[resultTrafos.size()]; + if( !resultTrafos.empty() ) + { + aiNodeAnim* dstAnim = new aiNodeAnim; + dstAnim->mNodeName = nodeName; + dstAnim->mNumPositionKeys = resultTrafos.size(); + dstAnim->mNumRotationKeys= resultTrafos.size(); + dstAnim->mNumScalingKeys = resultTrafos.size(); + dstAnim->mPositionKeys = new aiVectorKey[resultTrafos.size()]; + dstAnim->mRotationKeys = new aiQuatKey[resultTrafos.size()]; + dstAnim->mScalingKeys = new aiVectorKey[resultTrafos.size()]; - for( size_t a = 0; a < resultTrafos.size(); ++a) - { - aiMatrix4x4 mat = resultTrafos[a]; - double time = double( mat.d4); // remember? time is stored in mat.d4 - mat.d4 = 1.0f; + for( size_t a = 0; a < resultTrafos.size(); ++a) + { + aiMatrix4x4 mat = resultTrafos[a]; + double time = double( mat.d4); // remember? time is stored in mat.d4 + mat.d4 = 1.0f; - dstAnim->mPositionKeys[a].mTime = time; - dstAnim->mRotationKeys[a].mTime = time; - dstAnim->mScalingKeys[a].mTime = time; - mat.Decompose( dstAnim->mScalingKeys[a].mValue, dstAnim->mRotationKeys[a].mValue, dstAnim->mPositionKeys[a].mValue); - } + dstAnim->mPositionKeys[a].mTime = time; + dstAnim->mRotationKeys[a].mTime = time; + dstAnim->mScalingKeys[a].mTime = time; + mat.Decompose( dstAnim->mScalingKeys[a].mValue, dstAnim->mRotationKeys[a].mValue, dstAnim->mPositionKeys[a].mValue); + } - anims.push_back( dstAnim); - } else - { - DefaultLogger::get()->warn( "Collada loader: found empty animation channel, ignored. Please check your exporter."); - } + anims.push_back( dstAnim); + } else + { + DefaultLogger::get()->warn( "Collada loader: found empty animation channel, ignored. Please check your exporter."); + } } if( !anims.empty()) @@ -1210,9 +1210,9 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars // ------------------------------------------------------------------------------------------------ // Add a texture to a material structure void ColladaLoader::AddTexture ( aiMaterial& mat, const ColladaParser& pParser, - const Collada::Effect& effect, - const Collada::Sampler& sampler, - aiTextureType type, unsigned int idx) + const Collada::Effect& effect, + const Collada::Sampler& sampler, + aiTextureType type, unsigned int idx) { // first of all, basic file name const aiString name = FindFilenameForEffectTexture( pParser, effect, sampler.mName ); @@ -1339,8 +1339,8 @@ void ColladaLoader::FillMaterials( const ColladaParser& pParser, aiScene* /*pSce // add textures, if given if( !effect.mTexAmbient.mName.empty()) - /* It is merely a lightmap */ - AddTexture( mat, pParser, effect, effect.mTexAmbient, aiTextureType_LIGHTMAP); + /* It is merely a lightmap */ + AddTexture( mat, pParser, effect, effect.mTexAmbient, aiTextureType_LIGHTMAP); if( !effect.mTexEmissive.mName.empty()) AddTexture( mat, pParser, effect, effect.mTexEmissive, aiTextureType_EMISSIVE); @@ -1411,7 +1411,7 @@ void ColladaLoader::BuildMaterials( ColladaParser& pParser, aiScene* /*pScene*/) // ------------------------------------------------------------------------------------------------ // Resolves the texture name for the given effect texture entry aiString ColladaLoader::FindFilenameForEffectTexture( const ColladaParser& pParser, - const Collada::Effect& pEffect, const std::string& pName) + const Collada::Effect& pEffect, const std::string& pName) { // recurse through the param references until we end up at an image std::string name = pName; @@ -1488,35 +1488,35 @@ void ColladaLoader::ConvertPath (aiString& ss) ss.data[ss.length] = '\0'; } - // Maxon Cinema Collada Export writes "file:///C:\andsoon" with three slashes... - // I need to filter it without destroying linux paths starting with "/somewhere" - if( ss.data[0] == '/' && isalpha( ss.data[1]) && ss.data[2] == ':' ) - { - ss.length--; - memmove( ss.data, ss.data+1, ss.length); - ss.data[ss.length] = 0; - } + // Maxon Cinema Collada Export writes "file:///C:\andsoon" with three slashes... + // I need to filter it without destroying linux paths starting with "/somewhere" + if( ss.data[0] == '/' && isalpha( ss.data[1]) && ss.data[2] == ':' ) + { + ss.length--; + memmove( ss.data, ss.data+1, ss.length); + ss.data[ss.length] = 0; + } - // find and convert all %xy special chars - char* out = ss.data; - for( const char* it = ss.data; it != ss.data + ss.length; /**/ ) - { - if( *it == '%' && (it + 3) < ss.data + ss.length ) - { - // separate the number to avoid dragging in chars from behind into the parsing - char mychar[3] = { it[1], it[2], 0 }; - size_t nbr = strtoul16( mychar); - it += 3; - *out++ = (char)(nbr & 0xFF); - } else - { - *out++ = *it++; - } - } + // find and convert all %xy special chars + char* out = ss.data; + for( const char* it = ss.data; it != ss.data + ss.length; /**/ ) + { + if( *it == '%' && (it + 3) < ss.data + ss.length ) + { + // separate the number to avoid dragging in chars from behind into the parsing + char mychar[3] = { it[1], it[2], 0 }; + size_t nbr = strtoul16( mychar); + it += 3; + *out++ = (char)(nbr & 0xFF); + } else + { + *out++ = *it++; + } + } - // adjust length and terminator of the shortened string - *out = 0; - ss.length = (ptrdiff_t) (out - ss.data); + // adjust length and terminator of the shortened string + *out = 0; + ss.length = (ptrdiff_t) (out - ss.data); } // ------------------------------------------------------------------------------------------------ @@ -1569,17 +1569,17 @@ const Collada::Node* ColladaLoader::FindNode( const Collada::Node* pNode, const // Finds a node in the collada scene by the given SID const Collada::Node* ColladaLoader::FindNodeBySID( const Collada::Node* pNode, const std::string& pSID) const { - if( pNode->mSID == pSID) - return pNode; + if( pNode->mSID == pSID) + return pNode; - for( size_t a = 0; a < pNode->mChildren.size(); ++a) - { - const Collada::Node* node = FindNodeBySID( pNode->mChildren[a], pSID); - if( node) - return node; - } + for( size_t a = 0; a < pNode->mChildren.size(); ++a) + { + const Collada::Node* node = FindNodeBySID( pNode->mChildren[a], pSID); + if( node) + return node; + } - return NULL; + return NULL; } // ------------------------------------------------------------------------------------------------ @@ -1593,12 +1593,12 @@ std::string ColladaLoader::FindNameForNode( const Collada::Node* pNode) else if (!pNode->mID.empty()) return pNode->mID; else if (!pNode->mSID.empty()) - return pNode->mSID; - else + return pNode->mSID; + else { // No need to worry. Unnamed nodes are no problem at all, except // if cameras or lights need to be assigned to them. - return boost::str( boost::format( "$ColladaAutoName$_%d") % mNodeNameCounter++); + return boost::str( boost::format( "$ColladaAutoName$_%d") % mNodeNameCounter++); } } From c89274d3660394e5389116d3d61bd864b5c09698 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Sun, 8 Mar 2015 00:16:48 +0200 Subject: [PATCH 031/166] Free edges map before recursive calls to reduce memory consumption --- code/Subdivision.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/Subdivision.cpp b/code/Subdivision.cpp index 03200818c..4bc39c268 100644 --- a/code/Subdivision.cpp +++ b/code/Subdivision.cpp @@ -290,6 +290,8 @@ void CatmullClarkSubdivider::InternSubdivide ( } } + { + // we want edges to go away before the recursive calls so begin a new scope EdgeMap edges; // --------------------------------------------------------------------- @@ -572,6 +574,7 @@ void CatmullClarkSubdivider::InternSubdivide ( } } } + } // end of scope for edges, freeing its memory // --------------------------------------------------------------------- // 7. Apply the next subdivision step. From c410512173d9d3f7801b963451977e00f44b6d34 Mon Sep 17 00:00:00 2001 From: DenisMikhalev Date: Sun, 8 Mar 2015 22:37:48 +0300 Subject: [PATCH 032/166] Use material names, set default direction to UP_Y, process extra tag --- code/ColladaHelper.h | 1 + code/ColladaLoader.cpp | 4 ++-- code/ColladaParser.cpp | 42 +++++++++++++++++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/code/ColladaHelper.h b/code/ColladaHelper.h index f249a28d5..99bbee269 100644 --- a/code/ColladaHelper.h +++ b/code/ColladaHelper.h @@ -395,6 +395,7 @@ struct Controller /** A collada material. Pretty much the only member is a reference to an effect. */ struct Material { + std::string mName; std::string mEffect; }; diff --git a/code/ColladaLoader.cpp b/code/ColladaLoader.cpp index 5771bc7af..33340cf9f 100644 --- a/code/ColladaLoader.cpp +++ b/code/ColladaLoader.cpp @@ -176,7 +176,7 @@ void ColladaLoader::InternReadFile( const std::string& pFile, aiScene* pScene, I 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1); - } + } // store all meshes StoreSceneMeshes( pScene); @@ -1379,7 +1379,7 @@ void ColladaLoader::BuildMaterials( ColladaParser& pParser, aiScene* /*pScene*/) // create material aiMaterial* mat = new aiMaterial; - aiString name( matIt->first); + aiString name( material.mName.empty() ? matIt->first : material.mName ); mat->AddProperty(&name,AI_MATKEY_NAME); // store the material diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp index b7b5a7908..dc177744f 100644 --- a/code/ColladaParser.cpp +++ b/code/ColladaParser.cpp @@ -60,7 +60,7 @@ ColladaParser::ColladaParser( IOSystem* pIOHandler, const std::string& pFile) { mRootNode = NULL; mUnitSize = 1.0f; - mUpDirection = UP_Z; + mUpDirection = UP_Y; // We assume the newest file format by default mFormat = FV_1_5_n; @@ -225,10 +225,10 @@ void ColladaParser::ReadAssetInfo() const char* content = GetTextContent(); if( strncmp( content, "X_UP", 4) == 0) mUpDirection = UP_X; - else if( strncmp( content, "Y_UP", 4) == 0) - mUpDirection = UP_Y; - else + else if( strncmp( content, "Z_UP", 4) == 0) mUpDirection = UP_Z; + else + mUpDirection = UP_Y; // check element end TestClosing( "up_axis"); @@ -817,6 +817,7 @@ void ColladaParser::ReadMaterialLibrary() if( mReader->isEmptyElement()) return; + std::map names; while( mReader->read()) { if( mReader->getNodeType() == irr::io::EXN_ELEMENT) @@ -827,8 +828,32 @@ void ColladaParser::ReadMaterialLibrary() int attrID = GetAttribute( "id"); std::string id = mReader->getAttributeValue( attrID); + std::string name; + int attrName = TestAttribute("name"); + if (attrName >= 0) + name = mReader->getAttributeValue( attrName); + // create an entry and store it in the library under its ID - ReadMaterial(mMaterialLibrary[id] = Material()); + mMaterialLibrary[id] = Material(); + + if( !name.empty()) + { + std::map::iterator it = names.find( name); + if( it != names.end()) + { + std::ostringstream strStream; + strStream << ++it->second; + name.append( " " + strStream.str()); + } + else + { + names[name] = 0; + } + + mMaterialLibrary[id].mName = name; + } + + ReadMaterial( mMaterialLibrary[id]); } else { // ignore the rest @@ -1385,6 +1410,9 @@ void ColladaParser::ReadEffectColor( aiColor4D& pColor, Sampler& pSampler) if( attrTex >= 0 ) pSampler.mUVChannel = mReader->getAttributeValue( attrTex); //SkipElement(); + + // as we've read texture, the color needs to be 1,1,1,1 + pColor = aiColor4D(1.f, 1.f, 1.f, 1.f); } else if( IsElement( "technique")) { @@ -1936,6 +1964,10 @@ void ColladaParser::ReadIndexData( Mesh* pMesh) // now here the actual fun starts - these are the indices to construct the mesh data from actualPrimitives += ReadPrimitives(pMesh, perIndexData, numPrimitives, vcount, primType); } + } + else if (IsElement("extra")) + { + SkipElement("extra"); } else { ThrowException( boost::str( boost::format( "Unexpected sub element <%s> in tag <%s>") % mReader->getNodeName() % elementName)); From 79db48a0d14163da70a1d9f61969cd8762463285 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 9 Mar 2015 10:17:23 +0100 Subject: [PATCH 033/166] openddl-parser: latest greatest. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/DDLNode.cpp | 11 +- contrib/openddlparser/code/OpenDDLParser.cpp | 216 ++++++++++-------- .../include/openddlparser/DDLNode.h | 3 + .../include/openddlparser/OpenDDLCommon.h | 10 +- .../include/openddlparser/OpenDDLParser.h | 3 +- .../openddlparser/OpenDDLParserUtils.h | 14 ++ 6 files changed, 162 insertions(+), 95 deletions(-) diff --git a/contrib/openddlparser/code/DDLNode.cpp b/contrib/openddlparser/code/DDLNode.cpp index aba11d8ae..e65f1c45e 100644 --- a/contrib/openddlparser/code/DDLNode.cpp +++ b/contrib/openddlparser/code/DDLNode.cpp @@ -52,7 +52,8 @@ DDLNode::DDLNode( const std::string &type, const std::string &name, size_t idx, , m_properties( ddl_nullptr ) , m_value( ddl_nullptr ) , m_idx( idx ) -, m_dtArrayList( ddl_nullptr ) { +, m_dtArrayList( ddl_nullptr ) +, m_references( ddl_nullptr ) { if( m_parent ) { m_parent->m_children.push_back( this ); } @@ -140,6 +141,14 @@ DataArrayList *DDLNode::getDataArrayList() const { return m_dtArrayList; } +void DDLNode::setReferences( Reference *refs ) { + m_references = refs; +} + +Reference *DDLNode::getReferences() const { + return m_references; +} + DDLNode *DDLNode::create( const std::string &type, const std::string &name, DDLNode *parent ) { const size_t idx( s_allocatedNodes.size() ); DDLNode *node = new DDLNode( type, name, idx, parent ); diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index c85f498de..46eb50fd8 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -37,26 +37,33 @@ BEGIN_ODDLPARSER_NS static const char *Version = "0.1.0"; -static const char* PrimitiveTypeToken[ Value::ddl_types_max ] = { - "bool", - "int8", - "int16", - "int32", - "int64", - "unsigned_int8", - "unsigned_int16", - "unsigned_int32", - "unsigned_int64", - "half", - "float", - "double", - "string", - "ref" -}; +namespace Grammar { + static const char *OpenBracketToken = "{"; + static const char *CloseBracketToken = "}"; + static const char *OpenPropertyToken = "("; + static const char *ClosePropertyToken = ")"; + static const char *BoolTrue = "true"; + static const char *BoolFalse = "false"; + static const char *RefToken = "ref"; + + static const char* PrimitiveTypeToken[ Value::ddl_types_max ] = { + "bool", + "int8", + "int16", + "int32", + "int64", + "unsigned_int8", + "unsigned_int16", + "unsigned_int32", + "unsigned_int64", + "half", + "float", + "double", + "string", + "ref" + }; +} // Namespace Grammar -static const char *BoolTrue = "true"; -static const char *BoolFalse = "false"; -static const char *RefToken = "ref"; static void logInvalidTokenError( char *in, char *exp, OpenDDLParser::logCallback callback ) { std::stringstream stream; @@ -65,7 +72,8 @@ static void logInvalidTokenError( char *in, char *exp, OpenDDLParser::logCallbac } static bool isIntegerType( Value::ValueType integerType ) { - if( integerType != Value::ddl_int8 && integerType != Value::ddl_int16 && integerType != Value::ddl_int32 && integerType != Value::ddl_int64 ) { + if( integerType != Value::ddl_int8 && integerType != Value::ddl_int16 && + integerType != Value::ddl_int32 && integerType != Value::ddl_int64 ) { return false; } @@ -203,6 +211,12 @@ char *OpenDDLParser::parseNextNode( char *in, char *end ) { return in; } +static void dumpId( Identifier *id ) { + if( ddl_nullptr != id ) { + std::cout << id->m_buffer << std::endl; + } +} + char *OpenDDLParser::parseHeader( char *in, char *end ) { if( nullptr == in || in == end ) { return in; @@ -212,9 +226,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { in = OpenDDLParser::parseIdentifier( in, end, &id ); #ifdef DEBUG_HEADER_NAME - if( ddl_nullptr != id ) { - std::cout << id->m_buffer << std::endl; - } + dumpId( id ); #endif // DEBUG_HEADER_NAME in = getNextToken( in, end ); @@ -224,13 +236,14 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { in++; Property *prop( ddl_nullptr ), *prev( ddl_nullptr ); while( *in != ')' && in != end ) { - in = parseProperty( in, end, &prop ); + in = OpenDDLParser::parseProperty( in, end, &prop ); in = getNextToken( in, end ); if( *in != ',' && *in != ')' ) { logInvalidTokenError( in, ")", m_logCallback ); return in; } + if( ddl_nullptr != prop && *in != ',' ) { if( ddl_nullptr == first ) { first = prop; @@ -276,55 +289,17 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { bool error( false ); in = getNextToken( in, end ); if( *in == '{' ) { + do { + // loop over all childs ( data and nodes ) + in = parseStructureBody( in, end, error ); + } while ( *in != '}' ); in++; - in = getNextToken( in, end ); - Value::ValueType type( Value::ddl_none ); - size_t arrayLen( 0 ); - in = OpenDDLParser::parsePrimitiveDataType( in, end, type, arrayLen ); - if( Value::ddl_none != type ) { - in = getNextToken( in, end ); - if( *in == '{' ) { - DataArrayList *dtArrayList( ddl_nullptr ); - Value *values( ddl_nullptr ); - if( 1 == arrayLen ) { - in = parseDataList( in, end, &values ); - if( ddl_nullptr != values ){ - DDLNode *currentNode( top() ); - if( ddl_nullptr != currentNode ) { - currentNode->setValue( values ); - } - } - } else if( arrayLen > 1 ) { - in = parseDataArrayList( in, end, &dtArrayList ); - if( ddl_nullptr != dtArrayList ) { - DDLNode *currentNode( top() ); - if( ddl_nullptr != currentNode ) { - currentNode->setDataArrayList( dtArrayList ); - } - } - } else { - std::cerr << "0 for array is invalid." << std::endl; - error = true; - } - } - - in = getNextToken( in, end ); - if( *in != '}' ) { - logInvalidTokenError( in, "}", m_logCallback ); - } - else { - in++; - } - } else { - in = parseHeader( in, end ); - in = parseStructure( in, end ); - } - } else { + } + else { in++; logInvalidTokenError( in, "{", m_logCallback ); error = true; return in; - } in = getNextToken( in, end ); @@ -336,6 +311,71 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { return in; } +static void setNodeValues( DDLNode *currentNode, Value *values ) { + if( ddl_nullptr != values ){ + if( ddl_nullptr != currentNode ) { + currentNode->setValue( values ); + } + } +} + +static void setNodeReferences( DDLNode *currentNode, Reference *refs ) { + if( ddl_nullptr != refs ) { + if( ddl_nullptr != currentNode ) { + currentNode->setReferences( refs ); + } + } +} + +static void setNodeDataArrayList( DDLNode *currentNode, DataArrayList *dtArrayList ) { + if( ddl_nullptr != dtArrayList ) { + if( ddl_nullptr != currentNode ) { + currentNode->setDataArrayList( dtArrayList ); + } + } +} + +char *OpenDDLParser::parseStructureBody( char *in, char *end, bool &error ) { + if( !isNumeric( *in ) && !isCharacter( *in ) ) { + in++; + } + + in = getNextToken( in, end ); + Value::ValueType type( Value::ddl_none ); + size_t arrayLen( 0 ); + in = OpenDDLParser::parsePrimitiveDataType( in, end, type, arrayLen ); + if( Value::ddl_none != type ) { + in = getNextToken( in, end ); + if( *in == '{' ) { + Reference *refs( ddl_nullptr ); + DataArrayList *dtArrayList( ddl_nullptr ); + Value *values( ddl_nullptr ); + if( 1 == arrayLen ) { + in = parseDataList( in, end, &values, &refs ); + setNodeValues( top(), values ); + setNodeReferences( top(), refs ); + } else if( arrayLen > 1 ) { + in = parseDataArrayList( in, end, &dtArrayList ); + setNodeDataArrayList( top(), dtArrayList ); + } else { + std::cerr << "0 for array is invalid." << std::endl; + error = true; + } + } + + in = getNextToken( in, end ); + if( *in != '}' ) { + logInvalidTokenError( in, "}", m_logCallback ); + } else { + //in++; + } + } else { + in = parseNextNode( in, end ); + } + + return in; +} + void OpenDDLParser::pushNode( DDLNode *node ) { if( nullptr == node ) { return; @@ -469,9 +509,10 @@ char *OpenDDLParser::parsePrimitiveDataType( char *in, char *end, Value::ValueTy return in; } + size_t prim_len( 0 ); for( unsigned int i = 0; i < Value::ddl_types_max; i++ ) { - const size_t prim_len( strlen( PrimitiveTypeToken[ i ] ) ); - if( 0 == strncmp( in, PrimitiveTypeToken[ i ], prim_len ) ) { + prim_len = strlen( Grammar::PrimitiveTypeToken[ i ] ); + if( 0 == strncmp( in, Grammar::PrimitiveTypeToken[ i ], prim_len ) ) { type = ( Value::ValueType ) i; break; } @@ -481,7 +522,7 @@ char *OpenDDLParser::parsePrimitiveDataType( char *in, char *end, Value::ValueTy in = getNextToken( in, end ); return in; } else { - in += strlen( PrimitiveTypeToken[ type ] ); + in += prim_len; } bool ok( true ); @@ -513,27 +554,12 @@ char *OpenDDLParser::parseReference( char *in, char *end, std::vector &na return in; } - if( 0 != strncmp( in, RefToken, strlen( RefToken ) ) ) { - return in; - } else { - const size_t refTokenLen( strlen( RefToken ) ); - in += refTokenLen; - } - - in = getNextToken( in, end ); - if( '{' != *in ) { - return in; - } else { - in++; - } - - in = getNextToken( in, end ); Name *nextName( ddl_nullptr ); in = parseName( in, end, &nextName ); if( nextName ) { names.push_back( nextName ); } - while( '}' != *in ) { + while( ',' == *in ) { in = getNextSeparator( in, end ); if( ',' == *in ) { in = parseName( in, end, &nextName ); @@ -562,9 +588,9 @@ char *OpenDDLParser::parseBooleanLiteral( char *in, char *end, Value **boolean ) len++; } len++; - int res = ::strncmp( BoolTrue, start, strlen( BoolTrue ) ); + int res = ::strncmp( Grammar::BoolTrue, start, strlen( Grammar::BoolTrue ) ); if( 0 != res ) { - res = ::strncmp( BoolFalse, start, strlen( BoolFalse ) ); + res = ::strncmp( Grammar::BoolFalse, start, strlen( Grammar::BoolFalse ) ); if( 0 != res ) { *boolean = ddl_nullptr; return in; @@ -770,7 +796,7 @@ char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) { return in; } -char *OpenDDLParser::parseDataList( char *in, char *end, Value **data ) { +char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, Reference **refs ) { *data = ddl_nullptr; if( ddl_nullptr == in || in == end ) { return in; @@ -791,6 +817,13 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data ) { in = parseStringLiteral( in, end, ¤t ); } else if( isHexLiteral( in, end ) ) { in = parseHexaLiteral( in, end, ¤t ); + } else { // reference data + std::vector names; + in = parseReference( in, end, names ); + if( !names.empty() ) { + Reference *ref = new Reference( names.size(), &names[ 0 ] ); + *refs = ref; + } } if( ddl_nullptr != current ) { @@ -824,9 +857,10 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da if( *in == '{' ) { in++; Value *current( ddl_nullptr ); + Reference *refs( nullptr ); DataArrayList *prev( ddl_nullptr ), *currentDataList( ddl_nullptr ); do { - in = parseDataList( in, end, ¤t ); + in = parseDataList( in, end, ¤t, &refs ); if( ddl_nullptr != current ) { if( ddl_nullptr == prev ) { *dataList = new DataArrayList; diff --git a/contrib/openddlparser/include/openddlparser/DDLNode.h b/contrib/openddlparser/include/openddlparser/DDLNode.h index bb5f87b79..93b447bb2 100644 --- a/contrib/openddlparser/include/openddlparser/DDLNode.h +++ b/contrib/openddlparser/include/openddlparser/DDLNode.h @@ -61,6 +61,8 @@ public: Value *getValue() const; void setDataArrayList( DataArrayList *dtArrayList ); DataArrayList *getDataArrayList() const; + void setReferences( Reference *refs ); + Reference *getReferences() const; static DDLNode *create( const std::string &type, const std::string &name, DDLNode *parent = ddl_nullptr ); private: @@ -78,6 +80,7 @@ private: Property *m_properties; Value *m_value; DataArrayList *m_dtArrayList; + Reference *m_references; size_t m_idx; static DllNodeList s_allocatedNodes; }; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index 789bc15ad..c7fd844a2 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -88,9 +88,15 @@ struct Reference { size_t m_numRefs; Name **m_referencedName; + Reference() + : m_numRefs( 0 ) + , m_referencedName( ddl_nullptr ) { + // empty + } + Reference( size_t numrefs, Name **names ) - : m_numRefs( numrefs ) - , m_referencedName( names ) { + : m_numRefs( numrefs ) + , m_referencedName( names ) { // empty } }; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h index 4f003a0e4..00f2c2e58 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h @@ -77,6 +77,7 @@ public: char *parseNextNode( char *current, char *end ); char *parseHeader( char *in, char *end ); char *parseStructure( char *in, char *end ); + char *parseStructureBody( char *in, char *end, bool &error ); void pushNode( DDLNode *node ); DDLNode *popNode(); DDLNode *top(); @@ -95,7 +96,7 @@ public: // static parser helpers static char *parseStringLiteral( char *in, char *end, Value **stringData ); static char *parseHexaLiteral( char *in, char *end, Value **data ); static char *parseProperty( char *in, char *end, Property **prop ); - static char *parseDataList( char *in, char *end, Value **data ); + static char *parseDataList( char *in, char *end, Value **data, Reference **refs ); static char *parseDataArrayList( char *in, char *end, DataArrayList **dataList ); static const char *getVersion(); diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h index 179a51326..b1b4f6cde 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h @@ -196,6 +196,20 @@ bool isHexLiteral( T *in, T *end ) { return false; } +template +inline +bool isReference( T *in, T *end ) { + if( *in == 'r' ) { + if( *(in+1) == 'e' ) { + if( *(in+2) == 'f' ) { + return true; + } + } + } + + return false; +} + template inline bool isEndofLine( const T in ) { From c342778f4252a69d32c50feba3a085a983f0ff70 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Mon, 2 Mar 2015 13:52:19 +0200 Subject: [PATCH 034/166] Fix read past end of buffer after call to TokenMatch IsSpaceOrNewLine returns true on end of input (NUL character). But if TokenMatch considers a token at end of input to match it sets "in" to one past end of buffer. This will lead to reading past the end of buffer on any subsequent operation. --- code/ParsingUtils.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/ParsingUtils.h b/code/ParsingUtils.h index 25495fd51..0d27e7fbf 100644 --- a/code/ParsingUtils.h +++ b/code/ParsingUtils.h @@ -201,7 +201,12 @@ template AI_FORCE_INLINE bool TokenMatch(char_t*& in, const char* token, unsigned int len) { if (!::strncmp(token,in,len) && IsSpaceOrNewLine(in[len])) { + if (in[len] != '\0') { in += len+1; + } else { + // If EOF after the token make sure we don't go past end of buffer + in += len; + } return true; } From ba4689fd0509fc33667671a20a56dcd51c0f16cd Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Mon, 9 Mar 2015 12:18:10 +0200 Subject: [PATCH 035/166] Whitespace --- code/ParsingUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ParsingUtils.h b/code/ParsingUtils.h index 0d27e7fbf..93a44d0a6 100644 --- a/code/ParsingUtils.h +++ b/code/ParsingUtils.h @@ -202,7 +202,7 @@ AI_FORCE_INLINE bool TokenMatch(char_t*& in, const char* token, unsigned int len { if (!::strncmp(token,in,len) && IsSpaceOrNewLine(in[len])) { if (in[len] != '\0') { - in += len+1; + in += len+1; } else { // If EOF after the token make sure we don't go past end of buffer in += len; From 62676b56aa8fdb6b1622029f1ae048c550ba137c Mon Sep 17 00:00:00 2001 From: DenisMikhalev Date: Mon, 9 Mar 2015 19:40:13 +0300 Subject: [PATCH 036/166] Adds safety and prevents crashes for damaged files --- code/PlyLoader.cpp | 72 +++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/code/PlyLoader.cpp b/code/PlyLoader.cpp index d61c4e5a7..deb7da094 100644 --- a/code/PlyLoader.cpp +++ b/code/PlyLoader.cpp @@ -64,6 +64,24 @@ static const aiImporterDesc desc = { "ply" }; + +// ------------------------------------------------------------------------------------------------ +// Internal stuff +namespace +{ + // ------------------------------------------------------------------------------------------------ + // Checks that property index is within range + template + const T &GetProperty(const std::vector &props, int idx) + { + if (idx >= props.size()) + throw DeadlyImportError("Invalid .ply file: Property index is out of range."); + + return props[idx]; + } +} + + // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer PLYImporter::PLYImporter() @@ -431,13 +449,13 @@ void PLYImporter::LoadTextureCoordinates(std::vector* pvOut) if (0xFFFFFFFF != aiPositions[0]) { vOut.x = PLY::PropertyInstance::ConvertTo( - (*i).alProperties[aiPositions[0]].avList.front(),aiTypes[0]); + GetProperty((*i).alProperties, aiPositions[0]).avList.front(),aiTypes[0]); } if (0xFFFFFFFF != aiPositions[1]) { vOut.y = PLY::PropertyInstance::ConvertTo( - (*i).alProperties[aiPositions[1]].avList.front(),aiTypes[1]); + GetProperty((*i).alProperties, aiPositions[1]).avList.front(),aiTypes[1]); } // and add them to our nice list pvOut->push_back(vOut); @@ -541,19 +559,19 @@ void PLYImporter::LoadVertices(std::vector* pvOut, bool p_bNormals) if (0xFFFFFFFF != aiPositions[0]) { vOut.x = PLY::PropertyInstance::ConvertTo( - (*i).alProperties[aiPositions[0]].avList.front(),aiTypes[0]); + GetProperty((*i).alProperties, aiPositions[0]).avList.front(),aiTypes[0]); } if (0xFFFFFFFF != aiPositions[1]) { vOut.y = PLY::PropertyInstance::ConvertTo( - (*i).alProperties[aiPositions[1]].avList.front(),aiTypes[1]); + GetProperty((*i).alProperties, aiPositions[1]).avList.front(),aiTypes[1]); } if (0xFFFFFFFF != aiPositions[2]) { vOut.z = PLY::PropertyInstance::ConvertTo( - (*i).alProperties[aiPositions[2]].avList.front(),aiTypes[2]); + GetProperty((*i).alProperties, aiPositions[2]).avList.front(),aiTypes[2]); } // and add them to our nice list @@ -659,28 +677,28 @@ void PLYImporter::LoadVertexColor(std::vector* pvOut) if (0xFFFFFFFF != aiPositions[0]) { - vOut.r = NormalizeColorValue((*i).alProperties[ - aiPositions[0]].avList.front(),aiTypes[0]); + vOut.r = NormalizeColorValue(GetProperty((*i).alProperties, + aiPositions[0]).avList.front(),aiTypes[0]); } if (0xFFFFFFFF != aiPositions[1]) { - vOut.g = NormalizeColorValue((*i).alProperties[ - aiPositions[1]].avList.front(),aiTypes[1]); + vOut.g = NormalizeColorValue(GetProperty((*i).alProperties, + aiPositions[1]).avList.front(),aiTypes[1]); } if (0xFFFFFFFF != aiPositions[2]) { - vOut.b = NormalizeColorValue((*i).alProperties[ - aiPositions[2]].avList.front(),aiTypes[2]); + vOut.b = NormalizeColorValue(GetProperty((*i).alProperties, + aiPositions[2]).avList.front(),aiTypes[2]); } // assume 1.0 for the alpha channel ifit is not set if (0xFFFFFFFF == aiPositions[3])vOut.a = 1.0f; else { - vOut.a = NormalizeColorValue((*i).alProperties[ - aiPositions[3]].avList.front(),aiTypes[3]); + vOut.a = NormalizeColorValue(GetProperty((*i).alProperties, + aiPositions[3]).avList.front(),aiTypes[3]); } // and add them to our nice list @@ -773,11 +791,11 @@ void PLYImporter::LoadFaces(std::vector* pvOut) // parse the list of vertex indices if (0xFFFFFFFF != iProperty) { - const unsigned int iNum = (unsigned int)(*i).alProperties[iProperty].avList.size(); + const unsigned int iNum = (unsigned int)GetProperty((*i).alProperties, iProperty).avList.size(); sFace.mIndices.resize(iNum); std::vector::const_iterator p = - (*i).alProperties[iProperty].avList.begin(); + GetProperty((*i).alProperties, iProperty).avList.begin(); for (unsigned int a = 0; a < iNum;++a,++p) { @@ -789,7 +807,7 @@ void PLYImporter::LoadFaces(std::vector* pvOut) if (0xFFFFFFFF != iMaterialIndex) { sFace.iMaterialIndex = PLY::PropertyInstance::ConvertTo( - (*i).alProperties[iMaterialIndex].avList.front(),eType2); + GetProperty((*i).alProperties, iMaterialIndex).avList.front(),eType2); } pvOut->push_back(sFace); } @@ -800,7 +818,7 @@ void PLYImporter::LoadFaces(std::vector* pvOut) // a value of -1 indicates a restart of the strip bool flip = false; for (std::vector::const_iterator i = pcList->alInstances.begin();i != pcList->alInstances.end();++i) { - const std::vector& quak = (*i).alProperties[iProperty].avList; + const std::vector& quak = GetProperty((*i).alProperties, iProperty).avList; pvOut->reserve(pvOut->size() + quak.size() + (quak.size()>>2u)); int aiTable[2] = {-1,-1}; @@ -851,30 +869,30 @@ void PLYImporter::GetMaterialColor(const std::vector& avL if (0xFFFFFFFF == aiPositions[0])clrOut->r = 0.0f; else { - clrOut->r = NormalizeColorValue(avList[ - aiPositions[0]].avList.front(),aiTypes[0]); + clrOut->r = NormalizeColorValue(GetProperty(avList, + aiPositions[0]).avList.front(),aiTypes[0]); } if (0xFFFFFFFF == aiPositions[1])clrOut->g = 0.0f; else { - clrOut->g = NormalizeColorValue(avList[ - aiPositions[1]].avList.front(),aiTypes[1]); + clrOut->g = NormalizeColorValue(GetProperty(avList, + aiPositions[1]).avList.front(),aiTypes[1]); } if (0xFFFFFFFF == aiPositions[2])clrOut->b = 0.0f; else { - clrOut->b = NormalizeColorValue(avList[ - aiPositions[2]].avList.front(),aiTypes[2]); + clrOut->b = NormalizeColorValue(GetProperty(avList, + aiPositions[2]).avList.front(),aiTypes[2]); } // assume 1.0 for the alpha channel ifit is not set if (0xFFFFFFFF == aiPositions[3])clrOut->a = 1.0f; else { - clrOut->a = NormalizeColorValue(avList[ - aiPositions[3]].avList.front(),aiTypes[3]); + clrOut->a = NormalizeColorValue(GetProperty(avList, + aiPositions[3]).avList.front(),aiTypes[3]); } } @@ -1025,7 +1043,7 @@ void PLYImporter::LoadMaterial(std::vector* pvOut) // handle phong power and shading mode int iMode; if (0xFFFFFFFF != iPhong) { - float fSpec = PLY::PropertyInstance::ConvertTo((*i).alProperties[iPhong].avList.front(),ePhong); + float fSpec = PLY::PropertyInstance::ConvertTo(GetProperty((*i).alProperties, iPhong).avList.front(),ePhong); // if shininess is 0 (and the pow() calculation would therefore always // become 1, not depending on the angle), use gouraud lighting @@ -1043,7 +1061,7 @@ void PLYImporter::LoadMaterial(std::vector* pvOut) // handle opacity if (0xFFFFFFFF != iOpacity) { - float fOpacity = PLY::PropertyInstance::ConvertTo((*i).alProperties[iPhong].avList.front(),eOpacity); + float fOpacity = PLY::PropertyInstance::ConvertTo(GetProperty((*i).alProperties, iPhong).avList.front(),eOpacity); pcHelper->AddProperty(&fOpacity, 1, AI_MATKEY_OPACITY); } From 80bfe7929e2dabddb9c164e40164cd6fb805b7d6 Mon Sep 17 00:00:00 2001 From: DenisMikhalev Date: Mon, 9 Mar 2015 19:51:04 +0300 Subject: [PATCH 037/166] Adds half of file for testing crash PlyLoader --- test/models/PLY/ant-half.ply | 754 +++++++++++++++++++++++++++++++++++ 1 file changed, 754 insertions(+) create mode 100644 test/models/PLY/ant-half.ply diff --git a/test/models/PLY/ant-half.ply b/test/models/PLY/ant-half.ply new file mode 100644 index 000000000..47cf9a9a4 --- /dev/null +++ b/test/models/PLY/ant-half.ply @@ -0,0 +1,754 @@ +ply +format ascii 1.0 +element vertex 486 +property float32 x +property float32 y +property float32 z +element face 912 +property list uint8 int32 vertex_indices +end_header +-1.106 3.844 9.073 +-0.3523 0.4402 11.07 +1.028 3.76 9.209 +0.137 -0.5632 10.73 +2.01 4.503 5.887 +0.07813 5.232 6.794 +-0.7266 3.741 3.839 +-2.789 3.179 5.07 +-0.9185 2.402 3.279 +1.445 2.139 3.394 +-3.114 1.498 5.285 +-1.317 -1.269 8.385 +-0.854 -1.319 5.036 +-0.9351 5.347 0.6162 +-0.8184 2.622 3.235 +0.4875 5.529 -0.2241 +3.193 2.756 1.633 +3.213 1.145 -2.568 +-2.25 1.208 2.767 +0.3225 0.8339 3.323 +1.354 -1.725 1.105 +0.1887 1.133 -5.785 +-3.637 2.696 0.3325 +-3.706 0.8936 -0.5452 +-0.4326 -0.8737 -4.095 +-2.994 -0.4858 0.9023 +0.1252 -2.079 -1.51 +2.856 -0.7459 -1.187 +2.32 3.733 8.13 +2.031 3.721 9.095 +2.819 3.567 8.537 +1.994 2.581 9.711 +2.64 2.491 9.542 +3.187 2.528 8.375 +1.628 2.491 7.518 +1.62 3.721 8.274 +0.9868 2.471 8.914 +1.552 2.106 9.414 +2.657 1.774 8.918 +-1.805 3.733 8.13 +-2.094 3.721 9.095 +-1.306 3.567 8.537 +-2.131 2.581 9.711 +-1.485 2.491 9.542 +-0.938 2.528 8.375 +-2.497 2.491 7.518 +-2.505 3.721 8.274 +-3.138 2.471 8.914 +-2.573 2.106 9.414 +-1.469 1.774 8.918 +1.549 3.638 6.803 +1.355 3.638 6.7 +1.424 5.126 6.883 +1.615 5.083 6.981 +1.169 3.638 6.815 +1.237 5.115 6.997 +1.176 3.638 7.035 +1.241 5.061 7.21 +1.369 3.638 7.138 +1.433 5.018 7.308 +1.556 3.638 7.023 +1.62 5.029 7.194 +1.625 6.512 7.421 +1.811 6.429 7.504 +1.437 6.49 7.531 +1.434 6.386 7.724 +1.619 6.304 7.807 +1.808 6.326 7.697 +1.945 7.702 8.276 +2.121 7.585 8.335 +1.754 7.672 8.38 +1.74 7.525 8.542 +1.916 7.408 8.601 +2.107 7.439 8.497 +2.362 8.615 9.391 +2.526 8.473 9.417 +2.168 8.578 9.487 +2.138 8.398 9.608 +2.303 8.255 9.635 +2.497 8.293 9.539 +2.847 9.189 10.69 +2.998 9.03 10.68 +2.649 9.148 10.78 +2.603 8.947 10.85 +2.753 8.788 10.84 +2.95 8.83 10.75 +3.368 9.385 12.08 +3.503 9.22 12.03 +3.167 9.342 12.16 +3.101 9.134 12.18 +3.236 8.97 12.13 +3.438 9.013 12.06 +3.889 9.189 13.48 +4.01 9.03 13.39 +3.684 9.148 13.54 +3.599 8.947 13.51 +3.719 8.788 13.42 +3.925 8.83 13.36 +4.374 8.615 14.77 +4.481 8.473 14.65 +4.165 8.578 14.83 +4.063 8.398 14.76 +4.17 8.255 14.63 +4.379 8.293 14.57 +4.791 7.702 15.89 +4.886 7.585 15.73 +4.579 7.672 15.94 +4.462 7.525 15.82 +4.556 7.408 15.66 +4.769 7.439 15.62 +5.111 6.512 16.74 +5.196 6.429 16.56 +4.896 6.49 16.78 +4.768 6.386 16.64 +4.853 6.304 16.46 +5.068 6.326 16.42 +-1.141 5.126 6.883 +-1.072 3.638 6.7 +-1.266 3.638 6.803 +-1.332 5.083 6.981 +-0.9541 5.115 6.997 +-0.886 3.638 6.815 +-0.9585 5.061 7.21 +-0.8928 3.638 7.035 +-1.15 5.018 7.308 +-1.086 3.638 7.138 +-1.337 5.029 7.194 +-1.272 3.638 7.023 +-1.342 6.512 7.421 +-1.528 6.429 7.504 +-1.154 6.49 7.531 +-1.151 6.386 7.724 +-1.336 6.304 7.807 +-1.525 6.326 7.697 +-1.662 7.702 8.276 +-1.838 7.585 8.335 +-1.471 7.672 8.38 +-1.457 7.525 8.542 +-1.633 7.408 8.601 +-1.824 7.439 8.497 +-2.079 8.615 9.391 +-2.243 8.473 9.417 +-1.885 8.578 9.487 +-1.855 8.398 9.608 +-2.02 8.255 9.635 +-2.214 8.293 9.539 +-2.564 9.189 10.69 +-2.715 9.03 10.68 +-2.366 9.148 10.78 +-2.32 8.947 10.85 +-2.47 8.788 10.84 +-2.667 8.83 10.75 +-3.085 9.385 12.08 +-3.22 9.22 12.03 +-2.884 9.342 12.16 +-2.818 9.134 12.18 +-2.953 8.97 12.13 +-3.155 9.013 12.06 +-3.606 9.189 13.48 +-3.726 9.03 13.39 +-3.4 9.148 13.54 +-3.316 8.947 13.51 +-3.437 8.788 13.42 +-3.642 8.83 13.36 +-4.091 8.615 14.77 +-4.198 8.473 14.65 +-3.882 8.578 14.83 +-3.78 8.398 14.76 +-3.887 8.255 14.63 +-4.096 8.293 14.57 +-4.508 7.702 15.89 +-4.603 7.585 15.73 +-4.296 7.672 15.94 +-4.179 7.525 15.82 +-4.273 7.408 15.66 +-4.485 7.439 15.62 +-4.828 6.512 16.74 +-4.913 6.429 16.56 +-4.613 6.49 16.78 +-4.484 6.386 16.64 +-4.57 6.304 16.46 +-4.784 6.326 16.42 +-1.519 -2.27 2.989 +-1.987 -1.082 3.408 +-2.709 -1.989 3.536 +-1.513 -2.259 2.974 +-2.524 -1.536 2.471 +-4.318 -0.3933 4.187 +-4.692 -0.6204 3.123 +-6.274 0.9227 4.173 +-5.533 1.852 4.043 +-6.084 1.387 3.082 +-6.844 2.279 4.015 +-6.83 1.957 4.012 +-6.886 2.118 3.737 +-7.536 1.346 4.658 +-7.229 0.9683 4.298 +-8.053 1.724 3.821 +-7.747 1.346 3.46 +-9.085 -0.1982 5.078 +-9.347 -0.1982 3.597 +-8.702 -0.7393 4.247 +-10.91 -1.528 5.154 +-10.39 -2.11 4.847 +-11.08 -1.528 4.148 +-10.49 -2.11 4.26 +-11.58 -2.509 4.768 +-11.57 -2.523 4.76 +-11.59 -2.509 4.742 +-11.57 -2.523 4.744 +-12.39 -3.546 5.269 +-11.93 -3.852 5.034 +-12.52 -3.546 4.548 +-12.87 -4.803 5.622 +-12.58 -5.09 4.606 +-13.49 -4.516 4.767 +-13.11 -6.264 5.38 +-14.78 -6.803 5.643 +-14.49 -7.092 4.622 +-15.35 -8.042 5.637 +-14.73 -8.43 5.528 +-15.15 -8.236 4.95 +-15.78 -9.378 5.503 +-15.77 -9.385 5.497 +-15.78 -9.375 5.495 +-15.78 -9.378 5.486 +-15.77 -9.383 5.484 +-1.522 -2.262 -1.24 +-1.519 -2.258 -1.231 +-1.522 -2.262 -1.222 +-1.529 -2.27 -1.222 +-1.529 -2.27 -1.24 +-2.061 -1.082 -0.8906 +-2.428 -1.536 -1.907 +-3.082 -0.4963 -0.5522 +-3.082 -0.4963 -1.91 +-3.759 -1.333 -1.628 +-5.567 0.1257 -0.8323 +-5.665 1.852 -0.8818 +-6.417 0.9227 -0.8818 +-6.041 1.387 -1.924 +-6.95 2.279 -1.137 +-6.937 1.957 -1.326 +-6.943 2.118 -1.418 +-7.378 0.9683 -0.9246 +-8.108 1.724 -0.9246 +-7.743 1.346 -1.84 +-8.797 0.8371 -0.6052 +-9.793 0.269 -1.611 +-8.891 -0.6654 -1.611 +-10.59 -2.11 -0.9326 +-10.57 -0.523 -0.8679 +-11.3 -1.375 -0.9326 +-10.94 -1.742 -1.823 +-11.75 -2.506 -1.223 +-11.73 -2.523 -1.223 +-11.74 -2.514 -1.247 +-12.76 -3.466 -1.017 +-12.14 -3.852 -1.017 +-12.45 -3.659 -1.656 +-13.16 -4.803 -0.6001 +-12.7 -5.09 -1.55 +-13.62 -4.516 -1.55 +-13.36 -6.264 -0.8809 +-15.05 -6.803 -0.9114 +-14.58 -7.092 -1.866 +-15.6 -8.042 -1.016 +-14.98 -8.43 -1.016 +-15.29 -8.236 -1.658 +-16.01 -9.378 -1.222 +-15.99 -9.385 -1.226 +-16.01 -9.375 -1.231 +-16.01 -9.378 -1.24 +-16 -9.383 -1.24 +-1.522 -2.27 -4.918 +-2.105 -1.082 -4.684 +-2.827 -1.989 -4.812 +-1.513 -2.262 -4.935 +-2.29 -1.536 -5.749 +-4.562 -0.3933 -4.75 +-4.55 -0.6204 -5.878 +-6.395 0.9227 -5.432 +-5.655 1.852 -5.302 +-5.844 1.387 -6.393 +-6.877 2.279 -5.776 +-6.863 1.957 -5.773 +-6.821 2.118 -6.051 +-7.747 1.346 -5.408 +-7.335 0.9683 -5.641 +-7.947 1.724 -6.372 +-7.536 1.346 -6.605 +-9.347 -0.1982 -5.543 +-9.085 -0.1982 -7.025 +-8.702 -0.7393 -6.193 +-11.08 -1.528 -6.095 +-10.49 -2.11 -6.206 +-10.91 -1.528 -7.101 +-10.39 -2.11 -6.794 +-11.59 -2.509 -6.689 +-11.57 -2.523 -6.691 +-11.58 -2.509 -6.715 +-11.57 -2.523 -6.707 +-12.52 -3.546 -6.495 +-12.01 -3.852 -6.559 +-12.39 -3.546 -7.217 +-13.09 -4.803 -6.326 +-12.47 -5.09 -7.18 +-13.38 -4.516 -7.341 +-13.24 -6.264 -6.637 +-14.89 -6.803 -6.96 +-14.27 -7.092 -7.819 +-15.42 -8.042 -7.159 +-14.8 -8.43 -7.051 +-15 -8.236 -7.738 +-15.78 -9.378 -7.432 +-15.77 -9.385 -7.434 +-15.78 -9.375 -7.442 +-15.78 -9.378 -7.45 +-15.77 -9.383 -7.448 +1.522 -2.27 -4.918 +1.511 -2.258 -4.926 +1.513 -2.262 -4.935 +2.828 -1.989 -4.812 +2.105 -1.082 -4.684 +2.29 -1.536 -5.749 +4.55 -0.6204 -5.878 +4.562 -0.3933 -4.75 +6.395 0.9227 -5.432 +5.655 1.852 -5.302 +5.844 1.387 -6.393 +6.877 2.279 -5.776 +6.863 1.957 -5.773 +6.821 2.118 -6.051 +7.335 0.9683 -5.641 +7.747 1.346 -5.408 +7.947 1.724 -6.372 +7.536 1.346 -6.605 +9.347 -0.1982 -5.543 +9.086 -0.1982 -7.025 +8.702 -0.7393 -6.193 +11.08 -1.528 -6.095 +10.49 -2.11 -6.206 +10.91 -1.528 -7.101 +10.39 -2.11 -6.794 +11.59 -2.509 -6.689 +11.57 -2.523 -6.691 +11.58 -2.509 -6.715 +11.57 -2.523 -6.707 +12.52 -3.546 -6.495 +12.01 -3.852 -6.559 +12.39 -3.546 -7.217 +12.47 -5.09 -7.18 +13.09 -4.803 -6.326 +13.38 -4.516 -7.341 +13.24 -6.264 -6.637 +14.89 -6.803 -6.96 +14.27 -7.092 -7.819 +15.42 -8.042 -7.159 +14.8 -8.43 -7.051 +15 -8.236 -7.738 +15.78 -9.378 -7.432 +15.77 -9.385 -7.434 +15.78 -9.375 -7.442 +15.78 -9.378 -7.45 +15.77 -9.383 -7.448 +-0.9592 -0.9547 10.35 +0.007813 0.3928 11.6 +-0.7324 1.062 10.63 +0.007813 -1.855 11.37 +0.007813 -2.459 10.63 +0.007813 0.3928 9.662 +-0.3928 1.509 10.63 +0.7327 1.062 10.63 +-0.007813 0.3928 11.6 +0.9595 -0.9547 10.35 +-0.007813 -1.855 11.37 +-0.007813 -2.459 10.63 +-0.007813 0.3928 9.662 +0.3931 1.509 10.63 +1.513 -2.262 2.988 +1.511 -2.258 2.979 +1.516 -2.262 2.97 +1.522 -2.27 2.971 +1.52 -2.27 2.989 +1.987 -1.082 3.408 +2.524 -1.536 2.471 +2.933 -0.4963 3.919 +3.168 -0.4963 2.581 +3.786 -1.333 2.977 +5.429 0.1257 4.074 +5.534 1.852 4.042 +6.274 0.9227 4.173 +6.085 1.387 3.082 +6.863 1.957 3.827 +6.844 2.279 4.015 +6.886 2.118 3.737 +7.229 0.9683 4.298 +7.947 1.724 4.425 +7.747 1.346 3.46 +8.57 0.8371 4.859 +9.726 0.269 4.042 +8.838 -0.6654 3.885 +10.39 -2.11 4.847 +10.37 -0.523 4.909 +11.09 -1.375 4.97 +10.89 -1.742 4.032 +11.59 -2.506 4.763 +11.57 -2.523 4.76 +11.58 -2.514 4.739 +12.55 -3.466 5.142 +11.93 -3.852 5.034 +12.35 -3.659 4.459 +12.58 -5.09 4.606 +12.87 -4.803 5.622 +13.49 -4.516 4.767 +13.11 -6.264 5.38 +14.78 -6.803 5.643 +14.49 -7.092 4.622 +15.35 -8.042 5.637 +14.73 -8.43 5.528 +15.15 -8.236 4.95 +15.78 -9.378 5.503 +15.77 -9.385 5.497 +15.78 -9.375 5.495 +15.78 -9.378 5.486 +15.77 -9.383 5.484 +1.529 -2.27 -1.222 +1.519 -2.258 -1.231 +1.522 -2.262 -1.24 +2.795 -1.989 -0.8906 +2.062 -1.082 -0.8906 +2.428 -1.536 -1.907 +4.677 -0.6204 -1.642 +4.493 -0.3933 -0.5283 +6.417 0.9227 -0.8818 +5.665 1.852 -0.8818 +6.041 1.387 -1.924 +6.951 2.279 -1.137 +6.937 1.957 -1.137 +6.944 2.118 -1.418 +7.379 0.9683 -0.9246 +7.743 1.346 -0.623 +8.108 1.724 -1.538 +7.743 1.346 -1.84 +9.343 -0.1982 -0.4792 +9.343 -0.1982 -1.983 +8.82 -0.7393 -1.231 +11.15 -1.528 -0.7207 +10.59 -2.11 -0.9326 +11.15 -1.528 -1.742 +10.59 -2.11 -1.53 +11.75 -2.509 -1.218 +11.73 -2.523 -1.223 +11.75 -2.509 -1.245 +11.73 -2.523 -1.239 +12.63 -3.546 -0.8647 +12.14 -3.852 -1.017 +12.63 -3.546 -1.598 +12.7 -5.09 -1.55 +13.16 -4.803 -0.6001 +13.62 -4.516 -1.55 +13.36 -6.264 -0.8804 +15.05 -6.803 -0.9111 +14.58 -7.092 -1.866 +15.6 -8.042 -1.016 +14.98 -8.43 -1.016 +15.29 -8.236 -1.658 +16.01 -9.378 -1.222 +15.99 -9.385 -1.226 +16.01 -9.375 -1.231 +16.01 -9.378 -1.24 +16 -9.383 -1.24 +-0.7932 4.462 -7.734 +-0.3843 1.974 -5.495 +1.95 3.241 -7.348 +1.167 0.6428 -6.109 +3.808 0.1871 -9.572 +3.644 1.688 -11.88 +0.07617 4.961 -10.12 +3.28 -0.5704 -14.15 +0.2488 -1.848 -16.78 +-0.9744 -2.686 -16.57 +0.7307 -3.159 -16.47 +-2.678 2.963 -8.185 +-2.616 -2.779 -12.24 +-1.159 -1.533 -8.922 +3 0 1 2 +3 1 3 2 +3 2 4 5 +3 4 6 5 +3 5 6 7 +3 7 6 8 +3 2 3 9 +3 2 9 4 +3 4 9 6 +3 6 9 8 +3 5 0 2 +3 5 7 0 +3 8 10 7 +3 7 10 0 +3 0 10 1 +3 1 10 11 +3 1 11 3 +3 10 12 11 +3 11 12 3 +3 3 12 9 +3 10 8 12 +3 12 8 9 +3 13 14 15 +3 15 14 16 +3 17 15 16 +3 18 19 14 +3 14 19 16 +3 19 20 16 +3 15 17 21 +3 15 21 13 +3 14 13 18 +3 21 22 13 +3 13 22 18 +3 21 23 22 +3 21 24 23 +3 23 25 22 +3 22 25 18 +3 18 25 20 +3 18 20 19 +3 23 26 25 +3 25 26 20 +3 23 24 26 +3 26 24 27 +3 26 27 20 +3 20 27 16 +3 24 21 27 +3 27 21 17 +3 27 17 16 +3 28 29 30 +3 31 32 29 +3 29 32 30 +3 32 33 30 +3 30 33 28 +3 28 33 34 +3 28 34 35 +3 35 34 36 +3 28 35 29 +3 35 36 29 +3 29 36 31 +3 36 37 31 +3 31 37 32 +3 37 38 32 +3 32 38 33 +3 36 34 37 +3 37 34 38 +3 38 34 33 +3 39 40 41 +3 42 43 40 +3 40 43 41 +3 43 44 41 +3 41 44 39 +3 39 44 45 +3 39 45 46 +3 46 45 47 +3 39 46 40 +3 46 47 40 +3 40 47 42 +3 47 48 42 +3 42 48 43 +3 48 49 43 +3 43 49 44 +3 47 45 48 +3 48 45 49 +3 49 45 44 +3 50 51 52 +3 50 52 53 +3 51 54 55 +3 51 55 52 +3 54 56 57 +3 54 57 55 +3 56 58 59 +3 56 59 57 +3 58 60 61 +3 58 61 59 +3 60 50 53 +3 60 53 61 +3 53 52 62 +3 53 62 63 +3 52 55 64 +3 52 64 62 +3 55 57 65 +3 55 65 64 +3 57 59 66 +3 57 66 65 +3 59 61 67 +3 59 67 66 +3 61 53 63 +3 61 63 67 +3 63 62 68 +3 63 68 69 +3 62 64 70 +3 62 70 68 +3 64 65 71 +3 64 71 70 +3 65 66 72 +3 65 72 71 +3 66 67 73 +3 66 73 72 +3 67 63 69 +3 67 69 73 +3 69 68 74 +3 69 74 75 +3 68 70 76 +3 68 76 74 +3 70 71 77 +3 70 77 76 +3 71 72 78 +3 71 78 77 +3 72 73 79 +3 72 79 78 +3 73 69 75 +3 73 75 79 +3 75 74 80 +3 75 80 81 +3 74 76 82 +3 74 82 80 +3 76 77 83 +3 76 83 82 +3 77 78 84 +3 77 84 83 +3 78 79 85 +3 78 85 84 +3 79 75 81 +3 79 81 85 +3 81 80 86 +3 81 86 87 +3 80 82 88 +3 80 88 86 +3 82 83 89 +3 82 89 88 +3 83 84 90 +3 83 90 89 +3 84 85 91 +3 84 91 90 +3 85 81 87 +3 85 87 91 +3 87 86 92 +3 87 92 93 +3 86 88 94 +3 86 94 92 +3 88 89 95 +3 88 95 94 +3 89 90 96 +3 89 96 95 +3 90 91 97 +3 90 97 96 +3 91 87 93 +3 91 93 97 +3 93 92 98 +3 93 98 99 +3 92 94 100 +3 92 100 98 +3 94 95 101 +3 94 101 100 +3 95 96 102 +3 95 102 101 +3 96 97 103 +3 96 103 102 +3 97 93 99 +3 97 99 103 +3 99 98 104 +3 99 104 105 +3 98 100 106 +3 98 106 104 +3 100 101 107 +3 100 107 106 +3 101 102 108 +3 101 108 107 +3 102 103 109 +3 102 109 108 +3 103 99 105 +3 103 105 109 +3 105 104 110 +3 105 110 111 +3 104 106 112 +3 104 112 110 +3 106 107 113 +3 106 113 112 +3 107 108 114 +3 107 114 113 +3 108 109 115 +3 108 115 114 +3 109 105 111 +3 109 111 115 +3 54 51 50 +3 56 54 50 +3 58 56 50 +3 60 58 50 +3 112 113 110 +3 113 114 110 +3 114 115 110 +3 115 111 110 +3 116 117 118 +3 119 116 118 +3 120 121 117 +3 116 120 117 +3 122 123 121 +3 120 122 121 +3 124 125 123 +3 122 124 123 +3 126 127 125 +3 124 126 125 +3 119 118 127 +3 126 119 127 +3 128 116 119 +3 129 128 119 +3 130 120 116 +3 128 130 116 +3 131 122 120 +3 130 131 120 +3 132 124 122 +3 131 132 122 +3 133 126 124 +3 132 133 124 +3 129 119 126 +3 133 129 126 +3 134 128 129 +3 135 134 129 +3 136 130 128 +3 134 136 128 +3 137 131 130 +3 136 137 130 +3 138 132 131 +3 137 138 131 +3 139 133 132 +3 138 139 132 +3 135 129 133 +3 139 135 133 +3 140 134 135 +3 141 140 135 +3 142 136 134 +3 140 142 134 +3 143 137 136 +3 142 143 136 +3 144 138 137 +3 143 144 137 +3 145 139 138 +3 144 145 138 +3 141 135 139 From fa8cdb241d1c131c9b46a5d6bee70f6d3fb588f2 Mon Sep 17 00:00:00 2001 From: DenisMikhalev Date: Tue, 10 Mar 2015 09:18:23 +0300 Subject: [PATCH 038/166] Move ply file to models-nonbsd dir --- test/{models => models-nonbsd}/PLY/ant-half.ply | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{models => models-nonbsd}/PLY/ant-half.ply (100%) diff --git a/test/models/PLY/ant-half.ply b/test/models-nonbsd/PLY/ant-half.ply similarity index 100% rename from test/models/PLY/ant-half.ply rename to test/models-nonbsd/PLY/ant-half.ply From 615041ba159c866f95d44e477666f86a8b1ccab6 Mon Sep 17 00:00:00 2001 From: DenisMikhalev Date: Tue, 10 Mar 2015 15:00:49 +0300 Subject: [PATCH 039/166] Add license file for ant-half.ply --- test/models-nonbsd/PLY/ant-half.ply.license | 165 ++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 test/models-nonbsd/PLY/ant-half.ply.license diff --git a/test/models-nonbsd/PLY/ant-half.ply.license b/test/models-nonbsd/PLY/ant-half.ply.license new file mode 100644 index 000000000..cca7fc278 --- /dev/null +++ b/test/models-nonbsd/PLY/ant-half.ply.license @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. From d9d7dd31ea5eb23f9ed9aac2625e8ab7fca0aba1 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 11 Mar 2015 19:05:37 +0100 Subject: [PATCH 040/166] fix linker error: undefined references to openddl_parser. Signed-off-by: Kim Kulling --- tools/assimp_cmd/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/assimp_cmd/CMakeLists.txt b/tools/assimp_cmd/CMakeLists.txt index b549f9b10..78b3139ee 100644 --- a/tools/assimp_cmd/CMakeLists.txt +++ b/tools/assimp_cmd/CMakeLists.txt @@ -28,7 +28,7 @@ IF( WIN32 ) MAIN_DEPENDENCY assimp) ENDIF( WIN32 ) -TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES}) +TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES} openddl_parser) SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES OUTPUT_NAME assimp ) From 90a07713c01840cdbd28d3a9770866fe2ce23136 Mon Sep 17 00:00:00 2001 From: Wil Shipley Date: Wed, 11 Mar 2015 16:55:21 -0700 Subject: [PATCH 041/166] Added 'const' to () operator on CompareVector So it can build on clang. --- code/IFCUtil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/IFCUtil.cpp b/code/IFCUtil.cpp index 6fcda33c7..800ffd3ed 100644 --- a/code/IFCUtil.cpp +++ b/code/IFCUtil.cpp @@ -236,7 +236,7 @@ IfcVector3 TempMesh::ComputeLastPolygonNormal(bool normalize) const struct CompareVector { - bool operator () (const IfcVector3& a, const IfcVector3& b) + bool operator () (const IfcVector3& a, const IfcVector3& b) const { IfcVector3 d = a - b; IfcFloat eps = 1e-6; From ead3b26ea9df33c9ef57c5ffbd24a5a535effe3f Mon Sep 17 00:00:00 2001 From: arris69 Date: Thu, 12 Mar 2015 20:37:33 +0100 Subject: [PATCH 042/166] no one ever tried this java stuff??? (crashes if the model has a lot of meshes...) --- port/jassimp/jassimp-native/src/jassimp.cpp | 76 +++++++++++++++++---- 1 file changed, 62 insertions(+), 14 deletions(-) diff --git a/port/jassimp/jassimp-native/src/jassimp.cpp b/port/jassimp/jassimp-native/src/jassimp.cpp index db803f106..1eeafe304 100644 --- a/port/jassimp/jassimp-native/src/jassimp.cpp +++ b/port/jassimp/jassimp-native/src/jassimp.cpp @@ -5,12 +5,30 @@ #ifdef JNI_LOG +#ifdef ANDROID +#include +#define lprintf(...) __android_log_print(ANDROID_LOG_VERBOSE, __func__, __VA_ARGS__) +#else #define lprintf(...) printf (__VA_ARGS__) +#endif /* ANDROID */ #else #define lprintf #endif +static void dumpRefTable(JNIEnv *env){ + /* DEBUG STUFF */ + jclass clazz = env->FindClass("dalvik/system/VMDebug"); + jmethodID dump_mid = env->GetStaticMethodID( clazz, "dumpReferenceTables", "()V" ); + env->CallStaticVoidMethod( clazz, dump_mid ); + env->DeleteLocalRef(clazz); + + /*jint res = env->EnsureLocalCapacity(20); + if(res < 0){ + lprintf("too many meshes on the model!\n"); + }*/ +} + static bool createInstance(JNIEnv *env, const char* className, jobject& newInstance) { jclass clazz = env->FindClass(className); @@ -30,6 +48,7 @@ static bool createInstance(JNIEnv *env, const char* className, jobject& newInsta } newInstance = env->NewObject(clazz, ctr_id); + env->DeleteLocalRef(clazz); if (NULL == newInstance) { @@ -41,7 +60,7 @@ static bool createInstance(JNIEnv *env, const char* className, jobject& newInsta } -static bool createInstance(JNIEnv *env, const char* className, const char* signature, const jvalue* params, jobject& newInstance) +static bool createInstance(JNIEnv *env, const char* className, const char* signature,/* const*/ jvalue* params, jobject& newInstance) { jclass clazz = env->FindClass(className); @@ -60,6 +79,7 @@ static bool createInstance(JNIEnv *env, const char* className, const char* signa } newInstance = env->NewObjectA(clazz, ctr_id, params); + env->DeleteLocalRef(clazz); if (NULL == newInstance) { @@ -82,6 +102,7 @@ static bool getField(JNIEnv *env, jobject object, const char* fieldName, const c } jfieldID fieldId = env->GetFieldID(clazz, fieldName, signature); + env->DeleteLocalRef(clazz); if (NULL == fieldId) { @@ -106,6 +127,7 @@ static bool setIntField(JNIEnv *env, jobject object, const char* fieldName, jint } jfieldID fieldId = env->GetFieldID(clazz, fieldName, "I"); + env->DeleteLocalRef(clazz); if (NULL == fieldId) { @@ -130,6 +152,7 @@ static bool setFloatField(JNIEnv *env, jobject object, const char* fieldName, jf } jfieldID fieldId = env->GetFieldID(clazz, fieldName, "F"); + env->DeleteLocalRef(clazz); if (NULL == fieldId) { @@ -154,6 +177,7 @@ static bool setObjectField(JNIEnv *env, jobject object, const char* fieldName, c } jfieldID fieldId = env->GetFieldID(clazz, fieldName, signature); + env->DeleteLocalRef(clazz); if (NULL == fieldId) { @@ -192,7 +216,7 @@ static bool getStaticField(JNIEnv *env, const char* className, const char* field static bool call(JNIEnv *env, jobject object, const char* typeName, const char* methodName, - const char* signature, const jvalue* params) + const char* signature,/* const*/ jvalue* params) { jclass clazz = env->FindClass(typeName); @@ -203,6 +227,7 @@ static bool call(JNIEnv *env, jobject object, const char* typeName, const char* } jmethodID mid = env->GetMethodID(clazz, methodName, signature); + env->DeleteLocalRef(clazz); if (NULL == mid) { @@ -210,6 +235,27 @@ static bool call(JNIEnv *env, jobject object, const char* typeName, const char* return false; } + jboolean jReturnValue = env->CallBooleanMethod(object, mid, params[0].l); + + return (bool)jReturnValue; +} +static bool callv(JNIEnv *env, jobject object, const char* typeName, + const char* methodName, const char* signature,/* const*/ jvalue* params) { + jclass clazz = env->FindClass(typeName); + + if (NULL == clazz) { + lprintf("could not find class %s\n", typeName); + return false; + } + + jmethodID mid = env->GetMethodID(clazz, methodName, signature); + env->DeleteLocalRef(clazz); + + if (NULL == mid) { + lprintf("could not find method %s with signature %s in type %s\n", methodName, signature, typeName); + return false; + } + env->CallVoidMethodA(object, mid, params); return true; @@ -217,7 +263,7 @@ static bool call(JNIEnv *env, jobject object, const char* typeName, const char* static bool callStaticObject(JNIEnv *env, const char* typeName, const char* methodName, - const char* signature, const jvalue* params, jobject& returnValue) + const char* signature,/* const*/ jvalue* params, jobject& returnValue) { jclass clazz = env->FindClass(typeName); @@ -338,7 +384,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) /* set general mesh data in java */ jvalue setTypesParams[1]; setTypesParams[0].i = cMesh->mPrimitiveTypes; - if (!call(env, jMesh, "jassimp/AiMesh", "setPrimitiveTypes", "(I)V", setTypesParams)) + if (!callv(env, jMesh, "jassimp/AiMesh", "setPrimitiveTypes", "(I)V", setTypesParams)) { return false; } @@ -380,7 +426,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) allocateBuffersParams[1].i = cMesh->mNumFaces; allocateBuffersParams[2].z = isPureTriangle; allocateBuffersParams[3].i = (jint) faceBufferSize; - if (!call(env, jMesh, "jassimp/AiMesh", "allocateBuffers", "(IIZI)V", allocateBuffersParams)) + if (!callv(env, jMesh, "jassimp/AiMesh", "allocateBuffers", "(IIZI)V", allocateBuffersParams)) { return false; } @@ -470,7 +516,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) jvalue allocateDataChannelParams[2]; allocateDataChannelParams[0].i = 0; allocateDataChannelParams[1].i = 0; - if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) + if (!callv(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) { lprintf("could not allocate normal data channel\n"); return false; @@ -491,7 +537,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) jvalue allocateDataChannelParams[2]; allocateDataChannelParams[0].i = 1; allocateDataChannelParams[1].i = 0; - if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) + if (!callv(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) { lprintf("could not allocate tangents data channel\n"); return false; @@ -512,7 +558,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) jvalue allocateDataChannelParams[2]; allocateDataChannelParams[0].i = 2; allocateDataChannelParams[1].i = 0; - if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) + if (!callv(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) { lprintf("could not allocate bitangents data channel\n"); return false; @@ -535,7 +581,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) jvalue allocateDataChannelParams[2]; allocateDataChannelParams[0].i = 3; allocateDataChannelParams[1].i = c; - if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) + if (!callv(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) { lprintf("could not allocate colorset data channel\n"); return false; @@ -574,7 +620,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) } allocateDataChannelParams[1].i = c; - if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) + if (!callv(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams)) { lprintf("could not allocate texture coordinates data channel\n"); return false; @@ -701,6 +747,8 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) } } } + env->DeleteLocalRef(jMeshes); + env->DeleteLocalRef(jMesh); } return true; @@ -719,7 +767,7 @@ static bool loadSceneNode(JNIEnv *env, const aiNode *cNode, jobject parent, jobj wrapMatParams[0].l = jMatrixArr; jobject jMatrix; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapMatrix", "([F)Ljava/lang/Object;", wrapMatParams, jMatrix)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapMatrix", "([F)Ljava/lang/Object;", wrapMatParams, jMatrix)) { return false; } @@ -749,7 +797,7 @@ static bool loadSceneNode(JNIEnv *env, const aiNode *cNode, jobject parent, jobj wrapNodeParams[2].l = jMeshrefArr; wrapNodeParams[3].l = jNodeName; jobject jNode; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapSceneNode", + if (!callStaticObject(env, "jassimp/Jassimp", "wrapSceneNode", "(Ljava/lang/Object;Ljava/lang/Object;[ILjava/lang/String;)Ljava/lang/Object;", wrapNodeParams, jNode)) { return false; @@ -842,7 +890,7 @@ static bool loadMaterials(JNIEnv *env, const aiScene* cScene, jobject& jScene) setNumberParams[0].i = ttInd; setNumberParams[1].i = num; - if (!call(env, jMaterial, "jassimp/AiMaterial", "setTextureNumber", "(II)V", setNumberParams)) + if (!callv(env, jMaterial, "jassimp/AiMaterial", "setTextureNumber", "(II)V", setNumberParams)) { return false; } @@ -880,7 +928,7 @@ static bool loadMaterials(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapColorParams[0].f = ((float*) cProperty->mData)[0]; wrapColorParams[1].f = ((float*) cProperty->mData)[1]; wrapColorParams[2].f = ((float*) cProperty->mData)[2]; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jData)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jData)) { return false; } From 8b22ba25baa63e4ce30e5f3cd5ecb68f50993207 Mon Sep 17 00:00:00 2001 From: arris69 Date: Thu, 12 Mar 2015 21:24:49 +0100 Subject: [PATCH 043/166] removed debug function and add buildfile for android ndk-build command --- port/jassimp/jassimp-native/Android.mk | 13 +++++++++++++ port/jassimp/jassimp-native/src/jassimp.cpp | 14 -------------- 2 files changed, 13 insertions(+), 14 deletions(-) create mode 100644 port/jassimp/jassimp-native/Android.mk diff --git a/port/jassimp/jassimp-native/Android.mk b/port/jassimp/jassimp-native/Android.mk new file mode 100644 index 000000000..94b233b32 --- /dev/null +++ b/port/jassimp/jassimp-native/Android.mk @@ -0,0 +1,13 @@ +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_MODULE := jassimp +LOCAL_SRC_FILES := src/jassimp.cpp + +LOCAL_CFLAGS += -DJNI_LOG + +#LOCAL_STATIC_LIBRARIES := assimp_static +LOCAL_SHARED_LIBRARIES := assimp +LOCAL_LDLIBS := -llog + +include $(BUILD_SHARED_LIBRARY) diff --git a/port/jassimp/jassimp-native/src/jassimp.cpp b/port/jassimp/jassimp-native/src/jassimp.cpp index 1eeafe304..cc064bd3e 100644 --- a/port/jassimp/jassimp-native/src/jassimp.cpp +++ b/port/jassimp/jassimp-native/src/jassimp.cpp @@ -15,20 +15,6 @@ #define lprintf #endif - -static void dumpRefTable(JNIEnv *env){ - /* DEBUG STUFF */ - jclass clazz = env->FindClass("dalvik/system/VMDebug"); - jmethodID dump_mid = env->GetStaticMethodID( clazz, "dumpReferenceTables", "()V" ); - env->CallStaticVoidMethod( clazz, dump_mid ); - env->DeleteLocalRef(clazz); - - /*jint res = env->EnsureLocalCapacity(20); - if(res < 0){ - lprintf("too many meshes on the model!\n"); - }*/ -} - static bool createInstance(JNIEnv *env, const char* className, jobject& newInstance) { jclass clazz = env->FindClass(className); From 9094770d38fd278c09bcbced06d03e771f11bf11 Mon Sep 17 00:00:00 2001 From: arris69 Date: Fri, 13 Mar 2015 12:52:03 +0100 Subject: [PATCH 044/166] fixed light and camera access. --- port/jassimp/jassimp-native/src/jassimp.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/port/jassimp/jassimp-native/src/jassimp.cpp b/port/jassimp/jassimp-native/src/jassimp.cpp index cc064bd3e..14d9cb2d4 100644 --- a/port/jassimp/jassimp-native/src/jassimp.cpp +++ b/port/jassimp/jassimp-native/src/jassimp.cpp @@ -703,7 +703,7 @@ static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapParams[0].l = jMatrixArr; jobject jMatrix; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapMatrix", "([F)Ljava/lang/Object;", wrapParams, jMatrix)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapMatrix", "([F)Ljava/lang/Object;", wrapParams, jMatrix)) { return false; } @@ -939,7 +939,7 @@ static bool loadMaterials(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapColorParams[1].f = ((float*) cProperty->mData)[1]; wrapColorParams[2].f = ((float*) cProperty->mData)[2]; wrapColorParams[3].f = ((float*) cProperty->mData)[3]; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor4", "(FFFF)Ljava/lang/Object;", wrapColorParams, jData)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapColor4", "(FFFF)Ljava/lang/Object;", wrapColorParams, jData)) { return false; } @@ -1171,7 +1171,7 @@ static bool loadLights(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapColorParams[1].f = cLight->mColorDiffuse.g; wrapColorParams[2].f = cLight->mColorDiffuse.b; jobject jDiffuse; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jDiffuse)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jDiffuse)) { return false; } @@ -1180,7 +1180,7 @@ static bool loadLights(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapColorParams[1].f = cLight->mColorSpecular.g; wrapColorParams[2].f = cLight->mColorSpecular.b; jobject jSpecular; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jSpecular)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jSpecular)) { return false; } @@ -1189,7 +1189,7 @@ static bool loadLights(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapColorParams[1].f = cLight->mColorAmbient.g; wrapColorParams[2].f = cLight->mColorAmbient.b; jobject jAmbient; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jAmbient)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jAmbient)) { return false; } @@ -1201,7 +1201,7 @@ static bool loadLights(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapVec3Params[1].f = cLight->mPosition.y; wrapVec3Params[2].f = cLight->mPosition.z; jobject jPosition; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapVec3Params, jPosition)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapVec3Params, jPosition)) { return false; } @@ -1210,7 +1210,7 @@ static bool loadLights(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapVec3Params[1].f = cLight->mPosition.y; wrapVec3Params[2].f = cLight->mPosition.z; jobject jDirection; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapVec3Params, jDirection)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapVec3Params, jDirection)) { return false; } @@ -1276,7 +1276,7 @@ static bool loadCameras(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapPositionParams[1].f = cCamera->mPosition.y; wrapPositionParams[2].f = cCamera->mPosition.z; jobject jPosition; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jPosition)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jPosition)) { return false; } @@ -1285,7 +1285,7 @@ static bool loadCameras(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapPositionParams[1].f = cCamera->mUp.y; wrapPositionParams[2].f = cCamera->mUp.z; jobject jUp; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jUp)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jUp)) { return false; } @@ -1294,7 +1294,7 @@ static bool loadCameras(JNIEnv *env, const aiScene* cScene, jobject& jScene) wrapPositionParams[1].f = cCamera->mLookAt.y; wrapPositionParams[2].f = cCamera->mLookAt.z; jobject jLookAt; - if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jLookAt)) + if (!callStaticObject(env, "jassimp/Jassimp", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jLookAt)) { return false; } From ad9d178f0ad71f39fbe5d1e289c611b079d3a593 Mon Sep 17 00:00:00 2001 From: ulf Date: Fri, 13 Mar 2015 15:13:53 +0100 Subject: [PATCH 045/166] - Bugfix: IfcLoader lost nodes and geometry when they were stored in subnodes of IfcSpace and the setting "Filter IfcSpace" was enabled --- code/IFCLoader.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/IFCLoader.cpp b/code/IFCLoader.cpp index b6e6e0289..24ed772e0 100644 --- a/code/IFCLoader.cpp +++ b/code/IFCLoader.cpp @@ -677,10 +677,11 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion const STEP::DB::RefMap& refs = conv.db.GetRefs(); // skip over space and annotation nodes - usually, these have no meaning in Assimp's context + bool skipGeometry = false; if(conv.settings.skipSpaceRepresentations) { if(const IfcSpace* const space = el.ToPtr()) { IFCImporter::LogDebug("skipping IfcSpace entity due to importer settings"); - return NULL; + skipGeometry = true; } } @@ -850,8 +851,10 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion conv.apply_openings = &openings; } - ProcessProductRepresentation(el,nd.get(),subnodes,conv); - conv.apply_openings = conv.collect_openings = NULL; + if (!skipGeometry) { + ProcessProductRepresentation(el,nd.get(),subnodes,conv); + conv.apply_openings = conv.collect_openings = NULL; + } if (subnodes.size()) { nd->mChildren = new aiNode*[subnodes.size()](); From 8b1b12682f039f2d5831aa39de609edc10ff47fd Mon Sep 17 00:00:00 2001 From: Madrich Date: Sat, 14 Mar 2015 14:03:14 +0100 Subject: [PATCH 046/166] Add ExportProperties --- CREDITS | 5 + code/3DSExporter.cpp | 2 +- code/AssbinExporter.cpp | 2 +- code/AssxmlExporter.cpp | 2 +- code/ColladaExporter.cpp | 2 +- code/ColladaParser.cpp | 2 + code/Exporter.cpp | 148 +++++++++++++++++++++++++--- code/GenericProperty.h | 13 +++ code/ObjExporter.cpp | 2 +- code/PlyExporter.cpp | 4 +- code/STLExporter.cpp | 4 +- code/XFileExporter.cpp | 26 +++-- code/XFileExporter.h | 5 +- include/assimp/Exporter.hpp | 189 ++++++++++++++++++++++++++++++++++-- 14 files changed, 365 insertions(+), 41 deletions(-) diff --git a/CREDITS b/CREDITS index 2e7485fb7..5028bc306 100644 --- a/CREDITS +++ b/CREDITS @@ -151,3 +151,8 @@ Ogre Binary format support - Filip Wasil, Tieto Poland Sp. z o.o. Android JNI asset extraction support + +- Richard Steffen +Contributed X File exporter +Contributed ExportProperties interface + diff --git a/code/3DSExporter.cpp b/code/3DSExporter.cpp index 1b870181c..681a85cbb 100644 --- a/code/3DSExporter.cpp +++ b/code/3DSExporter.cpp @@ -144,7 +144,7 @@ namespace { // ------------------------------------------------------------------------------------------------ // Worker function for exporting a scene to 3DS. Prototyped and registered in Exporter.cpp -void ExportScene3DS(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene) +void ExportScene3DS(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { boost::shared_ptr outfile (pIOSystem->Open(pFile, "wb")); if(!outfile) { diff --git a/code/AssbinExporter.cpp b/code/AssbinExporter.cpp index 6b4da3e30..405b676be 100644 --- a/code/AssbinExporter.cpp +++ b/code/AssbinExporter.cpp @@ -754,7 +754,7 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size) } }; -void ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene) +void ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { AssbinExport exporter; exporter.WriteBinaryDump( pFile, pIOSystem, pScene ); diff --git a/code/AssxmlExporter.cpp b/code/AssxmlExporter.cpp index c2e3f1833..b6aabd393 100644 --- a/code/AssxmlExporter.cpp +++ b/code/AssxmlExporter.cpp @@ -621,7 +621,7 @@ void WriteDump(const aiScene* scene, IOStream* io, bool shortened) } // end of namespace AssxmlExport -void ExportSceneAssxml(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene) +void ExportSceneAssxml(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { IOStream * out = pIOSystem->Open( pFile, "wt" ); if (!out) return; diff --git a/code/ColladaExporter.cpp b/code/ColladaExporter.cpp index db76e38a9..e4cbab02c 100644 --- a/code/ColladaExporter.cpp +++ b/code/ColladaExporter.cpp @@ -59,7 +59,7 @@ namespace Assimp // ------------------------------------------------------------------------------------------------ // Worker function for exporting a scene to Collada. Prototyped and registered in Exporter.cpp -void ExportSceneCollada(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene) +void ExportSceneCollada(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { std::string path = ""; std::string file = pFile; diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp index b7b5a7908..d67ff33c5 100644 --- a/code/ColladaParser.cpp +++ b/code/ColladaParser.cpp @@ -1952,7 +1952,9 @@ void ColladaParser::ReadIndexData( Mesh* pMesh) // small sanity check if (primType != Prim_TriFans && primType != Prim_TriStrips) + { ai_assert(actualPrimitives == numPrimitives); + } // only when we're done reading all

tags (and thus know the final vertex count) can we commit the submesh subgroup.mNumFaces = actualPrimitives; diff --git a/code/Exporter.cpp b/code/Exporter.cpp index 238430fa6..07f92de4c 100644 --- a/code/Exporter.cpp +++ b/code/Exporter.cpp @@ -72,16 +72,16 @@ void GetPostProcessingStepInstanceList(std::vector< BaseProcess* >& out); // ------------------------------------------------------------------------------------------------ // Exporter worker function prototypes. Should not be necessary to #ifndef them, it's just a prototype // do not use const, because some exporter need to convert the scene temporary -void ExportSceneCollada(const char*,IOSystem*, const aiScene*); -void ExportSceneXFile(const char*,IOSystem*, const aiScene*); -void ExportSceneObj(const char*,IOSystem*, const aiScene*); -void ExportSceneSTL(const char*,IOSystem*, const aiScene*); -void ExportSceneSTLBinary(const char*,IOSystem*, const aiScene*); -void ExportScenePly(const char*,IOSystem*, const aiScene*); -void ExportScenePlyBinary(const char*, IOSystem*, const aiScene*); -void ExportScene3DS(const char*, IOSystem*, const aiScene*); -void ExportSceneAssbin(const char*, IOSystem*, const aiScene*); -void ExportSceneAssxml(const char*, IOSystem*, const aiScene*); +void ExportSceneCollada(const char*,IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneXFile(const char*,IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneObj(const char*,IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneSTL(const char*,IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneSTLBinary(const char*,IOSystem*, const aiScene*, const ExportProperties*); +void ExportScenePly(const char*,IOSystem*, const aiScene*, const ExportProperties*); +void ExportScenePlyBinary(const char*, IOSystem*, const aiScene*, const ExportProperties*); +void ExportScene3DS(const char*, IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneAssbin(const char*, IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneAssxml(const char*, IOSystem*, const aiScene*, const ExportProperties*); // ------------------------------------------------------------------------------------------------ // global array of all export formats which Assimp supports in its current build @@ -91,7 +91,7 @@ Exporter::ExportFormatEntry gExporters[] = Exporter::ExportFormatEntry( "collada", "COLLADA - Digital Asset Exchange Schema", "dae", &ExportSceneCollada), #endif -#ifndef ASSIMP_BUILD_NO_FXILE_EXPORTER +#ifndef ASSIMP_BUILD_NO_XFILE_EXPORTER Exporter::ExportFormatEntry( "x", "X Files", "x", &ExportSceneXFile, aiProcess_MakeLeftHanded | aiProcess_FlipWindingOrder | aiProcess_FlipUVs), #endif @@ -226,7 +226,7 @@ bool Exporter :: IsDefaultIOHandler() const // ------------------------------------------------------------------------------------------------ -const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int ) +const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int, const ExportProperties* pProperties) { if (pimpl->blob) { delete pimpl->blob; @@ -282,7 +282,7 @@ bool IsVerboseFormat(const aiScene* pScene) // ------------------------------------------------------------------------------------------------ -aiReturn Exporter :: Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing ) +aiReturn Exporter :: Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing, const ExportProperties* pProperties) { ASSIMP_BEGIN_EXCEPTION_REGION(); @@ -290,7 +290,7 @@ aiReturn Exporter :: Export( const aiScene* pScene, const char* pFormatId, const // format. They will likely not be aware that there is a flag in the scene to indicate // this, however. To avoid surprises and bug reports, we check for duplicates in // meshes upfront. - const bool is_verbose_format = !(pScene->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) || IsVerboseFormat(pScene); + const bool is_verbose_format = !(pScene->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) || IsVerboseFormat(pScene); pimpl->mError = ""; for (size_t i = 0; i < pimpl->mExporters.size(); ++i) { @@ -397,7 +397,7 @@ aiReturn Exporter :: Export( const aiScene* pScene, const char* pFormatId, const proc.Execute(scenecopy.get()); } - exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get()); + exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProperties); } catch (DeadlyExportError& err) { pimpl->mError = err.what(); @@ -492,4 +492,122 @@ void Exporter :: UnregisterExporter(const char* id) } } +void ExportProperties :: CopyProperties(ExportProperties* dest,const ExportProperties* source) +{ + if (!source || !dest) return; + dest->mIntProperties = IntPropertyMap(source->mIntProperties); + dest->mFloatProperties = FloatPropertyMap(source->mFloatProperties); + dest->mStringProperties = StringPropertyMap(source->mStringProperties); + dest->mMatrixProperties = MatrixPropertyMap(source->mMatrixProperties); +} + + +// ------------------------------------------------------------------------------------------------ +// Set a configuration property +void ExportProperties :: SetPropertyInteger(const char* szName, int iValue, + bool* bWasExisting /*= NULL*/) +{ + ASSIMP_BEGIN_EXCEPTION_REGION(); + SetGenericProperty(mIntProperties, szName,iValue,bWasExisting); + ASSIMP_END_EXCEPTION_REGION(void); +} + +// ------------------------------------------------------------------------------------------------ +// Set a configuration property +void ExportProperties :: SetPropertyFloat(const char* szName, float iValue, + bool* bWasExisting /*= NULL*/) +{ + ASSIMP_BEGIN_EXCEPTION_REGION(); + SetGenericProperty(mFloatProperties, szName,iValue,bWasExisting); + ASSIMP_END_EXCEPTION_REGION(void); +} + +// ------------------------------------------------------------------------------------------------ +// Set a configuration property +void ExportProperties :: SetPropertyString(const char* szName, const std::string& value, + bool* bWasExisting /*= NULL*/) +{ + ASSIMP_BEGIN_EXCEPTION_REGION(); + SetGenericProperty(mStringProperties, szName,value,bWasExisting); + ASSIMP_END_EXCEPTION_REGION(void); +} + +// ------------------------------------------------------------------------------------------------ +// Set a configuration property +void ExportProperties :: SetPropertyMatrix(const char* szName, const aiMatrix4x4& value, + bool* bWasExisting /*= NULL*/) +{ + ASSIMP_BEGIN_EXCEPTION_REGION(); + SetGenericProperty(mMatrixProperties, szName,value,bWasExisting); + ASSIMP_END_EXCEPTION_REGION(void); +} + +// ------------------------------------------------------------------------------------------------ +// Get a configuration property +int ExportProperties :: GetPropertyInteger(const char* szName, + int iErrorReturn /*= 0xffffffff*/) const +{ + return GetGenericProperty(mIntProperties,szName,iErrorReturn); +} + +// ------------------------------------------------------------------------------------------------ +// Get a configuration property +float ExportProperties :: GetPropertyFloat(const char* szName, + float iErrorReturn /*= 10e10*/) const +{ + return GetGenericProperty(mFloatProperties,szName,iErrorReturn); +} + +// ------------------------------------------------------------------------------------------------ +// Get a configuration property +const std::string ExportProperties :: GetPropertyString(const char* szName, + const std::string& iErrorReturn /*= ""*/) const +{ + return GetGenericProperty(mStringProperties,szName,iErrorReturn); +} + +// ------------------------------------------------------------------------------------------------ +// Has a configuration property +const aiMatrix4x4 ExportProperties :: GetPropertyMatrix(const char* szName, + const aiMatrix4x4& iErrorReturn /*= aiMatrix4x4()*/) const +{ + return GetGenericProperty(mMatrixProperties,szName,iErrorReturn); +} + +// ------------------------------------------------------------------------------------------------ +// Has a configuration property +bool ExportProperties :: HasPropertyInteger(const char* szName) const +{ + return HasGenericProperty(mIntProperties, szName); +} + +// ------------------------------------------------------------------------------------------------ +// Has a configuration property +bool ExportProperties :: HasPropertyBool(const char* szName) const +{ + return HasGenericProperty(mIntProperties, szName); +}; + +// ------------------------------------------------------------------------------------------------ +// Has a configuration property +bool ExportProperties :: HasPropertyFloat(const char* szName) const +{ + return HasGenericProperty(mFloatProperties, szName); +}; + +// ------------------------------------------------------------------------------------------------ +// Has a configuration property +bool ExportProperties :: HasPropertyString(const char* szName) const +{ + return HasGenericProperty(mStringProperties, szName); +}; + +// ------------------------------------------------------------------------------------------------ +// Has a configuration property +bool ExportProperties :: HasPropertyMatrix(const char* szName) const +{ + return HasGenericProperty(mMatrixProperties, szName); +}; + + #endif // !ASSIMP_BUILD_NO_EXPORT diff --git a/code/GenericProperty.h b/code/GenericProperty.h index 32d846850..0e89015ab 100644 --- a/code/GenericProperty.h +++ b/code/GenericProperty.h @@ -108,5 +108,18 @@ inline void SetGenericPropertyPtr(std::map< unsigned int, T* >& list, *bWasExisting = true; } +// ------------------------------------------------------------------------------------------------ +template +inline const bool HasGenericProperty(const std::map< unsigned int, T >& list, + const char* szName) +{ + ai_assert(NULL != szName); + const uint32_t hash = SuperFastHash(szName); + + typename std::map::const_iterator it = list.find(hash); + if (it == list.end()) return false; + + return true; +} #endif // !! AI_GENERIC_PROPERTY_H_INCLUDED diff --git a/code/ObjExporter.cpp b/code/ObjExporter.cpp index 7ebb55b3e..c10c367b4 100644 --- a/code/ObjExporter.cpp +++ b/code/ObjExporter.cpp @@ -51,7 +51,7 @@ namespace Assimp { // ------------------------------------------------------------------------------------------------ // Worker function for exporting a scene to Wavefront OBJ. Prototyped and registered in Exporter.cpp -void ExportSceneObj(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene) +void ExportSceneObj(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { // invoke the exporter ObjExporter exporter(pFile, pScene); diff --git a/code/PlyExporter.cpp b/code/PlyExporter.cpp index a214d1371..692b02668 100644 --- a/code/PlyExporter.cpp +++ b/code/PlyExporter.cpp @@ -50,7 +50,7 @@ namespace Assimp { // ------------------------------------------------------------------------------------------------ // Worker function for exporting a scene to PLY. Prototyped and registered in Exporter.cpp -void ExportScenePly(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene) +void ExportScenePly(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { // invoke the exporter PlyExporter exporter(pFile, pScene); @@ -64,7 +64,7 @@ void ExportScenePly(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene outfile->Write( exporter.mOutput.str().c_str(), static_cast(exporter.mOutput.tellp()),1); } -void ExportScenePlyBinary(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene) +void ExportScenePlyBinary(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { // invoke the exporter PlyExporter exporter(pFile, pScene, true); diff --git a/code/STLExporter.cpp b/code/STLExporter.cpp index e3df2fbff..d45ece1ec 100644 --- a/code/STLExporter.cpp +++ b/code/STLExporter.cpp @@ -50,7 +50,7 @@ namespace Assimp { // ------------------------------------------------------------------------------------------------ // Worker function for exporting a scene to Stereolithograpy. Prototyped and registered in Exporter.cpp -void ExportSceneSTL(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene) +void ExportSceneSTL(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { // invoke the exporter STLExporter exporter(pFile, pScene); @@ -63,7 +63,7 @@ void ExportSceneSTL(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene outfile->Write( exporter.mOutput.str().c_str(), static_cast(exporter.mOutput.tellp()),1); } -void ExportSceneSTLBinary(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene) +void ExportSceneSTLBinary(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { // invoke the exporter STLExporter exporter(pFile, pScene, true); diff --git a/code/XFileExporter.cpp b/code/XFileExporter.cpp index 2cd3c4d37..8e95be289 100644 --- a/code/XFileExporter.cpp +++ b/code/XFileExporter.cpp @@ -59,7 +59,7 @@ namespace Assimp // ------------------------------------------------------------------------------------------------ // Worker function for exporting a scene to Collada. Prototyped and registered in Exporter.cpp -void ExportSceneXFile(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene) +void ExportSceneXFile(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) { std::string path = ""; std::string file = pFile; @@ -78,13 +78,21 @@ void ExportSceneXFile(const char* pFile,IOSystem* pIOSystem, const aiScene* pSce } } + // create/copy Properties + ExportProperties props; + ExportProperties::CopyProperties(&props, pProperties); + + // set standard properties if not set + if (!props.HasPropertyBool("AI_CONFIG_XFILE_64BIT")) props.SetPropertyBool("AI_CONFIG_XFILE_64BIT", false); + if (!props.HasPropertyBool("AI_CONFIG_XFILE_BAKETRANSFORM")) props.SetPropertyBool("AI_CONFIG_XFILE_BAKETRANSFORM", false); + // invoke the exporter - XFileExporter iDoTheExportThing( pScene, pIOSystem, path, file); + XFileExporter iDoTheExportThing( pScene, pIOSystem, path, file, &props); // we're still here - export successfully completed. Write result to the given IOSYstem boost::scoped_ptr outfile (pIOSystem->Open(pFile,"wt")); if(outfile == NULL) { - throw DeadlyExportError("could not open output .dae file: " + std::string(pFile)); + throw DeadlyExportError("could not open output .x file: " + std::string(pFile)); } // XXX maybe use a small wrapper around IOStream that behaves like std::stringstream in order to avoid the extra copy. @@ -96,8 +104,11 @@ void ExportSceneXFile(const char* pFile,IOSystem* pIOSystem, const aiScene* pSce // ------------------------------------------------------------------------------------------------ // Constructor for a specific scene to export -XFileExporter::XFileExporter(const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file) : mIOSystem(pIOSystem), mPath(path), mFile(file) +XFileExporter::XFileExporter(const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file, const ExportProperties* pProperties) : mIOSystem(pIOSystem), mPath(path), mFile(file), mProperties(pProperties) { + //DefaultLogger::get()->debug(boost::str( boost::format( "AI_CONFIG_XFILE_64BIT <%i>.") % mProperties->GetPropertyBool("AI_CONFIG_XFILE_64BIT", false))); + //DefaultLogger::get()->debug(boost::str( boost::format( "AI_CONFIG_XFILE_BAKETRANSFORM <%i>.") % mProperties->GetPropertyBool("AI_CONFIG_XFILE_BAKETRANSFORM", false))); + // make sure that all formatting happens using the standard, C locale and not the user's current locale mOutput.imbue( std::locale("C") ); @@ -126,7 +137,7 @@ void XFileExporter::WriteFile() { // note, that all realnumber values must be comma separated in x files mOutput.setf(std::ios::fixed); - mOutput.precision(6); // precission for float + mOutput.precision(16); // precission for double // entry of writing the file WriteHeader(); @@ -148,7 +159,10 @@ void XFileExporter::WriteFile() // Writes the asset header void XFileExporter::WriteHeader() { - mOutput << startstr << "xof 0303txt 0032" << endstr; + if (mProperties->GetPropertyBool("AI_CONFIG_XFILE_64BIT") == true) + mOutput << startstr << "xof 0303txt 0064" << endstr; + else + mOutput << startstr << "xof 0303txt 0032" << endstr; mOutput << endstr; mOutput << startstr << "template Frame {" << endstr; PushTag(); diff --git a/code/XFileExporter.h b/code/XFileExporter.h index fa4e6d38e..1b59e4461 100644 --- a/code/XFileExporter.h +++ b/code/XFileExporter.h @@ -61,7 +61,7 @@ class XFileExporter { public: /// Constructor for a specific scene to export - XFileExporter(const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file); + XFileExporter(const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file, const ExportProperties* pProperties); /// Destructor virtual ~XFileExporter(); @@ -94,6 +94,9 @@ public: protected: + /// hold the properties pointer + const ExportProperties* mProperties; + /// write a path void writePath(aiString path); diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index 8ed98b3a2..168edfefa 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -72,6 +72,9 @@ namespace Assimp { * #ExportToBlob is especially useful if you intend to work * with the data in-memory. */ + +class ASSIMP_API ExportProperties; + class ASSIMP_API Exporter // TODO: causes good ol' base class has no dll interface warning //#ifdef __cplusplus @@ -81,7 +84,7 @@ class ASSIMP_API Exporter public: /** Function pointer type of a Export worker function */ - typedef void (*fpExportFunc)(const char*,IOSystem*, const aiScene*); + typedef void (*fpExportFunc)(const char*, IOSystem*, const aiScene*, const ExportProperties*); /** Internal description of an Assimp export format option */ struct ExportFormatEntry @@ -171,8 +174,8 @@ public: * Any IO handlers set via #SetIOHandler are ignored here. * @note Use aiCopyScene() to get a modifiable copy of a previously * imported scene. */ - const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int pPreprocessing = 0u ); - inline const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const std::string& pFormatId, unsigned int pPreprocessing = 0u ); + const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL); + inline const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const std::string& pFormatId, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL); // ------------------------------------------------------------------- @@ -208,8 +211,8 @@ public: * @return AI_SUCCESS if everything was fine. * @note Use aiCopyScene() to get a modifiable copy of a previously * imported scene.*/ - aiReturn Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing = 0u); - inline aiReturn Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing = 0u); + aiReturn Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL); + inline aiReturn Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL); // ------------------------------------------------------------------- @@ -309,16 +312,182 @@ protected: }; -// ---------------------------------------------------------------------------------- -inline const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const std::string& pFormatId,unsigned int pPreprocessing ) +class ASSIMP_API ExportProperties { - return ExportToBlob(pScene,pFormatId.c_str(),pPreprocessing); +public: + // Data type to store the key hash + typedef unsigned int KeyType; + + // typedefs for our four configuration maps. + // We don't need more, so there is no need for a generic solution + typedef std::map IntPropertyMap; + typedef std::map FloatPropertyMap; + typedef std::map StringPropertyMap; + typedef std::map MatrixPropertyMap; + +public: + + // ------------------------------------------------------------------- + /** Get a deep copy of a scene + * + * @param dest Receives a pointer to the destination scene + * @param src Source scene - remains unmodified. + */ + static void CopyProperties(ExportProperties* dest,const ExportProperties* source); + + // ------------------------------------------------------------------- + /** Set an integer configuration property. + * @param szName Name of the property. All supported properties + * are defined in the aiConfig.g header (all constants share the + * prefix AI_CONFIG_XXX and are simple strings). + * @param iValue New value of the property + * @param bWasExisting Optional pointer to receive true if the + * property was set before. The new value replaces the previous value + * in this case. + * @note Property of different types (float, int, string ..) are kept + * on different stacks, so calling SetPropertyInteger() for a + * floating-point property has no effect - the loader will call + * GetPropertyFloat() to read the property, but it won't be there. + */ + void SetPropertyInteger(const char* szName, int iValue, + bool* bWasExisting = NULL); + + // ------------------------------------------------------------------- + /** Set a boolean configuration property. Boolean properties + * are stored on the integer stack internally so it's possible + * to set them via #SetPropertyBool and query them with + * #GetPropertyBool and vice versa. + * @see SetPropertyInteger() + */ + void SetPropertyBool(const char* szName, bool value, bool* bWasExisting = NULL) { + SetPropertyInteger(szName,value,bWasExisting); + } + + // ------------------------------------------------------------------- + /** Set a floating-point configuration property. + * @see SetPropertyInteger() + */ + void SetPropertyFloat(const char* szName, float fValue, + bool* bWasExisting = NULL); + + // ------------------------------------------------------------------- + /** Set a string configuration property. + * @see SetPropertyInteger() + */ + void SetPropertyString(const char* szName, const std::string& sValue, + bool* bWasExisting = NULL); + + // ------------------------------------------------------------------- + /** Set a matrix configuration property. + * @see SetPropertyInteger() + */ + void SetPropertyMatrix(const char* szName, const aiMatrix4x4& sValue, + bool* bWasExisting = NULL); + + // ------------------------------------------------------------------- + /** Get a configuration property. + * @param szName Name of the property. All supported properties + * are defined in the aiConfig.g header (all constants share the + * prefix AI_CONFIG_XXX). + * @param iErrorReturn Value that is returned if the property + * is not found. + * @return Current value of the property + * @note Property of different types (float, int, string ..) are kept + * on different lists, so calling SetPropertyInteger() for a + * floating-point property has no effect - the loader will call + * GetPropertyFloat() to read the property, but it won't be there. + */ + int GetPropertyInteger(const char* szName, + int iErrorReturn = 0xffffffff) const; + + // ------------------------------------------------------------------- + /** Get a boolean configuration property. Boolean properties + * are stored on the integer stack internally so it's possible + * to set them via #SetPropertyBool and query them with + * #GetPropertyBool and vice versa. + * @see GetPropertyInteger() + */ + bool GetPropertyBool(const char* szName, bool bErrorReturn = false) const { + return GetPropertyInteger(szName,bErrorReturn)!=0; + } + + // ------------------------------------------------------------------- + /** Get a floating-point configuration property + * @see GetPropertyInteger() + */ + float GetPropertyFloat(const char* szName, + float fErrorReturn = 10e10f) const; + + // ------------------------------------------------------------------- + /** Get a string configuration property + * + * The return value remains valid until the property is modified. + * @see GetPropertyInteger() + */ + const std::string GetPropertyString(const char* szName, + const std::string& sErrorReturn = "") const; + + // ------------------------------------------------------------------- + /** Get a matrix configuration property + * + * The return value remains valid until the property is modified. + * @see GetPropertyInteger() + */ + const aiMatrix4x4 GetPropertyMatrix(const char* szName, + const aiMatrix4x4& sErrorReturn = aiMatrix4x4()) const; + + // ------------------------------------------------------------------- + /** Determine a integer configuration property has been set. + * @see HasPropertyInteger() + */ + bool HasPropertyInteger(const char* szName) const; + + /** Determine a boolean configuration property has been set. + * @see HasPropertyBool() + */ + bool HasPropertyBool(const char* szName) const; + + /** Determine a boolean configuration property has been set. + * @see HasPropertyFloat() + */ + bool HasPropertyFloat(const char* szName) const; + + /** Determine a String configuration property has been set. + * @see HasPropertyString() + */ + bool HasPropertyString(const char* szName) const; + + /** Determine a Matrix configuration property has been set. + * @see HasPropertyMatrix() + */ + bool HasPropertyMatrix(const char* szName) const; + +protected: + + /** List of integer properties */ + IntPropertyMap mIntProperties; + + /** List of floating-point properties */ + FloatPropertyMap mFloatProperties; + + /** List of string properties */ + StringPropertyMap mStringProperties; + + /** List of Matrix properties */ + MatrixPropertyMap mMatrixProperties; +}; + + +// ---------------------------------------------------------------------------------- +inline const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const std::string& pFormatId,unsigned int pPreprocessing, const ExportProperties* pProperties) +{ + return ExportToBlob(pScene,pFormatId.c_str(),pPreprocessing, pProperties); } // ---------------------------------------------------------------------------------- -inline aiReturn Exporter :: Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing ) +inline aiReturn Exporter :: Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing, const ExportProperties* pProperties) { - return Export(pScene,pFormatId.c_str(),pPath.c_str(),pPreprocessing); + return Export(pScene,pFormatId.c_str(),pPath.c_str(),pPreprocessing, pProperties); } } // namespace Assimp From 37572f0f52320d3508f1a7ab28ffd831cec80f25 Mon Sep 17 00:00:00 2001 From: Madrich Date: Sat, 14 Mar 2015 14:22:55 +0100 Subject: [PATCH 047/166] Missing include map --- include/assimp/Exporter.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index 168edfefa..0e32d4397 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -48,6 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef ASSIMP_BUILD_NO_EXPORT #include "cexport.h" +#include namespace Assimp { class ExporterPimpl; From 290a16eea5156eb1e98dc146d23641d959cdb885 Mon Sep 17 00:00:00 2001 From: Madrich Date: Sat, 14 Mar 2015 16:31:33 +0100 Subject: [PATCH 048/166] Copy constructor for ExportProperties Export Propertie defines in config.h Remove unnecessary --- code/Exporter.cpp | 33 +++++++++++++++------------------ code/XFileExporter.cpp | 12 ++++-------- include/assimp/Exporter.hpp | 18 +++++++++++------- include/assimp/config.h | 17 +++++++++++++++++ 4 files changed, 47 insertions(+), 33 deletions(-) diff --git a/code/Exporter.cpp b/code/Exporter.cpp index 07f92de4c..3eb406c35 100644 --- a/code/Exporter.cpp +++ b/code/Exporter.cpp @@ -492,13 +492,18 @@ void Exporter :: UnregisterExporter(const char* id) } } -void ExportProperties :: CopyProperties(ExportProperties* dest,const ExportProperties* source) +ExportProperties :: ExportProperties() { - if (!source || !dest) return; - dest->mIntProperties = IntPropertyMap(source->mIntProperties); - dest->mFloatProperties = FloatPropertyMap(source->mFloatProperties); - dest->mStringProperties = StringPropertyMap(source->mStringProperties); - dest->mMatrixProperties = MatrixPropertyMap(source->mMatrixProperties); + +} + +ExportProperties :: ExportProperties(const ExportProperties* source) +{ + if (!source) return; + mIntProperties = IntPropertyMap(source->mIntProperties); + mFloatProperties = FloatPropertyMap(source->mFloatProperties); + mStringProperties = StringPropertyMap(source->mStringProperties); + mMatrixProperties = MatrixPropertyMap(source->mMatrixProperties); } @@ -507,9 +512,7 @@ void ExportProperties :: CopyProperties(ExportProperties* dest,const ExportPrope void ExportProperties :: SetPropertyInteger(const char* szName, int iValue, bool* bWasExisting /*= NULL*/) { - ASSIMP_BEGIN_EXCEPTION_REGION(); - SetGenericProperty(mIntProperties, szName,iValue,bWasExisting); - ASSIMP_END_EXCEPTION_REGION(void); + SetGenericProperty(mIntProperties, szName,iValue,bWasExisting); } // ------------------------------------------------------------------------------------------------ @@ -517,9 +520,7 @@ void ExportProperties :: SetPropertyInteger(const char* szName, int iValue, void ExportProperties :: SetPropertyFloat(const char* szName, float iValue, bool* bWasExisting /*= NULL*/) { - ASSIMP_BEGIN_EXCEPTION_REGION(); - SetGenericProperty(mFloatProperties, szName,iValue,bWasExisting); - ASSIMP_END_EXCEPTION_REGION(void); + SetGenericProperty(mFloatProperties, szName,iValue,bWasExisting); } // ------------------------------------------------------------------------------------------------ @@ -527,9 +528,7 @@ void ExportProperties :: SetPropertyFloat(const char* szName, float iValue, void ExportProperties :: SetPropertyString(const char* szName, const std::string& value, bool* bWasExisting /*= NULL*/) { - ASSIMP_BEGIN_EXCEPTION_REGION(); - SetGenericProperty(mStringProperties, szName,value,bWasExisting); - ASSIMP_END_EXCEPTION_REGION(void); + SetGenericProperty(mStringProperties, szName,value,bWasExisting); } // ------------------------------------------------------------------------------------------------ @@ -537,9 +536,7 @@ void ExportProperties :: SetPropertyString(const char* szName, const std::string void ExportProperties :: SetPropertyMatrix(const char* szName, const aiMatrix4x4& value, bool* bWasExisting /*= NULL*/) { - ASSIMP_BEGIN_EXCEPTION_REGION(); - SetGenericProperty(mMatrixProperties, szName,value,bWasExisting); - ASSIMP_END_EXCEPTION_REGION(void); + SetGenericProperty(mMatrixProperties, szName,value,bWasExisting); } // ------------------------------------------------------------------------------------------------ diff --git a/code/XFileExporter.cpp b/code/XFileExporter.cpp index 8e95be289..bb9579708 100644 --- a/code/XFileExporter.cpp +++ b/code/XFileExporter.cpp @@ -79,12 +79,11 @@ void ExportSceneXFile(const char* pFile,IOSystem* pIOSystem, const aiScene* pSce } // create/copy Properties - ExportProperties props; - ExportProperties::CopyProperties(&props, pProperties); + ExportProperties props(pProperties); // set standard properties if not set - if (!props.HasPropertyBool("AI_CONFIG_XFILE_64BIT")) props.SetPropertyBool("AI_CONFIG_XFILE_64BIT", false); - if (!props.HasPropertyBool("AI_CONFIG_XFILE_BAKETRANSFORM")) props.SetPropertyBool("AI_CONFIG_XFILE_BAKETRANSFORM", false); + if (!props.HasPropertyBool(AI_CONFIG_EXPORT_XFILE_64BIT)) props.SetPropertyBool(AI_CONFIG_EXPORT_XFILE_64BIT, false); + if (!props.HasPropertyBool(AI_CONFIG_EXPORT_XFILE_BAKETRANSFORM)) props.SetPropertyBool(AI_CONFIG_EXPORT_XFILE_BAKETRANSFORM, false); // invoke the exporter XFileExporter iDoTheExportThing( pScene, pIOSystem, path, file, &props); @@ -106,9 +105,6 @@ void ExportSceneXFile(const char* pFile,IOSystem* pIOSystem, const aiScene* pSce // Constructor for a specific scene to export XFileExporter::XFileExporter(const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file, const ExportProperties* pProperties) : mIOSystem(pIOSystem), mPath(path), mFile(file), mProperties(pProperties) { - //DefaultLogger::get()->debug(boost::str( boost::format( "AI_CONFIG_XFILE_64BIT <%i>.") % mProperties->GetPropertyBool("AI_CONFIG_XFILE_64BIT", false))); - //DefaultLogger::get()->debug(boost::str( boost::format( "AI_CONFIG_XFILE_BAKETRANSFORM <%i>.") % mProperties->GetPropertyBool("AI_CONFIG_XFILE_BAKETRANSFORM", false))); - // make sure that all formatting happens using the standard, C locale and not the user's current locale mOutput.imbue( std::locale("C") ); @@ -159,7 +155,7 @@ void XFileExporter::WriteFile() // Writes the asset header void XFileExporter::WriteHeader() { - if (mProperties->GetPropertyBool("AI_CONFIG_XFILE_64BIT") == true) + if (mProperties->GetPropertyBool(AI_CONFIG_EXPORT_XFILE_64BIT) == true) mOutput << startstr << "xof 0303txt 0064" << endstr; else mOutput << startstr << "xof 0303txt 0032" << endstr; diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index 0e32d4397..fb88f8e16 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -328,13 +328,17 @@ public: public: - // ------------------------------------------------------------------- - /** Get a deep copy of a scene - * - * @param dest Receives a pointer to the destination scene - * @param src Source scene - remains unmodified. - */ - static void CopyProperties(ExportProperties* dest,const ExportProperties* source); + /** Standard constructor + * @see ExportProperties() + */ + + ExportProperties(); + + /** Copy constructor + * @see ExportProperties(const ExportProperties* source) + */ + ExportProperties(const ExportProperties* source); + // ------------------------------------------------------------------- /** Set an integer configuration property. diff --git a/include/assimp/config.h b/include/assimp/config.h index abe3f1102..0e8457995 100644 --- a/include/assimp/config.h +++ b/include/assimp/config.h @@ -879,4 +879,21 @@ enum aiComponent #define AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION "IMPORT_COLLADA_IGNORE_UP_DIRECTION" + +// ---------- All the Export defines ------------ + +/** @brief Specifies the xfile use double for real values of float + * + * Property type: Bool. Default value: false. + */ + +#define AI_CONFIG_EXPORT_XFILE_64BIT "EXPORT_XFILE_64BIT" + +/** @brief Specifies the xfile applies all transformations to the coordinates, normals + * so all motions are identities + * Property type: Bool. Default value: false. + */ + +#define AI_CONFIG_EXPORT_XFILE_BAKETRANSFORM "EXPORT_XFILE_BAKETRANSFORM" + #endif // !! AI_CONFIG_H_INC From 56da80bc6e5baed97e745815f72f30c147c943c6 Mon Sep 17 00:00:00 2001 From: Madrich Date: Sat, 14 Mar 2015 19:03:44 +0100 Subject: [PATCH 049/166] Copy constructor ExportProperties Fix name dummy node in PreTransformVertices --- code/Exporter.cpp | 19 +++++++++---------- code/PretransformVertices.cpp | 2 +- code/XFileExporter.cpp | 3 +-- include/assimp/Exporter.hpp | 12 +++++++----- include/assimp/config.h | 6 ------ 5 files changed, 18 insertions(+), 24 deletions(-) diff --git a/code/Exporter.cpp b/code/Exporter.cpp index 3eb406c35..74b6a7344 100644 --- a/code/Exporter.cpp +++ b/code/Exporter.cpp @@ -492,18 +492,17 @@ void Exporter :: UnregisterExporter(const char* id) } } -ExportProperties :: ExportProperties() -{ +ExportProperties :: ExportProperties() {} -} - -ExportProperties :: ExportProperties(const ExportProperties* source) +ExportProperties::ExportProperties(const ExportProperties &other) { - if (!source) return; - mIntProperties = IntPropertyMap(source->mIntProperties); - mFloatProperties = FloatPropertyMap(source->mFloatProperties); - mStringProperties = StringPropertyMap(source->mStringProperties); - mMatrixProperties = MatrixPropertyMap(source->mMatrixProperties); + new(this) ExportProperties(); + + mIntProperties = other.mIntProperties; + mFloatProperties = other.mFloatProperties; + mStringProperties = other.mStringProperties; + mMatrixProperties = other.mMatrixProperties; + } diff --git a/code/PretransformVertices.cpp b/code/PretransformVertices.cpp index 007897c93..5cb661405 100644 --- a/code/PretransformVertices.cpp +++ b/code/PretransformVertices.cpp @@ -625,7 +625,7 @@ void PretransformVertices::Execute( aiScene* pScene) // flat node graph with a root node and some level 1 children delete pScene->mRootNode; pScene->mRootNode = new aiNode(); - pScene->mRootNode->mName.Set(""); + pScene->mRootNode->mName.Set("dummy_root"); if (1 == pScene->mNumMeshes && !pScene->mNumLights && !pScene->mNumCameras) { diff --git a/code/XFileExporter.cpp b/code/XFileExporter.cpp index bb9579708..8c2d9b55b 100644 --- a/code/XFileExporter.cpp +++ b/code/XFileExporter.cpp @@ -79,11 +79,10 @@ void ExportSceneXFile(const char* pFile,IOSystem* pIOSystem, const aiScene* pSce } // create/copy Properties - ExportProperties props(pProperties); + ExportProperties props(*pProperties); // set standard properties if not set if (!props.HasPropertyBool(AI_CONFIG_EXPORT_XFILE_64BIT)) props.SetPropertyBool(AI_CONFIG_EXPORT_XFILE_64BIT, false); - if (!props.HasPropertyBool(AI_CONFIG_EXPORT_XFILE_BAKETRANSFORM)) props.SetPropertyBool(AI_CONFIG_EXPORT_XFILE_BAKETRANSFORM, false); // invoke the exporter XFileExporter iDoTheExportThing( pScene, pIOSystem, path, file, &props); diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index fb88f8e16..692830f02 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -334,11 +334,13 @@ public: ExportProperties(); - /** Copy constructor - * @see ExportProperties(const ExportProperties* source) - */ - ExportProperties(const ExportProperties* source); - + // ------------------------------------------------------------------- + /** Copy constructor. + * + * This copies the configuration properties of another ExportProperties. + * @see ExportProperties(const ExportProperties& other) + */ + ExportProperties(const ExportProperties& other); // ------------------------------------------------------------------- /** Set an integer configuration property. diff --git a/include/assimp/config.h b/include/assimp/config.h index 0e8457995..6b598f2a9 100644 --- a/include/assimp/config.h +++ b/include/assimp/config.h @@ -889,11 +889,5 @@ enum aiComponent #define AI_CONFIG_EXPORT_XFILE_64BIT "EXPORT_XFILE_64BIT" -/** @brief Specifies the xfile applies all transformations to the coordinates, normals - * so all motions are identities - * Property type: Bool. Default value: false. - */ - -#define AI_CONFIG_EXPORT_XFILE_BAKETRANSFORM "EXPORT_XFILE_BAKETRANSFORM" #endif // !! AI_CONFIG_H_INC From edd3ed9e8f387058190ce4e849198d8d89d16cfe Mon Sep 17 00:00:00 2001 From: Madrich Date: Sat, 14 Mar 2015 19:48:08 +0100 Subject: [PATCH 050/166] Back PretransformVertice Change Fix Node Name in XFileExport --- code/PretransformVertices.cpp | 2 +- code/XFileExporter.cpp | 13 ++++++++++--- code/XFileExporter.h | 5 ++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/code/PretransformVertices.cpp b/code/PretransformVertices.cpp index 5cb661405..007897c93 100644 --- a/code/PretransformVertices.cpp +++ b/code/PretransformVertices.cpp @@ -625,7 +625,7 @@ void PretransformVertices::Execute( aiScene* pScene) // flat node graph with a root node and some level 1 children delete pScene->mRootNode; pScene->mRootNode = new aiNode(); - pScene->mRootNode->mName.Set("dummy_root"); + pScene->mRootNode->mName.Set(""); if (1 == pScene->mNumMeshes && !pScene->mNumLights && !pScene->mNumCameras) { diff --git a/code/XFileExporter.cpp b/code/XFileExporter.cpp index 8c2d9b55b..981d8a4c1 100644 --- a/code/XFileExporter.cpp +++ b/code/XFileExporter.cpp @@ -307,7 +307,7 @@ void XFileExporter::WriteNode( aiNode* pNode) ss << "Node_" << pNode; pNode->mName.Set(ss.str()); } - mOutput << startstr << "Frame " << pNode->mName.C_Str() << " {" << endstr; + mOutput << startstr << "Frame " << toXFileString(pNode->mName) << " {" << endstr; PushTag(); @@ -327,9 +327,9 @@ void XFileExporter::WriteNode( aiNode* pNode) mOutput << startstr << "}" << endstr << endstr; } -void XFileExporter::WriteMesh(const aiMesh* mesh) +void XFileExporter::WriteMesh(aiMesh* mesh) { - mOutput << startstr << "Mesh " << mesh->mName.C_Str() << "_mShape" << " {" << endstr; + mOutput << startstr << "Mesh " << toXFileString(mesh->mName) << "_mShape" << " {" << endstr; PushTag(); @@ -505,6 +505,13 @@ void XFileExporter::WriteMesh(const aiMesh* mesh) } +std::string XFileExporter::toXFileString(aiString &name) +{ + std::string str = std::string(name.C_Str()); + std::replace(str.begin(), str.end(), '<', '_'); + std::replace(str.begin(), str.end(), '>', '_'); + return str; +} void XFileExporter::writePath(aiString path) { diff --git a/code/XFileExporter.h b/code/XFileExporter.h index 1b59e4461..5c9f56701 100644 --- a/code/XFileExporter.h +++ b/code/XFileExporter.h @@ -80,7 +80,7 @@ protected: void WriteNode( aiNode* pNode ); /// write a mesh entry of the scene - void WriteMesh(const aiMesh* mesh); + void WriteMesh( aiMesh* mesh); /// Enters a new xml element, which increases the indentation void PushTag() { startstr.append( " "); } @@ -94,6 +94,9 @@ public: protected: + /// normalize the name to be accepted by xfile readers + std::string toXFileString(aiString &name); + /// hold the properties pointer const ExportProperties* mProperties; From ff4e1d9446716a676874a68b00769ddeec8a1a8f Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 14 Mar 2015 19:57:13 +0100 Subject: [PATCH 051/166] Sub-sample axis-angle channels if the delta between two consecutive key-frame angles is >= 180 degrees. Fixes #458. --- code/ColladaLoader.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/code/ColladaLoader.cpp b/code/ColladaLoader.cpp index 2f3942689..a11d94ec3 100644 --- a/code/ColladaLoader.cpp +++ b/code/ColladaLoader.cpp @@ -1143,6 +1143,26 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars } ++pos; } + + // https://github.com/assimp/assimp/issues/458 + // Sub-sample axis-angle channels if the delta between two consecutive + // key-frame angles is >= 180 degrees. + if (transforms[e.mTransformIndex].mType == Collada::TF_ROTATE && e.mSubElement == 3 && pos > 0 && pos < e.mTimeAccessor->mCount) { + float cur_key_angle = ReadFloat( *e.mValueAccessor, *e.mValueData, pos, 0); + float last_key_angle = ReadFloat( *e.mValueAccessor, *e.mValueData, pos - 1, 0); + float cur_key_time = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos, 0); + float last_key_time = ReadFloat( *e.mTimeAccessor, *e.mTimeData, pos - 1, 0); + + float last_eval_angle = last_key_angle + (cur_key_angle - last_key_angle) * (time - last_key_time) / (cur_key_time - last_key_time); + float delta = std::fabs(cur_key_angle-last_eval_angle); + if (delta >= 180.0f) { + int subSampleCount = static_cast(std::floorf(delta / 90.0f)); + if (cur_key_time != time) { + float nextSampleTime = time + (cur_key_time - time) / subSampleCount; + nextTime = std::min( nextTime, nextSampleTime); + } + } + } } // no more keys on any channel after the current time -> we're done From 3080c26a6063945f825ed503d83501ef42b3f255 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 14 Mar 2015 19:57:43 +0100 Subject: [PATCH 052/166] Add test files for previously fixed #458. --- ...anims_with_full_rotations_between_keys.fbx | Bin 0 -> 368592 bytes ...anims_with_full_rotations_between_keys.DAE | 7569 +++++++++++++++++ 2 files changed, 7569 insertions(+) create mode 100644 test/models-nonbsd/FBX/2013_BINARY/anims_with_full_rotations_between_keys.fbx create mode 100644 test/models/Collada/anims_with_full_rotations_between_keys.DAE diff --git a/test/models-nonbsd/FBX/2013_BINARY/anims_with_full_rotations_between_keys.fbx b/test/models-nonbsd/FBX/2013_BINARY/anims_with_full_rotations_between_keys.fbx new file mode 100644 index 0000000000000000000000000000000000000000..e65b9e8f0d8bd6f5f2b2bf6443883efcef085e08 GIT binary patch literal 368592 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 + + FBX COLLADA exporter2015-02-03T10:29:10Z2015-02-03T10:29:10ZZ_UP + + + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+ + + + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +-0.500000 0.500000 0.000000 +0.500000 0.500000 0.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 -0.500000 0.000000 +0.500000 -0.500000 0.000000 +0.500000 -0.500000 1.000000 +-0.500000 -0.500000 1.000000 +0.500000 -0.500000 0.000000 +0.500000 0.500000 0.000000 +0.500000 0.500000 1.000000 +0.500000 -0.500000 1.000000 +0.500000 0.500000 0.000000 +-0.500000 0.500000 0.000000 +-0.500000 0.500000 1.000000 +0.500000 0.500000 1.000000 +-0.500000 0.500000 0.000000 +-0.500000 -0.500000 0.000000 +-0.500000 -0.500000 1.000000 +-0.500000 0.500000 1.000000 + + + + + + + + + + + +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +0.000000 -1.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +1.000000 0.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 + + + + + + + + + + + +1.000000 0.000000 +0.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +0.000000 1.000000 +1.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 +0.000000 0.000000 +1.000000 0.000000 +1.000000 1.000000 +0.000000 1.000000 + + + + + + + + + + + + + + 4 4 4 4 4 4

0 2 3 1 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

+
+
+ + + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + 0.033333 11.9666670.000000 0.000000LINEAR LINEAR + 0.033333 11.966667-0.000000 -0.000000LINEAR LINEAR + 0.033333 11.9666671080.000000 1440.000000LINEAR LINEAR + + + + 0 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185947 0.000000 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185947 1.891823 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185946 3.783642 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185944 5.675461 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185942 7.567280 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185939 9.459099 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185935 11.350918 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185931 13.242737 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185927 15.134556 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185922 17.026375 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185916 18.918194 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185910 20.810013 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185903 22.701832 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185895 24.593651 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185887 26.485470 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185879 28.377289 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185870 30.269108 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185860 32.160927 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185850 34.052746 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185839 35.944565 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185827 37.836384 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185815 39.728203 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185803 41.620022 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185790 43.511841 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185776 45.403660 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185762 47.295479 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185747 49.187302 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185731 51.079117 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185715 52.970940 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185699 54.862755 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185682 56.754578 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185664 58.646393 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185646 60.538216 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185627 62.430031 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185607 64.321854 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185587 66.213669 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185567 68.105492 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185546 69.997307 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185524 71.889122 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185502 73.780952 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185479 75.672768 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185456 77.564583 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185432 79.456398 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185407 81.348228 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185382 83.240044 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185356 85.131859 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185330 87.023674 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185303 88.915504 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185276 90.807320 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185248 92.699135 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185219 94.590950 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185190 96.482780 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185160 98.374596 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185130 100.266403 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185099 102.158218 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185068 104.050034 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185036 105.941849 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.185003 107.833664 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.184970 109.725479 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.184936 111.617294 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.184902 113.509109 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.184867 115.400925 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.184832 117.292740 0.0000000.000000 0.000000 0.000000 0.0000001.0000000 0 1 0.0000030 1 0 -0.0000001 0 0 0.0000000.184796 119.184555 0.0000000.000000 0.000000 0.000000 0.0000001.000000 + 30.0000000.00000011.966667 + + + + + + From c4eb04bb8cc7452bf60abdf5a55b9c7a6576e650 Mon Sep 17 00:00:00 2001 From: Madrich Date: Sat, 14 Mar 2015 20:52:53 +0100 Subject: [PATCH 053/166] Fix XFile name for $ and {} Memleak copy constructor --- code/Exporter.cpp | 10 ++++------ code/XFileExporter.cpp | 3 +++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/code/Exporter.cpp b/code/Exporter.cpp index 74b6a7344..203070f8f 100644 --- a/code/Exporter.cpp +++ b/code/Exporter.cpp @@ -495,13 +495,11 @@ void Exporter :: UnregisterExporter(const char* id) ExportProperties :: ExportProperties() {} ExportProperties::ExportProperties(const ExportProperties &other) + : mIntProperties(other.mIntProperties), + mFloatProperties(other.mFloatProperties), + mStringProperties(other.mStringProperties), + mMatrixProperties(other.mMatrixProperties) { - new(this) ExportProperties(); - - mIntProperties = other.mIntProperties; - mFloatProperties = other.mFloatProperties; - mStringProperties = other.mStringProperties; - mMatrixProperties = other.mMatrixProperties; } diff --git a/code/XFileExporter.cpp b/code/XFileExporter.cpp index 981d8a4c1..ce87f3168 100644 --- a/code/XFileExporter.cpp +++ b/code/XFileExporter.cpp @@ -510,6 +510,9 @@ std::string XFileExporter::toXFileString(aiString &name) std::string str = std::string(name.C_Str()); std::replace(str.begin(), str.end(), '<', '_'); std::replace(str.begin(), str.end(), '>', '_'); + std::replace(str.begin(), str.end(), '{', '_'); + std::replace(str.begin(), str.end(), '}', '_'); + std::replace(str.begin(), str.end(), '$', '_'); return str; } From 741b070c7e412ab10888d3de4f5679396d732673 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 00:48:16 +0100 Subject: [PATCH 054/166] Add blender 2.71 default scene as test file. --- test/models/BLEND/BlenderDefault_271.blend | Bin 0 -> 484168 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/models/BLEND/BlenderDefault_271.blend diff --git a/test/models/BLEND/BlenderDefault_271.blend b/test/models/BLEND/BlenderDefault_271.blend new file mode 100644 index 0000000000000000000000000000000000000000..bbf04c2a0a35c78e162aad2f91a2c22cc7b9cfef GIT binary patch literal 484168 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˜Xnk*y{mg*xE>?bDE`{i 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 R9%PRwS1s00BlymL{{uz187BY$ literal 0 HcmV?d00001 From 94fd8c9c167659b60580b55d3f7a09365163ffc3 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 00:48:51 +0100 Subject: [PATCH 055/166] Remove old batch script to run unit tests. --- test/RunSingleUnitTestSuite.bat | 33 ------------ test/RunUnitTestSuite.bat | 94 --------------------------------- 2 files changed, 127 deletions(-) delete mode 100644 test/RunSingleUnitTestSuite.bat delete mode 100644 test/RunUnitTestSuite.bat diff --git a/test/RunSingleUnitTestSuite.bat b/test/RunSingleUnitTestSuite.bat deleted file mode 100644 index 4a6a8998a..000000000 --- a/test/RunSingleUnitTestSuite.bat +++ /dev/null @@ -1,33 +0,0 @@ - -rem ------------------------------------------------------------------------------ -rem Tiny script to execute a single unit test suite. -rem -rem Usage: -rem SET OUTDIR= -rem SET BINDIR= -rem -rem CALL RunSingleUnitTestSuite -rem -rem Post: -rem FIRSTUTNA - if the test wasn't found, receives the test name -rem FIRSTUTFAILUR - if the test failed, receives the test name -rem -rem ------------------------------------------------------------------------------ -IF NOT EXIST %BINDIR%\%1\unit.exe ( - - echo NOT AVAILABLE. Please rebuild this configuration - echo Unable to find %BINDIR%\%1\unit.exe > %OUTDIR%%2 - SET FIRSTUTNA=%2 -) ELSE ( - - %BINDIR%\%1\unit.exe > %OUTDIR%%2 - IF errorlevel == 0 ( - echo SUCCESS - ) ELSE ( - echo FAILURE, check output file: %2 - SET FIRSTUTFAILURE=%2 - ) -) - -echo. -echo. \ No newline at end of file diff --git a/test/RunUnitTestSuite.bat b/test/RunUnitTestSuite.bat deleted file mode 100644 index 269e8e93d..000000000 --- a/test/RunUnitTestSuite.bat +++ /dev/null @@ -1,94 +0,0 @@ -rem ------------------------------------------------------------------------------ -rem Tiny script to execute Assimp's fully unit test suite for all configurations -rem -rem Usage: call RunUnitTestSuite -rem ------------------------------------------------------------------------------ - -rem Setup the console environment -set errorlevel=0 -color 4e -cls - -@echo off - -rem Setup target architecture -SET ARCHEXT=x64 -IF %PROCESSOR_ARCHITECTURE% == x86 ( - SET ARCHEXT=win32 -) - -rem Setup standard paths from here -SET OUTDIR=results\ -SET BINDIR=..\bin\ -SET FIRSTUTFAILURE=nil -SET FIRSTUTNA=nil - -echo #===================================================================== -echo # Open Asset Import Library - Unittests -echo #===================================================================== -echo # -echo # Executes the Assimp library unit test suite for the following -echo # build configurations (if available): -echo # -echo # Release -echo # Release -st -echo # Release -noboost -echo # Release -dll -echo # -echo # Debug -echo # Debug -st -echo # Debug -noboost -echo # Debug -dll -echo ====================================================================== -echo. -echo. - - -echo assimp-core release -echo ********************************************************************** -call RunSingleUnitTestSuite unit_release_%ARCHEXT% release.txt - -echo assimp-core release -st -echo ********************************************************************** -call RunSingleUnitTestSuite unit_release-st_%ARCHEXT% release-st.txt - -echo assimp-core release -noboost -echo ********************************************************************** -call RunSingleUnitTestSuite unit_release-noboost-st_%ARCHEXT% release-st-noboost.txt - -echo assimp-core release -dll -echo ********************************************************************** -call RunSingleUnitTestSuite unit_release-dll_%ARCHEXT% release-dll.txt - -echo assimp-core debug -echo ********************************************************************** -call RunSingleUnitTestSuite unit_debug_%ARCHEXT% debug.txt - -echo assimp-core debug -st -echo ********************************************************************** -call RunSingleUnitTestSuite unit_debug-st_%ARCHEXT% debug-st.txt - -echo assimp-core debug -noboost -echo ********************************************************************** -call RunSingleUnitTestSuite unit_debug-noboost-st_%ARCHEXT% debug-st-noboost.txt - -echo assimp-core debug -dll -echo ********************************************************************** -call RunSingleUnitTestSuite unit_debug-dll_%ARCHEXT% debug-dll.txt - - -echo ====================================================================== -IF %FIRSTUTNA% == nil ( - echo All test configs have been found. -) ELSE ( - echo One or more test configs are not available. -) - -IF %FIRSTUTFAILURE% == nil ( - echo All tests have been successful. -) ELSE ( - echo One or more tests failed. -) -echo. - -pause \ No newline at end of file From e976cc211702446011a21c5fbade0490c4923163 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 01:02:18 +0100 Subject: [PATCH 056/166] Reduce garbage errors during regression checks. --- test/regression/run.py | 2 +- test/regression/settings.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/regression/run.py b/test/regression/run.py index 73172cf04..1c73c227c 100644 --- a/test/regression/run.py +++ b/test/regression/run.py @@ -171,7 +171,7 @@ def process_dir(d, outfile_results, zipin, result): process_dir(fullpath, outfile_results, zipin, result) continue - if f in settings.files_to_ignore: + if f in settings.files_to_ignore or os.path.splitext(f)[1] in settings.exclude_extensions: print("Ignoring " + f) continue diff --git a/test/regression/settings.py b/test/regression/settings.py index b8cd28683..eca2e79fd 100644 --- a/test/regression/settings.py +++ b/test/regression/settings.py @@ -62,7 +62,7 @@ files_to_ignore = ["pond.0.ply"] exclude_extensions = [ ".lws", ".assbin", ".assxml", ".txt", ".md", ".jpeg", ".jpg", ".png", ".gif", ".tga", ".bmp", - ".skeleton", ".skeleton.xml" + ".skeleton", ".skeleton.xml", ".license" ] # ------------------------------------------------------------------------------- From 1c64c590f213b61c0e5f9cbd99bd87c14c6b33cf Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 01:26:15 +0100 Subject: [PATCH 057/166] Blender importer: always sort sets of objects by their name. Previously we accidentally ordered pointers to objects by their memory address, which was non-deterministic and caused regression tests to be flaky. --- code/BlenderIntermediate.h | 18 +++++++++++++++++- code/BlenderLoader.cpp | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/code/BlenderIntermediate.h b/code/BlenderIntermediate.h index 4804d9251..05f80f33b 100644 --- a/code/BlenderIntermediate.h +++ b/code/BlenderIntermediate.h @@ -118,6 +118,16 @@ namespace Blender { #ifdef _MSC_VER # pragma warning(disable:4351) #endif + + struct ObjectCompare { + bool operator() (const Object* left, const Object* right) const { + return strcmp(left->id.name, right->id.name) == -1; + } + }; + + // When keeping objects in sets, sort them by their name. + typedef std::set ObjectSet; + // -------------------------------------------------------------------- /** ConversionData acts as intermediate storage location for * the various ConvertXXX routines in BlenderImporter.*/ @@ -130,7 +140,13 @@ namespace Blender { , db(db) {} - std::set objects; + struct ObjectCompare { + bool operator() (const Object* left, const Object* right) const { + return strcmp(left->id.name, right->id.name) == -1; + } + }; + + ObjectSet objects; TempArray meshes; TempArray cameras; diff --git a/code/BlenderLoader.cpp b/code/BlenderLoader.cpp index dc88ab840..33175b05c 100644 --- a/code/BlenderLoader.cpp +++ b/code/BlenderLoader.cpp @@ -1044,7 +1044,7 @@ aiLight* BlenderImporter::ConvertLight(const Scene& /*in*/, const Object* obj, c aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, ConversionData& conv_data, const aiMatrix4x4& parentTransform) { std::deque children; - for(std::set::iterator it = conv_data.objects.begin(); it != conv_data.objects.end() ;) { + for(ObjectSet::iterator it = conv_data.objects.begin(); it != conv_data.objects.end() ;) { const Object* object = *it; if (object->parent == obj) { children.push_back(object); From dc441d09e532b1ff957633800692d69b9b1f94d1 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 14:42:28 +0100 Subject: [PATCH 058/166] Blender importer: fix accidental use of uninitialized fields in the default material. IMHO C++03+ guarantees zero initialization here, so it may be a MSVC-specific issue. --- code/BlenderLoader.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/code/BlenderLoader.cpp b/code/BlenderLoader.cpp index 33175b05c..80a5a0187 100644 --- a/code/BlenderLoader.cpp +++ b/code/BlenderLoader.cpp @@ -559,24 +559,26 @@ void BlenderImporter::BuildMaterials(ConversionData& conv_data) if (mesh->mMaterialIndex == static_cast( -1 )) { if (index == static_cast( -1 )) { - - // ok, we need to add a dedicated default material for some poor material-less meshes + // Setup a default material. boost::shared_ptr p(new Material()); + ai_assert(::strlen(AI_DEFAULT_MATERIAL_NAME) < sizeof(p->id.name)-2); strcpy( p->id.name+2, AI_DEFAULT_MATERIAL_NAME ); + // Note: MSVC11 does not zero-initialize Material here, although it should. + // Thus all relevant fields should be explicitly initialized. We cannot add + // a default constructor to Material since the DNA codegen does not support + // parsing it. p->r = p->g = p->b = 0.6f; p->specr = p->specg = p->specb = 0.6f; p->ambr = p->ambg = p->ambb = 0.0f; p->mirr = p->mirg = p->mirb = 0.0f; p->emit = 0.f; p->alpha = 0.f; - - // XXX add more / or add default c'tor to Material + p->har = 0; index = static_cast( conv_data.materials_raw.size() ); conv_data.materials_raw.push_back(p); - - LogInfo("Adding default material ..."); + LogInfo("Adding default material"); } mesh->mMaterialIndex = index; } @@ -591,6 +593,7 @@ void BlenderImporter::BuildMaterials(ConversionData& conv_data) aiMaterial* mout = new aiMaterial(); conv_data.materials->push_back(mout); + // For any new material field handled here, the default material above must be updated with an appropriate default value. // set material name aiString name = aiString(mat->id.name+2); // skip over the name prefix 'MA' @@ -1049,7 +1052,7 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers if (object->parent == obj) { children.push_back(object); - conv_data.objects.erase(it++); + it = conv_data.objects.erase(it); continue; } ++it; From 3554301afec3b6d3583676fe43f91b5832bfecfb Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 14:42:56 +0100 Subject: [PATCH 059/166] Better regression test logging. --- test/regression/run.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/test/regression/run.py b/test/regression/run.py index 1c73c227c..1898fb962 100644 --- a/test/regression/run.py +++ b/test/regression/run.py @@ -167,7 +167,7 @@ def process_dir(d, outfile_results, zipin, result): print("Processing directory " + d) for f in sorted(os.listdir(d)): fullpath = os.path.join(d, f) - if os.path.isdir(fullpath) and not f == ".svn": + if os.path.isdir(fullpath) and not f[:1] == '.': process_dir(fullpath, outfile_results, zipin, result) continue @@ -190,32 +190,26 @@ def process_dir(d, outfile_results, zipin, result): "regression database? Use gen_db.zip to re-generate.") continue - # Ignore extensions via settings.py configured list - # todo: Fix for multi dot extensions like .skeleton.xml - ext = os.path.splitext(fullpath)[1].lower() - if ext != "" and ext in settings.exclude_extensions: - continue - print("-"*60 + "\n " + os.path.realpath(fullpath) + " pp: " + pppreset) outfile_actual = prepare_output_dir(fullpath, filehash, "ACTUAL") outfile_expect = prepare_output_dir(fullpath, filehash, "EXPECT") outfile_results.write("assimp dump "+"-"*80+"\n") outfile_results.flush() - command = [assimp_bin_path, "dump", fullpath, outfile_actual, "-b", "-s", "-l" ] +\ pppreset.split() - r = subprocess.call(command, **shellparams) - print(r) + outfile_results.flush() if r and not failure: result.fail(fullpath, outfile_expect, pppreset, IMPORT_FAILURE, r) + outfile_results.write("Failed to import\n") continue elif failure and not r: result.fail(fullpath, outfile_expect, pppreset, EXPECTED_FAILURE_NOT_MET) + outfile_results.write("Expected import to fail\n") continue with open(outfile_expect, "wb") as s: @@ -227,21 +221,24 @@ def process_dir(d, outfile_results, zipin, result): except IOError: continue + outfile_results.write("Expected data length: {0}\n".format(len(input_expected))) + outfile_results.write("Actual data length: {0}\n".format(len(input_actual))) + failed = False if len(input_expected) != len(input_actual): result.fail(fullpath, outfile_expect, pppreset, DATABASE_LENGTH_MISMATCH, len(input_expected), len(input_actual)) - continue + # Still compare the dumps to see what the difference is + failed = True outfile_results.write("assimp cmpdump "+"-"*80+"\n") outfile_results.flush() - command = [ assimp_bin_path, 'cmpdump', outfile_actual, outfile_expect ] if subprocess.call(command, **shellparams) != 0: - result.fail(fullpath, outfile_expect, pppreset, DATABASE_VALUE_MISMATCH) + if not failed: + result.fail(fullpath, outfile_expect, pppreset, DATABASE_VALUE_MISMATCH) continue - result.ok(fullpath, pppreset, COMPARE_SUCCESS, - len(input_expected)) + result.ok(fullpath, pppreset, COMPARE_SUCCESS, len(input_expected)) # ------------------------------------------------------------------------------- def del_folder_with_contents(folder): From 09c15331c437318c7e64ee060231fb77270443a8 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 21:01:34 +0100 Subject: [PATCH 060/166] Improve error reporting during dump diffing. --- tools/assimp_cmd/CompareDump.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/tools/assimp_cmd/CompareDump.cpp b/tools/assimp_cmd/CompareDump.cpp index 33db0eb3d..5027a1fc4 100644 --- a/tools/assimp_cmd/CompareDump.cpp +++ b/tools/assimp_cmd/CompareDump.cpp @@ -257,16 +257,32 @@ private: /* read from both streams simult.*/ template void read(T& filla,T& fille) { if(1 != fread(&filla,sizeof(T),1,actual)) { - throw compare_fails_exception("Unexpected EOF reading ACTUAL"); + EOFActual(); } if(1 != fread(&fille,sizeof(T),1,expect)) { - throw compare_fails_exception("Unexpected EOF reading EXPECT"); + EOFExpect(); } } - private: + void EOFActual() { + std::stringstream ss; + throw compare_fails_exception((ss + << "Unexpected EOF reading ACTUAL.\nCurrent position in scene hierarchy is " + << print_hierarchy(),ss.str().c_str() + )); + } + + void EOFExpect() { + std::stringstream ss; + throw compare_fails_exception((ss + << "Unexpected EOF reading EXPECT.\nCurrent position in scene hierarchy is " + << print_hierarchy(),ss.str().c_str() + )); + } + + FILE *const actual, *const expect; typedef std::map PerChunkCounter; @@ -290,10 +306,10 @@ template <> void comparer_context :: read(aiString& filla,aiString& fi read(lena,lene); if(lena && 1 != fread(&filla.data,lena,1,actual)) { - throw compare_fails_exception("Unexpected EOF reading ACTUAL"); + EOFActual(); } if(lene && 1 != fread(&fille.data,lene,1,expect)) { - throw compare_fails_exception("Unexpected EOF reading ACTUAL"); + EOFExpect(); } fille.data[fille.length=static_cast(lene)] = '\0'; @@ -487,7 +503,7 @@ private: res|=fread(&actual.second,4,1,ctx.get_actual()) <<3u; if(res!=0xf) { - ctx.failure("I/OError reading chunk head, dumps are not well-defined",""); + ctx.failure("IO Error reading chunk head, dumps are malformed",""); } if (current.first != actual.first) { @@ -504,7 +520,7 @@ private: if (current.first != actual.first) { std::stringstream ss; ctx.failure((ss - <<"Chunk lenghts do not match. EXPECT: " + <<"Chunk lengths do not match. EXPECT: " < Date: Sun, 15 Mar 2015 23:31:58 +0100 Subject: [PATCH 061/166] Fix build after mis-merge. --- code/ColladaParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp index 19d269682..22d620f55 100644 --- a/code/ColladaParser.cpp +++ b/code/ColladaParser.cpp @@ -1984,7 +1984,7 @@ void ColladaParser::ReadIndexData( Mesh* pMesh) #ifdef ASSIMP_BUILD_DEBUG if (primType != Prim_TriFans && primType != Prim_TriStrips) { - ai_assert(actualPrimitives == numPrimitives) + ai_assert(actualPrimitives == numPrimitives); } #endif From 7ee5eaafc60b78584ee4c7c8f283671b2d6b0f17 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 15 Mar 2015 23:40:29 +0100 Subject: [PATCH 062/166] Fix compile: set::erase() returns void prior to C++11. --- code/BlenderLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/BlenderLoader.cpp b/code/BlenderLoader.cpp index 80a5a0187..c9419b400 100644 --- a/code/BlenderLoader.cpp +++ b/code/BlenderLoader.cpp @@ -1052,7 +1052,7 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers if (object->parent == obj) { children.push_back(object); - it = conv_data.objects.erase(it); + conv_data.objects.erase(it++); continue; } ++it; From dbc7dc005d83dc6ed144b819382198b6828a6c5f Mon Sep 17 00:00:00 2001 From: ulf Date: Mon, 16 Mar 2015 11:35:07 +0100 Subject: [PATCH 063/166] - IfcLoader now evaluates all curve segments at both start and end. Leads to a lot of duplicates which get filtered out afterwards, but fixes the "cutting corners" phenomen that sometimes appeared in conjunction with trimmed curves --- code/IFCCurve.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/IFCCurve.cpp b/code/IFCCurve.cpp index ffe52dfd2..e696bed9a 100644 --- a/code/IFCCurve.cpp +++ b/code/IFCCurve.cpp @@ -648,10 +648,10 @@ void Curve :: SampleDiscrete(TempMesh& out,IfcFloat a, IfcFloat b) const ai_assert(InRange(a) && InRange(b)); const size_t cnt = std::max(static_cast(0),EstimateSampleCount(a,b)); - out.verts.reserve( out.verts.size() + cnt ); + out.verts.reserve( out.verts.size() + cnt + 1); IfcFloat p = a, delta = (b-a)/cnt; - for(size_t i = 0; i < cnt; ++i, p += delta) { + for(size_t i = 0; i <= cnt; ++i, p += delta) { out.verts.push_back(Eval(p)); } } From 207906f0393e829fffc4260129e0f6fb681f585f Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 16 Mar 2015 20:34:42 +0100 Subject: [PATCH 064/166] first parsing of references and geometry objects. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 47 +++++++++++++++++-- code/OpenGEXImporter.h | 6 +++ contrib/openddlparser/code/OpenDDLParser.cpp | 6 +-- .../include/openddlparser/OpenDDLCommon.h | 4 +- .../openddlparser/OpenDDLParserUtils.h | 4 +- 5 files changed, 58 insertions(+), 9 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 0b940d39e..9c953b035 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -164,7 +164,9 @@ USE_ODDLPARSER_NS //------------------------------------------------------------------------------------------------ OpenGEXImporter::OpenGEXImporter() -: m_ctx( NULL ) +: m_meshCache() +, m_mesh2refMap() +, m_ctx( NULL ) , m_currentNode( NULL ) { // empty } @@ -205,6 +207,8 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce m_ctx = myParser.getContext(); handleNodes( m_ctx->m_root, pScene ); } + + resolveReferences(); } //------------------------------------------------------------------------------------------------ @@ -238,6 +242,9 @@ void OpenGEXImporter::handleNodes( DDLNode *node, aiScene *pScene ) { break; case Grammar::ObjectRefToken: + handleObjectRefNode( *it, pScene ); + break; + case Grammar::MaterialRefToken: case Grammar::MetricKeyToken: case Grammar::GeometryNodeToken: @@ -245,6 +252,9 @@ void OpenGEXImporter::handleNodes( DDLNode *node, aiScene *pScene ) { break; case Grammar::GeometryObjectToken: + handleGeometryObject( *it, pScene ); + break; + case Grammar::TransformToken: case Grammar::MeshToken: case Grammar::VertexArrayToken: @@ -295,7 +305,7 @@ void OpenGEXImporter::handleMetricNode( DDLNode *node, aiScene *pScene ) { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene ) { +void OpenGEXImporter::handleNameNode( DDLNode *node, aiScene *pScene ) { if( NULL == m_currentNode ) { throw DeadlyImportError( "No parent node for name." ); return; @@ -313,11 +323,42 @@ void OpenGEXImporter::handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleGeometryNode( ODDLParser::DDLNode *node, aiScene *pScene ) { +void OpenGEXImporter::handleObjectRefNode( DDLNode *node, aiScene *pScene ) { + if( NULL == m_currentNode ) { + throw DeadlyImportError( "No parent node for name." ); + return; + } + + Reference *ref = node->getReferences(); + if( NULL != ref ) { + for( size_t i = 0; i < ref->m_numRefs; i++ ) { + Name *currentName( ref->m_referencedName[ i ] ); + } + } +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleGeometryNode( DDLNode *node, aiScene *pScene ) { m_currentNode = new aiNode; handleNodes( node, pScene ); } +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleGeometryObject( DDLNode *node, aiScene *pScene ) { + aiMesh *currentMesh( new aiMesh ); + const size_t idx( m_meshCache.size() ); + m_meshCache.push_back( currentMesh ); + + // store name to reference relation + m_mesh2refMap[ node->getName() ] = idx; + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::resolveReferences() { + +} + //------------------------------------------------------------------------------------------------ } // Namespace OpenGEX diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 2bea23b45..105716f3c 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -44,6 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "BaseImporter.h" +#include namespace ODDLParser { class DDLNode; @@ -100,9 +101,14 @@ protected: void handleNodes( ODDLParser::DDLNode *node, aiScene *pScene ); void handleMetricNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleObjectRefNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleGeometryNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleGeometryObject( ODDLParser::DDLNode *node, aiScene *pScene ); + void resolveReferences(); private: + std::vector m_meshCache; + std::map m_mesh2refMap; ODDLParser::Context *m_ctx; MetricInfo m_metrics[ MetricInfo::Max ]; aiNode *m_currentNode; diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 46eb50fd8..99274f412 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -65,7 +65,7 @@ namespace Grammar { } // Namespace Grammar -static void logInvalidTokenError( char *in, char *exp, OpenDDLParser::logCallback callback ) { +static void logInvalidTokenError( char *in, const std::string &exp, OpenDDLParser::logCallback callback ) { std::stringstream stream; stream << "Invalid token " << *in << ", " << exp << " expected." << std::endl; callback( ddl_error_msg, stream.str() ); @@ -297,7 +297,7 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { } else { in++; - logInvalidTokenError( in, "{", m_logCallback ); + logInvalidTokenError( in, std::string( Grammar::OpenBracketToken ), m_logCallback ); error = true; return in; } @@ -365,7 +365,7 @@ char *OpenDDLParser::parseStructureBody( char *in, char *end, bool &error ) { in = getNextToken( in, end ); if( *in != '}' ) { - logInvalidTokenError( in, "}", m_logCallback ); + logInvalidTokenError( in, std::string( Grammar::CloseBracketToken ), m_logCallback ); } else { //in++; } diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index c7fd844a2..4a1ff2749 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -35,7 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ifdef OPENDDLPARSER_BUILD # define DLL_ODDLPARSER_EXPORT TAG_DLL_EXPORT # else -# define DLL_ODDLPARSER_EXPORT TAG_DLL_IMPORT +# define DLL_ODDLPARSER_EXPORT TAG_DLL_IMPORT # endif // OPENDDLPARSER_BUILD # pragma warning( disable : 4251 ) #else @@ -52,7 +52,7 @@ BEGIN_ODDLPARSER_NS # define ddl_nullptr nullptr #else # define ddl_nullptr NULL -#endif +#endif // OPENDDL_NO_USE_CPP11 class DDLNode; class Value; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h index b1b4f6cde..eb900309c 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h @@ -202,7 +202,9 @@ bool isReference( T *in, T *end ) { if( *in == 'r' ) { if( *(in+1) == 'e' ) { if( *(in+2) == 'f' ) { - return true; + if( ( in + 2 ) != end ) { + return true; + } } } } From adc44d1e83e153a942bcdf9c3527d44fab1ddde8 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 16 Mar 2015 23:09:41 +0100 Subject: [PATCH 065/166] If caller provides no ExportProperties, pass a pointer to empty properties to the Exporter implementation (instead of a NULL). --- code/Exporter.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/Exporter.cpp b/code/Exporter.cpp index 203070f8f..c6fea8856 100644 --- a/code/Exporter.cpp +++ b/code/Exporter.cpp @@ -397,7 +397,8 @@ aiReturn Exporter :: Export( const aiScene* pScene, const char* pFormatId, const proc.Execute(scenecopy.get()); } - exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProperties); + ExportProperties emptyProperties; // Never pass NULL ExportProperties so Exporters don't have to worry. + exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProperties ? pProperties : &emptyProperties); } catch (DeadlyExportError& err) { pimpl->mError = err.what(); From 599a61cad23eabe306813906521d0e92f4e9febe Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 16 Mar 2015 23:20:00 +0100 Subject: [PATCH 066/166] Restrict travis build to master branch. We want the build badge on the front page to be always green. Branches can fail, that's fine, but currently this gives the impression that all of assimp is failing. Branches should do pull requests against master to get a CI build. Such PRs can be marked "do not merge" and updated indefinitely. --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 4ec4c7697..b595600e7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,10 @@ before_install: - sudo apt-get install cmake python3 +branches: + only: + - master + env: matrix: - LINUX=1 TRAVIS_NO_EXPORT=YES From b304e7b45c7868fa62a3eda67d36db045d1b6f94 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 16 Mar 2015 23:26:41 +0100 Subject: [PATCH 067/166] Add missing break in switch statement in BlobIOSystem.h. Fixes #438. This probably didn't affect anyone for real since no on uses relative seeks. --- code/BlobIOSystem.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/BlobIOSystem.h b/code/BlobIOSystem.h index cd48b8826..3e4889cfd 100644 --- a/code/BlobIOSystem.h +++ b/code/BlobIOSystem.h @@ -120,9 +120,11 @@ public: { case aiOrigin_CUR: cursor += pOffset; + break; case aiOrigin_END: cursor = file_size - pOffset; + break; case aiOrigin_SET: cursor = pOffset; From 7d7ccfd6301449c47c884b2092032d42b81d8ec5 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 17 Mar 2015 14:24:28 +0100 Subject: [PATCH 068/166] fix compiler warning. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 105716f3c..0bc2378b7 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -65,10 +65,12 @@ struct MetricInfo { std::string m_stringValue; float m_floatValue; + int m_intValue; MetricInfo() : m_stringValue( "" ) - , m_floatValue( 0.0f ) { + , m_floatValue( 0.0f ) + , m_intValue( -1 ) { // empty } }; @@ -102,16 +104,33 @@ protected: void handleMetricNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleObjectRefNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleMaterialRefNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleGeometryNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleGeometryObject( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleMaterial( ODDLParser::DDLNode *node, aiScene *pScene ); void resolveReferences(); private: + struct RefInfo { + enum Type { + MeshRef, + MaterialRef + }; + + aiNode *m_node; + Type m_type; + std::vector m_Names; + + RefInfo( aiNode *node, Type type, std::vector &names ); + }; + std::vector m_meshCache; std::map m_mesh2refMap; + ODDLParser::Context *m_ctx; MetricInfo m_metrics[ MetricInfo::Max ]; aiNode *m_currentNode; + std::vector m_unresolvedRefStack; }; } // Namespace OpenGEX From 0d5a2ce4c1106f74cd4c13da30234c91f2af05c3 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 17 Mar 2015 14:25:15 +0100 Subject: [PATCH 069/166] openddl-parser: latest greatest with fixes for invalid reference information. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/DDLNode.cpp | 17 +++++++++++++++-- .../include/openddlparser/OpenDDLCommon.h | 10 +++++++--- .../include/openddlparser/OpenDDLParserUtils.h | 2 +- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/contrib/openddlparser/code/DDLNode.cpp b/contrib/openddlparser/code/DDLNode.cpp index e65f1c45e..24f0da9d1 100644 --- a/contrib/openddlparser/code/DDLNode.cpp +++ b/contrib/openddlparser/code/DDLNode.cpp @@ -44,6 +44,18 @@ static void releaseDataType( T *ptr ) { } } +static void releaseReferencedNames( Reference *ref ) { + if( ddl_nullptr == ref ) { + return; + } + + if( ref->m_referencedName ) { + for( size_t i = 0; i < ref->m_numRefs; i++ ) { + delete ref->m_referencedName; + } + } +} + DDLNode::DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode *parent ) : m_type( type ) , m_name( name ) @@ -51,9 +63,9 @@ DDLNode::DDLNode( const std::string &type, const std::string &name, size_t idx, , m_children() , m_properties( ddl_nullptr ) , m_value( ddl_nullptr ) -, m_idx( idx ) , m_dtArrayList( ddl_nullptr ) -, m_references( ddl_nullptr ) { +, m_references( ddl_nullptr ) +, m_idx( idx ) { if( m_parent ) { m_parent->m_children.push_back( this ); } @@ -62,6 +74,7 @@ DDLNode::DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode::~DDLNode() { releaseDataType( m_properties ); releaseDataType( m_value ); + releaseReferencedNames( m_references ); delete m_dtArrayList; m_dtArrayList = ddl_nullptr; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index 4a1ff2749..ff182432d 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -96,8 +96,12 @@ struct Reference { Reference( size_t numrefs, Name **names ) : m_numRefs( numrefs ) - , m_referencedName( names ) { - // empty + , m_referencedName( ddl_nullptr ) { + m_referencedName = new Name *[ numrefs ]; + for( size_t i = 0; i < numrefs; i++ ) { + Name *name = new Name( names[ i ]->m_type, names[ i ]->m_id ); + m_referencedName[ i ] = name; + } } }; @@ -105,7 +109,7 @@ struct Identifier { size_t m_len; char *m_buffer; - Identifier( size_t len, char *buffer ) + Identifier( size_t len, char buffer[] ) : m_len( len ) , m_buffer( buffer ) { // empty diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h index eb900309c..a8d21b710 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h @@ -173,7 +173,7 @@ bool isFloat( T *in, T *end ) { template inline bool isCharacter( const T in ) { - return ( in >= 'a' && in <= 'z' || in >= 'A' && in <= 'Z' ); + return ( ( in >= 'a' && in <= 'z' ) || ( in >= 'A' && in <= 'Z' ) ); } template From 59633d172f042ca28de0761820245bb58de3edb6 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 17 Mar 2015 14:25:40 +0100 Subject: [PATCH 070/166] implementation for mesh resolving. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 99 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 92 insertions(+), 7 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 9c953b035..8f9a359ae 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -162,12 +162,21 @@ namespace OpenGEX { USE_ODDLPARSER_NS +//------------------------------------------------------------------------------------------------ +OpenGEXImporter::RefInfo::RefInfo( aiNode *node, Type type, std::vector &names ) +: m_node( node ) +, m_type( type ) +, m_Names( names ) { + // empty +} + //------------------------------------------------------------------------------------------------ OpenGEXImporter::OpenGEXImporter() : m_meshCache() , m_mesh2refMap() , m_ctx( NULL ) -, m_currentNode( NULL ) { +, m_currentNode( NULL ) +, m_unresolvedRefStack() { // empty } @@ -246,7 +255,12 @@ void OpenGEXImporter::handleNodes( DDLNode *node, aiScene *pScene ) { break; case Grammar::MaterialRefToken: + handleMaterialRefNode( *it, pScene ); + break; + case Grammar::MetricKeyToken: + break; + case Grammar::GeometryNodeToken: handleGeometryNode( *it, pScene ); break; @@ -256,12 +270,27 @@ void OpenGEXImporter::handleNodes( DDLNode *node, aiScene *pScene ) { break; case Grammar::TransformToken: + break; + case Grammar::MeshToken: + break; + case Grammar::VertexArrayToken: + break; + case Grammar::IndexArrayToken: + break; + case Grammar::MaterialToken: + handleMaterial( *it, pScene ); + break; + case Grammar::ColorToken: + break; + case Grammar::TextureToken: + break; + default: break; } @@ -290,7 +319,7 @@ void OpenGEXImporter::handleMetricNode( DDLNode *node, aiScene *pScene ) { if( Value::ddl_float == val->m_type ) { m_metrics[ type ].m_floatValue = val->getFloat(); } else if( Value::ddl_int32 == val->m_type ) { - m_metrics[ type ].m_floatValue = val->getInt32(); + m_metrics[ type ].m_intValue = val->getInt32(); } else if( Value::ddl_string == val->m_type ) { m_metrics[type].m_stringValue = std::string( val->getString() ); } else { @@ -322,6 +351,24 @@ void OpenGEXImporter::handleNameNode( DDLNode *node, aiScene *pScene ) { } } +//------------------------------------------------------------------------------------------------ +static void getRefNames( DDLNode *node, std::vector &names ) { + ai_assert( NULL != node ); + + Reference *ref = node->getReferences(); + if( NULL != ref ) { + for( size_t i = 0; i < ref->m_numRefs; i++ ) { + Name *currentName( ref->m_referencedName[ i ] ); + if( NULL != currentName && NULL != currentName->m_id ) { + const std::string name( currentName->m_id->m_buffer ); + if( !name.empty() ) { + names.push_back( name ); + } + } + } + } +} + //------------------------------------------------------------------------------------------------ void OpenGEXImporter::handleObjectRefNode( DDLNode *node, aiScene *pScene ) { if( NULL == m_currentNode ) { @@ -329,11 +376,26 @@ void OpenGEXImporter::handleObjectRefNode( DDLNode *node, aiScene *pScene ) { return; } - Reference *ref = node->getReferences(); - if( NULL != ref ) { - for( size_t i = 0; i < ref->m_numRefs; i++ ) { - Name *currentName( ref->m_referencedName[ i ] ); - } + std::vector objRefNames; + getRefNames( node, objRefNames ); + m_currentNode->mNumMeshes = objRefNames.size(); + m_currentNode->mMeshes = new unsigned int[ objRefNames.size() ]; + if( !objRefNames.empty() ) { + m_unresolvedRefStack.push_back( new RefInfo( m_currentNode, RefInfo::MeshRef, objRefNames ) ); + } +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleMaterialRefNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + if( NULL == m_currentNode ) { + throw DeadlyImportError( "No parent node for name." ); + return; + } + + std::vector matRefNames; + getRefNames( node, matRefNames ); + if( !matRefNames.empty() ) { + m_unresolvedRefStack.push_back( new RefInfo( m_currentNode, RefInfo::MaterialRef, matRefNames ) ); } } @@ -351,12 +413,35 @@ void OpenGEXImporter::handleGeometryObject( DDLNode *node, aiScene *pScene ) { // store name to reference relation m_mesh2refMap[ node->getName() ] = idx; +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleMaterial( ODDLParser::DDLNode *node, aiScene *pScene ) { } //------------------------------------------------------------------------------------------------ void OpenGEXImporter::resolveReferences() { + if( m_unresolvedRefStack.empty() ) { + return; + } + RefInfo *currentRefInfo( NULL ); + for( std::vector::iterator it = m_unresolvedRefStack.begin(); it != m_unresolvedRefStack.end(); ++it ) { + currentRefInfo = *it; + if( NULL != currentRefInfo ) { + aiNode *node( currentRefInfo->m_node ); + if( RefInfo::MeshRef == currentRefInfo->m_type ) { + for( size_t i = 0; i < currentRefInfo->m_Names.size(); i++ ) { + const std::string &name(currentRefInfo->m_Names[ i ] ); + unsigned int meshIdx = m_mesh2refMap[ name ]; + node->mMeshes[ i ] = meshIdx; + } + } else if( RefInfo::MaterialRef == currentRefInfo->m_type ) { + // ToDo + } + } + } } //------------------------------------------------------------------------------------------------ From 05208a5014bfc029cab3c5b0834c94aa6c22c35a Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 17 Mar 2015 19:43:41 +0100 Subject: [PATCH 071/166] try to fix build of win32 crosscompile. Signed-off-by: Kim Kulling --- contrib/openddlparser/include/openddlparser/OpenDDLCommon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index ff182432d..87209af86 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -29,7 +29,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include -#ifdef _WIN32 +#ifdef _MSC_VER # define TAG_DLL_EXPORT __declspec(dllexport) # define TAG_DLL_IMPORT __declspec(dllimport ) # ifdef OPENDDLPARSER_BUILD From f15d62194b599cf5c925e6f34aeffb036f6f1052 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 18 Mar 2015 21:37:57 +0100 Subject: [PATCH 072/166] add nodestack to deal with node hierarchy. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 55 +++++++++++++++++++++++++++++++++++++++- code/OpenGEXImporter.h | 5 ++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 8f9a359ae..4172ae97b 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -176,6 +176,7 @@ OpenGEXImporter::OpenGEXImporter() , m_mesh2refMap() , m_ctx( NULL ) , m_currentNode( NULL ) +, m_nodeStack() , m_unresolvedRefStack() { // empty } @@ -214,6 +215,8 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce bool success( myParser.parse() ); if( success ) { m_ctx = myParser.getContext(); + pScene->mRootNode = new aiNode; + pScene->mRootNode->mName.Set( filename ); handleNodes( m_ctx->m_root, pScene ); } @@ -401,8 +404,12 @@ void OpenGEXImporter::handleMaterialRefNode( ODDLParser::DDLNode *node, aiScene //------------------------------------------------------------------------------------------------ void OpenGEXImporter::handleGeometryNode( DDLNode *node, aiScene *pScene ) { - m_currentNode = new aiNode; + aiNode *newNode = new aiNode; + pushNode( newNode, pScene ); + m_currentNode = newNode; handleNodes( node, pScene ); + + popNode(); } //------------------------------------------------------------------------------------------------ @@ -413,6 +420,10 @@ void OpenGEXImporter::handleGeometryObject( DDLNode *node, aiScene *pScene ) { // store name to reference relation m_mesh2refMap[ node->getName() ] = idx; + + // todo: child nodes? + + handleNodes( node, pScene ); } //------------------------------------------------------------------------------------------------ @@ -444,6 +455,48 @@ void OpenGEXImporter::resolveReferences() { } } +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::pushNode( aiNode *node, aiScene *pScene ) { + ai_assert( NULL != pScene ); + + if( NULL != node ) { + if( m_nodeStack.empty() ) { + node->mParent = pScene->mRootNode; + } else { + aiNode *parent( m_nodeStack.back() ); + ai_assert( NULL != parent ); + node->mParent = parent; + } + m_nodeStack.push_back( node ); + } +} + +//------------------------------------------------------------------------------------------------ +aiNode *OpenGEXImporter::popNode() { + if( m_nodeStack.empty() ) { + return NULL; + } + + aiNode *node( top() ); + m_nodeStack.pop_back(); + + return node; +} + +//------------------------------------------------------------------------------------------------ +aiNode *OpenGEXImporter::top() const { + if( m_nodeStack.empty() ) { + return NULL; + } + + return m_nodeStack.back(); +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::clearNodeStack() { + m_nodeStack.clear(); +} + //------------------------------------------------------------------------------------------------ } // Namespace OpenGEX diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 0bc2378b7..13154e06d 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -109,6 +109,10 @@ protected: void handleGeometryObject( ODDLParser::DDLNode *node, aiScene *pScene ); void handleMaterial( ODDLParser::DDLNode *node, aiScene *pScene ); void resolveReferences(); + void pushNode( aiNode *node, aiScene *pScene ); + aiNode *popNode(); + aiNode *top() const; + void clearNodeStack(); private: struct RefInfo { @@ -130,6 +134,7 @@ private: ODDLParser::Context *m_ctx; MetricInfo m_metrics[ MetricInfo::Max ]; aiNode *m_currentNode; + std::vector m_nodeStack; std::vector m_unresolvedRefStack; }; From b0753c38de6a51d8da87172faf38377bf73d9312 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 19 Mar 2015 11:37:11 +0100 Subject: [PATCH 073/166] fix code reading finding: rename definition. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 4 ++-- code/OpenGEXImporter.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 4172ae97b..c495773a9 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -37,7 +37,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER +#ifndef ASSIMP_BUILD_NO_OPENGEX_IMPORTER #include "AssimpPCH.h" #include "OpenGEXImporter.h" @@ -502,4 +502,4 @@ void OpenGEXImporter::clearNodeStack() { } // Namespace OpenGEX } // Namespace Assimp -#endif // ASSIMP_BUILD_NO_OPEMGEX_IMPORTER +#endif // ASSIMP_BUILD_NO_OPENGEX_IMPORTER diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 13154e06d..5355f0dea 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -40,7 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_OPENGEX_IMPORTER_H #define AI_OPENGEX_IMPORTER_H -#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER +#ifndef ASSIMP_BUILD_NO_OPENGEX_IMPORTER #include "BaseImporter.h" @@ -141,6 +141,6 @@ private: } // Namespace OpenGEX } // Namespace Assimp -#endif // ASSIMP_BUILD_NO_OPEMGEX_IMPORTER +#endif // ASSIMP_BUILD_NO_OPENGEX_IMPORTER #endif // AI_OPENGEX_IMPORTER_H From 12efa1477720011b64e6ff7021d12e6b3958d468 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 19 Mar 2015 11:37:58 +0100 Subject: [PATCH 074/166] add openddl_parser directly to assimp. Signed-off-by: Kim Kulling --- CMakeLists.txt | 4 ---- code/CMakeLists.txt | 18 ++++++++++++++++++ tools/assimp_cmd/CMakeLists.txt | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 231166824..8a3a325be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,10 +156,6 @@ else(NOT ZLIB_FOUND) endif(NOT ZLIB_FOUND) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) -add_subdirectory( contrib/openddlparser ) -INCLUDE_DIRECTORIES( contrib/openddlparser/include ) -SET( OPENDDL_PARSER_LIBRARIES openddl_parser ) - # Search for unzip if (PKG_CONFIG_FOUND) PKG_CHECK_MODULES(UNZIP minizip) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 3286d4a1d..e14215838 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -640,6 +640,18 @@ SET( unzip_SRCS ) SOURCE_GROUP( unzip FILES ${unzip_SRCS}) +SET ( openddl_parser_SRCS + ../contrib/openddlparser/code/OpenDDLParser.cpp + ../contrib/openddlparser/code/DDLNode.cpp + ../contrib/openddlparser/code/Value.cpp + ../contrib/openddlparser/include/openddlparser/OpenDDLParser.h + ../contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h + ../contrib/openddlparser/include/openddlparser/OpenDDLCommon.h + ../contrib/openddlparser/include/openddlparser/DDLNode.h + ../contrib/openddlparser/include/openddlparser/Value.h +) +SOURCE_GROUP( openddl_parser FILES ${openddl_parser_SRCS}) + # VC2010 fixes if(MSVC10) option( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF ) @@ -719,6 +731,7 @@ SET( assimp_src ${unzip_compile_SRCS} ${Poly2Tri_SRCS} ${Clipper_SRCS} + ${openddl_parser_SRCS} # Necessary to show the headers in the project when using the VC++ generator: ${Boost_SRCS} @@ -730,6 +743,11 @@ SET( assimp_src # Moreover it's a drag to recompile assimp entirely each time a modification is made to one of the included header, which is definitely counter-productive.) AssimpPCH.cpp ) +add_definitions( -DOPENDDLPARSER_BUILD ) + +INCLUDE_DIRECTORIES( + ../contrib/openddlparser/include +) IF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER) SET( assimp_src ${assimp_src} ${C4D_SRCS}) diff --git a/tools/assimp_cmd/CMakeLists.txt b/tools/assimp_cmd/CMakeLists.txt index 78b3139ee..6857a0ba2 100644 --- a/tools/assimp_cmd/CMakeLists.txt +++ b/tools/assimp_cmd/CMakeLists.txt @@ -28,7 +28,7 @@ IF( WIN32 ) MAIN_DEPENDENCY assimp) ENDIF( WIN32 ) -TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES} openddl_parser) +TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES} ) SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES OUTPUT_NAME assimp ) From 70aafa478d330543ccbe44dd9462d1ddc2fa2f84 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 19 Mar 2015 11:38:15 +0100 Subject: [PATCH 075/166] avoid copying of private struct. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 5 +++++ code/OpenGEXImporter.h | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index c495773a9..fcb15e587 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -170,6 +170,11 @@ OpenGEXImporter::RefInfo::RefInfo( aiNode *node, Type type, std::vector m_Names; RefInfo( aiNode *node, Type type, std::vector &names ); + ~RefInfo(); + + private: + RefInfo( const RefInfo & ); + RefInfo &operator = ( const RefInfo & ); }; std::vector m_meshCache; From f7e5f3ec6b345b0f13bc0170bc7ce7c4c9c34027 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 19 Mar 2015 12:07:16 +0100 Subject: [PATCH 076/166] assimp: fix build with latest version of openddl-parser lib. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 10 +++++----- .../include/openddlparser/OpenDDLCommon.h | 11 +++-------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 99274f412..1050baeb4 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -81,7 +81,7 @@ static bool isIntegerType( Value::ValueType integerType ) { } static DDLNode *createDDLNode( Identifier *id, OpenDDLParser *parser ) { - if( nullptr == id || ddl_nullptr == parser ) { + if( ddl_nullptr == id || ddl_nullptr == parser ) { return ddl_nullptr; } @@ -132,7 +132,7 @@ OpenDDLParser::~OpenDDLParser() { } void OpenDDLParser::setLogCallback( logCallback callback ) { - if( nullptr != callback ) { + if( ddl_nullptr != callback ) { // install user-specific log callback m_logCallback = callback; } else { @@ -607,7 +607,7 @@ char *OpenDDLParser::parseBooleanLiteral( char *in, char *end, Value **boolean ) char *OpenDDLParser::parseIntegerLiteral( char *in, char *end, Value **integer, Value::ValueType integerType ) { *integer = ddl_nullptr; - if( nullptr == in || in == end ) { + if( ddl_nullptr == in || in == end ) { return in; } @@ -705,7 +705,7 @@ char *OpenDDLParser::parseStringLiteral( char *in, char *end, Value **stringData } static void createPropertyWithData( Identifier *id, Value *primData, Property **prop ) { - if( nullptr != primData ) { + if( ddl_nullptr != primData ) { ( *prop ) = new Property( id ); ( *prop )->m_primData = primData; } @@ -857,7 +857,7 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da if( *in == '{' ) { in++; Value *current( ddl_nullptr ); - Reference *refs( nullptr ); + Reference *refs( ddl_nullptr ); DataArrayList *prev( ddl_nullptr ), *currentDataList( ddl_nullptr ); do { in = parseDataList( in, end, ¤t, &refs ); diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index 87209af86..40e54ea4b 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -74,7 +74,7 @@ enum NameType { }; struct Name { - NameType m_type; + NameType m_type; Identifier *m_id; Name( NameType type, Identifier *id ) @@ -85,8 +85,8 @@ struct Name { }; struct Reference { - size_t m_numRefs; - Name **m_referencedName; + size_t m_numRefs; + Name **m_referencedName; Reference() : m_numRefs( 0 ) @@ -166,10 +166,5 @@ struct BufferIt { END_ODDLPARSER_NS -#define ODDL_NO_COPYING( classname ) \ -private: \ - classname( const classname & ); \ - classname &operator = ( const classname & ); - #endif // OPENDDLPARSER_OPENDDLPARSERCOMMON_H_INC From 40369010c36ce8c2fb8c7f34df8c7e13c28e433c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 19 Mar 2015 12:14:17 +0100 Subject: [PATCH 077/166] fix usage of c++11 type nullptr. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 1050baeb4..4b9313a42 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -218,7 +218,7 @@ static void dumpId( Identifier *id ) { } char *OpenDDLParser::parseHeader( char *in, char *end ) { - if( nullptr == in || in == end ) { + if( ddl_nullptr == in || in == end ) { return in; } @@ -259,7 +259,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { // store the node DDLNode *node( createDDLNode( id, this ) ); - if( nullptr != node ) { + if( ddl_nullptr != node ) { pushNode( node ); } else { std::cerr << "nullptr returned by creating DDLNode." << std::endl; @@ -282,7 +282,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { } char *OpenDDLParser::parseStructure( char *in, char *end ) { - if( nullptr == in || in == end ) { + if( ddl_nullptr == in || in == end ) { return in; } @@ -377,7 +377,7 @@ char *OpenDDLParser::parseStructureBody( char *in, char *end, bool &error ) { } void OpenDDLParser::pushNode( DDLNode *node ) { - if( nullptr == node ) { + if( ddl_nullptr == node ) { return; } @@ -405,7 +405,7 @@ DDLNode *OpenDDLParser::top() { } DDLNode *OpenDDLParser::getRoot() const { - if( nullptr == m_context ) { + if( ddl_nullptr == m_context ) { return ddl_nullptr; } @@ -766,7 +766,7 @@ char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) { in = getNextToken( in, end ); Identifier *id( ddl_nullptr ); in = parseIdentifier( in, end, &id ); - if( nullptr != id ) { + if( ddl_nullptr != id ) { in = getNextToken( in, end ); if( *in == '=' ) { in++; From abe82a5d73e404d7ead988c87dc9460dc68a4620 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 19 Mar 2015 12:34:11 +0100 Subject: [PATCH 078/166] add missing include Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 4b9313a42..186323730 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include #include +#include #ifdef _WIN32 # include From 690ebe4f1ed09ce122a05119557f6e41b9edf831 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 20 Mar 2015 13:34:48 +0100 Subject: [PATCH 079/166] fix https://github.com/assimp/assimp/issues/504: use correct define for check if OpenGEX-importer shall be used or not. Signed-off-by: Kim Kulling --- code/ImporterRegistry.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/ImporterRegistry.cpp b/code/ImporterRegistry.cpp index 685863ea9..b2f7d2686 100644 --- a/code/ImporterRegistry.cpp +++ b/code/ImporterRegistry.cpp @@ -3,7 +3,7 @@ Open Asset Import Library (assimp) --------------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2015, assimp team All rights reserved. @@ -142,7 +142,7 @@ corresponding preprocessor flag to selectively disable formats. #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER # include "OgreImporter.h" #endif -#ifndef ASSIMP_BUILD_NO_OPEMGEX_IMPORTER +#ifndef ASSIMP_BUILD_NO_OPENGEX_IMPORTER # include "OpenGEXImporter.h" #endif #ifndef ASSIMP_BUILD_NO_MS3D_IMPORTER @@ -277,7 +277,7 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out) #if (!defined ASSIMP_BUILD_NO_OGRE_IMPORTER) out.push_back( new Ogre::OgreImporter()); #endif -#if (!defined ASSIMP_BUILD_NO_OPEMGEX_IMPORTER ) +#if (!defined ASSIMP_BUILD_NO_OPENGEX_IMPORTER ) out.push_back( new OpenGEX::OpenGEXImporter() ); #endif #if (!defined ASSIMP_BUILD_NO_MS3D_IMPORTER) @@ -309,8 +309,8 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out) #endif #ifndef ASSIMP_BUILD_NO_C4D_IMPORTER - out.push_back( new C4DImporter() ); + out.push_back( new C4DImporter() ); #endif } -} +} // namespace Assimp From 0995f3662d9f7dfd428aace6b67f24f32e399120 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 20 Mar 2015 16:56:28 +0100 Subject: [PATCH 080/166] prepare handlers for missing nodes. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 40 ++++++++++++++++++++++++++++++++++++++-- code/OpenGEXImporter.h | 8 +++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index fcb15e587..81b6b8446 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -278,25 +278,31 @@ void OpenGEXImporter::handleNodes( DDLNode *node, aiScene *pScene ) { break; case Grammar::TransformToken: + handleTransformNode( *it, pScene ); break; case Grammar::MeshToken: + handleMeshNode( *it, pScene ); break; case Grammar::VertexArrayToken: + handleVertexArrayNode( *it, pScene ); break; case Grammar::IndexArrayToken: + handleIndexArrayNode( *it, pScene ); break; case Grammar::MaterialToken: - handleMaterial( *it, pScene ); + handleMaterialNode( *it, pScene ); break; case Grammar::ColorToken: + handleColorNode( *it, pScene ); break; case Grammar::TextureToken: + handleTextureNode( *it, pScene ); break; default: @@ -432,7 +438,27 @@ void OpenGEXImporter::handleGeometryObject( DDLNode *node, aiScene *pScene ) { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleMaterial( ODDLParser::DDLNode *node, aiScene *pScene ) { +void OpenGEXImporter::handleTransformNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleMaterialNode( ODDLParser::DDLNode *node, aiScene *pScene ) { } @@ -460,6 +486,16 @@ void OpenGEXImporter::resolveReferences() { } } +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleColorNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleTextureNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + //------------------------------------------------------------------------------------------------ void OpenGEXImporter::pushNode( aiNode *node, aiScene *pScene ) { ai_assert( NULL != pScene ); diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 82c0e7c14..fe8ae1ef6 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -107,7 +107,13 @@ protected: void handleMaterialRefNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleGeometryNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleGeometryObject( ODDLParser::DDLNode *node, aiScene *pScene ); - void handleMaterial( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleTransformNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleMaterialNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleColorNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void handleTextureNode( ODDLParser::DDLNode *node, aiScene *pScene ); void resolveReferences(); void pushNode( aiNode *node, aiScene *pScene ); aiNode *popNode(); From c78ed74e70dcd7430f3d62b2766a789ae3fd2974 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 20 Mar 2015 16:56:43 +0100 Subject: [PATCH 081/166] - update gitignore file. Signed-off-by: Kim Kulling --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 9e6fd2672..74acea82f 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,7 @@ tools/assimp_view/assimp_viewer.vcxproj.user # Unix editor backups *~ +test/gtest/src/gtest-stamp/gtest-gitinfo.txt +test/gtest/src/gtest-stamp/gtest-gitclone-lastrun.txt +Assimp.opensdf +contrib/zlib/CTestTestfile.cmake From 32b1579c8086d57e5bfcde4074c5c1d37c7e6f0c Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 20 Mar 2015 21:05:25 +0100 Subject: [PATCH 082/166] install the android NDK --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b595600e7..02b297fb4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,9 @@ branches: - master env: - matrix: + global: + - PV=r8e PLATF=linux-x86_64 NDK_HOME=${TRAVIS_BUILD_DIR}/android-ndk-${PV} PATH=${PATH}:${NDK_HOME} + matrix: - LINUX=1 TRAVIS_NO_EXPORT=YES - LINUX=1 TRAVIS_NO_EXPORT=NO - LINUX=1 TRAVIS_STATIC_BUILD=ON @@ -15,6 +17,7 @@ env: - WINDOWS=1 TRAVIS_NO_EXPORT=NO - WINDOWS=1 TRAVIS_STATIC_BUILD=ON - WINDOWS=1 TRAVIS_STATIC_BUILD=OFF + - ANDROID=1 language: cpp @@ -24,6 +27,7 @@ compiler: install: - if [ $WINDOWS ]; then travis_retry sudo apt-get install -q -y gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64; fi + - if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi script: - cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD From 1ddcbf49da22713265897620c00e8dd08a120186 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 20 Mar 2015 21:11:08 +0100 Subject: [PATCH 083/166] use ant to compile jassimp --- .travis.yml | 2 +- port/jassimp/build.xml | 92 +++++++++++++++++++++++------------------- 2 files changed, 51 insertions(+), 43 deletions(-) diff --git a/.travis.yml b/.travis.yml index 02b297fb4..596ceb811 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,4 +42,4 @@ script: - echo "==========================================================" - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" - cat ../results/run_regression_suite_failures.csv - + - if [ $ANDROID ]; then ant -v -Dbasedir=${TRAVIS_BUILD_DIR} -f port/jassimp/build.xml ndk-jni ; fi diff --git a/port/jassimp/build.xml b/port/jassimp/build.xml index d81d1958a..372440091 100644 --- a/port/jassimp/build.xml +++ b/port/jassimp/build.xml @@ -1,45 +1,53 @@ - - - - - - - - - + + + + + + + + - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 23797dc8ccc7ec3bf03fd6b25e6d3223ffc95623 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 20 Mar 2015 21:15:57 +0100 Subject: [PATCH 084/166] for sure jassimp needs the assimp lib too --- workspaces/Android-NDK/jni/Android.mk | 129 ++++++++++++++++++++++ workspaces/Android-NDK/jni/Application.mk | 11 ++ 2 files changed, 140 insertions(+) create mode 100755 workspaces/Android-NDK/jni/Android.mk create mode 100755 workspaces/Android-NDK/jni/Application.mk diff --git a/workspaces/Android-NDK/jni/Android.mk b/workspaces/Android-NDK/jni/Android.mk new file mode 100755 index 000000000..764760e60 --- /dev/null +++ b/workspaces/Android-NDK/jni/Android.mk @@ -0,0 +1,129 @@ +LOCAL_PATH := $(call my-dir)/../../../ + +include $(CLEAR_VARS) +LOCAL_MODULE := assimp_static +ASSIMP_SRC_DIR = code +FILE_LIST := $(wildcard $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/*.cpp) + +IGNORE_LIST := $(wildcard $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/C4D*.cpp) +EXCLUDES := $(IGNORE_LIST:$(LOCAL_PATH)/%=%) +ALL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) +LOCAL_SRC_FILES := $(filter-out $(EXCLUDES), $(ALL_SRC_FILES)) + +LOCAL_SRC_FILES += contrib/clipper/clipper.cpp \ + contrib/ConvertUTF/ConvertUTF.c \ + contrib/unzip/ioapi.c \ + contrib/unzip/unzip.c \ + contrib/irrXML/irrXML.cpp \ + contrib/poly2tri/poly2tri/sweep/advancing_front.cc \ + contrib/poly2tri/poly2tri/sweep/sweep_context.cc \ + contrib/poly2tri/poly2tri/sweep/sweep.cc \ + contrib/poly2tri/poly2tri/sweep/cdt.cc \ + contrib/poly2tri/poly2tri/common/shapes.cc + + +# enables -frtti and -fexceptions +LOCAL_CPP_FEATURES := exceptions + +# cant be disabled? rudamentary function? +# -DASSIMP_BUILD_NO_FLIPWINDING_PROCESS \ +# +DontBuildProcess = \ + -DASSIMP_BUILD_NO_FLIPUVS_PROCESS \ + -DASSIMP_BUILD_NO_MAKELEFTHANDED_PROCESS \ + -DASSIMP_BUILD_NO_CALCTANGENTS_PROCESS \ + -DASSIMP_BUILD_NO_DEBONE_PROCESS \ + -DASSIMP_BUILD_NO_FINDDEGENERATES_PROCESS \ + -DASSIMP_BUILD_NO_FINDINSTANCES_PROCESS \ + -DASSIMP_BUILD_NO_FINDINVALIDDATA_PROCESS \ + -DASSIMP_BUILD_NO_FIXINFACINGNORMALS_PROCESS \ + -DASSIMP_BUILD_NO_GENFACENORMALS_PROCESS \ + -DASSIMP_BUILD_NO_GENUVCOORDS_PROCESS \ + -DASSIMP_BUILD_NO_GENVERTEXNORMALS_PROCESS \ + -DASSIMP_BUILD_NO_IMPROVECACHELOCALITY_PROCESS \ + -DASSIMP_BUILD_NO_JOINVERTICES_PROCESS \ + -DASSIMP_BUILD_NO_LIMITBONEWEIGHTS_PROCESS \ + -DASSIMP_BUILD_NO_OPTIMIZEGRAPH_PROCESS \ + -DASSIMP_BUILD_NO_OPTIMIZEMESHES_PROCESS \ + -DASSIMP_BUILD_NO_PRETRANSFORMVERTICES_PROCESS \ + -DASSIMP_BUILD_NO_REMOVEVC_PROCESS \ + -DASSIMP_BUILD_NO_REMOVE_REDUNDANTMATERIALS_PROCESS \ + -DASSIMP_BUILD_NO_SORTBYPTYPE_PROCESS \ + -DASSIMP_BUILD_NO_SPLITBYBONECOUNT_PROCESS \ + -DASSIMP_BUILD_NO_SPLITLARGEMESHES_PROCESS \ + -DASSIMP_BUILD_NO_TRANSFORMTEXCOORDS_PROCESS \ + -DASSIMP_BUILD_NO_TRIANGULATE_PROCESS \ + -DASSIMP_BUILD_NO_VALIDATEDS_PROCESS + +DontBuildImporters = \ + -DASSIMP_BUILD_NO_X_IMPORTER \ + -DASSIMP_BUILD_NO_3DS_IMPORTER \ + -DASSIMP_BUILD_NO_MD3_IMPORTER \ + -DASSIMP_BUILD_NO_MDL_IMPORTER \ + -DASSIMP_BUILD_NO_MD2_IMPORTER \ + -DASSIMP_BUILD_NO_PLY_IMPORTER \ + -DASSIMP_BUILD_NO_ASE_IMPORTER \ + -DASSIMP_BUILD_NO_HMP_IMPORTER \ + -DASSIMP_BUILD_NO_SMD_IMPORTER \ + -DASSIMP_BUILD_NO_MDC_IMPORTER \ + -DASSIMP_BUILD_NO_MD5_IMPORTER \ + -DASSIMP_BUILD_NO_STL_IMPORTER \ + -DASSIMP_BUILD_NO_LWO_IMPORTER \ + -DASSIMP_BUILD_NO_DXF_IMPORTER \ + -DASSIMP_BUILD_NO_NFF_IMPORTER \ + -DASSIMP_BUILD_NO_RAW_IMPORTER \ + -DASSIMP_BUILD_NO_OFF_IMPORTER \ + -DASSIMP_BUILD_NO_AC_IMPORTER \ + -DASSIMP_BUILD_NO_BVH_IMPORTER \ + -DASSIMP_BUILD_NO_IRRMESH_IMPORTER \ + -DASSIMP_BUILD_NO_IRR_IMPORTER \ + -DASSIMP_BUILD_NO_Q3D_IMPORTER \ + -DASSIMP_BUILD_NO_B3D_IMPORTER \ + -DASSIMP_BUILD_NO_COLLADA_IMPORTER \ + -DASSIMP_BUILD_NO_TERRAGEN_IMPORTER \ + -DASSIMP_BUILD_NO_CSM_IMPORTER \ + -DASSIMP_BUILD_NO_3D_IMPORTER \ + -DASSIMP_BUILD_NO_LWS_IMPORTER \ + -DASSIMP_BUILD_NO_OGRE_IMPORTER \ + -DASSIMP_BUILD_NO_MS3D_IMPORTER \ + -DASSIMP_BUILD_NO_COB_IMPORTER \ + -DASSIMP_BUILD_NO_Q3BSP_IMPORTER \ + -DASSIMP_BUILD_NO_NDO_IMPORTER \ + -DASSIMP_BUILD_NO_IFC_IMPORTER \ + -DASSIMP_BUILD_NO_XGL_IMPORTER \ + -DASSIMP_BUILD_NO_FBX_IMPORTER \ + -DASSIMP_BUILD_NO_C4D_IMPORTER \ + -DASSIMP_BUILD_NO_OPENGEX_IMPORTER \ + -DASSIMP_BUILD_NO_ASSBIN_IMPORTER +# -DASSIMP_BUILD_NO_BLEND_IMPORTER \ +# -DASSIMP_BUILD_NO_GEO_IMPORTER +# -DASSIMP_BUILD_NO_OBJ_IMPORTER \ +# +#DontBuildImporters := -DASSIMP_BUILD_NO_IFC_IMPORTER -DASSIMP_BUILD_NO_IRRMESH_IMPORTER -DASSIMP_BUILD_NO_IRR_IMPORTER -DASSIMP_BUILD_NO_C4D_IMPORTER -DASSIMP_BUILD_NO_OPENGEX_IMPORTER + +ASSIMP_FLAGS_3_0 = -DASSIMP_BUILD_DLL_EXPORT -DASSIMP_BUILD_NO_OWN_ZLIB -DASSIMP_BUILD_BOOST_WORKAROUND -Dassimp_EXPORTS -fPIC -fvisibility=hidden -Wall # $(DontBuildProcess) +ASSIMP_FLAGS_3_1 = $(ASSIMP_FLAGS_3_0) # -DASSIMP_BUILD_BLENDER_DEBUG # -DASSIMP_BUILD_NO_EXPORT + +LOCAL_CFLAGS += $(ASSIMP_FLAGS_3_1) $(DontBuildImporters) -DASSIMP_BUILD_NO_EXPORT +#LOCAL_CXXFLAGS += $(ASSIMP_FLAGS_3_1) # -funwind-tables + +LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround ./ +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround + +include $(BUILD_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := assimp + +LOCAL_CFLAGS += -UASSIMP_BUILD_DLL_EXPORT +LOCAL_WHOLE_STATIC_LIBRARIES = assimp_static + +LOCAL_LDLIBS := -lz + +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround +include $(BUILD_SHARED_LIBRARY) + +-include $(LOCAL_PATH)/assimp_cmd.mk + +# let it on original place +include $(LOCAL_PATH)/port/jassimp/jassimp-native/Android.mk diff --git a/workspaces/Android-NDK/jni/Application.mk b/workspaces/Android-NDK/jni/Application.mk new file mode 100755 index 000000000..1e357dcbf --- /dev/null +++ b/workspaces/Android-NDK/jni/Application.mk @@ -0,0 +1,11 @@ +# NDK_TOOLCHAIN_VERSION=clang # fails on IFCBoolean.cpp and GEOColorTable.h ??? +#NDK_TOOLCHAIN_VERSION=4.8 +#NDK_TOOLCHAIN_VERSION=4.7 +#NDK_TOOLCHAIN_VERSION=4.6 + +APP_ABI := all +APP_ABI := x86 + +APP_STL := stlport_static + +#NDK_APP_OUT := /home/Video-HD/C-Backups/arris69_assimp.git/JassimpLibrary From f63607e94588cce0d98782e129675e7a62ad7ae3 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 20 Mar 2015 21:34:12 +0100 Subject: [PATCH 085/166] build don't starts? --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 596ceb811..554949030 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ before_install: - sudo apt-get install cmake python3 -branches: - only: - - master +#branches: +# only: +# - master env: global: From 2dda345bdb8cd230e14d6ceca38c54304f710f00 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 20 Mar 2015 21:41:23 +0100 Subject: [PATCH 086/166] build don't starts? (reverted branch setting) --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 554949030..596ceb811 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ before_install: - sudo apt-get install cmake python3 -#branches: -# only: -# - master +branches: + only: + - master env: global: From d045dbdb69b4edfa5faca4a10164b972a96307cf Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 20 Mar 2015 21:55:19 +0100 Subject: [PATCH 087/166] fix openddl-issue wih token type containing line end. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 186323730..5ff314aa5 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -290,8 +290,8 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { bool error( false ); in = getNextToken( in, end ); if( *in == '{' ) { + // loop over all children ( data and nodes ) do { - // loop over all childs ( data and nodes ) in = parseStructureBody( in, end, error ); } while ( *in != '}' ); in++; @@ -489,7 +489,7 @@ char *OpenDDLParser::parseIdentifier( char *in, char *end, Identifier **id ) { // get size of id size_t idLen( 0 ); char *start( in ); - while( !isSeparator( *in ) && ( in != end ) && *in != '(' && *in != ')' ) { + while( !isSeparator( *in ) && !isNewLine( *in ) && ( in != end ) && *in != '(' && *in != ')' ) { in++; idLen++; } @@ -855,7 +855,7 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da } in = getNextToken( in, end ); - if( *in == '{' ) { + if( *in == Grammar::OpenBracketToken[ 0 ] ) { in++; Value *current( ddl_nullptr ); Reference *refs( ddl_nullptr ); From 448ce916c2742870f08b7308f8d1e741efbeb0b4 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 20 Mar 2015 22:06:03 +0100 Subject: [PATCH 088/166] build don't starts? (reverted branch setting) --- .travis.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 596ceb811..ba1227d3e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,22 @@ before_install: - sudo apt-get install cmake python3 -branches: - only: - - master +#branches: +# only: +# - master env: global: - PV=r8e PLATF=linux-x86_64 NDK_HOME=${TRAVIS_BUILD_DIR}/android-ndk-${PV} PATH=${PATH}:${NDK_HOME} matrix: - - LINUX=1 TRAVIS_NO_EXPORT=YES - - LINUX=1 TRAVIS_NO_EXPORT=NO - - LINUX=1 TRAVIS_STATIC_BUILD=ON - - LINUX=1 TRAVIS_STATIC_BUILD=OFF - - WINDOWS=1 TRAVIS_NO_EXPORT=YES - - WINDOWS=1 TRAVIS_NO_EXPORT=NO - - WINDOWS=1 TRAVIS_STATIC_BUILD=ON - - WINDOWS=1 TRAVIS_STATIC_BUILD=OFF +# - LINUX=1 TRAVIS_NO_EXPORT=YES +# - LINUX=1 TRAVIS_NO_EXPORT=NO +# - LINUX=1 TRAVIS_STATIC_BUILD=ON +# - LINUX=1 TRAVIS_STATIC_BUILD=OFF +# - WINDOWS=1 TRAVIS_NO_EXPORT=YES +# - WINDOWS=1 TRAVIS_NO_EXPORT=NO +# - WINDOWS=1 TRAVIS_STATIC_BUILD=ON +# - WINDOWS=1 TRAVIS_STATIC_BUILD=OFF - ANDROID=1 language: cpp @@ -42,4 +42,4 @@ script: - echo "==========================================================" - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" - cat ../results/run_regression_suite_failures.csv - - if [ $ANDROID ]; then ant -v -Dbasedir=${TRAVIS_BUILD_DIR} -f port/jassimp/build.xml ndk-jni ; fi + - if [ $ANDROID ]; then ant -v -Dbasedir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; fi From 54dcc64d339da3c743c8e9b6a216055903c59ebf Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 20 Mar 2015 22:36:57 +0100 Subject: [PATCH 089/166] enable some importers, skip otherbuild for test/discuss --- .travis.yml | 29 ++++++++++++++------------- workspaces/Android-NDK/jni/Android.mk | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index ba1227d3e..01e14246d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,10 @@ before_install: - sudo apt-get install cmake python3 + - echo -e "#ifndef A_R_H_INC\n#define A_R_H_INC\n#define GitVersion ${TRAVIS_JOB_ID}\n#define GitBranch \"${TRAVIS_BRANCH}\"\n#endif // A_R_H_INC" > revision.h -#branches: -# only: -# - master +branches: + only: + - master env: global: @@ -30,16 +31,16 @@ install: - if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi script: - - cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD - - make - - sudo make install - - sudo ldconfig - - cd test/unit - - ../../bin/unit - - cd ../regression - - chmod 755 run.py - - ./run.py +# - cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD +# - make +# - sudo make install +# - sudo ldconfig +# - cd test/unit +# - ../../bin/unit +# - cd ../regression +# - chmod 755 run.py +# - ./run.py - echo "==========================================================" - - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" - - cat ../results/run_regression_suite_failures.csv +# - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" +# - cat ../results/run_regression_suite_failures.csv - if [ $ANDROID ]; then ant -v -Dbasedir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; fi diff --git a/workspaces/Android-NDK/jni/Android.mk b/workspaces/Android-NDK/jni/Android.mk index 764760e60..09f8eeb84 100755 --- a/workspaces/Android-NDK/jni/Android.mk +++ b/workspaces/Android-NDK/jni/Android.mk @@ -99,7 +99,7 @@ DontBuildImporters = \ # -DASSIMP_BUILD_NO_GEO_IMPORTER # -DASSIMP_BUILD_NO_OBJ_IMPORTER \ # -#DontBuildImporters := -DASSIMP_BUILD_NO_IFC_IMPORTER -DASSIMP_BUILD_NO_IRRMESH_IMPORTER -DASSIMP_BUILD_NO_IRR_IMPORTER -DASSIMP_BUILD_NO_C4D_IMPORTER -DASSIMP_BUILD_NO_OPENGEX_IMPORTER +DontBuildImporters := -DASSIMP_BUILD_NO_IFC_IMPORTER -DASSIMP_BUILD_NO_IRRMESH_IMPORTER -DASSIMP_BUILD_NO_IRR_IMPORTER -DASSIMP_BUILD_NO_C4D_IMPORTER -DASSIMP_BUILD_NO_OPENGEX_IMPORTER ASSIMP_FLAGS_3_0 = -DASSIMP_BUILD_DLL_EXPORT -DASSIMP_BUILD_NO_OWN_ZLIB -DASSIMP_BUILD_BOOST_WORKAROUND -Dassimp_EXPORTS -fPIC -fvisibility=hidden -Wall # $(DontBuildProcess) ASSIMP_FLAGS_3_1 = $(ASSIMP_FLAGS_3_0) # -DASSIMP_BUILD_BLENDER_DEBUG # -DASSIMP_BUILD_NO_EXPORT From f3ed79ab41ec5ae4caba5e36518dacf6c078d320 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 10:32:15 +0100 Subject: [PATCH 090/166] make use of travis languages, build java jar too. https://github.com/assimp/assimp/pull/505#issuecomment-84198261 --- .travis.yml | 2 +- port/jassimp/build.xml | 5 +++-- workspaces/Android-NDK/jni/Application.mk | 13 +++++-------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 01e14246d..4254cef73 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,4 +43,4 @@ script: - echo "==========================================================" # - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" # - cat ../results/run_regression_suite_failures.csv - - if [ $ANDROID ]; then ant -v -Dbasedir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; fi + - if [ $ANDROID ]; then ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; fi diff --git a/port/jassimp/build.xml b/port/jassimp/build.xml index 372440091..1352e3ffa 100644 --- a/port/jassimp/build.xml +++ b/port/jassimp/build.xml @@ -7,6 +7,7 @@ + @@ -29,9 +30,9 @@ - + - + diff --git a/workspaces/Android-NDK/jni/Application.mk b/workspaces/Android-NDK/jni/Application.mk index 1e357dcbf..89b7f5e6a 100755 --- a/workspaces/Android-NDK/jni/Application.mk +++ b/workspaces/Android-NDK/jni/Application.mk @@ -1,11 +1,8 @@ -# NDK_TOOLCHAIN_VERSION=clang # fails on IFCBoolean.cpp and GEOColorTable.h ??? -#NDK_TOOLCHAIN_VERSION=4.8 -#NDK_TOOLCHAIN_VERSION=4.7 -#NDK_TOOLCHAIN_VERSION=4.6 +ifeq ($(TRAVIS_LANGUAGE),clang) + NDK_TOOLCHAIN_VERSION := $(TRAVIS_LANGUAGE) + $(info "Use llvm Compiler") +endif -APP_ABI := all -APP_ABI := x86 +APP_ABI := armeabi-v7a APP_STL := stlport_static - -#NDK_APP_OUT := /home/Video-HD/C-Backups/arris69_assimp.git/JassimpLibrary From 3e6043de70d4e2f941a303b6ddb19f236fde7c56 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 10:54:46 +0100 Subject: [PATCH 091/166] use correct variable for compiler selection... --- workspaces/Android-NDK/jni/Application.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workspaces/Android-NDK/jni/Application.mk b/workspaces/Android-NDK/jni/Application.mk index 89b7f5e6a..3d264db1b 100755 --- a/workspaces/Android-NDK/jni/Application.mk +++ b/workspaces/Android-NDK/jni/Application.mk @@ -1,5 +1,5 @@ -ifeq ($(TRAVIS_LANGUAGE),clang) - NDK_TOOLCHAIN_VERSION := $(TRAVIS_LANGUAGE) +ifeq ($(CC),clang) + NDK_TOOLCHAIN_VERSION := $(CC) $(info "Use llvm Compiler") endif From 3bd1a791c0e2f86968329329eccaacd054151ac3 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 11:08:06 +0100 Subject: [PATCH 092/166] gcc_struct, old fish, but reinterprated: https://github.com/assimp/assimp/commit/92f4c84488a11d863d2019093f01123d7688ff4b --- include/assimp/Compiler/pushpack1.h | 92 ++++++++++++++--------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/include/assimp/Compiler/pushpack1.h b/include/assimp/Compiler/pushpack1.h index 8bdb71293..e55202665 100644 --- a/include/assimp/Compiler/pushpack1.h +++ b/include/assimp/Compiler/pushpack1.h @@ -1,46 +1,46 @@ - - -// =============================================================================== -// May be included multiple times - sets structure packing to 1 -// for all supported compilers. #include reverts the changes. -// -// Currently this works on the following compilers: -// MSVC 7,8,9 -// GCC -// BORLAND (complains about 'pack state changed but not reverted', but works) -// Clang -// -// -// USAGE: -// -// struct StructToBePacked { -// } PACK_STRUCT; -// -// =============================================================================== - -#ifdef AI_PUSHPACK_IS_DEFINED -# error poppack1.h must be included after pushpack1.h -#endif - -#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) -# pragma pack(push,1) -# define PACK_STRUCT -#elif defined( __GNUC__ ) -# if defined(__clang__) -# define PACK_STRUCT __attribute__((__packed__)) -# else -# define PACK_STRUCT __attribute__((gcc_struct, __packed__)) -# endif -#else -# error Compiler not supported -#endif - -#if defined(_MSC_VER) - -// C4103: Packing was changed after the inclusion of the header, propably missing #pragma pop -# pragma warning (disable : 4103) -#endif - -#define AI_PUSHPACK_IS_DEFINED - - + + +// =============================================================================== +// May be included multiple times - sets structure packing to 1 +// for all supported compilers. #include reverts the changes. +// +// Currently this works on the following compilers: +// MSVC 7,8,9 +// GCC +// BORLAND (complains about 'pack state changed but not reverted', but works) +// Clang +// +// +// USAGE: +// +// struct StructToBePacked { +// } PACK_STRUCT; +// +// =============================================================================== + +#ifdef AI_PUSHPACK_IS_DEFINED +# error poppack1.h must be included after pushpack1.h +#endif + +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) +# pragma pack(push,1) +# define PACK_STRUCT +#elif defined( __GNUC__ ) +# if !defined(HOST_MINGW) +# define PACK_STRUCT __attribute__((__packed__)) +# else +# define PACK_STRUCT __attribute__((gcc_struct, __packed__)) +# endif +#else +# error Compiler not supported +#endif + +#if defined(_MSC_VER) + +// C4103: Packing was changed after the inclusion of the header, propably missing #pragma pop +# pragma warning (disable : 4103) +#endif + +#define AI_PUSHPACK_IS_DEFINED + + From a7e4babd9d9694ca232a77439a226ce2c0830919 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 11:08:06 +0100 Subject: [PATCH 093/166] gcc_struct, old fish, but reinterpreted: https://github.com/assimp/assimp/commit/92f4c84488a11d863d2019093f01123d7688ff4b --- include/assimp/Compiler/pushpack1.h | 92 ++++++++++++++--------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/include/assimp/Compiler/pushpack1.h b/include/assimp/Compiler/pushpack1.h index 8bdb71293..e55202665 100644 --- a/include/assimp/Compiler/pushpack1.h +++ b/include/assimp/Compiler/pushpack1.h @@ -1,46 +1,46 @@ - - -// =============================================================================== -// May be included multiple times - sets structure packing to 1 -// for all supported compilers. #include reverts the changes. -// -// Currently this works on the following compilers: -// MSVC 7,8,9 -// GCC -// BORLAND (complains about 'pack state changed but not reverted', but works) -// Clang -// -// -// USAGE: -// -// struct StructToBePacked { -// } PACK_STRUCT; -// -// =============================================================================== - -#ifdef AI_PUSHPACK_IS_DEFINED -# error poppack1.h must be included after pushpack1.h -#endif - -#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) -# pragma pack(push,1) -# define PACK_STRUCT -#elif defined( __GNUC__ ) -# if defined(__clang__) -# define PACK_STRUCT __attribute__((__packed__)) -# else -# define PACK_STRUCT __attribute__((gcc_struct, __packed__)) -# endif -#else -# error Compiler not supported -#endif - -#if defined(_MSC_VER) - -// C4103: Packing was changed after the inclusion of the header, propably missing #pragma pop -# pragma warning (disable : 4103) -#endif - -#define AI_PUSHPACK_IS_DEFINED - - + + +// =============================================================================== +// May be included multiple times - sets structure packing to 1 +// for all supported compilers. #include reverts the changes. +// +// Currently this works on the following compilers: +// MSVC 7,8,9 +// GCC +// BORLAND (complains about 'pack state changed but not reverted', but works) +// Clang +// +// +// USAGE: +// +// struct StructToBePacked { +// } PACK_STRUCT; +// +// =============================================================================== + +#ifdef AI_PUSHPACK_IS_DEFINED +# error poppack1.h must be included after pushpack1.h +#endif + +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) +# pragma pack(push,1) +# define PACK_STRUCT +#elif defined( __GNUC__ ) +# if !defined(HOST_MINGW) +# define PACK_STRUCT __attribute__((__packed__)) +# else +# define PACK_STRUCT __attribute__((gcc_struct, __packed__)) +# endif +#else +# error Compiler not supported +#endif + +#if defined(_MSC_VER) + +// C4103: Packing was changed after the inclusion of the header, propably missing #pragma pop +# pragma warning (disable : 4103) +#endif + +#define AI_PUSHPACK_IS_DEFINED + + From 527bf8c255e04bb1806c53a887c27bb0845eef83 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 12:35:29 +0100 Subject: [PATCH 094/166] bit cleanup and wait untip issue #506 is fixed --- workspaces/Android-NDK/jni/Android.mk | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/workspaces/Android-NDK/jni/Android.mk b/workspaces/Android-NDK/jni/Android.mk index 09f8eeb84..08a16bd55 100755 --- a/workspaces/Android-NDK/jni/Android.mk +++ b/workspaces/Android-NDK/jni/Android.mk @@ -24,6 +24,9 @@ LOCAL_SRC_FILES += contrib/clipper/clipper.cpp \ # enables -frtti and -fexceptions LOCAL_CPP_FEATURES := exceptions +# identifier 'nullptr' will become a keyword in C++0x [-Wc++0x-compat] +# but next breaks blender and other importer +# LOCAL_CFLAGS += -std=c++11 # cant be disabled? rudamentary function? # -DASSIMP_BUILD_NO_FLIPWINDING_PROCESS \ @@ -99,15 +102,14 @@ DontBuildImporters = \ # -DASSIMP_BUILD_NO_GEO_IMPORTER # -DASSIMP_BUILD_NO_OBJ_IMPORTER \ # -DontBuildImporters := -DASSIMP_BUILD_NO_IFC_IMPORTER -DASSIMP_BUILD_NO_IRRMESH_IMPORTER -DASSIMP_BUILD_NO_IRR_IMPORTER -DASSIMP_BUILD_NO_C4D_IMPORTER -DASSIMP_BUILD_NO_OPENGEX_IMPORTER +DontBuildImporters := -DASSIMP_BUILD_NO_IFC_IMPORTER -DASSIMP_BUILD_NO_IRRMESH_IMPORTER -DASSIMP_BUILD_NO_IRR_IMPORTER -DASSIMP_BUILD_NO_C4D_IMPORTER -ASSIMP_FLAGS_3_0 = -DASSIMP_BUILD_DLL_EXPORT -DASSIMP_BUILD_NO_OWN_ZLIB -DASSIMP_BUILD_BOOST_WORKAROUND -Dassimp_EXPORTS -fPIC -fvisibility=hidden -Wall # $(DontBuildProcess) -ASSIMP_FLAGS_3_1 = $(ASSIMP_FLAGS_3_0) # -DASSIMP_BUILD_BLENDER_DEBUG # -DASSIMP_BUILD_NO_EXPORT +ASSIMP_FLAGS_3_0 = -DASSIMP_BUILD_DLL_EXPORT -DASSIMP_BUILD_NO_OWN_ZLIB -DASSIMP_BUILD_BOOST_WORKAROUND -Dassimp_EXPORTS -fPIC -fvisibility=hidden -Wall +ASSIMP_FLAGS_3_1 = $(ASSIMP_FLAGS_3_0) # -DASSIMP_BUILD_BLENDER_DEBUG -LOCAL_CFLAGS += $(ASSIMP_FLAGS_3_1) $(DontBuildImporters) -DASSIMP_BUILD_NO_EXPORT -#LOCAL_CXXFLAGS += $(ASSIMP_FLAGS_3_1) # -funwind-tables +LOCAL_CFLAGS += $(ASSIMP_FLAGS_3_1) -DASSIMP_BUILD_NO_EXPORT $(DontBuildImporters) # $(DontBuildProcess) -LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround ./ +LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround $(LOCAL_PATH)/contrib/openddlparser/include ./ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround include $(BUILD_STATIC_LIBRARY) From e2c91f3d234c1b42ec319ade5c79e890912aa883 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 16:56:42 +0100 Subject: [PATCH 095/166] closes #506 --- workspaces/Android-NDK/jni/Android.mk | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/workspaces/Android-NDK/jni/Android.mk b/workspaces/Android-NDK/jni/Android.mk index 08a16bd55..a0255f85c 100755 --- a/workspaces/Android-NDK/jni/Android.mk +++ b/workspaces/Android-NDK/jni/Android.mk @@ -21,6 +21,9 @@ LOCAL_SRC_FILES += contrib/clipper/clipper.cpp \ contrib/poly2tri/poly2tri/sweep/cdt.cc \ contrib/poly2tri/poly2tri/common/shapes.cc +LOCAL_SRC_FILES += contrib/openddlparser/code/OpenDDLParser.cpp \ + contrib/openddlparser/code/DDLNode.cpp \ + contrib/openddlparser/code/Value.cpp # enables -frtti and -fexceptions LOCAL_CPP_FEATURES := exceptions @@ -107,7 +110,7 @@ DontBuildImporters := -DASSIMP_BUILD_NO_IFC_IMPORTER -DASSIMP_BUILD_NO_IRRMESH_I ASSIMP_FLAGS_3_0 = -DASSIMP_BUILD_DLL_EXPORT -DASSIMP_BUILD_NO_OWN_ZLIB -DASSIMP_BUILD_BOOST_WORKAROUND -Dassimp_EXPORTS -fPIC -fvisibility=hidden -Wall ASSIMP_FLAGS_3_1 = $(ASSIMP_FLAGS_3_0) # -DASSIMP_BUILD_BLENDER_DEBUG -LOCAL_CFLAGS += $(ASSIMP_FLAGS_3_1) -DASSIMP_BUILD_NO_EXPORT $(DontBuildImporters) # $(DontBuildProcess) +LOCAL_CFLAGS += $(ASSIMP_FLAGS_3_1) -DASSIMP_BUILD_NO_EXPORT -DOPENDDL_NO_USE_CPP11 $(DontBuildImporters) # $(DontBuildProcess) LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround $(LOCAL_PATH)/contrib/openddlparser/include ./ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround From db7f9fc54da178dffad2505cf3fe1029fc297fba Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 16:56:42 +0100 Subject: [PATCH 096/166] closes assimp/assimp#506 --- workspaces/Android-NDK/jni/Android.mk | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/workspaces/Android-NDK/jni/Android.mk b/workspaces/Android-NDK/jni/Android.mk index 08a16bd55..a0255f85c 100755 --- a/workspaces/Android-NDK/jni/Android.mk +++ b/workspaces/Android-NDK/jni/Android.mk @@ -21,6 +21,9 @@ LOCAL_SRC_FILES += contrib/clipper/clipper.cpp \ contrib/poly2tri/poly2tri/sweep/cdt.cc \ contrib/poly2tri/poly2tri/common/shapes.cc +LOCAL_SRC_FILES += contrib/openddlparser/code/OpenDDLParser.cpp \ + contrib/openddlparser/code/DDLNode.cpp \ + contrib/openddlparser/code/Value.cpp # enables -frtti and -fexceptions LOCAL_CPP_FEATURES := exceptions @@ -107,7 +110,7 @@ DontBuildImporters := -DASSIMP_BUILD_NO_IFC_IMPORTER -DASSIMP_BUILD_NO_IRRMESH_I ASSIMP_FLAGS_3_0 = -DASSIMP_BUILD_DLL_EXPORT -DASSIMP_BUILD_NO_OWN_ZLIB -DASSIMP_BUILD_BOOST_WORKAROUND -Dassimp_EXPORTS -fPIC -fvisibility=hidden -Wall ASSIMP_FLAGS_3_1 = $(ASSIMP_FLAGS_3_0) # -DASSIMP_BUILD_BLENDER_DEBUG -LOCAL_CFLAGS += $(ASSIMP_FLAGS_3_1) -DASSIMP_BUILD_NO_EXPORT $(DontBuildImporters) # $(DontBuildProcess) +LOCAL_CFLAGS += $(ASSIMP_FLAGS_3_1) -DASSIMP_BUILD_NO_EXPORT -DOPENDDL_NO_USE_CPP11 $(DontBuildImporters) # $(DontBuildProcess) LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround $(LOCAL_PATH)/contrib/openddlparser/include ./ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/BoostWorkaround From 2b7ceb301e21a47009728cca9a32777d3ab9f380 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 21 Mar 2015 17:09:17 +0100 Subject: [PATCH 097/166] work finished, feel free to commit/cherry-pick --- .travis.yml | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4254cef73..3310b881b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,14 +10,14 @@ env: global: - PV=r8e PLATF=linux-x86_64 NDK_HOME=${TRAVIS_BUILD_DIR}/android-ndk-${PV} PATH=${PATH}:${NDK_HOME} matrix: -# - LINUX=1 TRAVIS_NO_EXPORT=YES -# - LINUX=1 TRAVIS_NO_EXPORT=NO -# - LINUX=1 TRAVIS_STATIC_BUILD=ON -# - LINUX=1 TRAVIS_STATIC_BUILD=OFF -# - WINDOWS=1 TRAVIS_NO_EXPORT=YES -# - WINDOWS=1 TRAVIS_NO_EXPORT=NO -# - WINDOWS=1 TRAVIS_STATIC_BUILD=ON -# - WINDOWS=1 TRAVIS_STATIC_BUILD=OFF + - LINUX=1 TRAVIS_NO_EXPORT=YES + - LINUX=1 TRAVIS_NO_EXPORT=NO + - LINUX=1 TRAVIS_STATIC_BUILD=ON + - LINUX=1 TRAVIS_STATIC_BUILD=OFF + - WINDOWS=1 TRAVIS_NO_EXPORT=YES + - WINDOWS=1 TRAVIS_NO_EXPORT=NO + - WINDOWS=1 TRAVIS_STATIC_BUILD=ON + - WINDOWS=1 TRAVIS_STATIC_BUILD=OFF - ANDROID=1 language: cpp @@ -31,16 +31,16 @@ install: - if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi script: -# - cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD -# - make -# - sudo make install -# - sudo ldconfig -# - cd test/unit -# - ../../bin/unit -# - cd ../regression -# - chmod 755 run.py -# - ./run.py - - echo "==========================================================" -# - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" -# - cat ../results/run_regression_suite_failures.csv - if [ $ANDROID ]; then ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; fi + - cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD + - make + - sudo make install + - sudo ldconfig + - cd test/unit + - ../../bin/unit + - cd ../regression + - chmod 755 run.py + - ./run.py + - echo "==========================================================" + - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" + - cat ../results/run_regression_suite_failures.csv From 14324c60cf7aa092250ed71e23387cffa4a15aa6 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 22 Mar 2015 17:53:53 +0100 Subject: [PATCH 098/166] Add missing ASSIMP_BUILD_NO_C4D_IMPORTER check to C4DImporter.cpp. Fixes #503. --- code/C4DImporter.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/C4DImporter.cpp b/code/C4DImporter.cpp index 167e6800c..533967022 100644 --- a/code/C4DImporter.cpp +++ b/code/C4DImporter.cpp @@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * @brief Implementation of the Cinema4D importer class. */ #include "AssimpPCH.h" +#ifndef ASSIMP_BUILD_NO_C4D_IMPORTER // no #ifdefing here, Cinema4D support is carried out in a branch of assimp // where it is turned on in the CMake settings. @@ -639,3 +640,5 @@ unsigned int C4DImporter::ResolveMaterial(PolygonObject* obj) ai_assert((*it).second < mat_count); return (*it).second; } + +#endif // ASSIMP_BUILD_NO_C4D_IMPORTER From 947429152f6bbbc12f639770128484c3c976a93b Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sun, 22 Mar 2015 18:27:06 +0100 Subject: [PATCH 099/166] finishing. also skip filtering C4D importer due fixed in https://github.com/assimp/assimp/commit/14324c60cf7aa092250ed71e23387cffa4a15aa6 --- workspaces/Android-NDK/jni/Android.mk | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/workspaces/Android-NDK/jni/Android.mk b/workspaces/Android-NDK/jni/Android.mk index a0255f85c..0d9f4981d 100755 --- a/workspaces/Android-NDK/jni/Android.mk +++ b/workspaces/Android-NDK/jni/Android.mk @@ -3,27 +3,17 @@ LOCAL_PATH := $(call my-dir)/../../../ include $(CLEAR_VARS) LOCAL_MODULE := assimp_static ASSIMP_SRC_DIR = code -FILE_LIST := $(wildcard $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/*.cpp) -IGNORE_LIST := $(wildcard $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/C4D*.cpp) -EXCLUDES := $(IGNORE_LIST:$(LOCAL_PATH)/%=%) -ALL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) -LOCAL_SRC_FILES := $(filter-out $(EXCLUDES), $(ALL_SRC_FILES)) +FILE_LIST := $(wildcard $(LOCAL_PATH)/$(ASSIMP_SRC_DIR)/*.cpp) +FILE_LIST += $(wildcard $(LOCAL_PATH)/contrib/openddlparser/code/*.cpp) +FILE_LIST += $(wildcard $(LOCAL_PATH)/contrib/unzip/*.c) +FILE_LIST += $(wildcard $(LOCAL_PATH)/contrib/poly2tri/poly2tri/*/*.cc) + +LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) LOCAL_SRC_FILES += contrib/clipper/clipper.cpp \ contrib/ConvertUTF/ConvertUTF.c \ - contrib/unzip/ioapi.c \ - contrib/unzip/unzip.c \ - contrib/irrXML/irrXML.cpp \ - contrib/poly2tri/poly2tri/sweep/advancing_front.cc \ - contrib/poly2tri/poly2tri/sweep/sweep_context.cc \ - contrib/poly2tri/poly2tri/sweep/sweep.cc \ - contrib/poly2tri/poly2tri/sweep/cdt.cc \ - contrib/poly2tri/poly2tri/common/shapes.cc - -LOCAL_SRC_FILES += contrib/openddlparser/code/OpenDDLParser.cpp \ - contrib/openddlparser/code/DDLNode.cpp \ - contrib/openddlparser/code/Value.cpp + contrib/irrXML/irrXML.cpp # enables -frtti and -fexceptions LOCAL_CPP_FEATURES := exceptions From 5b2ab2f76a244d44e9d65c3b6a7c9f4d4e69abf6 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 23 Mar 2015 18:46:41 +0100 Subject: [PATCH 100/166] OpenDDLParser: latest greatest, Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 14 ++++++++++---- .../include/openddlparser/OpenDDLParser.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 5ff314aa5..58ed87941 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -352,7 +352,8 @@ char *OpenDDLParser::parseStructureBody( char *in, char *end, bool &error ) { DataArrayList *dtArrayList( ddl_nullptr ); Value *values( ddl_nullptr ); if( 1 == arrayLen ) { - in = parseDataList( in, end, &values, &refs ); + size_t numRefs( 0 ), numValues( 0 ); + in = parseDataList( in, end, &values, numValues, &refs, numRefs ); setNodeValues( top(), values ); setNodeReferences( top(), refs ); } else if( arrayLen > 1 ) { @@ -797,8 +798,9 @@ char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) { return in; } -char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, Reference **refs ) { +char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, size_t &numValues, Reference **refs, size_t &numRefs ) { *data = ddl_nullptr; + numValues = numRefs = 0; if( ddl_nullptr == in || in == end ) { return in; } @@ -824,6 +826,7 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, Reference if( !names.empty() ) { Reference *ref = new Reference( names.size(), &names[ 0 ] ); *refs = ref; + numRefs = names.size(); } } @@ -835,6 +838,7 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, Reference prev->setNext( current ); prev = current; } + numValues++; } in = getNextSeparator( in, end ); @@ -861,11 +865,13 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da Reference *refs( ddl_nullptr ); DataArrayList *prev( ddl_nullptr ), *currentDataList( ddl_nullptr ); do { - in = parseDataList( in, end, ¤t, &refs ); + size_t numRefs( 0 ), numValues( 0 ); + in = parseDataList( in, end, ¤t, numValues, &refs, numRefs ); if( ddl_nullptr != current ) { if( ddl_nullptr == prev ) { *dataList = new DataArrayList; - (*dataList)->m_dataList = current; + ( *dataList )->m_dataList = current; + ( *dataList )->m_numItems = numValues; prev = *dataList; } else { currentDataList = new DataArrayList; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h index 00f2c2e58..67d3322e0 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h @@ -96,7 +96,7 @@ public: // static parser helpers static char *parseStringLiteral( char *in, char *end, Value **stringData ); static char *parseHexaLiteral( char *in, char *end, Value **data ); static char *parseProperty( char *in, char *end, Property **prop ); - static char *parseDataList( char *in, char *end, Value **data, Reference **refs ); + static char *parseDataList( char *in, char *end, Value **data, size_t &numValues, Reference **refs, size_t &numRefs ); static char *parseDataArrayList( char *in, char *end, DataArrayList **dataList ); static const char *getVersion(); From 23b372825497b6fba8e08af8d5de664aea556d3c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 24 Mar 2015 00:08:42 +0100 Subject: [PATCH 101/166] add setup of transformation information in opengex importer. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 54 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 81b6b8446..4b4e4ee77 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -360,8 +360,10 @@ void OpenGEXImporter::handleNameNode( DDLNode *node, aiScene *pScene ) { throw DeadlyImportError( "OpenGEX: invalid data type for value in node name." ); } - std::string name( val->getString() ); - m_currentNode->mName.Set( name.c_str() ); + if( NULL != m_currentNode ) { + std::string name( val->getString() ); + m_currentNode->mName.Set( name.c_str() ); + } } } @@ -438,8 +440,54 @@ void OpenGEXImporter::handleGeometryObject( DDLNode *node, aiScene *pScene ) { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleTransformNode( ODDLParser::DDLNode *node, aiScene *pScene ) { +static void setMatrix( aiNode *node, DataArrayList *transformData ) { + float m[ 16 ]; + size_t i( 1 ); + Value *next( transformData->m_dataList->m_next ); + m[ 0 ] = transformData->m_dataList->getFloat(); + while( next != NULL ) { + m[ i ] = next->getFloat(); + next = next->m_next; + i++; + } + + node->mTransformation.a1 = m[ 0 ]; + node->mTransformation.a2 = m[ 1 ]; + node->mTransformation.a3 = m[ 2 ]; + node->mTransformation.a4 = m[ 3 ]; + node->mTransformation.b1 = m[ 4 ]; + node->mTransformation.b2 = m[ 5 ]; + node->mTransformation.b3 = m[ 6 ]; + node->mTransformation.b4 = m[ 7 ]; + + node->mTransformation.c1 = m[ 8 ]; + node->mTransformation.c2 = m[ 9 ]; + node->mTransformation.c3 = m[ 10 ]; + node->mTransformation.c4 = m[ 11 ]; + + node->mTransformation.d1 = m[ 12 ]; + node->mTransformation.d2 = m[ 13 ]; + node->mTransformation.d3 = m[ 14 ]; + node->mTransformation.d4 = m[ 15 ]; +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleTransformNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + if( NULL == m_currentNode ) { + throw DeadlyImportError( "No parent node for name." ); + return; + } + + + DataArrayList *transformData( node->getDataArrayList() ); + if( NULL != transformData ) { + if( transformData->m_numItems != 16 ) { + throw DeadlyImportError( "Invalid number of data for transform matrix." ); + return; + } + setMatrix( m_currentNode, transformData ); + } } //------------------------------------------------------------------------------------------------ From d19a677f8816519b9f248012b8fda173ca56378d Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 25 Mar 2015 19:55:39 +0100 Subject: [PATCH 102/166] openddl-parser: latest greatest. Contains fix for https://github.com/kimkulling/openddl-parser/issues/10 and https://github.com/kimkulling/openddl-parser/issues/13 --- contrib/openddlparser/code/OpenDDLParser.cpp | 60 ++++++++++--------- .../include/openddlparser/OpenDDLParser.h | 15 ++++- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 58ed87941..1c9006f38 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -190,6 +190,8 @@ bool OpenDDLParser::parse() { normalizeBuffer( m_buffer ); + std::cout << &m_buffer[0] << std::endl; + m_context = new Context; m_context->m_root = DDLNode::create( "root", "", ddl_nullptr ); pushNode( m_context->m_root ); @@ -230,7 +232,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { dumpId( id ); #endif // DEBUG_HEADER_NAME - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); Property *first( ddl_nullptr ); if( ddl_nullptr != id ) { if( *in == '(' ) { @@ -238,7 +240,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) { Property *prop( ddl_nullptr ), *prev( ddl_nullptr ); while( *in != ')' && in != end ) { in = OpenDDLParser::parseProperty( in, end, &prop ); - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in != ',' && *in != ')' ) { logInvalidTokenError( in, ")", m_logCallback ); @@ -288,21 +290,20 @@ char *OpenDDLParser::parseStructure( char *in, char *end ) { } bool error( false ); - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in == '{' ) { // loop over all children ( data and nodes ) do { in = parseStructureBody( in, end, error ); } while ( *in != '}' ); in++; - } - else { + } else { in++; logInvalidTokenError( in, std::string( Grammar::OpenBracketToken ), m_logCallback ); error = true; return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); // pop node from stack after successful parsing if( !error ) { @@ -341,12 +342,13 @@ char *OpenDDLParser::parseStructureBody( char *in, char *end, bool &error ) { in++; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); Value::ValueType type( Value::ddl_none ); size_t arrayLen( 0 ); in = OpenDDLParser::parsePrimitiveDataType( in, end, type, arrayLen ); if( Value::ddl_none != type ) { - in = getNextToken( in, end ); + // parse a primitive data type + in = lookForNextToken( in, end ); if( *in == '{' ) { Reference *refs( ddl_nullptr ); DataArrayList *dtArrayList( ddl_nullptr ); @@ -365,13 +367,14 @@ char *OpenDDLParser::parseStructureBody( char *in, char *end, bool &error ) { } } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in != '}' ) { logInvalidTokenError( in, std::string( Grammar::CloseBracketToken ), m_logCallback ); } else { //in++; } } else { + // parse a complex data type in = parseNextNode( in, end ); } @@ -429,15 +432,16 @@ void OpenDDLParser::normalizeBuffer( std::vector &buffer) { for( size_t readIdx = 0; readIdx( c, end ) ) { + if( !isComment( c, end ) && !isNewLine( *c ) ) { newBuffer.push_back( buffer[ readIdx ] ); } else { - readIdx++; - // skip the comment and the rest of the line - while( !isEndofLine( buffer[ readIdx ] ) ) { + if( isComment( c, end ) ) { readIdx++; + // skip the comment and the rest of the line + while( !isEndofLine( buffer[ readIdx ] ) ) { + readIdx++; + } } - newBuffer.push_back( '\n' ); } } buffer = newBuffer; @@ -450,7 +454,7 @@ char *OpenDDLParser::parseName( char *in, char *end, Name **name ) { } // ignore blanks - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in != '$' && *in != '%' ) { return in; } @@ -480,7 +484,7 @@ char *OpenDDLParser::parseIdentifier( char *in, char *end, Identifier **id ) { } // ignore blanks - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); // staring with a number is forbidden if( isNumeric( *in ) ) { @@ -521,7 +525,7 @@ char *OpenDDLParser::parsePrimitiveDataType( char *in, char *end, Value::ValueTy } if( Value::ddl_none == type ) { - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); return in; } else { in += prim_len; @@ -582,7 +586,7 @@ char *OpenDDLParser::parseBooleanLiteral( char *in, char *end, Value **boolean ) return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); char *start( in ); size_t len( 0 ); while( !isSeparator( *in ) && in != end ) { @@ -617,7 +621,7 @@ char *OpenDDLParser::parseIntegerLiteral( char *in, char *end, Value **integer, return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); char *start( in ); while( !isSeparator( *in ) && in != end ) { in++; @@ -653,7 +657,7 @@ char *OpenDDLParser::parseFloatingLiteral( char *in, char *end, Value **floating return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); char *start( in ); while( !isSeparator( *in ) && in != end ) { in++; @@ -686,7 +690,7 @@ char *OpenDDLParser::parseStringLiteral( char *in, char *end, Value **stringData return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); size_t len( 0 ); char *start( in ); if( *start == '\"' ) { @@ -719,7 +723,7 @@ char *OpenDDLParser::parseHexaLiteral( char *in, char *end, Value **data ) { return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in != '0' ) { return in; } @@ -765,11 +769,11 @@ char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) { return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); Identifier *id( ddl_nullptr ); in = parseIdentifier( in, end, &id ); if( ddl_nullptr != id ) { - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in == '=' ) { in++; in = getNextToken( in, end ); @@ -805,13 +809,13 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, size_t &n return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in == '{' ) { in++; Value *current( ddl_nullptr ), *prev( ddl_nullptr ); while( '}' != *in ) { current = ddl_nullptr; - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( isInteger( in, end ) ) { in = parseIntegerLiteral( in, end, ¤t ); } else if( isFloat( in, end ) ) { @@ -858,7 +862,7 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da return in; } - in = getNextToken( in, end ); + in = lookForNextToken( in, end ); if( *in == Grammar::OpenBracketToken[ 0 ] ) { in++; Value *current( ddl_nullptr ); @@ -882,6 +886,8 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da } } } while( ',' == *in && in != end ); + in = lookForNextToken( in, end ); + in++; } return in; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h index 67d3322e0..068c028b7 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParser.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParser.h @@ -43,13 +43,26 @@ struct Property; template inline -T *getNextToken( T *in, T *end ) { +T *lookForNextToken( T *in, T *end ) { while( ( isSpace( *in ) || isNewLine( *in ) || ',' == *in ) && ( in != end ) ) { in++; } return in; } +template +inline +T *getNextToken( T *in, T *end ) { + T *tmp( in ); + while( ( isSpace( *in ) || isNewLine( *in ) || ',' == *in ) && ( in != end ) ) { + in++; + } + if( tmp == in ) { + in++; + } + return in; +} + /// @brief Defines the log severity. enum LogSeverity { ddl_debug_msg = 0, ///< Debug message, for debugging From 7a01f77a086a6d0ed6db9442f40c1ec102dfdf15 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 25 Mar 2015 21:35:32 +0100 Subject: [PATCH 103/166] fix invalid lookup for token type in opengex-parser. --- code/OpenGEXImporter.cpp | 52 ++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 4b4e4ee77..23a8d34bf 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -122,33 +122,45 @@ namespace Grammar { } static TokenType matchTokenType( const char *tokenType ) { - if( 0 == strncmp( MetricType, tokenType, strlen( tokenType ) ) ) { + if( 0 == strncmp( MetricType, tokenType, strlen( MetricType ) ) ) { return MetricToken; - } else if( 0 == strncmp( NameType, tokenType, strlen( tokenType ) ) ) { + } else if( 0 == strncmp( NameType, tokenType, strlen( NameType ) ) ) { return NameToken; - } else if( 0 == strncmp( ObjectRefType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( ObjectRefType, tokenType, strlen( ObjectRefType ) ) ) { return ObjectRefToken; - } else if( 0 == strncmp( MaterialRefType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( MaterialRefType, tokenType, strlen( MaterialRefType ) ) ) { return MaterialRefToken; - } else if( 0 == strncmp( MetricKeyType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( MetricKeyType, tokenType, strlen( MetricKeyType ) ) ) { return MetricKeyToken; - } else if( 0 == strncmp( GeometryNodeType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( GeometryNodeType, tokenType, strlen( GeometryNodeType ) ) ) { return GeometryNodeToken; - } else if( 0 == strncmp( GeometryObjectType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( GeometryObjectType, tokenType, strlen( GeometryObjectType ) ) ) { return GeometryObjectToken; - } else if( 0 == strncmp( TransformType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( TransformType, tokenType, strlen( TransformType ) ) ) { return TransformToken; - } else if( 0 == strncmp( MeshType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( MeshType, tokenType, strlen( MeshType ) ) ) { return MeshToken; - } else if( 0 == strncmp( VertexArrayType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( VertexArrayType, tokenType, strlen( VertexArrayType ) ) ) { return VertexArrayToken; - } else if( 0 == strncmp( IndexArrayType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( IndexArrayType, tokenType, strlen( IndexArrayType ) ) ) { return IndexArrayToken; - } else if( 0 == strncmp( MaterialType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( MaterialType, tokenType, strlen( MaterialType ) ) ) { return MaterialToken; - } else if( 0 == strncmp( ColorType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( ColorType, tokenType, strlen( ColorType ) ) ) { return ColorToken; - } else if( 0 == strncmp( TextureType, tokenType, strlen( tokenType ) ) ) { + } + else if( 0 == strncmp( TextureType, tokenType, strlen( TextureType ) ) ) { return TextureToken; } @@ -358,12 +370,11 @@ void OpenGEXImporter::handleNameNode( DDLNode *node, aiScene *pScene ) { if( NULL != val ) { if( Value::ddl_string != val->m_type ) { throw DeadlyImportError( "OpenGEX: invalid data type for value in node name." ); + return; } - if( NULL != m_currentNode ) { - std::string name( val->getString() ); - m_currentNode->mName.Set( name.c_str() ); - } + const std::string name( val->getString() ); + m_currentNode->mName.Set( name.c_str() ); } } @@ -441,6 +452,9 @@ void OpenGEXImporter::handleGeometryObject( DDLNode *node, aiScene *pScene ) { //------------------------------------------------------------------------------------------------ static void setMatrix( aiNode *node, DataArrayList *transformData ) { + ai_assert( NULL != node ); + ai_assert( NULL != transformData ); + float m[ 16 ]; size_t i( 1 ); Value *next( transformData->m_dataList->m_next ); @@ -529,6 +543,8 @@ void OpenGEXImporter::resolveReferences() { } } else if( RefInfo::MaterialRef == currentRefInfo->m_type ) { // ToDo + } else { + throw DeadlyImportError( "Unknown reference info to resolve." ); } } } From ca4385fcf25aa1802c1b6a98366cc49ddd77d4ce Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 26 Mar 2015 10:11:14 +0100 Subject: [PATCH 104/166] fix compiler warning ( signed against unsigned ). Signed-off-by: Kim Kulling --- code/PlyLoader.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/PlyLoader.cpp b/code/PlyLoader.cpp index deb7da094..f1864b0f6 100644 --- a/code/PlyLoader.cpp +++ b/code/PlyLoader.cpp @@ -74,8 +74,9 @@ namespace template const T &GetProperty(const std::vector &props, int idx) { - if (idx >= props.size()) - throw DeadlyImportError("Invalid .ply file: Property index is out of range."); + if( static_cast< size_t >( idx ) >= props.size() ) { + throw DeadlyImportError( "Invalid .ply file: Property index is out of range." ); + } return props[idx]; } From b17a1255a1a33c04dbc95c9d46fab25e38ec8b7c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 26 Mar 2015 20:17:26 +0100 Subject: [PATCH 105/166] add setup for mesh primitives and prepare vertex array copy ops. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 83 +++++++++++++++++++++++++++++++++++++++- code/OpenGEXImporter.h | 1 + 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 23a8d34bf..dc571efad 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -193,6 +193,7 @@ OpenGEXImporter::OpenGEXImporter() , m_mesh2refMap() , m_ctx( NULL ) , m_currentNode( NULL ) +, m_currentMesh( NULL ) , m_nodeStack() , m_unresolvedRefStack() { // empty @@ -505,13 +506,93 @@ void OpenGEXImporter::handleTransformNode( ODDLParser::DDLNode *node, aiScene *p } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene ) { +static void propId2StdString( Property *prop, std::string &name, std::string &key ) { + name = key = ""; + if( NULL == prop ) { + return; + } + if( NULL != prop->m_id ) { + name = prop->m_id->m_buffer; + if( Value::ddl_string == prop->m_primData->m_type ) { + key = prop->m_primData->getString(); + } + } +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + Property *prop = node->getProperties(); + m_currentMesh = new aiMesh; + m_meshCache.push_back( m_currentMesh ); + + if( NULL != prop ) { + std::string propName, propKey; + propId2StdString( prop, propName, propKey ); + if( "triangles" == propName ) { + m_currentMesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; + } + } + + handleNodes( node, pScene ); +} + +//------------------------------------------------------------------------------------------------ +enum MeshAttribute { + None, + Position, + Normal, + TexCoord +}; + +//------------------------------------------------------------------------------------------------ +static MeshAttribute getAttributeByName( const char *attribName ) { + ai_assert( NULL != attribName ); + + if( 0 == strncmp( "position", attribName, strlen( "position" ) ) ) { + return Position; + } else if( 0 == strncmp( "normal", attribName, strlen( "normal" ) ) ) { + return Normal; + } else if( 0 == strncmp( "texcoord", attribName, strlen( "texcoord" ) ) ) { + return TexCoord; + } + + return None; } //------------------------------------------------------------------------------------------------ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + if( NULL == node ) { + throw DeadlyImportError( "No parent node for name." ); + return; + } + Property *prop( node->getProperties() ); + if( NULL != prop ) { + std::string propName, propKey; + propId2StdString( prop, propName, propKey ); + MeshAttribute attribType( getAttributeByName( propName.c_str() ) ); + if( None == attribType ) { + return; + } + + DataArrayList *vaList = node->getDataArrayList(); + if( NULL == vaList ) { + return; + } + + if( Position == attribType ) { + aiVector3D *pos = new aiVector3D[ vaList->m_numItems ]; + Value *next( vaList->m_dataList ); + for( size_t i = 0; i < vaList->m_numItems; i++ ) { + + } + } else if( Normal == attribType ) { + aiVector3D *normal = new aiVector3D[ vaList->m_numItems ]; + } else if( TexCoord == attribType ) { + aiVector3D *tex = new aiVector3D[ vaList->m_numItems ]; + } + } } //------------------------------------------------------------------------------------------------ diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index fe8ae1ef6..d890bde76 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -145,6 +145,7 @@ private: ODDLParser::Context *m_ctx; MetricInfo m_metrics[ MetricInfo::Max ]; aiNode *m_currentNode; + aiMesh *m_currentMesh; std::vector m_nodeStack; std::vector m_unresolvedRefStack; }; From 08ba782bd5fd1d0392b70e675db99702ff349b7f Mon Sep 17 00:00:00 2001 From: George Papadopoulos Date: Thu, 26 Mar 2015 00:43:41 +0200 Subject: [PATCH 106/166] [FBX] add support for multiple animations (by using LocalStart/LocalStop in takes) + change key type from uint to int (fixes bugs from negative int_t becoming a junk uint_t value ) + detect and ignore channels with no keys in the specified take start/stop window + add test model with multiple animations --- code/FBXConverter.cpp | 158 ++++++++++++++---- code/FBXDocument.h | 10 +- code/FBXParser.cpp | 106 ++++++++++++ code/FBXParser.h | 3 + code/FBXProperties.cpp | 7 +- .../2013_BINARY/multiple_animations_test.fbx | Bin 0 -> 34576 bytes 6 files changed, 243 insertions(+), 41 deletions(-) create mode 100644 test/models-nonbsd/FBX/2013_BINARY/multiple_animations_test.fbx diff --git a/code/FBXConverter.cpp b/code/FBXConverter.cpp index 7bd15736f..1698d6d93 100644 --- a/code/FBXConverter.cpp +++ b/code/FBXConverter.cpp @@ -1968,9 +1968,12 @@ private: // strip AnimationStack:: prefix std::string name = st.Name(); - if(name.substr(0,16) == "AnimationStack::") { + if (name.substr(0, 16) == "AnimationStack::") { name = name.substr(16); } + else if (name.substr(0, 11) == "AnimStack::") { + name = name.substr(11); + } anim->mName.Set(name); @@ -2014,12 +2017,18 @@ private: double min_time = 1e10; double max_time = -1e10; + int64_t start_time = st.LocalStart(); + int64_t stop_time = st.LocalStop(); + double start_timeF = CONVERT_FBX_TIME(start_time); + double stop_timeF = CONVERT_FBX_TIME(stop_time); + try { BOOST_FOREACH(const NodeMap::value_type& kv, node_map) { GenerateNodeAnimations(node_anims, kv.first, kv.second, layer_map, + start_time, stop_time, max_time, min_time); } @@ -2043,9 +2052,27 @@ private: return; } + //adjust relative timing for animation + { + double start_fps = start_timeF * anim_fps; + + for (unsigned int c = 0; c < anim->mNumChannels; c++) + { + aiNodeAnim* channel = anim->mChannels[c]; + for (uint32_t i = 0; i < channel->mNumPositionKeys; i++) + channel->mPositionKeys[i].mTime -= start_fps; + for (uint32_t i = 0; i < channel->mNumRotationKeys; i++) + channel->mRotationKeys[i].mTime -= start_fps; + for (uint32_t i = 0; i < channel->mNumScalingKeys; i++) + channel->mScalingKeys[i].mTime -= start_fps; + } + + max_time -= min_time; + } + // for some mysterious reason, mDuration is simply the maximum key -- the // validator always assumes animations to start at zero. - anim->mDuration = max_time /*- min_time */; + anim->mDuration = (stop_timeF - start_timeF) * anim_fps; anim->mTicksPerSecond = anim_fps; } @@ -2055,6 +2082,7 @@ private: const std::string& fixed_name, const std::vector& curves, const LayerMap& layer_map, + int64_t start, int64_t stop, double& max_time, double& min_time) { @@ -2147,13 +2175,19 @@ private: aiNodeAnim* const nd = GenerateSimpleNodeAnim(fixed_name, target, chain, node_property_map.end(), layer_map, + start, stop, max_time, min_time, true // input is TRS order, assimp is SRT ); ai_assert(nd); - node_anims.push_back(nd); + if (nd->mNumPositionKeys == 0 && nd->mNumRotationKeys == 0 && nd->mNumScalingKeys == 0) { + delete nd; + } + else { + node_anims.push_back(nd); + } return; } @@ -2185,6 +2219,7 @@ private: target, (*chain[i]).second, layer_map, + start, stop, max_time, min_time); @@ -2200,6 +2235,7 @@ private: target, (*chain[i]).second, layer_map, + start, stop, max_time, min_time); @@ -2212,12 +2248,18 @@ private: target, (*chain[i]).second, layer_map, + start, stop, max_time, min_time, true); ai_assert(inv); - node_anims.push_back(inv); + if (inv->mNumPositionKeys == 0 && inv->mNumRotationKeys == 0 && inv->mNumScalingKeys == 0) { + delete inv; + } + else { + node_anims.push_back(inv); + } ai_assert(TransformationComp_RotationPivotInverse > i); flags |= bit << (TransformationComp_RotationPivotInverse - i); @@ -2230,12 +2272,18 @@ private: target, (*chain[i]).second, layer_map, + start, stop, max_time, min_time, true); ai_assert(inv); - node_anims.push_back(inv); + if (inv->mNumPositionKeys == 0 && inv->mNumRotationKeys == 0 && inv->mNumScalingKeys == 0) { + delete inv; + } + else { + node_anims.push_back(inv); + } ai_assert(TransformationComp_RotationPivotInverse > i); flags |= bit << (TransformationComp_RotationPivotInverse - i); @@ -2249,6 +2297,7 @@ private: target, (*chain[i]).second, layer_map, + start, stop, max_time, min_time); @@ -2259,7 +2308,12 @@ private: } ai_assert(na); - node_anims.push_back(na); + if (na->mNumPositionKeys == 0 && na->mNumRotationKeys == 0 && na->mNumScalingKeys == 0) { + delete na; + } + else { + node_anims.push_back(na); + } continue; } } @@ -2320,13 +2374,14 @@ private: const Model& target, const std::vector& curves, const LayerMap& layer_map, + int64_t start, int64_t stop, double& max_time, double& min_time) { ScopeGuard na(new aiNodeAnim()); na->mNodeName.Set(name); - ConvertRotationKeys(na, curves, layer_map, max_time,min_time, target.RotationOrder()); + ConvertRotationKeys(na, curves, layer_map, start, stop, max_time, min_time, target.RotationOrder()); // dummy scaling key na->mScalingKeys = new aiVectorKey[1]; @@ -2351,13 +2406,14 @@ private: const Model& /*target*/, const std::vector& curves, const LayerMap& layer_map, + int64_t start, int64_t stop, double& max_time, double& min_time) { ScopeGuard na(new aiNodeAnim()); na->mNodeName.Set(name); - ConvertScaleKeys(na, curves, layer_map, max_time,min_time); + ConvertScaleKeys(na, curves, layer_map, start, stop, max_time, min_time); // dummy rotation key na->mRotationKeys = new aiQuatKey[1]; @@ -2382,6 +2438,7 @@ private: const Model& /*target*/, const std::vector& curves, const LayerMap& layer_map, + int64_t start, int64_t stop, double& max_time, double& min_time, bool inverse = false) @@ -2389,7 +2446,7 @@ private: ScopeGuard na(new aiNodeAnim()); na->mNodeName.Set(name); - ConvertTranslationKeys(na, curves, layer_map, max_time,min_time); + ConvertTranslationKeys(na, curves, layer_map, start, stop, max_time, min_time); if (inverse) { for (unsigned int i = 0; i < na->mNumPositionKeys; ++i) { @@ -2422,6 +2479,7 @@ private: NodeMap::const_iterator chain[TransformationComp_MAXIMUM], NodeMap::const_iterator iter_end, const LayerMap& layer_map, + int64_t start, int64_t stop, double& max_time, double& min_time, bool reverse_order = false) @@ -2443,21 +2501,21 @@ private: KeyFrameListList rotation; if(chain[TransformationComp_Scaling] != iter_end) { - scaling = GetKeyframeList((*chain[TransformationComp_Scaling]).second); + scaling = GetKeyframeList((*chain[TransformationComp_Scaling]).second, start, stop); } else { def_scale = PropertyGet(props,"Lcl Scaling",aiVector3D(1.f,1.f,1.f)); } if(chain[TransformationComp_Translation] != iter_end) { - translation = GetKeyframeList((*chain[TransformationComp_Translation]).second); + translation = GetKeyframeList((*chain[TransformationComp_Translation]).second, start, stop); } else { def_translate = PropertyGet(props,"Lcl Translation",aiVector3D(0.f,0.f,0.f)); } if(chain[TransformationComp_Rotation] != iter_end) { - rotation = GetKeyframeList((*chain[TransformationComp_Rotation]).second); + rotation = GetKeyframeList((*chain[TransformationComp_Rotation]).second, start, stop); } else { def_rot = EulerToQuaternion(PropertyGet(props,"Lcl Rotation",aiVector3D(0.f,0.f,0.f)), @@ -2475,17 +2533,20 @@ private: aiVectorKey* out_scale = new aiVectorKey[times.size()]; aiVectorKey* out_translation = new aiVectorKey[times.size()]; - ConvertTransformOrder_TRStoSRT(out_quat, out_scale, out_translation, - scaling, - translation, - rotation, - times, - max_time, - min_time, - target.RotationOrder(), - def_scale, - def_translate, - def_rot); + if (times.size()) + { + ConvertTransformOrder_TRStoSRT(out_quat, out_scale, out_translation, + scaling, + translation, + rotation, + times, + max_time, + min_time, + target.RotationOrder(), + def_scale, + def_translate, + def_rot); + } // XXX remove duplicates / redundant keys which this operation did // likely produce if not all three channels were equally dense. @@ -2507,6 +2568,7 @@ private: if(chain[TransformationComp_Scaling] != iter_end) { ConvertScaleKeys(na, (*chain[TransformationComp_Scaling]).second, layer_map, + start, stop, max_time, min_time); } @@ -2522,6 +2584,7 @@ private: if(chain[TransformationComp_Rotation] != iter_end) { ConvertRotationKeys(na, (*chain[TransformationComp_Rotation]).second, layer_map, + start, stop, max_time, min_time, target.RotationOrder()); @@ -2539,6 +2602,7 @@ private: if(chain[TransformationComp_Translation] != iter_end) { ConvertTranslationKeys(na, (*chain[TransformationComp_Translation]).second, layer_map, + start, stop, max_time, min_time); } @@ -2558,17 +2622,21 @@ private: // key (time), value, mapto (component index) - typedef boost::tuple< const KeyTimeList*, const KeyValueList*, unsigned int > KeyFrameList; + typedef boost::tuple, boost::shared_ptr, unsigned int > KeyFrameList; typedef std::vector KeyFrameListList; // ------------------------------------------------------------------------------------------------ - KeyFrameListList GetKeyframeList(const std::vector& nodes) + KeyFrameListList GetKeyframeList(const std::vector& nodes, int64_t start, int64_t stop) { KeyFrameListList inputs; inputs.reserve(nodes.size()*3); + //give some breathing room for rounding errors + int64_t adj_start = start - 10000; + int64_t adj_stop = stop + 10000; + BOOST_FOREACH(const AnimationCurveNode* node, nodes) { ai_assert(node); @@ -2593,7 +2661,23 @@ private: const AnimationCurve* const curve = kv.second; ai_assert(curve->GetKeys().size() == curve->GetValues().size() && curve->GetKeys().size()); - inputs.push_back(boost::make_tuple(&curve->GetKeys(), &curve->GetValues(), mapto)); + //get values within the start/stop time window + boost::shared_ptr Keys(new KeyTimeList()); + boost::shared_ptr Values(new KeyValueList()); + const int count = curve->GetKeys().size(); + Keys->reserve(count); + Values->reserve(count); + for (int n = 0; n < count; n++) + { + int64_t k = curve->GetKeys().at(n); + if (k >= adj_start && k <= adj_stop) + { + Keys->push_back(k); + Values->push_back(curve->GetValues().at(n)); + } + } + + inputs.push_back(boost::make_tuple(Keys, Values, mapto)); } } return inputs; // pray for NRVO :-) @@ -2623,7 +2707,7 @@ private: const size_t count = inputs.size(); while(true) { - uint64_t min_tick = std::numeric_limits::max(); + int64_t min_tick = std::numeric_limits::max(); for (size_t i = 0; i < count; ++i) { const KeyFrameList& kfl = inputs[i]; @@ -2632,7 +2716,7 @@ private: } } - if (min_tick == std::numeric_limits::max()) { + if (min_tick == std::numeric_limits::max()) { break; } keys.push_back(min_tick); @@ -2832,6 +2916,7 @@ private: // ------------------------------------------------------------------------------------------------ void ConvertScaleKeys(aiNodeAnim* na, const std::vector& nodes, const LayerMap& /*layers*/, + int64_t start, int64_t stop, double& maxTime, double& minTime) { @@ -2841,36 +2926,40 @@ private: // layers should be multiplied with each other). There is a FBX // property in the layer to specify the behaviour, though. - const KeyFrameListList& inputs = GetKeyframeList(nodes); + const KeyFrameListList& inputs = GetKeyframeList(nodes, start, stop); const KeyTimeList& keys = GetKeyTimeList(inputs); na->mNumScalingKeys = static_cast(keys.size()); na->mScalingKeys = new aiVectorKey[keys.size()]; - InterpolateKeys(na->mScalingKeys, keys, inputs, true, maxTime, minTime); + if (keys.size() > 0) + InterpolateKeys(na->mScalingKeys, keys, inputs, true, maxTime, minTime); } // ------------------------------------------------------------------------------------------------ void ConvertTranslationKeys(aiNodeAnim* na, const std::vector& nodes, const LayerMap& /*layers*/, + int64_t start, int64_t stop, double& maxTime, double& minTime) { ai_assert(nodes.size()); // XXX see notes in ConvertScaleKeys() - const KeyFrameListList& inputs = GetKeyframeList(nodes); + const KeyFrameListList& inputs = GetKeyframeList(nodes, start, stop); const KeyTimeList& keys = GetKeyTimeList(inputs); na->mNumPositionKeys = static_cast(keys.size()); na->mPositionKeys = new aiVectorKey[keys.size()]; - InterpolateKeys(na->mPositionKeys, keys, inputs, false, maxTime, minTime); + if (keys.size() > 0) + InterpolateKeys(na->mPositionKeys, keys, inputs, false, maxTime, minTime); } // ------------------------------------------------------------------------------------------------ void ConvertRotationKeys(aiNodeAnim* na, const std::vector& nodes, const LayerMap& /*layers*/, + int64_t start, int64_t stop, double& maxTime, double& minTime, Model::RotOrder order) @@ -2878,12 +2967,13 @@ private: ai_assert(nodes.size()); // XXX see notes in ConvertScaleKeys() - const std::vector< KeyFrameList >& inputs = GetKeyframeList(nodes); + const std::vector< KeyFrameList >& inputs = GetKeyframeList(nodes, start, stop); const KeyTimeList& keys = GetKeyTimeList(inputs); na->mNumRotationKeys = static_cast(keys.size()); na->mRotationKeys = new aiQuatKey[keys.size()]; - InterpolateKeys(na->mRotationKeys, keys, inputs, false, maxTime, minTime, order); + if (keys.size() > 0) + InterpolateKeys(na->mRotationKeys, keys, inputs, false, maxTime, minTime, order); } diff --git a/code/FBXDocument.h b/code/FBXDocument.h index b4099550b..9f1849132 100644 --- a/code/FBXDocument.h +++ b/code/FBXDocument.h @@ -871,7 +871,7 @@ private: std::vector mappings; }; -typedef std::vector KeyTimeList; +typedef std::vector KeyTimeList; typedef std::vector KeyValueList; /** Represents a FBX animation curve (i.e. a 1-dimensional set of keyframes and values therefor) */ @@ -1015,10 +1015,10 @@ public: public: - fbx_simple_property(LocalStart, uint64_t, 0L) - fbx_simple_property(LocalStop, uint64_t, 0L) - fbx_simple_property(ReferenceStart, uint64_t, 0L) - fbx_simple_property(ReferenceStop, uint64_t, 0L) + fbx_simple_property(LocalStart, int64_t, 0L) + fbx_simple_property(LocalStop, int64_t, 0L) + fbx_simple_property(ReferenceStart, int64_t, 0L) + fbx_simple_property(ReferenceStop, int64_t, 0L) diff --git a/code/FBXParser.cpp b/code/FBXParser.cpp index 62f8d9c0c..a9fe97a5e 100644 --- a/code/FBXParser.cpp +++ b/code/FBXParser.cpp @@ -431,6 +431,43 @@ int ParseTokenAsInt(const Token& t, const char*& err_out) } +// ------------------------------------------------------------------------------------------------ +int64_t ParseTokenAsInt64(const Token& t, const char*& err_out) +{ + err_out = NULL; + + if (t.Type() != TokenType_DATA) { + err_out = "expected TOK_DATA token"; + return 0L; + } + + if (t.IsBinary()) + { + const char* data = t.begin(); + if (data[0] != 'L') { + err_out = "failed to parse Int64, unexpected data type"; + return 0L; + } + + BE_NCONST int64_t id = SafeParse(data + 1, t.end()); + AI_SWAP8(id); + return id; + } + + // XXX: should use size_t here + unsigned int length = static_cast(t.end() - t.begin()); + ai_assert(length > 0); + + const char* out; + const int64_t id = strtoul10_64(t.begin(), &out, &length); + if (out > t.end()) { + err_out = "failed to parse Int64 (text)"; + return 0L; + } + + return id; +} + // ------------------------------------------------------------------------------------------------ std::string ParseTokenAsString(const Token& t, const char*& err_out) { @@ -1062,6 +1099,63 @@ void ParseVectorDataArray(std::vector& out, const Element& el) } } +// ------------------------------------------------------------------------------------------------ +// read an array of int64_ts +void ParseVectorDataArray(std::vector& out, const Element& el) +{ + out.clear(); + const TokenList& tok = el.Tokens(); + if (tok.empty()) { + ParseError("unexpected empty element", &el); + } + + if (tok[0]->IsBinary()) { + const char* data = tok[0]->begin(), *end = tok[0]->end(); + + char type; + uint32_t count; + ReadBinaryDataArrayHead(data, end, type, count, el); + + if (!count) { + return; + } + + if (type != 'l') { + ParseError("expected long array (binary)", &el); + } + + std::vector buff; + ReadBinaryDataArray(type, count, data, end, buff, el); + + ai_assert(data == end); + ai_assert(buff.size() == count * 8); + + out.reserve(count); + + const int64_t* ip = reinterpret_cast(&buff[0]); + for (unsigned int i = 0; i < count; ++i, ++ip) { + BE_NCONST int64_t val = *ip; + AI_SWAP8(val); + out.push_back(val); + } + + return; + } + + const size_t dim = ParseTokenAsDim(*tok[0]); + + // see notes in ParseVectorDataArray() + out.reserve(dim); + + const Scope& scope = GetRequiredScope(el); + const Element& a = GetRequiredElement(scope, "a", &el); + + for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end;) { + const int64_t ival = ParseTokenAsInt64(**it++); + + out.push_back(ival); + } +} // ------------------------------------------------------------------------------------------------ aiMatrix4x4 ReadMatrix(const Element& element) @@ -1205,6 +1299,18 @@ int ParseTokenAsInt(const Token& t) +// ------------------------------------------------------------------------------------------------ +// wrapper around ParseTokenAsInt64() with ParseError handling +int64_t ParseTokenAsInt64(const Token& t) +{ + const char* err; + const int64_t i = ParseTokenAsInt64(t, err); + if (err) { + ParseError(err, t); + } + return i; +} + } // !FBX } // !Assimp diff --git a/code/FBXParser.h b/code/FBXParser.h index e6fa25d22..150b6267a 100644 --- a/code/FBXParser.h +++ b/code/FBXParser.h @@ -206,6 +206,7 @@ size_t ParseTokenAsDim(const Token& t, const char*& err_out); float ParseTokenAsFloat(const Token& t, const char*& err_out); int ParseTokenAsInt(const Token& t, const char*& err_out); +int64_t ParseTokenAsInt64(const Token& t, const char*& err_out); std::string ParseTokenAsString(const Token& t, const char*& err_out); @@ -214,6 +215,7 @@ uint64_t ParseTokenAsID(const Token& t); size_t ParseTokenAsDim(const Token& t); float ParseTokenAsFloat(const Token& t); int ParseTokenAsInt(const Token& t); +int64_t ParseTokenAsInt64(const Token& t); std::string ParseTokenAsString(const Token& t); /* read data arrays */ @@ -224,6 +226,7 @@ void ParseVectorDataArray(std::vector& out, const Element& el); void ParseVectorDataArray(std::vector& out, const Element& el); void ParseVectorDataArray(std::vector& out, const Element& el); void ParseVectorDataArray(std::vector& out, const Element& e); +void ParseVectorDataArray(std::vector& out, const Element& el); diff --git a/code/FBXProperties.cpp b/code/FBXProperties.cpp index 13b354442..5676d9d5e 100644 --- a/code/FBXProperties.cpp +++ b/code/FBXProperties.cpp @@ -88,9 +88,12 @@ Property* ReadTypedProperty(const Element& element) else if (!strcmp(cs, "int") || !strcmp(cs, "Int") || !strcmp(cs, "enum") || !strcmp(cs, "Enum")) { return new TypedProperty(ParseTokenAsInt(*tok[4])); } - else if (!strcmp(cs,"ULongLong")) { + else if (!strcmp(cs, "ULongLong")) { return new TypedProperty(ParseTokenAsID(*tok[4])); } + else if (!strcmp(cs, "KTime")) { + return new TypedProperty(ParseTokenAsInt64(*tok[4])); + } else if (!strcmp(cs,"Vector3D") || !strcmp(cs,"ColorRGB") || !strcmp(cs,"Vector") || @@ -105,7 +108,7 @@ Property* ReadTypedProperty(const Element& element) ParseTokenAsFloat(*tok[6])) ); } - else if (!strcmp(cs,"double") || !strcmp(cs,"Number") || !strcmp(cs,"KTime") || !strcmp(cs,"Float") || !strcmp(cs,"FieldOfView")) { + else if (!strcmp(cs,"double") || !strcmp(cs,"Number") || !strcmp(cs,"Float") || !strcmp(cs,"FieldOfView")) { return new TypedProperty(ParseTokenAsFloat(*tok[4])); } return NULL; diff --git a/test/models-nonbsd/FBX/2013_BINARY/multiple_animations_test.fbx b/test/models-nonbsd/FBX/2013_BINARY/multiple_animations_test.fbx new file mode 100644 index 0000000000000000000000000000000000000000..7999e690c566d3c4a77c58f9cb46305b55bc7ecf GIT binary patch literal 34576 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 DHi)xP literal 0 HcmV?d00001 From 8666b614c6ec3187f3d6da73190a8990852eed1a Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Thu, 26 Mar 2015 22:45:00 +0100 Subject: [PATCH 107/166] Fix non-determinism in XGL importer output due to std::multimap value ordering not guaranteed < C++11. One step closer to a fully reproducible regression test suite. --- code/XGLLoader.cpp | 6 ++++++ code/XGLLoader.h | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/code/XGLLoader.cpp b/code/XGLLoader.cpp index b00c9a5f2..6c22709d2 100644 --- a/code/XGLLoader.cpp +++ b/code/XGLLoader.cpp @@ -431,6 +431,12 @@ aiNode* XGLImporter::ReadObject(TempScope& scope, bool skipFirst, const char* cl throw; } + // FIX: since we used std::multimap<> to keep meshes by id, mesh order now depends on the behaviour + // of the multimap implementation with respect to the ordering of entries with same values. + // C++11 gives the guarantee that it uses insertion order, before it is implementation-specific. + // Sort by material id to always guarantee a deterministic result. + std::sort(meshes.begin(), meshes.end(), SortMeshByMaterialId(scope)); + // link meshes to node nd->mNumMeshes = static_cast(meshes.size()); if (nd->mNumMeshes) { diff --git a/code/XGLLoader.h b/code/XGLLoader.h index e9675af01..232b50c8f 100644 --- a/code/XGLLoader.h +++ b/code/XGLLoader.h @@ -86,6 +86,7 @@ protected: private: + struct TempScope { TempScope() @@ -122,6 +123,16 @@ private: aiLight* light; }; + + struct SortMeshByMaterialId { + SortMeshByMaterialId(const TempScope& scope) : scope(scope) {} + bool operator()(unsigned int a, unsigned int b) const { + return scope.meshes_linear[a]->mMaterialIndex < scope.meshes_linear[b]->mMaterialIndex; + }; + + const TempScope& scope; + }; + struct TempMesh { std::map points; From 9e4a49938365ba68f7eef8b1ee8958296cd7e981 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 27 Mar 2015 11:04:23 +0100 Subject: [PATCH 108/166] Fixes assimp/assimp#509 --- .../jassimp/src/jassimp/AiNodeAnim.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java b/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java index 43b4ce66b..34fcb5097 100644 --- a/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java +++ b/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java @@ -3,7 +3,7 @@ Open Asset Import Library - Java Binding (jassimp) --------------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2015, assimp team All rights reserved. @@ -68,9 +68,9 @@ import java.nio.ByteOrder; */ public final class AiNodeAnim { /** - * Size of one position key entry (includes padding). + * Size of one position key entry. */ - private static final int POS_KEY_SIZE = 24; + private static final int POS_KEY_SIZE = 20; /** * Size of one rotation key entry. @@ -78,9 +78,9 @@ public final class AiNodeAnim { private static final int ROT_KEY_SIZE = 24; /** - * Size of one scaling key entry (includes padding). + * Size of one scaling key entry. */ - private static final int SCALE_KEY_SIZE = 24; + private static final int SCALE_KEY_SIZE = 20; /** @@ -103,14 +103,13 @@ public final class AiNodeAnim { m_preState = AiAnimBehavior.fromRawValue(preBehavior); m_postState = AiAnimBehavior.fromRawValue(postBehavior); - /* c data is padded -> 24 bytes with 20 bytes data */ m_posKeys = ByteBuffer.allocateDirect(numPosKeys * POS_KEY_SIZE); m_posKeys.order(ByteOrder.nativeOrder()); - m_rotKeys = ByteBuffer.allocateDirect(numRotKeys * 24); + m_rotKeys = ByteBuffer.allocateDirect(numRotKeys * ROT_KEY_SIZE); m_rotKeys.order(ByteOrder.nativeOrder()); - m_scaleKeys = ByteBuffer.allocateDirect(numScaleKeys * 24); + m_scaleKeys = ByteBuffer.allocateDirect(numScaleKeys * SCALE_KEY_SIZE); m_scaleKeys.order(ByteOrder.nativeOrder()); } @@ -141,7 +140,7 @@ public final class AiNodeAnim { * Returns the buffer with position keys of this animation channel.

* * Position keys consist of a time value (double) and a position (3D vector - * of floats), resulting in a total of 24 bytes per entry with padding. + * of floats), resulting in a total of 20 bytes per entry. * The buffer contains {@link #getNumPosKeys()} of these entries.

* * If there are position keys, there will also be at least one @@ -340,7 +339,7 @@ public final class AiNodeAnim { * Returns the buffer with scaling keys of this animation channel.

* * Scaling keys consist of a time value (double) and a 3D vector of floats, - * resulting in a total of 24 bytes per entry with padding. The buffer + * resulting in a total of 20 bytes per entry. The buffer * contains {@link #getNumScaleKeys()} of these entries.

* * If there are scaling keys, there will also be at least one From bdf813ecf0532c13423019a33ebb435a3d5dd42b Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 27 Mar 2015 18:09:39 +0100 Subject: [PATCH 109/166] new function to get aiVectorKey size --- port/jassimp/jassimp-native/src/jassimp.cpp | 8 ++++++++ port/jassimp/jassimp/src/jassimp/AiNodeAnim.java | 4 ++-- port/jassimp/jassimp/src/jassimp/Jassimp.java | 7 +++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/port/jassimp/jassimp-native/src/jassimp.cpp b/port/jassimp/jassimp-native/src/jassimp.cpp index 14d9cb2d4..710168e98 100644 --- a/port/jassimp/jassimp-native/src/jassimp.cpp +++ b/port/jassimp/jassimp-native/src/jassimp.cpp @@ -1340,6 +1340,14 @@ static bool loadCameras(JNIEnv *env, const aiScene* cScene, jobject& jScene) } +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getVKeysize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(aiVectorKey); + + return res; +} + JNIEXPORT jstring JNICALL Java_jassimp_Jassimp_getErrorString (JNIEnv *env, jclass jClazz) { diff --git a/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java b/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java index 34fcb5097..c084accd6 100644 --- a/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java +++ b/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java @@ -70,7 +70,7 @@ public final class AiNodeAnim { /** * Size of one position key entry. */ - private static final int POS_KEY_SIZE = 20; + private static final int POS_KEY_SIZE = Jassimp.getVKeysize(); /** * Size of one rotation key entry. @@ -80,7 +80,7 @@ public final class AiNodeAnim { /** * Size of one scaling key entry. */ - private static final int SCALE_KEY_SIZE = 20; + private static final int SCALE_KEY_SIZE = Jassimp.getVKeysize(); /** diff --git a/port/jassimp/jassimp/src/jassimp/Jassimp.java b/port/jassimp/jassimp/src/jassimp/Jassimp.java index 238456c1d..25b8f6371 100644 --- a/port/jassimp/jassimp/src/jassimp/Jassimp.java +++ b/port/jassimp/jassimp/src/jassimp/Jassimp.java @@ -96,6 +96,13 @@ public final class Jassimp { } + /** + * Returns the size of a struct.

+ * + * @return the result of sizeof call + */ + public static native int getVKeysize(); + /** * Returns a human readable error description.

* From d2d41a8aee2704c849c34dec31abc43871a68338 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Fri, 27 Mar 2015 19:03:58 +0100 Subject: [PATCH 110/166] jni header update due new function --- port/jassimp/jassimp-native/src/jassimp.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/port/jassimp/jassimp-native/src/jassimp.h b/port/jassimp/jassimp-native/src/jassimp.h index 6f90bb3b6..fadea4fe6 100644 --- a/port/jassimp/jassimp-native/src/jassimp.h +++ b/port/jassimp/jassimp-native/src/jassimp.h @@ -7,6 +7,9 @@ #ifdef __cplusplus extern "C" { #endif +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getVKeysize + (JNIEnv *, jclass); + /* * Class: jassimp_Jassimp * Method: getErrorString From 11b9d83d4c1da81c9564c5e6baf0fe9e56a4b915 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 28 Mar 2015 10:50:32 +0100 Subject: [PATCH 111/166] openddlparser: latest greatest ( contains fix for correct handling of data array lists ). Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 21 +++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 1c9006f38..104471965 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -856,6 +856,14 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, size_t &n return in; } +DataArrayList *createDataArrayList( Value *currentValue, size_t numValues ) { + DataArrayList *dataList = new DataArrayList; + dataList->m_dataList = currentValue; + dataList->m_numItems = numValues; + + return dataList; + +} char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **dataList ) { *dataList = ddl_nullptr; if( ddl_nullptr == in || in == end ) { @@ -865,20 +873,19 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da in = lookForNextToken( in, end ); if( *in == Grammar::OpenBracketToken[ 0 ] ) { in++; - Value *current( ddl_nullptr ); + Value *currentValue( ddl_nullptr ); Reference *refs( ddl_nullptr ); DataArrayList *prev( ddl_nullptr ), *currentDataList( ddl_nullptr ); do { size_t numRefs( 0 ), numValues( 0 ); - in = parseDataList( in, end, ¤t, numValues, &refs, numRefs ); - if( ddl_nullptr != current ) { + currentValue = ddl_nullptr; + in = parseDataList( in, end, ¤tValue, numValues, &refs, numRefs ); + if( ddl_nullptr != currentValue ) { if( ddl_nullptr == prev ) { - *dataList = new DataArrayList; - ( *dataList )->m_dataList = current; - ( *dataList )->m_numItems = numValues; + *dataList = createDataArrayList( currentValue, numValues ); prev = *dataList; } else { - currentDataList = new DataArrayList; + currentDataList = createDataArrayList( currentValue, numValues ); if( ddl_nullptr != prev ) { prev->m_next = currentDataList; prev = currentDataList; From aa9dd6a14b84c4039c23e4464a7f55908859773b Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 28 Mar 2015 12:08:59 +0100 Subject: [PATCH 112/166] - check property name before setting up the primitive type for meshes. - fix lookup for vertex attribute type lookup. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index dc571efad..7188ce018 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -529,8 +529,10 @@ void OpenGEXImporter::handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene if( NULL != prop ) { std::string propName, propKey; propId2StdString( prop, propName, propKey ); - if( "triangles" == propName ) { - m_currentMesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; + if( "primitive" == propName ) { + if( "triangles" == propKey ) { + m_currentMesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; + } } } @@ -571,7 +573,7 @@ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene if( NULL != prop ) { std::string propName, propKey; propId2StdString( prop, propName, propKey ); - MeshAttribute attribType( getAttributeByName( propName.c_str() ) ); + MeshAttribute attribType( getAttributeByName( propKey.c_str() ) ); if( None == attribType ) { return; } From fafe5584b6efc1b98c5fb3d9ead63805392e610c Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 12:12:53 +0100 Subject: [PATCH 113/166] gen_db.py no longer generating dumps for files blacklisted (settings.files_to_ignore). --- test/regression/gen_db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/regression/gen_db.py b/test/regression/gen_db.py index d405af9db..87d656d16 100644 --- a/test/regression/gen_db.py +++ b/test/regression/gen_db.py @@ -164,7 +164,7 @@ def gen_db(ext_list,outfile): num = 0 for tp in settings.model_directories: num += process_dir(tp, outfile, - lambda x: os.path.splitext(x)[1] in ext_list) + lambda x: os.path.splitext(x)[1] in ext_list and not x in settings.files_to_ignore) print("="*60) print("Updated {0} entries".format(num)) From e0dd061dcbc152fe67c3ee695e9e6264bd387814 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 12:46:15 +0100 Subject: [PATCH 114/166] CompareDump: add debug trace of past push/pop operations to assist debugging. --- tools/assimp_cmd/CompareDump.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/assimp_cmd/CompareDump.cpp b/tools/assimp_cmd/CompareDump.cpp index 5027a1fc4..9940c18a6 100644 --- a/tools/assimp_cmd/CompareDump.cpp +++ b/tools/assimp_cmd/CompareDump.cpp @@ -137,12 +137,13 @@ public: else history.back().second[s] = 1; history.push_back(HistoryEntry(s,PerChunkCounter())); - + debug_trace.push_back("PUSH " + s); } /* leave current scope */ void pop_elem() { ai_assert(history.size()); + debug_trace.push_back("POP "+ history.back().first); history.pop_back(); } @@ -250,11 +251,15 @@ private: last = (*rev).first.c_str(); } + ss << std::endl << "Debug trace: "<< std::endl; + for (const std::string& s : debug_trace) { + ss << s << std::endl; + } return ss.str(); } - /* read from both streams simult.*/ + /* read from both streams at the same time */ template void read(T& filla,T& fille) { if(1 != fread(&filla,sizeof(T),1,actual)) { EOFActual(); @@ -291,6 +296,8 @@ private: typedef std::deque ChunkHistory; ChunkHistory history; + std::vector debug_trace; + typedef std::stack > LengthStack; LengthStack lengths; From e2addcee77473218b9480ce40089cb4a188fd310 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 12:51:46 +0100 Subject: [PATCH 115/166] CompareDump: fix reporting bugs. The top stack entry was missing (!) and we had an off-by-one in the index computation. Also, all of this should be rewritten from scratch. --- tools/assimp_cmd/CompareDump.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/assimp_cmd/CompareDump.cpp b/tools/assimp_cmd/CompareDump.cpp index 9940c18a6..514ce3abd 100644 --- a/tools/assimp_cmd/CompareDump.cpp +++ b/tools/assimp_cmd/CompareDump.cpp @@ -134,7 +134,7 @@ public: if(it != history.back().second.end()) { ++history.back().second[s]; } - else history.back().second[s] = 1; + else history.back().second[s] = 0; history.push_back(HistoryEntry(s,PerChunkCounter())); debug_trace.push_back("PUSH " + s); @@ -244,10 +244,10 @@ private: const char* last = history.back().first.c_str(); std::string pad; - for(ChunkHistory::reverse_iterator rev = ++history.rbegin(), - end = history.rend(); rev < end; ++rev, pad += " ") + for(ChunkHistory::reverse_iterator rev = history.rbegin(), + end = history.rend(); rev != end; ++rev, pad += " ") { - ss << pad << (*rev).first << "(Index: " << (*rev).second[last]-1 << ")" << std::endl; + ss << pad << (*rev).first << "(Index: " << (*rev).second[last] << ")" << std::endl; last = (*rev).first.c_str(); } From ce7b3af1d758197e478b479d23a944225de67563 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 12:53:08 +0100 Subject: [PATCH 116/166] CompareDump: fix typo in light compare code. Brings regression suite local runs to 100%. --- tools/assimp_cmd/CompareDump.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/assimp_cmd/CompareDump.cpp b/tools/assimp_cmd/CompareDump.cpp index 514ce3abd..0c7a52b46 100644 --- a/tools/assimp_cmd/CompareDump.cpp +++ b/tools/assimp_cmd/CompareDump.cpp @@ -746,7 +746,7 @@ void CompareOnTheFlyLight(comparer_context& comp) { const aiLightSourceType type = static_cast( comp.cmp("mType")); - if(type==aiLightSource_DIRECTIONAL) { + if(type!=aiLightSource_DIRECTIONAL) { comp.cmp("mAttenuationConstant"); comp.cmp("mAttenuationLinear"); comp.cmp("mAttenuationQuadratic"); From 98039ee76e9309e06de29817bb1e3b66ebfb9fd9 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 12:53:24 +0100 Subject: [PATCH 117/166] Update regression db. --- test/regression/db.zip | Bin 1091452 -> 1186737 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/regression/db.zip b/test/regression/db.zip index 265548832663f10766a7a555da0fab219be88dfe..decad75bb80661950c5efd7e506d8fb86b1caa40 100644 GIT binary patch delta 964664 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%0DHS0y=VkkT;7 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


ondrks=Y3{7`fj7_`(`;$0wd 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�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 z zw;uooF1Ns}pBYtQmgPwKT5SPN8rbmhh<4;kpYU^r&q2Uf;9e8GAz z@L7SH9Zoa1;cXMHv4fr5`z z|HJ3j%vR*2W;U7NS%z^&a&jOywU>&8p_~bMG&`LI&NuF*C0wA0d}~?RWF)c><)kyR z52NFq{Z}d?PlTSENxE#COhJdLs|t$TMZQyizEa^l%P*HuEtD1Rc|Rhif(U*R%LY(> zHASwA-D&gYJiiGz99O~ZV9##%386o{X|~m9V;JilJFBMi7Q%6BkpKY2-b5hILR_%c zl3F}KhgJ@0Q8qh#&#!VgMLfF0n-ey6G13w#)5tJ$#Cb`)-r4oTRI&O zVE!7NZ}0`V_;icwO49y|)t!d=@&Tq)logMPMG4eBC6)KN)WjH{Ho)~EP6BGIP)%k) zjO>f$YM8byWJ7^n$NK6a1sNr^1C8zW`Y9E;g1nTZQuW#R4&KXE#lstFCs>Tf(Pr$Scc)7~C5{m0`w#@^MYHy?*S#M3 zaan&25Me1(U$3kH&lE(BkxS&-GtD8=PH$FyvyQJ43m-_Io!j2h*o({CXhv6Oc=JRn9Go+oe@A)o#*?}mgCdEET|(;gFM+eA3PahbWG&pD~{bEMLzpDb)0Y+4ow zFrS6Y@+6PGP8CTvTI25WsWiXg^x;xa{@BlLdHH?+Di33P7sxiKG1F3y-%4YfJ*S)n zEMbu=_uSgg#5xwHGQ%()c0-77RJy6Bd853GfA98l(V}WpYb+;tJJok|WaBAQ$~r-t zTodcBWOHpuuE2LbY! z3~SNf3P`GG&ZNKHZZ_oftUgGnY%Lzg5q{kwOnp^L78U@+$U;PBel6E;i1&Vhq05q~ zzm%%mkSKI{hYd0}?{hrQW36*MK6^d2rXqHGOVp0!>V5?00_0kT_a|@N0nB8!2G6e> z6vmBmn=&NY?UvXSPbB94Gt6>0ZC<9YlGrz8n`e6}t!>w+xGPyl4g~s>&`gSzuGGnj zvEkrnETW8o_FK*V#`2WybMA6fW%m*e#rNqGG?dB_u`8s02h=p2B16Fk{Gcbk=y}D{6#!R* zGc;z&ww_WmzIU$a#9|Prjs@JXzHXgksT}ah?OSXD^4GLlpY*g)R({m@a`Ap=WD;2v ziN=<%i(0=$agE3!$g?*wyC{3}5OU9mMlw$-Tkb-Q7zmASkk`!>-b&v>SdzYvWCp7f4^_soiO#KuS=S7l@;J$u<)Wxft0DcqPt*>iI+#FIchd0ohVjk9t*{s#` znwmC~S=sD3GRzEZKUEI+|UDJC&;S66O7Bi#feK4Bg4+xJ#O zK^HxO9S?J7GNx1yp`K+wy~R`ZXRgTA0^2}oCK-77`LU~;#Kpj`C0ZW&&^XN zt0&~%yjuKr+}QZBK)=9Azaw|IfqeN~zO^#4AvL1_6#Pc&S4VM&lFod<@w`leS1}Mf z|4Ba`mnQI|E|U~@`MIy+Ye`Z;hN@H-0_&#T3yOEiKtBKM)pweoIl4DCGkNM~g_U=@ zU0xM%r+Qg3$8q4*@-0@Yo$|HiyM7253c3DPU+SlZr@Cx+7}lA_f**D=YS+e`qm4JM zq`f5i>3D{W$k~%Ju@_l1Hkz+_G5bM1Z(RY<{dmG_;7M@BQn>z{AmMT>rV890h=uzy zAVvkjfFKcy%_at934cO-6-bh5>YVZpY5}b`z(6n*;)e8JaQ5XE_aS`BJ`Lm;08RgA z46EV#-!SY8oi@_85#QIgHPZI}H>(E5urEG$cnQ)85@kVm&{{1d^KZqXZsqB{+`URIm|4${0DB?6;R5J@4e{=vInl1!2KA-OgCl9Sw-pQuTd z1V}vR=O$Fv!&C)5uLN#exOCh5``o7(hXWai#yyQR(brBO@37Iug>4B;86qFUtwzE>%odS)Iss*3P*gHrolud z{9(SyUj`Dp>??8%AFxodab=q^ShU1;p${-5OOxb{{w7;nKsW$8_Z+!4m--^~5uHo_ z^(lduMuf~|F|jL_-`uaL2&6(B;w^rqbZ&sQ@PIW|MTPppEiz$Cg|*zT92EmR)boSE zG19j{*~hph%yd}bA2`^T$BrB7|8Df}Jk8(l?i}0}tej@7D;f$4;9yHu$vSagdLsY{ ziDn+}G@u?=kZv0OV!a@5$)faiy3$}_(&~nip!Yet=kTX(!F7o;9ns?$_FP+(&(PI+y1%2pSix0r{Rr`gJ!B8;RN)ZQ2~ z2l{+qxyg?`etcAkL`a?X3!0$+33X(L4ehhF!v=BSye49_6y*;`{W?X4Whbr?Y4}V; z;s<0I_9&oUi7mh-d|sf7jLEz2LYE{Xd<;8qhc#Vw9qZ|HfgCUPm$e^mQjRX;am-w= zGdxdEadkd?3>P%-DaeuwS$jRXnj;ass3@;h&`z0+$2}_9SuaTfN*Ss2ZS3c?q9WIK zW$<%X{2a1^aj8;ufL; z?lY+U6+FG-|J@aqTw4T0ur`vH_mDS@vja}if;SOR{bT(AGDvI%j!eDGIwYkZrk}M7 zp`TlnOFQ7Ve+?(QSnA&lY$#TQgMpH8;jj!H#ZtS)^nP8ExK94#tWg`C?tMB)wJ_V* zj(Ydh5HFzz5Kb5@4=D5_3K~c{3WX0bZX3c3u?Us5E1}wy$Z%)OO8{~~(S(Hk1Rw=D zID#CtPcna}MdE3&zR~roVZM7#VB25ohah|b?h-fxZrluPIG=rSu*Er`TP)GGF0)p_ zrrCBQIA??NVX)wQ*t{@LwImBV0X3`4Ifz>f0f08`cB_$p;KXA)f2eqCks!v54b3Sl z3Odw95|R$+8Hb~PxOf+m4d8t6jO$Su@9K*C#cFWx96?G)!o$bZNNi+kgM=gjCwU}| zlU(%>tQv)!4lxRmq#vF!;*aa^LejIf1X_d;$%IA^)ci_CMsrKd037 zP3MhhwlCvQft7R76*zJr0f*R#S+LoAlYivFO8`nJR$+V-%Oo%9p3-?jg1Zz9hSY$_ zLaut!2XpVOb%E;qAQbulG`N^X(tdGL(tz!QY_4((k#M+FM2n>$n>hE51JCqeuIIO+ zR%Ir|b)DpD$PF6r-`w8jjPEnP4RGg&9<_pwT!36C5d{$nBYE&aaM+ol&1=)B#xVRN z4qkPG8D@tQD4(2&SMU`&DtuYKJ%1Sr?oadTZ^yPd4I2Bm2y~-)2IU9p-hn3sPJ;#S z8C(ZjF*_%QKrx1*l>BtPQmGX@Slkw!T`Am#U|V+EFIyi|<=pXe56p{HHe%kh;4*du z&l%moWXZ8Fy={oX4_vPzw{}0vJkR8Cwc>7QG;U~!79uj6om!y|k8xnE!?Q}e6t(A^ zU2m)@(N%~^+9monu(NV^0Ht#aTw`4n+rr9jcV8H77c1G)ZklwA$!$_Yy`m zlqNk`GE5JmXt30E5Bo9SKoq(bG4afIAq1XeNA_NOfkOGkS1Ok(PcDKP62Hb^gPC(5 z1nsSD1fj-gt7`q3(xk=L`hPN!idKna)tS)j(yRw{#; zO$Uh)W8~}0#BY?UIM|>0#r28@&;37=uc9e;7!rG~K6am-CAn1*&Zm0}AiK&8OhTn; z@5H7}K0Q1=4VZ`DB4_M$KO>Gf1!Y2ULNi8Vz)K>I;84~ySoiftu&{@v_lGje!+($9 zb&Dv?*n?HY^bH;fAE=@N+N2u1Zjgz0>OQEUJnoK3zD8x_wbF6MYTlqsG~!`~XWuNu851l^7kBfwo(x<1;LoMd8C!0 z1Yk(j#df4#F)cGZN;|n@v_LBd+iR5XvprC2to=llDrY=Ca4!L@x3fBv{SvCUhb@)3 z@;dz&-}+@*^CzLjLTss#pF)mEJt3(gy)=T|SjoD6p`!OP6XRk1@S3Yl zWtFD=sxAEoG+GL^ot;doY_$vu5mpG$%X-lHPPy{@QMVMS!aHa_VuK-O^8@ZEiW_-H(P8(_IIqkTWa zz|P#o5!iuVa`Ty^G5W#h5KDZO!k2jabqc9HTWcTzV?<8KDMlUaA~dRvBD-TKuurug zAv;K>Y8A@OMO8(%Z%YT~oq6#c`%f4z4xTUrQ%Wf50{XVm$bC9C%&1MpDW&bpfW_+v->-h<;?>9x-K5^@o}lP3j(eR z_@y>wvNk$Nx7h!}u)iGxD;I6uryycNwExtE|3}BbM&QVcGn)gT2+HM!#RWa8Kw*HW z(h!Rvk3l18h-y%^Q6TbkL@CG=kYzd|E2I)AIUVs7hC70X4D^v7mK@;)PVE#muz{2f zkqCf)a0*|PP&UcJ!g@5y71tLKA;0JzE@~mNDF}&c>lI18o=Wmcgmv1aGWRMCu7{=n_hQr zg0x?~H%Fd$dnL{vEmXo5p|4RV?ETGU`vz;C1vU(8AHGlHt_qg(%6$ZrHh- z5Rdo$nJfV+RAPo3cAs6461|K8t{ct=vT3hClbdQ=`c*A?Lxwj$f`fc-jFV554wp}x zUlBON32!f4aOr*qVn|-t4kCES(nX2IBjE+c`6G#i_a;}v%Z6>Ko3*J7q@(=NH;9OZ4QgMHXwZ<^ncelhk z(~;=;8YHVPSy>;y0mhj=8<-awyy-GY-CX+=2BfA%4K*C395lA22NsmH8ti?5R6HhoCoL>rK!f+jn_v$t$9LO zr}HZpB)>qD{+AAK6^#z)2woqxem805VD~$PE^Os~oqlVD$88<+RjRzg zJw@S0mCY-*l3Ui_K6vvCk~t}MeMz9}=gOp!aL`wGV3MH`G$IOZU8?zy$zPrI1dZ0sw?bQy}$>J@W$>PAViu3)XXciB&ZNc>a4?zw0vv$ z&%vlVEYOk8;;bhy97PlfHHfO}zL6uvLlIO0M7bOdTrJ^hJmNVxRkB5az-Anmx-zKA2w-VfITcC3aLow$TAV%6gMm#!ccrdC@6-~nrf8(P8jzViZ_&bw1b#<+; z`>QrUd<%_W5{-wBpg0%H=_a$HNASnO#>U`)uI8KQK}g9!#fSpD514*@Htu{0l2?H~ z{X$~^zDpfP=m!RDSLoH-iA=1}06Z#;3SeDIp$oP-#72$l<@dWv-sr-Mi&q}OM}&n$ zLfw{LeKPAnoc7sTHwCv--$`FV%<*&tp|%9TLm7D;r?*t@KuBCr-bY8fdA|+t;_#20 z57;~Ke=7k%jRgKqqPO)eYwCzbiK1@7n}Jr}z+wTwd%@_WsQeBv|!1g@SZ?%TCljfvuOQy6%kUe z2*;B6Qa{j3r4D)N!tNIRKw{_PsRmS2))H9pmJAbLnKzM?z*`_Hk}{qV=GwvA%LizB z=ulyJ$cxQzrm4fx6#P-_d-+EF4MMxN!D1u6WVi4$w_mG(q>GWrfpn8zC)*Aodqakc z>Zi~SbXk3P!OPTA+(Qk_771}HcrN?HHw2UTRUbE37HI4hrlJsxNZ3;semtkAhUD+? zq6g7#oQ4+?qR~)NpuMpX)tK%OFP}vf%%rj7(Z`3!ecgC%TJMLVmW}8vMN*~O((XNn zZax$!{E;BHR})FlCA1D-0h3fGh+WVUG+oG7)z#voT0 zy52}iUd4Z{-qV{MVJ-z~ahx-oO2g+FS(3N46pnD!^0jT-AH)OweD2$z-4XJHcs(dY zSlk_MOy!}3iIk{0+U-jH8cwk!LI!m6xl{XPI_(WO2<+T?^;o+Lwx*bZw6p>(dLHCt zrBK|biDjT;v5=}&&9j}OCWiCD0+g$dlb7$(l`f%f8K0a*m!Wa z5kT$kNKA;IZEbC@SW%E5K&l9kY=|%NFjTR4saisT-v1_x@;A#fVuF)4Jc#K55d#!* z27{fzqt613P-+JH@PHVO(tr^+YaLo8=1*wj3o`YGVgm+!c3SOxoK=JexL0vaFK`Gv zz}LFb_#rLzo?bWNPK@zdtP!-Z^%%}Tm_cI4LWhsSC{l~siBRVHW6Ab&7se1tv(^v( zn0v5`rx(DMBn@SfzV>HSZNpPGXu-u zvbH8V!osi+$WLVD0rFJ2yR}V%9QX_e5V^whL6JzvIcd!(vi)!sSf4oknXoaj!b}y} z;;44m0M-yb6~Re)g9Wd+t6LchuQJLC@4sJeV!=1VXfjZNMh49YDmbB}$WVZvp;fyh zG<5>~q4C&4->(rhIUIAiU3X7YMs*HP*Gsr#>gn*WqbivDRKVc&$ilMBb26HtD3{g0 zn=2ws2yLB&m0Lbf;apA%e<#_5rHj&=L~~f`OB(KE8I{o6b1f9Hvr-gQzrvPyz!ixh5 zMbluzN&U(A{qy5Vi@F%nSH4%~`a0c@55xO5(C`{9^l$UZSoDbH@ZD#ZBpm}G`T!i{ zrAbR7FdIy@OxMTQ#c&aa**r^=ewDKIkA8sdCs<5@592=MvOecRuC4o`C`i5Zx*rb+ zw#(*WYdAi$_jK%xTL@s>4~jJd0oOpLfEK4fI_Mxs&I-cZBj}c0z@YD{3NUbGpusKK zyq^YICe9GNvJx?Y8ZCAc`q{l}`3q~~>XSJZHHwsWQnpBw`H)wGN}0F@19Zb;;3OqB zbtafT;TKKA4uA0)UYudMYM4R}qxX%7j==VHM7%1N0&nGl3wO!1O9w$! zU^b{B7L5&?Q9VEx1}Wqruy1Q5UOq(-*+2#Kog4|*u$Rlf4nk4lC2=Wcr^X(yVzM`N z)W;V%T?)D2Gq}fbt{xTTT-@Lwj5fxzyL7&?mw{x+G+ zrFONUO&aTIsVAl+qjQMEP&JuEfT|@?Xnw;FkV$qW7pRd6|10>Bz_v;Py}WJ( z`k@Ky4HP{`CIGOF!$g{42Fu4iJU?IFf2tBffgWA>7<_2zS%ECm=X|bU9DO&3o0)zq za#~?VqB3)}F`FUzjNqH4%u=tQt-_+3eGUO?kA7d}fj+&;Pwg#cIyxrX(#~34V$lx% zbJ{{kKTapxUC01T5q9#}eB^?L^H1&VI$^s6zR8>$FjP90Kx$}PqDs5GT-4~dq<0=Z z)4y`#T{tkm-xs9#nWe-)Jc!Pbk4Z82&5Xu!Sd(-aU5DF1D48g_4 zW!E6>GI{uU%!MyDGLk>$Ch}W%JP<4o6qOV_?wAd8*dC-Vlt$PxCnbG>KhA3oQFWyG z^~svEjXVnrSKZvV{Im>`rP0BXAtkn)YN&UTf82ih50rufV*LS&^*fYHP=%(T{qLb% zZf8rM@ z9@>+UqcN)lw^Q+x9#fIAg98u0>k+<#_eOOeqlGWo(to*cg#e}Dk;`LJXPYX2hjI_? zV-D|D?fw?Zy`%a63+3JnU*?2PeBi2nBUjx<2DL-5WhsiRg0SyE#pzIJ{KeJGhkF#5 zsp2ZgDWWo#SnA8V2GtD58>m`mfC7TZ7Vbzj^l2A%&G4?x%q&$A{c2LVmhCXBJf083 zSvjMeuKsj$_2ZtZ>J~eZNA#KP;Mm^)l2eEgh1^?`Pe&nha5)PLUZx@(*RlJa-$a2S zJi%WheO|se4XR)ke=wRCML%$RD5(x881F;uu8q@-jvw3G?ticTbuP(y*b)x?|1frz zQE_eCwnl=xyF0<1U;%==ySoQ>3Jva3Sa5fDC%8)p?(XjLVBd4^KKH!c+I#$|1+7}u z59XR{%rW}cdniV8@=mXsagaY6f1ZzcvWS<0Q=D7pe5Bt2Kwv&02XA^#Viy-h zDD}m6C+6X1=B%flV$$uaZsKBX?4mCgqTtV?X0GI-swQU@Kw4;W=s+7E?Ek5Izl^gG zCh+qQQm$6Gbv}0tSwQb_7T_7R${TM_^MrB1!BI~an`-&}m_~T3GkU4-llb%1=d^U< zWOV`VWMEgu_$dn90s{XQVjBzCb^Ol9wBwWj1Zp()tpmR-yFh|lxCH*34Pj570{Y&X zgDudch!hVIyHf4m8yA=*AY-^TkBG=`Mj1tNOD?ygrv-AJ3i;u)1N@VEg`8wGhhF`+ z!SI}4a9oJdI;egv9T2e9cA{iMH1I9V0Q3SAtJ^ag`McHI5c2Aw7bEa9=fU1(Zq)WI znaTGN5Yzti)`hC0so?aWzrlFFTIURQ#dLjG961gB#?cApSc`W=hoR;pM|13=*$=L9 z?BD%fNECc@7r=V~xRZK$C6GHhY0a2@_aZE7Gy^+aLiXt`C~~Yu7>t1NEIDc9tpHmx zW97X1-l)WG*KrZwd!^%&&fog@B&L=1vLlWB^zJN#Ks*NX>$W+R;@w$D8Qu||b5IaI zhLnbeij{E!yG$4A&?Rv@owPk+w61R2un9AUi<)U7e5BZEOU?l&C zAsq`c^`$aSmkk=1KbxXq`jw*tsuF5S?ky0Z6$K~H3w11-Am zH_b+_6L3w-`ZW$-+0NZwfkm1d4n4q^M!uLHJc_qJ#E{{OC2{CAbKNch}BFQ|1 zEOa3Y6J6ZYC(0q#uSccY*w~2k;P3MtUiS(z=!Xri!kknp`%23A6KdAMJ2QDs(ktK}R!V z-;6YBRpprFym%{Q0`4j?srik1j)jtNBb0IcVT+jvl|MFuY97oJ_xdh-t9p`~z#(Wd zhlrsR`IUYiXEG61$j;$=zM|k$J5d0@m=OsP@~M5I>Q-J$^YIf0;kGiK1#NqKdwotP z7o+9t`D<)aV`10l5xu8@wbgRR%{?U@;Tg3!XRp(zi_#7UbSlT`4abuaDf*Ps&x}!X zSy)IOO`j%?m^xr?;fr?H<(;dAzb!hpHCxLOp~8u|B-1rTO$TVN!}UZB6iG+}s?BMY z5=0ogK&!#51KE(IG{W&aKy%^1<~A||apnt7U2rNx)_)KbjZ%pkZxQQt_y)<68}Q8D zNa!PTrc1}U$cqc%4`bWJ50R5?gk#n;lZWmZ1^ig4VW{XacbTu3S)LwigS@4q60Ru~ zJwb$nFaAUTxl?4aWuq#(Ds=DwC?u~B1)0dbets}E3;yx#HvxdfP0^m;t)tOBVKp=G z`nd-8$5J0N)Du6x2M$l00?vp4;nZ5!i9pZ6SQn-8Mnq;%LU*Ic(6eUpY|Xk9g}VLc z`y<+GtiM|l9}gkfFD;Mc@5R*aJ30I>9S$eg`)tY>u%b9&_2F=0UZjZz*yvmG4;ARr zshOHpH*Am)3}M67rY2NeTo|K69Dmg}<1B!(LFAi#>q_IS%yBKg+0KW016AO4zgU#Y z_KtVjoUY44=e=Lw8XNUl^Ex|8OSRxgr60>7LUBDWvDNt2YTXLGD_@%sj?==~9UG?1TLmp*l?u33kzS&+ zHQ(WkM4FP5UlBBKi-4;T`#mrry=XEgRD`{hFI~A{>38OX?%PjO;MiP3-bU#UduG#O z%X~=gU`%3sipgIN$Ec_JY?@v$w%M}0;7I_CQ>!rQYZF>TYkV(lv5z;8Gm@*RL<z zX*|vC8h0>dd!un@U<1^_<^~55uFX$|xBNoP0((_g?Z_ z&(RByIz@Ic;yCka2HxP8G`<^~;#XBt#?@w^OcZP|zINn!$r#tMqWg{B)d- zhm#1Tv-e*hq3WR;HRJ?+bTv&vP{O8U9c_VoO`VGr z_}h8D zf=}aJ(I2L}w~4ar0e_TmDNGl9FCk`s+M_U~5F?4*0S*eyfhT_kT6fb{EGEuY*!OO; z#*M%l`cFo^t)MJrkx1A;-CNJwzJdjf2VF#k}BphgUqe&S{{n(n}_3FMe<-YE?dMRPKVmE$ET|lee_B*Z@LN)f$kje1OQ7b8=Gf=BI+_t z5hRUx%HNhV(l+_)*;(Jv^AxETWNKVo(Oft~E%KKFpsW}P!{h~NL#W-VvY<$YF+EYF zkXFCR8G25J-x7Ni-^kP`amoaK4aW-hZd+J6^IS`Fw=D3bzo%U9l=(YSQ`bbK!G?yP$D=X z(&rd^)_?1PCS?nhVl8=I(DW4D%7l`ek^jcGdZb}toWvJS2&M;sqm-&{s{XQ}v0uAx z)kXSEqrGc@_?%36-u_KDkfHJ|pd={B#8B7jeA6in?xb3g-h%hyg8tO1XaG*BpuWjm zlYLF*=pa4RZalRKF#2nkFWT9AyspJ3W$sA?&2dfod805iIx1}rY+Z24OBrO zqQD1|b7y^Z639walLMxC5YZ7?DS{*lm7ARlsP#FBIq?gRbm%x-CG5gQ0}6ez_(=*u z^rV1T1b%2AGH^3;nFz}$r=(oI+YC-o<47t=bySrA1I}E)W@W(dvOp^FDRW6IDR<#{ zi-bKBscc?88c{`-DOwad(y*|+BgK{oLz*eO&IvSx$Rdw8bBu~R6zOL6YsX%R$1DY0EV zhcap)X}{n3RhlhV(Utfs^)(;96rJBJ(BkNXCrA}7RMc+O(fw)L8AY1q*ycjuIsCC` z2PL*7Fo7gD-sT?X$;JC~X=9|mgP$|56;lLsnrAVU=;kO0n&YtrK)%oMDBtOH>~}c5 zAUVa)4}1`Dc!Kc)T$Jm>X0O011k1>;=Bp_Y#PsFY*EE0|E}fb%n`vt^87? zLE4;uuo^#9t9esLBYPh`G3mJO0+t;Jq+rUQvip)5~AAV=`0Jz&KWr zf4f0JDcc|*7KzeuZL+N5o3|l>lS_Zq_<fAD55Xj1xJ~if7EqtZxgok;G{LFUz5muCyf|f_c&WV<+GYn*UKiZK&>&!eN;2qDM%o{WUmNn zvOoqI#ihsTiUSV>zxjOhfC1|AEP^Yc${q_w1JEEWpOimkV}xyEn}D&ws-tEr&oQmr zLwCE_3ndSBRq2WTWd++16W7*FXbdY3>d_}MpQln&L<#zDV!e-*+P5Qd1jL6$`iHaJ zKh*`gnUJ`^XI>=K#zI)6KcFzK?;mlB$jR~U>~jr<1^8EGT2K3K{0R#ijt((YAt7yz z5no=P6GSPB>JS#Vup+_A(u!wlCbiXly(y5jUr+2Nf4!|>{S2;oz1}|k0(NE0Ohe>;5;lSgtSG^?`=7# zSHb-UMzt3EX$xuaWElVQROen#jrSYuIY7`?rcIQ-T4}H7X|VkhFRZ>(HHpgre@zF1 z7l^*0=Uqf$R};LKxGtqUQ!3N;Y)iX~*k(TC7d;Ofoz0g&Vp)0z*B7lTFwYY=4)&#Wwlq7 z#`499H7SFpOdNthFg4nuwZ@3Ia2lXWa zSqzL$fLhk*D%b;ZXLm_ilr|LhzmrsZ8CDnq6{|b}+_~Ata5id6iMS~)W`|wJwkau? z%*-^rD7lbslL_B!>g0*t80$l@TU0U|9@nJ;*lz{Pamjd#qBmV##;qr8T@9#ABb)dR z1b(KxyskArkEc8KpIp_uIxRlt5m(~ZJO+aWa1d2$d~xfWUN)>=(%P`QQk8Oy_ja^E zoF3T$6kdL|To-6=T<`!V=_D>~Z{_3h#4z}3QL`lE{Uo1+Zk5?rqFGkchl>jWK{sd6 zY58z>nE4cJa-E&VB61XZ`s|I*YD zdBYE9nYT)M*xtL5@^Tg8ipkQ-=t;@#a{%Htung5v-dL>*_vtKuby>YVxcb$23IU~V zHFDnm^@(D0MYi1m1K!+^FvZNRb?yfWu9H|h8It4AE8fP_eXfq90y!HgTRH=Gkz*9(I@2rn<8732_XXE#y1=OWrsatS|s?tEtY z7W7JXaLvY-+0KyOV};cb86k(0<0lF7o87qjLW&Wa9 z+r+!tIl8@C3*X;3;#cVGZ=N2k4ajUue_KL-aGyB#3@SH31-ypy-H$agx((LH{xMf# zAHy1f+ax|y8Ek!PBygJv&)kwMht(VT+2vRXnPJwBf-2QcQT<9Mq^Hd~B?ZLt0r;S9 zJG`}=zF5wALe2`c=QE#Sj}}H(@l#D0ZeOAZWPH0TEmI4Wa3b1K5^dLez4;Noyw-H_ z^GVo@2MB)UE_1|H@w4?&iWYLm9zLo$35OT*Mw1z*G`Nc=E%&Yxq2i>javY>`!QbmE zQ`K7N^^lGTqzLi@iN?`7yI`yvH^8z?%*mNl^af{@5dsSA2X`hdaIVI$p`t=h)!Hjd z4%I&urFHpmr>18M_|0A%1C@_T%qsmy$bcnVnA@yiHb8tgQA-8g3>7S{M6&m@r6gOq z*y9(;Rz`^YtgI62H^=1tFS(55U)Tokq!zOitI5VOz)PWXdhVUrpB6lcVp$<4v6X^*H>9!jbEu9$d`3a6r6H;!;)sLOZFK{6m>esKi`TYM zarcJ4_ye*1k@85@WhG+dA_2BT0w8%TK}^#w4o++(*C_p-HHg^-Vm>u_uj+jOEF=37!-oCxzVs; zJyL>i(NAiw-Ah12B*qa{8tl<+`-HOaJOb0G+%l>oYM&l?FD8sWSP{vb`7CVQX_iK! zn%sm_pFxkBsO$r|FhX@HVW{7u#N3TP#?-{h$QzlsjVg>)o_8$s^r4@No5C@81vlP7n28)k0% zh=`B91W=>*uhorD(CxZUujI1A!#ms8&wzl2Zt_eT+Qf-Hn&-FPw3ZAfzEcmu1jp0Y zqkDl@2mBSN`vveOh+Y1l2+UEj4?ldcP9nw>cYek}U|>Ok^hxxgOSLV3E_=zThq}=v zkcQ$C>kMkpXfc=2n*08FTL1SY>P~0Y0E^&VxmC9oWJ`s#Rfh5$!%%ADpU)eWOIHBA zNkXZ}%GHbCR-+rjHp_>jjI}Ru0&Gcjm@QAkeT55T93w4rg3b51&dl|?%;w2;yeG(oWyJPKq zYC3amN`1+>MKElu8FOinphSRT2zzngV&$}2`~l%X2hX^(l+KyKeIwlOVimAlrxkBj zz+ivFx+7sxTxzB@*!&uyC|<1Iv_IVF4B8w*IVDiZ*?Ut3Jh=l- z+5scV{P%S6+^Zx9`tjG=M}{xJh>A=)c6hY6wnKZ@HCN-KzA`^Nt zS?w;o5b_3F8^THUGian!N8?})zBV2?&wQBRW)+y9ZX6gmi{hs>lU;+ZFt*x%7_LT< z0EmeaJKyEY?qNJEtN>ehey;q+%o~W7JBe)Fj?ef!T+CTz&B@Eh`|vf_^9#O+%lk=s z2jullm_L47K2Ar1Fg^a9+}$`x(ebtO?SiWb;apd0prz07*-eIRZEz1YRCsF`k^c=d|kIV4;;?X;*2lPGYzK6a=?c3JzMT<3MvP|A5-Q7RK&qZRJWNyk26oj-^ zv+B|}X(Lww%Zzxrv;y>h4(p$Hub!1jI&1itb_?Nr?CCo>LXLpnyu58j<`}I;ECD=Y zcA&p*wtN=cgY;BgL9!cWo-qZrJLv@KO?`yYbVux9e%*{*&Ky1*XkK{Kud$%J$wNfr zJ}Y?d7XRL`gMj7zzWUq4N4fXqTGOXge%)_x;Lar|li|Lv{&_B|3;gSNfcjF+vwD0ShN&-E_`HLJetU(#uVx@Ro08Tr(KE!J zefU(Drk?}dckA_XPC92`4@$5k$$jKno2dC3$Xf0$jJO871O>M@vPm2Qo{b{k}{ zogtjsA$Fo$+H7B>^F`1@hH_zK8XZLGqvx=r_4#zb`fk`8YnPO5(IorUCJkV`>XzY@ z7h2;8u0Z*I(L%h-Y=ElE<-LX|-AW{rnumifZ9M@aY-TK%x(#(wH&#JG3BJbkbH9Wx z{3&LYV7g4FRZnviD#oFmU_mc&W1j_nR5g?hFG13?!k#dRCR3;dR55>RF^FLBhr!yU zcMT?5E|n6d7*>2M)Ilz}0wUnKM#A_ehh^g2yXMej(OQa`{>94ho^w+npKAs8hluG$ zB%`QQkrsp+o2y%Y+)0;;pTU-|3~WFzveXD%v{FChW}!70jovpwZs|MnBPRY1NnjWg(5mmM$seISD;&9OT+_>?>;l#rY5!H>pPdbZA3X^xBJfJ&S;)&UTWI0 zU_I%K!TxN}?e+5r^{!V}fD00K8^)+lW=z0BPnaJWleR@@bNh4iV@u=LZlvXlWY&C9 zkW4s0B!YF~_eoUnYrTbx%2tVKsiv`Cr&;V{;UiIJT>wVlcp*xv@X(!dzd1hW9*!5{ z_c2n&$&x0i=OtdD>R5+OI}ZUYv&##4#G!O_G%)A$THlNEt?W4*uM0@c+);+7$&Ro% zf;*5>9G0>uNs3i8=6o$a$zs8SQUzK*!RRIc(2t~>a5#Ek($O6@Tcn7`&kgFCx9j`& ztk!uFMSU6!l-8dpVZuE7Sk?tlE65On16!k{Npz_ae$%J#F>~@nX`mx~@cX&L2a5*9 z8bfm;uNyl;{`6DAwZu252b*tLS*0}z@KD+rz}arW$0sJVeHKG@)QXsniH>-Ab+Hxq z0{i=a{Lv%n4%BjtuPgX}w@85YUZ5nkM1^>ue+{b()V?tSAM*acoP^&sx!+Ae34mSN z5V*jYe5esnh(_%KD8K*8I|yvZkr91=)+hd*cff7T&cSZXv7#*ZF%8W8EAQZ18AUtq z!@Vu9?srbVf0mGcB7O-nO#I4%v9XJ5a!MY8&=A&ng%7gbG(HBM56pxQw}5Yv#IEVx#7&CPl52 zsR#VSDR}5QU=ds`mu$@$m1#A*C^O0(=^-OO!qF{s!;@}szJ|knOfLHNyQVdXo<2>( zWf?p$iSIi9=4?~%d8b89a9@Y}MrBxD`|cy{fF;XM?3+^q3htlU$}Jq`sYu61dq7mM z>7%ll&`H1(D4tc8TJpPMF1#a-+ zwux8>m`}IpWARcNo@@^Q%;O4d2P_}10|Usn5ta^{bWdrnI5fMis=-3LK}a}3<4n{A)~u+^LDGU=2A6yaI4BB%|R^*%q(x^eXVaUM8o%i3$K9lmrNqX=>?M6m)HJhnGP9m)cioW&zzI^s76${8 zb?Xoeas>Y^iuaj}n}F$97}MZFT&j=k_sq@=G4^24#^d9T#mf4>&7VKkyzg5g{KR|7 z;s!|>HBwo^1t=>vD=$(dhwYxN!xuzKF=yvXGtHyJ zvqRt}%M;JbZwR_@HxBW%!&Ypso}H=2`BNY9vlojxXSXs;Ppy0o)11_!+TRE0c`5W4 zvht@~TrevorJS7rcJM}OQlRrcBd5X|C6al{T#YzPx>1rSODtA(peQL!9|7Vd$RZ|* z8OC>xiRzZwb`XOjzyE~9fM5K^H-$#ce-FHwIzVTIP8#moGDN0L6if*h)G3CiY{s4i z4tE_HPRi2;3^71TNt!T0SdwAGo0vHwSoUYrK`HDo;;CP+6OLSRj@tq}{9n#CdXmIX zJmy|MIbh7Ru;lGLss*wgy8%ouYQ@H9UdL+1dhCm~`R12A86$3q_=I`U4j7*QJnQQ^u4C zrgDDkY`lsmm~8Ix34E@PaBh(UzuVedpyR19!gX|}EX}p0OhgWnE?=d0#`b1wi4|V^ z;(OPZrZY|{KwQ;kG@$1X&!6@2pP!jFmR@tvkUF>*q1a+5p7we&qVcaffvB< zfUAaI+Bl!ToUVfx;1dC=cJHHzV6~y{ z?0jCTd2bKesTI_g;0UMjxsXh=xZdXbSDw>lLdvZQ^Dc}LjLTEzc!Mn9bk&F@C zxOesvipWbK5y)N^1jq{NiA7@!nU%1vj4HHsBP}SH`S;Ugjhtk*Wm2Rtn1>Vni4|g< zbPhj%A4bv)IVKZlAM($LQI^2CSw@*j3&*u2Im9)8*;lqQ40GM~J#>A0^5C9Qn`uV# zR@`zM632?-3xNalNA;v=>~U)-ZrMIUIJI!VQTeLchqW&_lW+D7>KhKLxIo_6-Q_l09Ky!-Wp#(7N@Lkw^y33@)r(Z^upsVxiqNhaOqHhRh$cDr(b7 z)YrnQCitL1dw=@-k@umLii=}I7Je^lEWm*_@QCF9xA6Zz^-|UFi20wCi2f`kDMFD0 zeGm|(VLm>mYd0X(5hz;oZfZcA)^lE?g_uUAHJ4K){FiG?)sc(%k}{bDXR7kN&3fhJ z8_TcQYsQ2mwEqWDc$deltO2sg@#l zcUvyp(EiC_Nj8UX?aA@`RJq(J7}Aor>fbfdPlVPUqb7vzWAjG$7f)xT(GZj=eQ(ZGdf9Hx~no1RK-JmdQvnVky?u~1Z_ zhJs;a)a%>IED6{O_uZ-xS&S22s>y=PYsSpX)!W-0U=1+Qo?lxt&6-4WLm573H69La2tbz(x2f15#3bpo)?9W zBZE16U|Ff3mx0U@-0esi$n zL5>u4X#VKpR~);0A7;tGRxyc{@tPM@xz87uD!F3}H~5}{YFtT|$Ph)FXx_39?Sr_v z-g497*GC0jxdQMK<-N@)d1IeC3cer5BL^WxL}iEz#MLv{KMk4;NAl*mzoJt_0u09B zIkl(2^Y$0MCh(NbTM}{X`zfAto^!$Cm9j2fUiS`q#w6%tAU}zScWK!4Vq`M0U=0Y+ z?64TLH2J>%Bw@iZw~Dk}y>R$mJHUE_o?-Px_;$vo+~PVOg5i4G7tU{lx5sh57ud5J z$_szAF%>IG=-rws25@srUKr|K1U&K5?Qg~&F+_9RTo&bo2Oo9pu8%44_D?TGDE-77 ziv-!9TW62tYKesw`}wIWl^mr5?&(|z;W8{(&tAzjDHc~&oISyahjIfb!M^QN)o7tH zg}d0HFNu~>I-%VmzNZaHe6>-9A>}6I;UwV=&H@InsA+$X4i=LN-<)!Y0HluIi1Nemv~ZO z-Fj)jwu0$YmBfn)1o2Fs0&x1M%QJ#!w*GW~ZVcZTlSC|kZAbU^NfXreqA~7p?2>@= z?<6|Xr`&u?IA^p3k<2y+IfgD9zwPTp(#n==M0xhKVQD$5)^xL#h$fZkDq zO#lRD9iQo(mqqz4%jW;;Y>bB9Whf5z@b-YdUk5~jox*^U&Ql^v5JUB)8@6?DH4*{A!ZC2vS}3Fn$Ixr6Ed51_jIC5r^iUPwuSv}j8Af} zvTyqB(qX9VGx;p-0hITB05=hxhsdA=`9UFkR&uSuyUkmFYQ5)~DiQJf0P^SXVN;m< zHJY?ie)KD$s~@TOnhJQ5YHQ82;+wA4rc-_|K)z8}q`J zl@nz*U5(zGYAoDbnWz@4TCXQH8 zIC~5@MyhlAbPg-)swpl-DCsiweHMnxM8957mB?c{BMxr-f*ep;de?wB)`3j9FuEsl3*Y$O{%szOpDz|vp-A0r^$`@Z zd6)y5@qNYy0DQzsHTg`nFw?K}Uusu>sWzWtxa3f`xu;Sm5x@iGnqU}H_6Kgch=0sW#1QgT07dAO>XTt@z7OSdLt`XN)nAa~ zE>h6mUau(mU8y&JqZ-}o5YWj@PWR|Zl~2{J8q*BcYR<>C4C& zm!Vr45NTNnzQGZ$CZrUBiB%t9Tzf-%Q;Q;R{cXW~&-6z1cMb5-+DNga@z#GobdLY+ z8*ISI`u+p#W(39f`oCB}FjA%eCm)75K{xdMuZZ;7zv4+^K|%2W_*=&BJVa_ASl=KB z`oKG+-slU@fQ*OTck#FJ)G3K>1cc=m@Yx^G#AD#KpmDy`4dDI$DM*(l_JX383YKl4 zF$cbR_aF(7;XnDd0;~yZzM$9Q;2@I(ns#g~u<|1AAEFpS-S!$28}6TqB~Jvdc#$c) za(B%m0?fUV=RqOSeVHRP z<>6RrK}-p$4??~wcO5^!b@~XPHUt}l;C#16>UGrNB8^JZdo-Nwtk_>3eG7HP*m5gr zz-rtje-zula`GtFY4PyzdrXIFIyS*2_Dr#`Cat8OT!q)qssTT#0skj+BSV``OT2;%xaoKTt+_k-ra zFoOsG(~U@0?DHVbnu4iw$}ep=G5*o}=c0eua97ELIO*=iVeO1%gn8OzeBZ;Ds_MPJ zf+$CS<`P}Tq2$J$2 z3Ph#v29sg4F+8V+{^F(9kuWQ zKm0fQ@KMkn^@X(n>)8JhF#3-`lvj3yHjZF+#S&dIrW$fOAeRYD-r%E9FJPyW!yI`~= zvU1AJrO}Iiy<^RrAh4F47cFH~e-!3uw!cL^gOMXsy^7_7i3R@B^F`wv|8B_HdUOvi zl`R8X!ZPjl=XTU{%iU&s_83r>yEC43M#uZg;q=Cdb32w%U%D1x_C!_9r9g)b9rfc}1y zLP&{=ruFBd{u{YZ`4TARIG=VTP_|j1D`djfr6Id--hW|*R;3bQ8hC~zn>Rh;KF}mr z#LL(}166+|R&A%f`>h>j^hfbYkFkSyxaYTFljTlRulFal1>1XgiDj=(oK*H}D-SMG zv()GJv3gQl{^v4YUpqP@HW|RO0Sqx#ZAf8cs&*9qc(>W^=ee0GcKm)LOi0b2W3)r^ zr5pQ;U2SKBdz);TmqQQ?Z){nX)l$34tN1)Of_u%}nV4X%V51}3eJS*`(_Hl|8sVLw-~T93keeFzFAzr0b-|HnLY~=L2>XbJv~E7^QQ5N z@b{ha;gmuE>q^iM4FW<)@%LhV_rPH>HCagp$fNJ!4CsMj0#pN#DP{ukLQ$>0=1o(7 ze{u+pP$$>4e|F9yY!;S1g>o2(*59s}qKwf@6U_xE35xU;1*CKfqQNc`PR^QYPMhb< zSs3+)$r{F6#wCd=NUgPdx}L2NxsLR(1B`=z?zIQ6ob4^#d9QkBy0Sk!NL?mTVWgBj zUSgplU?kP#d9@2C7BZ^k)5(ve0e`$IDk;+pT`3L(gRX5bL?ok!(_Qh<6n7c2VvpT| zos ztGhTejwJ|j_Hp;PKuG0z29!;qx*+;u;n%QanXpfWnL&8{7gI^Q2^bVj)~Qf%{c5C& zq)SR-Xdl5fC`4PylFy0M>W5&1(Rz$}y>tK<=@$=*K`s6PMBhJm=~&O=`5%DAl!?0{ z)SykJ*syP>;rAn4K04PtT8B?{2I_AqcotXB$C|LF-Rxu^CzdejT}OEMgqHVMGr?Y` zv4PP8QC}?f2e`^IZ5V1)VmWne&d|c7T!e`)5ZAHvbZj^GHgdp!=AtrwyH!{xQj-9P zV^b@^8)(6ASB7wb)~h9RBt8>~x_*9S4oyU2YU7jKq5_TH+P((M>vvT?)bW)E;;t(c zSBhcc*!t$vmOIs?1y9Wm zj39wW<06cR;(~5}D2&o%zs^?}N(ylIe=bP0c7QZC)^An!?@q9Ah;ZF&HOAqd-$jF0 zehZcCIjAWkt0_yIPeP?ro`o9*^vYkS<1EpJ7LrPdFo)~O!3V2Ep1AnuL;2SzK-XYC zH>uH>Lp5~5f?QU-2+8Y=mWByd8Z3SFl_vhmO(PxAl8hGS7dhX6(zWMTR0l6&n%+Gp zoHa>H%D_sY7@&3n4>cEgk_nBScK#X{PwbAAfVT)jjvO)@e4+;y8#uH9;FEWtrqt%*n(|HK=!FT1Dy+jzcS(g^9iLL5QKhdIAWlfH!xX`wi_?JaLUCFuNv1AY-#{s7DD)2UZC^!+jjk*`{Zi4d1>^d| zlCbqk=So81tFgwvwIa&2;m>~$NH^>PamPf1$5IPju}5S)YVXEV09}n=c>9(QifR^Q zAaniNdB8H^*$H&K;B+4NX2)x}r8!FP;#vn-$+|>;>81@;VP=)$`gIoggkW;-qWh?t zMEw+a^OQ5v0_-XaJ93t)I8v)Vt!~KL7&+tpp>c%_-Y586G3j^&%V#%Wo4;Un$B+U) z(M~9}v+CHxs6>fM02p;5^$hctj(B>nTv%fv!eZXT4n3S9t_X0Iz-6ckX68cC+pmZC zY&m)|y|)5ebDd`Uetmsgp9H;Kyp*SQIz*xqw3(Dr@{nh1e}6>Xk<`3;=`&dPoC(w)m_J!SAZq{)_R* zsPNOIeO`vyHWI35(w*3AcC$b77jMrUIo$$~#c zu*wj}-t?%_bElDH{nXfM(QiKUyuB<@rYK{GQ0y!LyhA$Jw!#?(E;KT9o=}^VSKJ}# zrHT~}9RZm~`rElzVuT0Z9aPX06V6OmdFPid>h`=&s7?vW<-W%r=KieODqWcsI}Mm+ zjSL7wT}NKG$?-?>E--(5w?TNb;efZ3y&@O+J+sjW+3d`JCq>ofbNs`D+LNXJa9UEt zfCKcEQredPqLWtY>9s6P=tdo}h(1$wCR0alM-kvOf=x9_w*raO-|@|cJqqt)WLB$s z1Y-E@EB(oljwhJ>CJJ9^Ju@LB^%W`HUz#wW6e$8!n9{;nU)$`?RkQ>~CI; z>rV}XoCnvYP3G1_I_*+hr+RmyRCs&D9)dcpH{|sVuVpQC>1gI=QxG_$y%5Z?o?lk z`O0ZZgrVo8aq@6pk1|GK8;u=?@15h#jUP`(cw&*t(cNy-&(9!+Q}h&odgE`WT5PpC zi0cyd`ftjB|8~bf11gQcqJ8=(hyKgbOBN3l4dw%*@{*Y9k^*M*fD!^&-ttm3ki`is z6=FRzGEy8?3$SAIXb6gss5o3(T@g=C30ggM)qcUW=Lvq3!~G;8LagY=e=lDFfc6jZ z5U&Hi$J!s#c$||I+u7P(jq_~e1ZNotbfm1T+4-y;-;GJvj{II+9dZi^+!4pXLJf$3 zE8TUWOS6hfEuRy0JG2JurdnF*_+U;i&FCs^*q%F$GTAbBUHEUhKz;&soF5Bn+j~?_ z(H|m0tr}*<-<<+1mGJJ;_Gwcjzs0_ebXp@&KPBeOW-(k=aT@W&}az}*Z$_hbANtP^51Ttv5j zF1Qi5esFu~KwpgzkHOTtL@D!qx zAcBnLOhw{rj}YF)UFn>CW=Z?qr;}iMGQR zlekT$_|ICZv&G+~e%hdRV2)ZSis66c7pew>VmF#YT|HB!c!V8IPE(RtKVyu)hMp!R zJ`_P-nU}8RF3uKG^E@*TBSwiX$aHxww;Kb4Py1^eUWP%rmQzNb-bqs<8lMwN9lceA5 zTb^stEPft@$K(qHDuZi9#Bm11#-kI8d3D6}6keLY&P807^(#`#!CdNc5${NUiVtZM zM-PI}Q;?Ri38W(kbV+z zI54Clra_80Eya+KNF1v!cF+Zm=VxO-gw4eUB5?ts3U6&OEWi#czLyj*!P!LU2W!|@>*Kx+B6&@nVaehFoCA? z|K{oT(Y^Yw`_1{syLtM@(YZPX)(r^s#RSCyjJ*pc@CmHWb2X_+!-(elRQJ1e;?S!R z>^X12VaTz^1QX1Yk7bYN$83`q$hVE#+{!#=mD*+j*%(re^@~z4x@}>c-SK}O)2umG zC}~1+4DAO;&VWN{cc!L#4(vapsFWn5G?P_Ka+RrREsn({M)S_|&|yV{HpIUx!a@lH zfRJ}2u4StT@IU=&`9J?3*4{EM>UP`zXBZf|ySqCirKJ&&knZjhB!r=nE@eO(Q9!yu zy1P51OFASZ|AY5F`*z>^{_S(l|8*YViw82p@Lkt+t?RSa`n(lB8Zghs6~F`qWi*Yrf|Y-r{ycq@*7 z8(x9XJewTu2c*PZ{$_ObAWo*a5-}CfYEdRnd0AxY(poF$oLIYOhl4{=9ew#6&HJG1 ztX^AGj0||8TU)ae3!aO(dJ-~LH8L@A%eOR%{&e2jrX(%0hj`D;VF;ZUqf~6sr!jS_ zRmIj)#%xbZTpc!mrpz$J4|&%F?EkVg#&i|-gni9^VS_g7?Bmez?6qXP(3~CpRwJD= zpgw>Q2UfXjYmzdQ0sHuyBSuR6(~hrFcjo*^XwTz%vPmv_1+Qe+g!l^FTOdYuCl)ID z{3-2`&p1+&y*56IR)mq`h^iD*n+TPs8RA^R2`kA3xGE3i&Y1hWl{Py#0_)OyVC_v7 zc#ypL=ADmx=(U3&oW~b_ZU*VwE(g3;-=W8->LX}kd+STWo5^vK;n1S1tG3(}ZI>xV z^r5#epM&8=m7=mtTx#M(zLD};k`!U}oKvJiW?tR)$2Er?4w=ol2^078=Nb->L18!f)r?AZi9GF{i>0MDIHsK|{-?TWlXetra(bxE$$Nm_>puy~f zTF6~7kV*D`rL}??N|QHk8#g*DCa(f-)B1lv{RwY#SwmORep&tVb(V<_!gev>;0xRP z+foPcGGOMh4HErD@Ez|NanLc;w|l+1+LmbynALTSY!XoR&4=nnI#dqsAyI^@mM8$@WS zS0LK@pl2lgNL3SmB4?q**>X5HA%aPhtVJ@&jTjP_INaw(ZfK4I(~;A;m^(Pxh%M=@ z%F4_x_ndu5o>g+D%C7^|;4bVjd$3$Hgq|x8Z;8bSbBcnU$fL+?;*A-ySLPY@n8p~$6(MI^b7;-Ii$43wWZNSY9%A=*Buepf;%er60w185S#CHiPCfw4~ zeR%ju(IbfGUb$|R_5LqXu*bsE0mN|t`S1Dy|Kc?T?T%oCtPCK#0wy8qgUIf`+-R~r z549ld8OVPZYfz^g z#au?lBG`8%v(JOlW8s7>)@82et>yAsc-X%21>LuG_u#op+`eW6jWP`D9*N`!e-Db> zPB6p{oJlt=8ux%`d=bAV_UeWfGDi+j0&iI~>Phs9W|1KnUjPo4Fe*#Y`^1%?>#B=)oay~_%*cz~F7a~S5W@#&G;xaAjb|FQ6S_>3jj4)-H{$yHQ zT%&oI9UR9YFO{(^x)nQMMw({6bP0yIHM@m6bxw_pbPUXRzr4DQ3sEeVB#>q+yFdxo z^bTRwn2*tnA^qg+Gcwy2&jgq{$bL< z-=|@M&c;h{@owHe?lNwRa0UA{xbRv1($yFug*EEUU_$@t#D3usdOcjeo}U1-!g*V4 z_tj_&X`3kC%Q=`b-=HIy{l?Ms1Q5XMtFlGr**6|C+>WTuO@F;_r}I0d8b&hNgK z_Yl`e>!QAsWdZZ%x{eySqPvMNxBlfR(nWpS6HR|R0dHhytwH8@-R={f0bQSY>E>oQ zNMHy;T(X~)w1A?5=0fiM^^z*_ok`B6)#{B&*<y7a^>!<%su&s?Vt_@Jsw#LZC0~}&>yBP381&rhUepIqG8l`wrQ)F1f%|a+u+Jn9gEZ*! z!#Y)R0Q{qTa=L~_2DCSeE-h5XVkE0+@O7V}sm4!T>teL@#g~R|DgZN$oZ4#`bZIV( zY@l^L0u8jf4=^_RXkm(kGya#gUt_FbYD?vls~UBy5mr8X1)hjFxf41c^oJ_0E1$kB zAJIfjN2=3YlJ*zA18>nxw@BCd*_N>@<#odxuHZ1h)DANl5YJ5cVBaiOgnG6Xlfx}9 zI}R4o(Yj1At6bEd5PgKH)i(guDTnxca;X+IenW9Fi(bbe)Cim@Hwxq}flO!kvfu3! zI5+8dw%_qn8)9p96jVBntr|Bq>1U$X74jyHPs8U8p9Y@$gBwmjMMfhg(FwZ}(Ek)T zAn$);NUHA?#?PR*?z(Fq5rVX`m68s>_&(A7@qzHTr-JG(Qg;Ebjgp!=y@K37H@c%b z7ay!PlW#OXBZjD3?K0r`7v3TAIjsjt-p31r+_YXhZ84u1wbeCL=Z-w7mWu@I8F8zB z3lW+c87l*yzoh=@SB>UXdIeuE^ziH_^BdYVAowVz<#o?;LrbI6t5E>YHe>Mok!bNn za1!GXf~Rtu7kj|j;&Rl|53@vv(41=7IX0)Vy9niS%PRrXgDaLWODuYe2Ce^y%Aghs&GpNS+SFR4~q4}|J47E6E#jx$~{ z#vjUqHxX5LXZy8^M<~-$cT%-Wg50KZ}o*fg5yzJ@cIS0fV0nt8}3Au9c;{JzRbPW zVz6kk^WrY_UC+H@_ITIJ{XZ6LLO;#|#v!owt~Fr6FXLl?|_xIwJ>TsmQ0rNu{W&yJ?X&>ubS5vzw3dwkH%HpK5 zJW#3xTV19;V+#1qK}Ot2v*$J?(F5kupzAmWx{h1pulET@TtY2pkOkpvwYYM@41FFu z(8b)76Zxix?ZaKe<7=o#u?Cn)9TH#3EX22nW=!mt$ONJlrXlsIC(cHN)$;;Kk$PJ;G8#KVpA>uac3Znz+sv!R8zWZZjI5)1r z9-5ss+plnPpl%6HPwb;+-%!GJf2krIlr>O&;%p6j6(hoX!;*c2>5SR^WaX~0WSwYb z#}2#O4R?J1O!6{7PbGt92xqXztFWWhM2jzNyH31vFNCxXZ4)fS96Aga!+b=&lI(Ye z)#bkUaV}aCeKEn6?6bO=zu9p(PV0;9cf)SCcRUP!`wpzoKxLXKFQOtB_=3=Oc}8+( zi>5D2@xg&+qqUfMhD+28*ZE!HfPY7UGsg&5pk)J!pz}h%`_uh$G6BO^o(P9@en?Nl zK3F0k2|A+;xaWd1?_f*ZP*kq&v9Lzm;3oFzV9}$+4?H5#5%z93uV1Zbe=6UYawHv6 z#&$)VbTlj@7vNj+-|KMGrYS8+u8q_EY(UF~oJ zr-Q?=J^g(`86T4^jc}kZQBttLyHd8SfkApxvG3&uhEk!$@YCG<4w#+DfarEUSLApb z&B5E&S#xCbC<4$JxyywWsG?}wdh;FW2^KTRv%L-}_iVOO zM->Y2b1}T=9s&w4t?ZpISz-kz$YW+Pd$-41M#0|`Hpg#s#37%T-w;M}EPt}T%eOF) zU0rTbWh73kHE-l?j1W|Yd(BL*r+tw<5Pue=#{Kzf?!VFn@E@W8Gix23w)C@ZqH4)+l`boL|2E<~+viL(b+$`to2p9xe5o?IMW) z1MZaIFR4v&>6Z?!XCk}R^os??qF=BhuUsyl?H=?kj3r#DB)=t6@y@ZWY}jZftFKUc zH3612FeR!aB`1ERtF>YLHMMV63oo>}ze&kY?7E7TC{>ghXJFRP6C+4;8P|bJ-ke)^ zXdyU(!hrgr&Ryv<{CY$u_q~0lyu%rW^yh;b9wHRb1}2>bo1m{j_EVDB%z0T>Gad2h zHpd^1uNp+d`mX9lF}z4-5}md*dJ|nDN(;f-GJ8xc`sBl+5tdr}#@t`O7pg|gsk`21 za$9J4VVe?Zx*WXqn~2GFG0>YihnWx??F=Q@2*i7TYW`}%Gu$GL$5(`FW5FOFm(7wp z={`^F=kt|P^ZwMC&Ay#dtn|H+(z~q>`)i?JZU)V`K^NqT=$YWm#qW1b`b5&(x;GFo z(e$Uj@JB+crlOD87eF7cA>^}aczzRnq22 zf!x_;dd&6TyoO!9vLXIH*+r?+&38ebXP88HuEB+unP%(aWgTknZ7x8iA75|!gd zmSLflBVUkX_$)sq>T*bohP1?ie(%iy^aGtVZLgtg_Km(D$qy({R+5R$4cKu7cM_kD zk5_UZ#NO+cM*$Pk^?QeLMw2ISlA{{fFtT8mDSE3dPPn5#ddj$Qry-*fhV1*fnsF;< z*hQcd_$m4webvu!`7tFOVUhMW4fVPooXx>eJzQ2 zCQxI2R=nputGzb*uF{-?C#5?cjG1Yd`QqiI3j*>`71_kK+enQ?zVjMRMVQAYrMoCk znIn;u$oOE=X_ zsmPS5&ha}&ha*L9<}>EN+nIM`Q$7jW-O^}o1t%v)IT$5Il)Buap6{YVqg3(=nXQxejQA9cC(i*1)4@oZJz%G@z(Iib;^cj~`h&WY98V z{CXLsTMkjP^mz8c+N|4nX?;E)W8OH{gdnB6Ry-; zr^2Vhb3Ui$_GU*Zo%St~?N|rCdX6fwjAVD%TnVjQ{Ll`$kBbYvlx-dSo6Fc^g{jnM zmK|&k?FYN~b1cx@gv(NpkNZ!@bv@mXf&KZMDx828wad zYg@Aof~&55hblZ)Ynwh!@fRO#A}jRF)J{#gmz}nlyt*BwB0u8AFjSZnW+Rp6-KjQC zd5vh9vmE^t_4?au14pyiS8M~^jq8|q2vTB`uS&jWe8wOvlYNzcH*sYJ79^j<6e^{D z1^;PVCk1Dn%DLI!0DgbMgz*PGIo9;IXN->KX;63dOS0u%CWr-C^=^jF&zrEosWY4)8l7r&MXU~Xx}Mg zq?EyAYm9lepmzl$aYQaeHSj};EOQrfrw+*mnj2DeW2fU#=eo|B_jLzcL9(6Xp2?dN zP&0Nl%%wbuXUWfDU!W(v3laFZhHzj z)`EY6JyQ6uWGE4?f8{DL{w-I55>-L+H>K~-QZ9xz@*lONx#_`>4TzmBlxPYaz3pLe zz|hrYB1cXbpe(K$)%oC081!wDLX|rDrQ0z!T4iOTrSof#loW^F=Qj+V#~3?(Qs2SG zZa7b`7_L-23Er4_?9P8u#e$=F10B76vlQz)xOC*PkS@Z3nec@RsZ!wl>*NZ$X5CV2 zwQl80Cr3VK-%1ak=D^PvC!34lH8kymhVAn;+KqU6?)U(7p9YQ$-Ko_v-(duOm%h3~ zkpVcLJGn6|Dq$aUhD1YNh0zBm+SX@g*d_@dfJztDolwhUB;YN_F8HTngAZBu`J7FO zLdls2MlyL3%5)eDcI*wad{pdc>Psk2TSV&!eR4MB9C_ysRniG1*Wn19KQDUc{lnAe zZebhg%Fpf8_U3rvJN`xr?xd@2%S~Agyr3}8M6>TPNtq#hwW;k>d9y=gjWgVq)#BT@c)@AJP4u)n6esUi1Sumq3O z-N=ykexwjsy~|y9g%-+Zh6s+{;y?14nZ*Z#auZUBiu}ajI(`J63sZKs&60;o zEUjL(n|ECW^daYVT>CXOVPFQ$Qq~`3rm~7PI#mSs-qiw4Fomz@l{xgX^c-Qyx}p8; zNC9ks%14}#o zpide>8AJa>41M&>G8u!E{zQF(fM^m&udP%7+53sA_KVvh+yMq!LqnSTS4hLaaC(|p z@R&gTX)OPlMLg5hje~MqMx~ka>l&Wh>ap3fLc311`=s%xO)7*_qxLCyDs6&PPYHJu zJ!ytM1$IG>=TS0Sc^ZTlh8%+k3=yGeMC#m8+EH4im1XIK*U}RI^<zBRQM;3!teyR2Ej|mQPUf-(M60d;A$05aawY z9BvXDCe@xF@@;9>83Xv^fwighyZ(g10mb*s`^~RLQacx2v@hwTT|{7@aOMGjUm@h+ zrFOG+ZxY1kADFCMWnwSs>%n*OCKv@GboB7(t%k5^6y9ox=~CUPNX5JHb_ngYt?Yfb zg@`uw)EqFPex4#CcODMA0t*vELoBgvP>{<~deL-@N-jKa>2yr$A8=-=M>w-q>jT!) zW!MH7Yj15rsIN1&wt}>|gUZ_=8m&%r{_)TfMFbZ@XImUSL9nKJ7VkA`3Rakj;^@=* zghx1Y`-Fw`VMq9u^YM!K@cJHe-6nTXSZ9R(;OTdk3Q753i~#3B0dah~31>^L?+*Gp+!SCo%ICm6;lZF(=JX@Rul)(pqUhsRXnUor`g9GfId zXiyUUIecWn%gb$M3W-O6#gqKY7Wcm%J|f)uWvdGgqWlAo3Ca?v0erE65|qU4jd6Pr zHn$%U#FN0E zoRxH7npLAkn9av2Q+)Rv5l9H#L%=v5$5=9JIg?_+@vc4g)8lL6$H+$Mf#TGpT*m)Sr zO?HBv90XJYUs`ju&SCg(@$H9=VvuIphmAH8kkyDc5s6Fhi)(s_*HFcQHqn0ZGoKni zZAZlp5K4wt>D4B%72Oox;3%p=oW8?@DBQD<#OVa{8rt*858!;rz!bwqIvua@=G@!g$W)JO8xK#!1hS#m*m-qZR(0 z8~c;*JZW%HnsT9MDQ@U0@Uh#1g1%CG&@|Z8oDXpUW-1Mi+f%}xK^5*ZKKwr;Oeh>0 zVTrGZ=#Yk=+sz=r*r+l>Ocv4k;lAmEXd$VK=tAJvZLY}5i9-SOR?v=&{6eC54KAL* zE3_M;R>GWEA{w~3pKs&D--qQR4f%|jpj2R3vkS*LLFtA78)eFxk>{*q13+)I&(AS8 zU?{f$rpuiPlR1N(q#{5dO&L2`ez1b8a=f8}rLL|Gmp%=~B!Sh))ocf+Tr4|~cCF1j z0tJHTiU5YS4}yfdBGCLwHvFF2Xrw}jvH(nSfBgggM_?v&t|d9H6KW!jz1_June(it zaZtahb4?@E1Pww(i%JZ6m5=bjkoOG;ipn%aqTG^D>qFPj*c$QKaX+~aq7;ogfHM~c z-Nw5HcG8h9(5&9Q^$ZPfJ6MX%03{QS0wiO>V-dW1*51Ylr_i!()^;1x$gfI22H^^) z1GV_zAWS$Sgz5<*4)wN1f?LE7Y_~*i^)m%yZ?7zX>qS&78>-oke4mmci}X7qhga_UDx|JRwt`T02|=Dw9GjGsV7 zAp30_5Jb|-5EDPRVoJHqZY(}@U4t6O8ab4nl>_tcE=Z`BG|-EJp5D{pJ&w}1=fK3f zBG`x<{tWh7_5OKt1oejR-S@tFVn2@7MZrwA%N*2buO}A8&W$g{t(CZNvV_S-7sJI! zDSxQ=soYdr4Z}2PY{IVnKB)G1XR-K!J^mNVAWLpD3ob$a|A}SL#6K*9z$v*%{|nEc zv{A&!_=8KS!>Y2158B$*4KJ&`VMY#{H5W<_OOjN-ing$qIt5N1#Y~`^Wpd6rl8Vjb zSEnYs5xb{mB{>9!?79ndthDgFnzf0#FSN+it^rrsTh6%2e(hF+qKe-6q$hvN?L{CV-F($%AcF3Ydl_2taz_T{A*x&MfYaUXK4nYH!q&vop9aBFSCitcqS@~Pm4LL&a1+1 zaWDo2pEsEHG8}ivWAHqJ&mGnm&D!JBJbgo@MSZ3Cv=OO&c-NkJ(yB#Dj3aLa#>FYf zBbamb+S`0A-q*vX-J1PqTU8W6Ql^*w58w0$ADs>|D8M$*E5j-Z_ErBL(;mizNQ^-7uGj|2_@8O_1~Xwx3lHFa698qPhEV) zwnP)y9w6l8Nx+tygqxwlww$xaNCv(ApIP83HDsL2TB&X%y)fbADPhlQ89X`a4dR4e z{{bDM=2-Z#RT@v#L<~gH0-N;-AHnC-XupHcJ)j}?72)(Q(epL)Ur*=%<^o~{Nj`pr z=;oyjCNMYAuH%Mc!Tj0{PzbUFNm1jj%sWlP5-k;J(SWu!ETdRZd~QTaz!k)K9E69x z;P*53`p)To<|y;J&hH_D;ylsBQ|MQR%(a}+EuFXKLyaY@i>~@84FH*DdsqjL7mzVH^s?$D-`vmv>$$|2xs_e zFcxk+P5jpWdfduwx>5TH#+0+t^Uk+zrm*G`gmGK2YYCHU*t-ZAtSgxZIzL_=ywczo z6v*1Ob{2mk-G&9}+Y(Ro_2)&wROA$=h5;qF<@Qj~?gzL2VeP*?^y9b^{(~R|X)?A~ zz*p$r{{$r0y0A^3w6h5Sf-C_Hlh|>akdg{`VQF68f7$wN;R#jGC|NbQeta_j{OLV@ zUd~?XVu#u5%SFM4h0C>llWSBHL%?^If3)Ydn`Vo^nvFp)aiIVdU~Vp84?fgf+13>) zemdvbFFdQIp{)y-5*muWRS=C_HGLc%qB>eFV`VP3Ixt8?CIP00OBIOUh5A{%D~mMD zaEnvoTg1MjB%yf{8PF9(*Mo~gt4;}zD1#}fG#|?uA7IiFMb8@<)Gzgxsr5GeB`%iP zIJ3@kA2~7@E*w5u$;IE(wnmXDQJR;p71jQLQWQ(c$Q2Eum&ndt?a-Q!Zf2x&4karF?``6H-kA zBF&AL_t=Q$FD7ERer`@A5+a+D9iI|Be>kdlsA|Y0T8w zO4$YbC)%+OHqla^06eIQ-+RkRIRxsgFX$pV0loWx>LxPy!aBOZKG3vm&hKS*ApRb3&s=)B-h&tBTPdB#satgd%f&PK@xPG7#$-aMaX&sMq^ajZ5>k?0>Y~oTVIy=o-s3Vs zvavC6;Z`R>Wsvw&L{WSYvQjQ@B%-S}w*+HP$aDYhS#HWtBM=}HJUw;oPmzO>3_;+e z)+THP=(h*=n2u!E&DB;wPUheUz>11ME==X>mBK*JGyG=~Z3gy{SFNIO7|6|82po9N zUr!MC(htyUdQYT!UTjeuAL{J9D8FMMZ$ciPkDg`^r1o^~?NLgAdSfCr*nJw`y2vmv z34}u%DE4VKpeA-ogt1C;7HWdEGr_Xjnn3A5nk;V!+Sq}+a&}szWp|1&tseFVch~~E@vkIWJyj^~{OvEkrVM?dmy{jy*!wc; zIE0ribKzk>C|&V7=a0I?55r|X%kOz-%D~HhYGNWYuJP)Up4xYf z^V^keg#6pk<-9G8H%DAkTrR5)jfSq&)FUbQ?ac-+i>Eb<4#IAt1KU{syqiBRLQ)2I zEL;eSHZqgd|G|Req512A1DZeRAP0QH1a>G`K8kLrK*)z{cw%&k19&}5*jyd|*?L~4 z_Yg60xKPduz&NQmE1((xJre3n#8@za=lfQGFlsrcpr&q})jKG_J9K;4TeuD1`ZGLD zCoAN{6NLcz@;R$KTffpEU@wt^9S@=bP>UDkJ~Y1^%RZ%S1Qut$VmWk@c$n;fkN6Yk@;#5{1Kq4@S_hS)QwLZ zGPd=1ZN8i@{>5PfvH}3ILKgMmF=}6K!&Cjit#ls>-q(Vtpkq*gtEwpNoR|ZHG*mgm z8>(yY4|H)gc1$feG_-Xr6Z<^+H^Nf-Y9ttaAKA-31;*!pu$Pq*bSlFm->!so_@&8T z2yY8pxo+9NZcq_wnDz%HGkhkwiJ$7icIT8WMw_&EYuB_jd|T`WKZp_Fy^$C0ZXN0joB}+mD{aXTz8G9RaiYRiJ|VA2)($y=DkrH zh$&K7loRpC-DFwdZ16Q?Pq~9rbf!|fnsn2hKtQAn#TJ8Yjlq{Z)OCO}Whhu`eRMSa&zNP zZwymEgl)Rx<-j}lGB^L4*iU%InbrXz`WvJxR42}Z=DW^#83X{9ehKnm2xSp60i0c# za4AH%2$>XY8VkZ&MMpB%q%Aa72)@!l6r$FQ&r}pF-gx*#Z4ykzoT#IzAMouq*H$Jl zCCp1o_Wj1_sS8xT8{M5q$#r;D^u`g-cP)Nn7UhXkK|+)07bT~Jl+$xUa^=bXlmZnY zeiJnr-WTqrwmGu?R;d>rLfQ@tsP!z^CW_R#>Cp=GB;C1^1MD#h!es9;e&kkNd^CAd z{bMwu05A5kBEH(WAN8XSo>DX9x(JyQYx?RpdF@w43mTfZkVy>$>|faTeDr)6XUJ=F z0F%~VR;8nGOqR&Efa z-KeJP%cxQGu6+B2)koBcMoG>y{z8f3FJbuZs50*Mno?c!u47=X4R`si1bg`kM^F;o z-QHCgSg<6PlGg_|JCRXzq@9b)5#|hQAJaN~8mw=`z8Y7yiz|u7W1;HK92=Gp!6lSMbUOW=>K^Yx~Vpc9da#;;Is zC~p#b+M0_ZK|VDnWR&sYsL3ZL6u#eV?yv55gUTo!>VKT}GizIvFWuHOO^||58VlH` ztHG~V=L|fjy;Zj{e|8Ce&168o_&%b-Pt|kTgc#kv$mZD$=K+&DH>*WzpZMy#jjB_H z*6Z+a;6N8tZYbzA~C=Zsav~cBc=?;M=~k!wFV>xpCZMX-{J1RreiC(j^nm zwlhyb_Yys&Rq`<)N~QfZQ`#36#O2%=*<`RXX^XI&zJwm8srs-@^eY5GV$(76QzP8Y z^D^Z-&e8}ZPhxvb2P}ryJR?CObaI*YED{cpJWX*yHEGC`RmY$anl2mEDmmMDT-NNX z+oOP_?WvG_aN*ZIsBW)+j&wOyM^iW&9TH(%LsR%dwmH$mY_p(tEL~T_iLZKpI89mV zYh4?Xp^Fgiio6<6X&TKk^4%9QlrhiS1Xp$GWvJz?fpc{E(sv;pbne zKS<}-NC@OP0X!SH578yq?1iJLyv+;dPnI1|VY!8|p=rO1xU#9?myCb_s*2BOvHS-J zr~DnA0={#k@n}MvvaiMXP)zCpsqo!VsA$g59R_eND_OtH!%i^X1$CX2LZ&T~O;qTM zUbk8RSg$??@bY6aFyQBIZI}n%9zTFZ79*;S#VD(kMf+pGYhg?e<1W_$NVd{2kK$lv z=VBn=h0sm1Y>WNbj8eILGSBu(7g~!w1=93Etou_l-_skoFyU>>c{owW#k+gAyL*hJ zsIc-BG?Y|KkX&cr;1mxhZ?l6|%`#ZwQZ&@5@Pbq|U-YW1c|p0O*1pBDA|kpwrRf5s z;&CAFw*ax$(^3O|UIJ*d`8}gz3gSXNaAe*DJED z^hqK=cspS3meq$R{sG}F0pOc&EHFEQh>*aL)m#UGpOcQfE}_F^XR%PJr)LWu-6nOC zl*n-M=%Iyx@LP-jm12_!;X`39g7mjyGZwaQUb;mRmiF>Rl`TGB$?ca=%s~;zL$K4T)T7%#XfRm0g`FBZ7$UNXXR~*QKJ5PEoFvTo4-M*zM57)jW za94{W*_ZO+0?5VN7nDfa+l+^9g0P>UjWK)pPGqN-Xoa%EJqZ|F)Vxm7{q;_a*Y3iJ zEq4AvxNiFXVbJ>q+IVGrV|X-KRz0&{0iUv7|8&T(fCW0PGqXNH;2?1U7_#`K*ouHO z|2 z`h^GiyD?KG$*N?|WF(1wML~3%G~A6(9bI(>$()_1PMirv!?=u=9sc=!SOI{7P`=x} z3Wi__O99TT>G_RhGguB@1Pu;KW;IYz7U0u?YwGeZWM3<6b3c41!f&^y$1LzQY?wPl z#QSfvz<*!ZkMv%0$UYhnt9HN}zW9&+05JRe1Z+rgItr8KUygX3|4yf?Wn;t+=twv$qnpZ`u!>hI(|n74k9wer@^HGVnQL6p%lF;F7!A;HyU;r-*bp3Cs^*Cd4A`m|X zLi>Hn5ik`g3rrE_9VaM!5j#s#8`f6>6x{Os#nhC2wJ-z$L$k5L2l2=EK8agL0pZ{U zrDUg|vQiVUPT=ODmb!!~=4(!_EMT%ADr)L%i^d%6HwfSr!mr{83GAQ6ku8m6J}gQQ z9l(#$L;krU>k!k)e_aslCQbZ1n|`SnrjBZswuVSb92mU0BN->XC$8^oF$@P8xg1W3Z+AnjNN zCU+rr?X*IS@X+}Yq4EyEl$;R_vb2vz1n*&_UkJqr?L*=21DcO@5;g9LafQfLXqf~( z<%#+@w3osARW=oH8X~R@j|)+}f)l`3fcx#YevDaoX-f=zi0u;G-_1Avd(i%;)9BF? z5U--1(vnMx3$YBA3kOIW~Nw-SD(G@(@xL{B5h=5gc1W7z$ z&OvNcV)Vm=)e4ooSnoW;9$KGY-Vd1jTU7;WN3gYe4QhI(7@vwK0 z8gQ%b06xEQQYl;pqxGsN7S)Q~l`P%gE??gTlI&g%JS|v$AY;7Wk#F)f*Gv~-RB$BI zv-v(eVTxAarf8ae_iX}N+!?YzM@)yD7rI+{MfiVn&9LL2_0kGj6b3T(z@Ea7`l6}U za!Y;_?z*@S5ScF|lSC#&KRM?U;B{bk+Yq=ofUvK?Jq43xi7{}2=8x{X9F1_8swg%L z>%#{QzNQQ>1nfT32(yO6!W0lCJ7-B z4By#s6k_h?KhqC>8 z7U`^S(#>fIl&(5p9Gv??m{JepU!+9VQ+OguI)YxB|5B>FL7**T10hwU-`yN#$U)i? z00j$7)N#y@D7dR3-7v}Ui!mxAR`x9Br0+bAYRKP9uO0NRXtT;`d!3}C))9r z8dZHs>Mj%Y+jra2Dc9I&RC{s~8sP(!go*c5~U7RwtcFbua@^3=ad0`{2^i z!tNtUI6)}o8pQ>8P7Gu&SbgGCG6&bAmHG-@OflBOTs5QaDATdLsmr#;S2<112LjC! z(x1Mx1OMY(5ckz&r;Pk#XB{NBsv}ZjapImmyR(iMl^=Rl>;zhtx zv;-ZS;X|)Hckur;v}($2ZfVNP%QFRKir{kLj?|zOe`?A{Y>KX+ev4x{&0d{jpjR|1 zRetzt&%&Z_n0BFUa4^9$&Z7%?{>b6_ejFTGuxlHAZJT{WW&p0w%ZiC7a-dF(sc^y447X4n z|2=yD?tU8VU>7mwph9UJ-a1X(+Rr;EgObY6f5^PhN3bZR9Rx36G@VA~Qw+HH@b9im zERH-ilJY{~84*!l&*G+8eRAePoI=hbp>0|QQG_3Zl49N=2wNS=EdM4VJnrxV_2rdV z(C9J8{4;_q%*^;KpB!j`l}I#6!67k@u#Pl=T=%>0l+5=eBI_hpOJ*dj!9;`d04p_E zwkD4!Gj>geCi$c6P$W+>dt{$!%}=wh{$IQLOqG(I4Z=*gjP?0=F2m>*qm&c7EOO?q z#;%vXvGCr?eQD?IR%~wMfLz|a5j#5bx;#|SW8IoR2>v!ScZD8JvvPukpPE%tePa8~ zvihaom#O#o_=WBv^J@*b;^1ab>bsQ7Hmo}p%$Kn6C94+RP>ReZq z&ie2{)n0FgF6br=!b$eQFsFX;#E6E=YO6HTd=j_h0+y}$T7VVBl=PG@s{Z9;jlFvq zpQTO9Wk=cX`5y18QHoHzVde zjf+s?!yYjFO-WmR*Bdp?O#bCMvf&AeY%yPJ@a*C3H<)v7zq67LhYj{v7?vNpNM;tg z0>V=BzpH%B57+1fTh&}jQk{8`e5bL4`^qQ?<4k64r?OE=6tSk@OmHH&r9L_m4Mw`- zPInhbuX47d^F6F(uyz(@jM%a~>D)$JoBYbYyYP|pyiHDIn&FUSjWa+blHL=9ef3m6 za8x&Zq)+5XKk`iCrW&*Rg8;$cwhX11tN4wm4YvkSw_*hi*w<&mMp_^`$wxj_JWYgO zst-!-wa(h^u~nmfNtP3#fu`29yHzF{kD(9K+xF&N^2qcd8g{1ESAHT<)<%X?Nia>Z zV7l_9L5o1}ap}Hg*U~zHd==O@BiBf@H-v6e`MvW)mHeASG;}c|^q-A+ahWFATYCX- zj8(}~#hv*uz&QL)c=%{o(g@+aJ~SReweL5P!WO=xURfb?AFE3=T2s!XR`!mEQ}n-x z2KAP57KENahumK;H0Hz`z1wuRYi1lc@GG=8j9>1l0%?Iu#h;}EP z_PfdT;AXc3z8$~2OY@eJOj4(ovRjqz)^t9(+GL42ZH^x$Y>dulh9z@d4LTk&?xGUs zJp}3^z>oQ5yT|LN;MIr0_)Z^S8jZwHv0o=R2JSD4=c5qo$e+=w4$;4XBLv$*hY6N` zalD|dwkwo)xQhmfH7_Ii@Zs=?i#8-f1l3w1_wVQNuF>`zK-8gYui=yJP1)) zN%@xUUTKGk)d;PPrF?s{{bqYGL-6L?;m6_ZCs|Zm>J!mGOZW0;WP>mE@NM~CL&tT3 zbooCl3_PJRI5L{lnrZuD1s>Rik5_y%ChU2w4b|z5yR8NGTkXbZk_TQGm0_(;w)ufg zf6B(6Jg~a?D+MS~q$tJ23*u67lOZ`R0KfDG2%^-fJSDy1cBz9M zDfCC%q>QDOFj%wA^9IpGipp+vuFu9-$(2}Gu$*enrcZ1DAlX+)xL_rt#3#(urq85g z>ZBxf@Z?#Nai{=zfid!$8{2BiBy-?!xy~}F%~vn*{y*B@GAORS&HBdO-QC??f(M77 z3GTrO?v1-!BLR}&?(Xgo+#P~jaDSVenYquL=blGCyj4^eMOE)&_x@X7*IK^?G-~*& zb&}|?X{0}|N}Z++ZtgA~teMTqyGoZ`_Cr}Hg~%)Z=3|LzMJ&VY2&YZc2LR(wlD+R-rPVzO7`#l>Qz;gxh%tHY=ggfLv_7i^Cw9ml1w3&BhfIg)dh zJ15@+rt`9JBjrqdpUx}GF8=0L@Boc2Iy_UWZIFUChV#F6Xigr0k&!V6&+aF9bu1YI zmQF~a#4ti=RG}X<@oK8-`Cc&ClYRRr!=6YRbUEKT$&j*CwYf#M>j+{CRlD4&?E-kM zo%1ciXdX0meMr7&Wk)6ywpi(!t!n*zL_fdy2W*X(vo#aLlCQVqjxp;4cDSBV&-lBf_HWb^>)nne+6g z=brEZsEC}V8Pkd%??W1Qpd=(sKS`P{+*#u9zwW{jlVYTUez1RwZi!wa#){aJ)v`?m z??Q^4hwWzHSJ8`K-yH>wu6PGUXcu8jEI)z4_M_ZN(fI*7lyXml@h4z{%oD| zY=8a(*)#x-S~?*CexFq3iTjg4_(d?I!gOL|^ov>JnAD3rB~lhYy~H6ee3#$}nrzwn zC>85`I7_#PQ(+FIG0u#@s+JFqg`#hW9i|^ z<%69$N}lKVQbrXTm3v$TPJro5EbLqYgvEI$GStTVuoYH%3CMV4a$hV*S(Qe`sAJf; zXp!>MXW>LQMf8nr4(R?or~+O2DzUgkM23%WTl3Tbst{{|gYKpr`4TIc#H=bIhD`Hx zE3|-h(PTV`tr&3@SX?5NsCBk7>|lVm8g_7pnf!MsgU0T=a9l$G^|PyE)sNe^T(hL()be{MmqowY@SAh>Hs+OYZi9~89BI9MKk=Y!q5en zmnQ;pt5Z0Sb3J{in(4fT2^*$;+6oV*yCct&?m&m4L`J*tr(+=NQ}9L~5?5D#vM1_Fg-CTEWTF9& zy{zn2o)*s*>bV*l^iHbpNTn-IN2LyoQzR0X%f9-@7-WolvQRr?8SXrhw8BE`rCKS2D?^-|& z`+!C#*+=EgZWZk3&3@Pn3;2m`>gpQ-Cng>D{#>ed}|p z663whi}?6DBuZDEkq5nNO;Rdc#F2{Bh-28YmJZeCga2335r?i1(}b-1@cg`2MY{ne zWZ9h&mY%+HdubnuMG8Kf*I84@NiioypagWLBN(6hgq9 z->P7eatX92*8&8&_IK1O@a|dUXG{ef%u|w%F2w@eRlkiyNsOf^IK^DXH!as~z8JhV zk;~22?{)N_E89xe9c814R1A<_2+)g^6J5=YWr@lHpPUt&{AP1xXjh{vIaU|=^uC_2 z>|0MX?uv@mj`^5YuJhpzz)u)Ulr|EK+cc^UX0>_YQUO>ND!XNtLb&b3eoPS{I@8Wv zN|@6Gz`4A(hKdJI>B`dS=ky&}J18oapM3j*^{86e(Y6}KRNiBf-~VH58)0!|8rJgo zLDGCWS)qjBdtVsCNwVqIwZ3PxR{M!&K`KG>y}Sep0tfrHe7dY9C7g(s6w zMDHb%oZLls9iPL_QtF|ptBIBHBlddx3h_(Hw=2NZ3BS#Lcw3cdpQ4c+6bqP7^PWD# zs2bftZ{)^RcZ2ux?pS$V@*_CTc!y9}M1Jj7`M4LZlCvhZB6o#;>YfTl1n$g%l=FSP z%Wcgf`y+~z?)3+|xzQ>fI<7+nKz>$iR@2K_eQ`Iu@=(N{Y*Ou3pGPYhD(>d)QuEb> z1ux(UZNvxPW$0$LdQV-5xKOu8m-RuVhGC^bNxCfU@?2U7S`&v4UJ#$LjGC1CgLGye zlLd^o(NCc%R&}!(MYz#4y71n}dv|bBmZg!plM7Z;i%fm{vg&rD5nF+P6gkU>M-7Wy9#Y7riX1WWCFDICFf zxx6^e&5wlkt*041mkW#ST`Rtd90R{vm39^ELuJ@s2^w{se21VkG84|5GdbnuC@w;v zTV=uR6ymHOJq#I^IUF!~4^E8BuMEMd9e?*i&{!tv)il*N-IH* z#}F$%cDcUPX`)GFF$dLGvula+`BW7^vec%myWD+F@rbBIbn<_iKeMO zeqF(&BU(?gA`3H9m@pP+HZkj9#ec{Ax^=T)dO2;O*mloWqF8f|fyT-)v4}-R&}jTc<3&p9K$~Yf0$j zTUjRXz?A2>)oPYL^oYw2i0%MMD3)SOf1T*hvJ^v2UiyNj3JzB536vdoyfxza*|=RT z0iVwbd(2rRSAf!rjId2xtjF3Tlv-UyMJbJ&KoQYQpi+d51-*DD_3jc%ee-ayMK2%b zgPXX$O6JVX(Bh<5B5b%#2?wAGpvo#$->>pxXXz7C_Hg~jY=&j|ljkp5nV$5m+H{;^ zhsi{T_D#p5DKa2%-!r_HYHL#UQDq(`SIKaFe{r%-z&^Ytb*AZv5;_D;l6By!`WSfx zefwjv+Fa@FCteMJJjb#(wME&BvY(GrXuUcw_H)4(B^MhHnOMQ+R|t%MsrlZ#Rj@+# ztUxiQf2U3RH@;)cL^KH;pf4OM7I2UW_5|=&2UO*@adQS$lCwYo=zm288*}oRakHE9 zt*TFeV9QupxwD_@K1d?0X?~6*YuO3?f$Re84RnWtYYJQa#M1(jb-cg{)+qMM+mQ%i zK_3A&7b9_6BVXl&>o&f(FJ>+(7(-Y}(W7{e9xvbi@;US2RI}yEn#s0O(u~NH+bsXUfOV!f{@vMo?W8{n!UoO40f?F7xgC44uTgJ*t;bnF^$??279yeSCn4 z+>6P}$ffoR<;C_r>yN8@=2XDpaRRkvQ#LCy;j*KQiMV7z*B$e&$MRy4Aon z6e}@o;h`HqUID|Tm`?6AOx@=PtUp}w?ocej9+ zs-KaVC>`x#uP`OOCsmOtOSo@KGwLOqIxE{fdg&ZR`i0m#CW)WnvWy-$64GgD7p?Xf z*+6s3XTY!FBQ8~AULXCLF9ARvz4jqea<-k=(D5YL63@@-uA_kDL*#bG0CxhHe& z@udlY!K5P{e|cSB0~rd_#)4*T(VG4;f8Lt0iFePS49-Dd!%qh_dfBp{@*|_N!D(YC z$h<0&pYh*h5Tn}Ti193g@)m5+5sRGPa;+t6yMB-w5wqApaP@W4)`f4E!D&j zZXR-~;$M12r1^eGHF9}Ulh1|ZrMs*!=N|ijSI&oHJ zPFig9IwUTLKKxEI8Yui0sDV3}R2Z*^eg1nGzf22=OTj_Esp^Cuy|vz{_!M~P(}t+> z7i4X~ED3nRKU!sCdfNdYI{v@4P5t+-Vq(`L9+1uz5gTaj3Wd;+fDcay4(0qG&n{7g z7!&@j!Wl_~IHv>LU_itLtiF{vvkc$;ok=8XS(3*MDsf_z?)*TAXIsov%s-xBpjQn{16Z^p%Prg`rPiaK$GM)!|A#LwoF|B{$KfgZIo zw47n*Wr&S(^gtC^Zjm;tX>HSeH}vpO-q?(y3GitsHAide#T{F^U<{V4iNVh?DnJ?d zAtZ|e&c@$ zeax^Cc0*}7cOG{>M;z0pc4LqhxA9fT-vYX49dY+%FnxCQv zh^z3|Qw6bzr1J-@-&jO3tiCHGUTfp-*48KV3wTdskC)d|i%r#jhhCD7aQQ!kg5Um%9o1_4B47fb=CU@-838&D#!M`fFCK2ak{9Tq-<8GnZ+QAXQS0 zSOP+RK%5_f*rO@W;4G*TdSL%0F3c!&c=HFtX}6unhdSl%;4$w)4Ql+iO6a@b7!f_Y z>a-79B3ZG5n6a(R%_({Ci4T&Pvrxri?kMhU7Nq^C6@TiUDxkWjC4g4B2zjDVyl-42 z&-E#ZM;qvXfNPamiINVAYZS`(R4?VG!V$vGX$)c!ISZe}4wFqV|5!21*VTAuAAc_7 z_!_%o+F6PC5$c|id8a~M5hyQQL2Djz^w@x_5xxGeCI79vtuvVtKmaC|1QlM)W^?-SJ>=>pWnSh_jbTnl1z!4cX zy`7a3VBZn2tVE@HQF58SEWFOTEP|6Qi)pYdWI4SOz`(Y=R6j#wa6dxYd!4~np9mJr zFI0E|?X!WaGSK8wb2A-kwa`nJU2x&hAYBFGf74Zrg14&3_z~@8XeYcaIFNJSd%$EV z|E{W2B>SQg^%eLf4(X!~Ass~g6h5Z(3`Np*H_bZ}8~nJbnG@VtVj8}7{tf1i8L^R1 z)*V*a@y`R0#E&FbUdJY%KAYV-X{0^d`YIcSWq}`-ID&ut`y&2!YRr*DzXOI#{98@i zKb#F+5>T|jM}HW^253p>T?lw5(AzCatR+il@;Z!xJg3DfdMdS$O5}q70yQ^t6;}aNsTeFn!Jp+m71Wka*9s_w6|QBw%KcA2 zBELs>4++pG7lItXO*RHQ1%(i>6*bxlg8Uo1`E$rHiEJn98tA4K&sg(||GZZ49F=Xbn{PV6(p{7-5W5 zs388f2fv-0Dof3DvOtrl@IT#lKto?>V$FYi-v1BG1gt%fZ}kr{LH+jYQ|{kz2}Uq~ z!YS044E^79X>4HIZ@dJszjz5u{|hexMC1^Ii-T!`Omc{uB`rp;li{JX@AL68<&5!8 zUW*-LNtJnL?lir00j@Ie2SX2r(J+JS%%^QHh+Po z1A5^>VxXf_p+ua6Fd)Z9c)2n_aEuF}LktuZke&^W#(vev7jc70dt3JVz0W2*` zu<|_PRW;GMjB4r%^LTXjr5wZ-jv^Ei7Eh8)F*p+IysEF30<};*<4Gi;t~DjAuw!xB z+|N%}Sz9CQ(=%-sYTu&^-ECZ~Dfzy7u-aF1YE>ANtg;dJ%dW7uQiY8Q#5YPC>o!F( zTQ3zW01F)QY!s1kRjexPaAcI<0n|GbYtVy8u7kTIPT?xp`3>xuJ`jBTl}q~*U>_2Q z?2k-J7;j^eL(Rvd3(uGp_$u{W)=|s24M)tH?}gpGX3yElMHW*?BohD4i4jGDKk{dF zX2ESk{*hh)fi;>2BPk8qgFvGM3PkPi-9_oy=eyrS%lC?dCA6e3g(9MLp8&x=`W7qW zckOeih2n%AbCb_9tm+Y@D^(r*mazjQ>%JXL?Kf9HZv(eCdkg$aejZt%5rtUP#2NVU zLD|7drhkP}=PmaGKQ}rji03lzWz`XmPPZ7kHc5m+$_HjwmQQH+UgoDaK=@Y{mgYKGbs z|6q*iL0G??IZS%T2<)%7!{ycS&BsqAq|RgMN~SR*DEd znfv}{Fb%f>tcUmXe3m1rToPj>W0{3724q)+|Jp#`j%`6Q-_5^(=KjB^P{!QGCT1o^ zT&wD0f4PDEWyCLFK3p6z8Pyh7l0- zrSoi~Y?Byz{}ta;XByCy@0Bj%&`C1of1`Y@{OY(;LFW7@B#x`5ExVt#14t7^!G0Nw#l`fa_|@c69W}Uwo)&O-5QuOYk{B@^Coy$;8qHy zW&Q%l4*)EF!YNDUXPh@cR1w}d2oN=jQ&TKFmC=&srmij)gG?HFm+F|OKT1U)n?2U5 z3?RdEh3wOzf6y+5rsYU%FAo(=TXHu4{T`Qt<~odG_%vDZ3hUf)U?rN=b{YlZ*Eu;a z^k%n0mJw!_VR(8PAY|+g->z6|fe%TrZ)QtTa|8sMT(hRL+)Tv}x?~tsVp`Qn>*8t% z%1?jeLp@wVOi-YL_)zJXf^osI`GXA6rNpKd0y8d;tv^!@I)rMleE-(ie&Z)-C+f>o z02Kqk>E-^h8~s1<6J|gbj^Vi8E91Wi3P`}J7YITCnuWRHhM`|CE#;qpq?uGaygUEn z%F(T<-me=wGp*{PhOHp$$byL#nSK=ZPz2eV)q6a=sYoikI-}>irXrr-%dP69%*8-mo-`Cp)f(D!_CzhJfko<>_S94hgC2#j`t zYv=?*7ONt}G)D2l5}bjKbgCFgadg4p=4=OF;NS(x9eVyS_na)+G7S;AYS0QXQ{nJI zfjFS=qmaG-dHSQZ%-;oF3PGWD+2MOWrB;$~H;5!g53DWtCIM8SWihxl3@rf7y zM9_ZOO=*eFL~&OHk1*G=#|u>l4H;OR2hIdwrr+@34@reFkQ1Z~Xcp*k&DyjOU#r>YxaBPhzMXb_}WK=2X>l z`Jik;K5*dc9N0;(MYbySv@aS=8t3${Z^Cea3nLVArST^t;Lvn4A~c0Q%5pp;hjeJ< zj=x{E41KqYd%w>Q{1UKjq&lP8X*OYnLkv82S~WuK?rw0&2R8x-ywzB>ZGhq~AW~t$ ze~}7}dALAANfVyk4_$IS@6Z&jS*=RG>3c3qT$_r2K&$&4ND*eNS~w79lc1TbV2UMchZ^6^Zr#?o&){*Z=g>OuP(NsOu& zD!%ljBFj?z+MWOF5AO9UFO=e1$c={N9{tK7eqL;CiPadYE1zGIfb!NHC6}bZ(cl zT{Qw9If;_@WKTdZ)+1@R;yy1}nfl;ar93DzZ0l2u)oFF6eev#HRY;nmEE!dUh(!-| zw7f9urm5!T(+n5&hiC@UWGi>cue}2oZqf#lL8{{il{;LFO98FF`9+XFzvE*aH=wW7 zaimH~B9>nGZmj+*W^BsXWUFrh-I?T`_`h#Af)p2j!`IR)2q0z=QrfD z`INGW3~}{}+Li|*A_^;>2^z+JHh3%mNwoM$lF*ucNWMqDnLvr6Lp$%GT(KSAJ^KGF z0l2@{cEbFwO1&91zCXD{S0j@CQNl_wT-INr5*O@JBGz2oBJOv-c#ZrY5CENj!oHfRv~Gy4 zSj~=jwQzzrra2I+37R*(r!Nq(DXgMoqkaI11fyloC`HjA9@~+kRicI5i02@p^}TLa z65Iv-Uaj(P3JVZbnQEOPo~)M#yGKexH+0eQQ=LpRBJX8P1jAs}<~ACsTKUXn8X&5F zYR_)2U>+B##eb`8w`N`5FaOWpw_LPj1KRt5AO61g&9B6g{B7@x%6{AX;73M9dd#no z=4Tmgh=NbNttRu$)JE*ixUm`>dXc)Nuybisj>|?3Q*_>ODrP#EfwxKd@5Mg?s0PNu znTZFxWjH}>#3ht!PU6F6;VkP>5N1i^zwLc*cA$ZTHZ zD^0FojFY>w@$6^6ocx16-yX+GwipLfEP3hgmEiMMLv-a>ngfo7m~Ivli8XP%HD(&m zKPjWM7z+k4`WQL@y(Hn|(3?LFdyz3tF#5mNey%z~doE$K4jDpD#0TuWK8b`4r81Q7+Dkz$Ike^8tMVdGV5(w2Jd5&u$J8_U^GQ+PXtnjGSy>s9b&8q zJgEP>J>e;kEEd9s6p^u0WD*8*SaQ5x=8(^v!d6=aacl(U3$f!Nx-u^^Jz3tGRLpx} zP@CkVqf(hn0`Bg+blpJK^p@1gjV;0UqCP#GkF8=Wshf0O-imYkoSQ%{zq1u;|9##A zg`Z~P-oyNDaum-r+2k3&4;yBvYz%=BzueSDdsY_)W}=`(b@HET0#@(ZcD_=u9#IZD zdDZI2daPGvlc3r}yZvkNdD|Rjdqsj0{TKgDG5eqWw-|mDMj)dU1V$pGC~716H+h4pUP}cvBo;R*As292&j1)W^r2f4iz=?SG zo~ZbvM|EQBx>wBe;ab@|>0H)l#Y2-hjk1{exkEm6t5o`3<~;SK5Ni`P`U)Tqj^pQ* zm@M2B775l4G|m@~oCh1NZz~RTMyY8^Zn0isXac=cD}i8R=4u%c!`QPLGvA=k zv0T=-hF>p9Urbu+qJ9o=nv^v`(JtF=pzQ;}thu{C^?D+CwKv45ObkxFo~ChO84W}7 zbd@4JQ*_dkIWzNmur@Y}@K&DO`1wHpXKsMeE_g!`d9{8#Sipa& z)u5$6@5@I?FNLy4eOCe>8(bjKk5Xf!vMO2ESDYTDO|O6ECK2@@Mio_$eVEKZxDxD` zUI8D&M&m=(a5F3w2cQ_b^UZi4qw^ma8&ibc2H>{%V!Odl%SdVMDuw?zC)=2zNMT~4 zdKccKYzmOJ2^ovaA8Il!fx7qH5~ASUEZm@REm}|S*UD==;D~MrU;M(JxYLLAk;0^# z_^<(Kh_=7F3iz@dTgNZz6Swb-tQ=dnI&r!Co}-@t6})@`>1Y@YxV6Q) zrKGg}5*yXlACYj_`xAPriO|2p4^6PVW&k4(41zrnJ3F}&k?hsegoPU(W+;Fg#ny(wQXkrPr`R2FR@v?WVcSU#L@e-uaTx5LZo zE%4TOOxcd4@ioN~aQnTx%y%{7r^Rh2M7itZ%R|#aynW{7fLkAV3@eXF9Kl}fZrvG- zQw`=e@9!m74W$5WPrK;lESi#AbU2rmI+(~qv-C((;N>;P7`%7BXi02oH_3hNvB+k?5`HZ>b>T`aP#<9K(`Uu4EU$i08T4a#lGSK z3`hSJXX`e#>NX>COHDYDo_F`wk&GgG@0>fp>nJK)^ zslVfo)v~Kr9^55jxmMD^^Ki-45#7*!B(_nFd}Ph;tu~W#>X$p&LX(_jY?-V2xMnmJ zRocCXcQhmh1gsn;cOGiiISa`9n2BbkV*mkBk!QF#lIBTHUEQMf?a0Y&2%K=7!zeqv z!;3bDq?hmS=k+#7{R`VuE7DRwh_-CbkP14~@E0Q_pB4H*f~)E+F)Jz8MPOSBxBYsZ ztN9r9Td-_ztVHBubH|j{T2%CJ-Y8HcB(yZXNiS`R6+AxRPyS=z60}%}W>NhViVJIG zbrUH6F+>X72(QkLX_!usqVRLkRzQnZsRoo3mP&0NLxgT)9s=e&c`xld74bn}F8PEL>E*yKJBkv=+2aWRI)4xE*4EzM=B^31AQ!{uE{u_l;P}h3r+_VW zeKACJ9zc%9+?>e;sh42#7@YNEIgI4dJa0|2^HC_N&Wo)XHz$XHHZHm#=Do+*Oo*fm zOkeZiub|$8AEm!~r7>R53{q+|QmPn6;F5QL7(U_QG{4U)?05h?5llytWeK7MkxvR_ z+rr+CfE#dbFbC|%bdZJ>@cVtj!*7zrBqo+Y3kN85EBwyp+*|m>Byv}UC?ce{N`Gq2 za$4lF=?IaZPQfxTeMNNbCc>iCvn>rwK5CkeeVxQ`h@Mj)+44+?d;D>)mf+P!2^}&bJSvMF1u$eMZqQqRK?%2$W z?{xr@E@A8st5B8C5cZHZ+UG1E1O0^b@*O7bk2Ap|jLfGvI?LvN4Q)MGa<8p8LEhr| z$$GK#gF6VLoF?;IvV?h!3*E4#)^5n~g7J1Ni+M=>+7k))vdfy_jN^6C6xq0WJuvv) znCPS1xR=0UE3p5?-O}%v zL1Kv*59Vl6<2EExuo3}ViTKLx_sCKIo&`6mr!Srqy!=v{z`@#XgvdY(Ri$J4BohqC zwF)*bRn+SF^Zby>tDJwVO=M4-W#b`th!7UJVjQ8C-_Og#oqXe^TGW69sAb{57VQV{ zDy}DTP|GF)-kXCTMd7WqM0vHbY*B5n2(c!Pl++|C;rO+XyK#GCawKVW5a?%O`PoHM7;D)`8q)nlIoDB!~MjdT*JB*7a@%iVPNVK(hcW)(|5lTh8tiSt|Mt~@jGFv zvRD{hKn9qHhmSM*iWBV7`v}hxt3KS54(~~faq})pk?9VU**?wK>$jB{LX4N8yKQx0gc-L zcKUeX&_=xYl_?hV;ST+h2KZ%Ie1L9b^mh5(*eby3n)w$0NC55zNNF2=i+^nPAaW=> z2E{*a)N8*zv(vF;Q2ZklDE<*5;3Y*6!Aa}dW|v^A1LBLDb=OyG%XpmU`f{5TFSiGE z0PJ&phU`qJOHWY?^+ch@eP4mr79~9Cofq#@8{x~E?c?GxIlzS7iG_U5m#}sjbNNRt z$p(MGtuDnGf578{afWPd!={f1%1Q*#(W4Q&ph*by+Xb;L|6>Fn7X>K&F%cBJ_$U1l zLPj)%UHn+&{ddTQea~{xOD8A+(!VF&s4;RiGz_xgXhX!I1%;?l50_5}Pnv9iJ@d2m z@;xZ`5zyj*+~@)e`VA3D42d$!Bvq`ES;*jD>5ux~w7c07q+p8kGWP@>SW z_w+Ym?BS!^`fPb}kFv5B2tRNl?67g8zrokbCMQY6Y%2l^q6Ddy8)sorRt^z~@{qQR z!*cR=LD%?K_@n-BM?~!HBT=t^Kym zY~nlFLyR871ffh^zU;_!Znnn5#H25G-=CW;kpD2*CD$eefF`bA;M>GCEUGLQ$9Me^ zCPDe3WzlI2eLmia375}%D#)ZRz~~IiDQw2hp9hwY1(g*l#^7cTk*Emiu`pF4*A=pj z(0^Oqmfs;)grCJ>hy9q-7$ts*8s;{?5k;?8c0=1;fB!DUX#LM6CrqBC;sb%|*o7sz*OQ%__LyW2jcmuUeWyJ# zxLs~v&k2!kR?(F{cB;N`yx&OeuiSeZ89ji_1kT3TvBw(!o?14QjWDByqu$d%Ec}w+ z7;L1-;4Yot(^#BKEf&1`P9=K9T+3n4_K-s?{Bp8Y!#b;Cjc_AYVeN#WV?fIQ>Dw|8 z3R(vIbHa?~!}uKthuzds(x8dz)}%Vww;w3e&-f-P&m#C8o{Ki*O`0YLMrST8c$)(4e&QOC!7I9o$;$3X40v$90 ztc!U@*iFpUbN0&JZX>;u#cwb!^t z%@+I(?St!0ySxBW>Fp6W%oEbOQf{o*XT*Tdj!Wqmx~~+!pzs&!f~-syVOb@VP=||B z6Li!c>rP0eyI70%mQgmHR-)2TIGQuO#R1RvG#mq4>R!^>lkZ;}1FADUB;uo(Nw43V zJuz=v`}F^Wx;lMIwCVS(sQdg?gBaWUKA&TIL9G845S0(eY^MIPX}!eh3w&ktFj;kp zxbm&rPL;0pnW0Lqw3%ag=vW@QPYC&nvbt~;c<5u`A=!BiNpAy@g%V8evQ#fy__fvaY*rwn25bbJWC35DLQXYF~ z;kRmVH5hUYh#>1sbzMy?n@O+#xG_|P=9Md*T zkw}^3EyTA*OkQ+NFL%_9FStjncdkP zN8KZmaAI()#@92kR*e`kVK_t$<|r1HEs8pHhpYy?)^2|u)j2s@8ohJl`hI}V4e+Sr zz}Mr}|A4yb)6S)wz`}*Sd(EqB%uzOuHZ2Gl0{_By1mamhntE-fYPtQWs z%UM)@h}3FXFCHLWhPexm2N(D8DXq0bm!%6JEVmL zaZC_EzJ8={)1R!bRy1H@ry6;-u4WE6HaxRjNRiU<+Ktn@HLt=)H6@{Fu&>DVmdVnj zF@g1(h_;owT57Mk=8w@?npaqW;Gn*) zWuW3Ul!)+*#?p4XuyD&TDmz%X>ht4 z-=M||`98%aFP&(dK3UbVT%yKigp0oJs>Z>MXWM6bVyH@sM-5p78+1okYfioe%{GG( zv{!!WGCVm0Dd79YcUFhp2@JtE14W;TqRfY4#?>1xKC2(N^K6qu1{QYi!CEOw0RqIg z=`tsi5b~Z2mdTgB%59|AJ^J_GZ#K-_vWz6*%aG~?srSPVs*>tFqh8Gh-!#p!-XZw7 zUt2JY(W|C?IVLmtRG==<-;aonsPfoMB9Ja5)D&@O^5Z98!jzNn(0GCfdx~_8jdb1X zN{tUa!`Gh**Hh&xh1v1r`)$05YXCNK;%m{PPV-WIQzgyxS+&ic+ zXVOJ4RpaX;oBr0qp3fHD6-oE+c+EJJt~BM%W(HhlL$!{j$!R^JG{jhI^ zyqI#)m1D!@4)q=7epAhiqq#(w`Zg=i;3qD_NSv56UB<;;rF#-briv&@lVV!bl5E2D zd+PR?jJ{iGjfOQNPMVA?>AlMgx&kIzGY(J7lRS>O-ly*Xqn(J+c-V}KsA=pZY0!xEi>OjLJ5&u?k-;a5R4TP~1v= zbU`cSqT^ph!?*VQpGu3M8z__vz{LUETw^<|0e?b|HSXiNv-V#rGcootzc1x zphGw(VmU`*J3C>)48GK0LCBNCz?l3i_zGg96~;>eJ2$-Rm<={P0}`Zxb;lNjlpw_v zr{+|dtj(_vlmOVo5_!|6ILDDw|Lpp9QJvK(h@-gfr8K=LE7aH=^IFQ&r zvGP|o@?aD;Q}WF%rB#<}L^*>f>6J%jFz}Zb3N28f96=8X!%$igsA-AB@#i+nyieRB zfP}&b^uqt>H2$A&b89%Mbw=*5+x*jNw8G;Qdy8gqHiT5i1l!{VrFfBnQoKU>f36U{ zrFa=E;^U=olB;t-Vl!Jk`I3FO>Fj#MJwesqUfNJucwYT-^g&AI8~-0JcVO*A8iW1z zPgY|@j_t{Gf=3_1lFmOj^x9srG!5(wLktp-wNf=VMp@9JQHf@tF2eS-Oye)Ayh9JQ z!U~W}Ny5qNhl~tck!#Ccf%qpp`_IF^IEKQ6`p+U8A)h&)nJEYRKSgy<@1gdAC{mFB zcg!uIjTB@NxGxY#8j=m(sCe!5eUnwk15jBS(i{A+VN@ED9vuG7M*j6_kaGwK(F;NU zPxYkQ|F*;XS6PV}L}l|FI@}(5+d^4*7A{9eYLv@t>y~TB>^r2YPJF+8d~7MmSQ5N)Ukn_LUeoYq z+qupPoxj4UJ(dUhEW4QeZq7|+)up*v^)YKZU3-eU(r9V6=gv|`PjcV3reLbST0dVf0w{0MNOeAuLCaBoLFVZ}FM!k~}e$)~lGrW*^of1IqZCA4YNuWMz0Ry(X-* zR_9%wWhbpcy2JU5*6Ce?c1QhMvgyn95kPB6mQCXaU*TKFo2hR{EyD;&x-|Qj_D>|A znw*rYi{Ng5^hvd>s|))K_o36>o@v*rOhSW462fOk1J<(l8*Ac5^!9#^0qjL|LW$S7 z&CXWxycA$;gW*zig>-stxB-P4EV2dghltH0aGVxiQK-$wf9ZHr=F;VmH7K z*tNkw1KP-)2Bf@{XcK?a$~WbCSP4bGF51vv{wgtFkCc^p!$^$< zIebQiH?Hi3uk(Xmm-y+YTd`8tJ;v#+vGwD$2*9_Zd35A?>bN%cH!$Y3reLl$wdVc- z%0Q>9u;>KkG5>@)VyVDu+|y`uGv+pGnrBJ>xj||8=eBykd1%qit2HHe!;6W&YW+%~ z`1nroX{flR^zO2)7EtjADYDMI0&Yim`mfzGYy!7X0IWP=Zv?i#e@?XIv%X|4j zM1U}Po@GIuoFU)oF}g?0GL&zn?WFL_Jq|fKVbY{MCLhb-`WBJ%vA@y=+H-k-X>Y3j z_4dQ0-Lm<>h15+?dhjcj&T-82GUbK1^KJued-Jox1A>+3=+B=Hqa^mT~qV zJEu>ckCXSouY@e40v%l5S_jG@5;Z`)@@RmU=i=b+Gh1MHvtGbF&nKuauYwKdvkYAp zxaI~1r_DAp8u#NB1M6pT%EAOo=j3}YpZY~(gaEA~p&_*_N_+w`SDU|{(di#(m1GwM ziCz;gv}hAz&nyjh9k)+zeMcso5!ZcQv-%ABJ2Z%2@gI>(%ISaUwCbr$sNb5WS9Jl7 zXN^W0mQI@oY4;LdTKcr9Gi9n>lrBtP7%l@t)M)x_w_}>A`Z=s+ONZJZt71R(SYJwH ztM{9g$O}d=t)?+KpZL#Uw$Hc_a!?(eEmY~wWiF+TVrX)3UoLVq{fuSRt`|YR(bGw` z^f01us{4I`i!r*pOiVk@wErJ6`+hkT>ke{Oelp^%I`LxPe<{=Hr%t z%+qv`p;5uWG>#18G2-5D0ONusV$?)(RNU`nltE3%sm`shU4LafX;XC}AS-=_3Zz(T z32yv%QXCA)=VFx(O_-Pi!V~x#GT~;VxOA{mAjAz6CBy*&&`=Ia5paEV zm3SE$@mmZWD?20o2T&t!94w;p!#7XYLd;qRDLmF0CY8~L|H!07BevXU$+x`o;+y1u zQv4F!0mU^MWVD%`ol2aYm7SQ74vXTg_RX9SMp6)La>;+T6)w`j2=g0$=N4MgxJ4(z zyIrd8o#m&j8;gmr;B&Vi#2c2#-!!;yO%#pHDvp#fsDINP{2v%^Sir*u2oMu-49W;R z75F>`6##fUB3wt5G!228F}?WzWzyp}GhsJ1H91LLwVP(c8sOv+;Srz#$2exeHS_)) zzF!Q_BS!f%2+9ijQ@pF1I)C&uenMl!YV_I(dZR7%T3~D!OQWqppx_#KOEfpHZLKuj zdp)b`K|7Zhk$OOk&y>aP?~y6ORY?-Sxla15GodHGN*$E9%XU@zh;7ZpuaxEswuUCI z0;J(sH^h;W(qHQ?ZCl2O0=d5*?n@%VMK$%_m4t?!YRN**kWE(I>+^R=acV>trsr58 zdw#QW*(&-JU2VXm_Dp)=^{QQ8&NzHgCT8$;?{_Mma;kFhEdH9gPOq(oPn4w?Ks6>x z^~}8^T=+VykFNRwp=NoMg}%Tfos>(NiZjUe*6!oqXSr>VtM| z|Dkokv<%5_GVCovs?1`w? zWiIf?W4F<}D(9JTf)t0@O4Gu=+b)MxT3Xym88_neIk1y;^$FrVhF=_s$^+W$cu_jY z6%X%xlJ8cdw;HhG8V8Sq6Y<_v<==a+rD7RsCkptjQ~BNg0Mkc)e=hHiyKs!9c#6Jr zVM6j~8`jXwC#z7(+jZG{R?urN9I-CKUL1C#Zao@u0@D=?QjpC_Dl9uJvqsm-vjM1@Hgs^MM zmP7)QxNjNqRN_`|tdTb7DqONV-0RsE-95k5K8QZHPPjgvcie9NNcw2Y@L1o0{~v2_8B}Msb>ZUf z?k<7g?(R+?1cJLe!C_;;9l{2JI|=UY9$bRE26rdiO}bBaPM>p6eYfiVqf!(IsAZ_S<%O( znrl_CX(u3f1QHK$Z4q7^Fm6IhhAfAOp+acjhaX9JT@AsiGUkhuC1h6d8wzGD{mK=B zi5-M_Y9V{)17^14vS|M>$cc$l`%?;dXlQ07Z^ox$M8h7R^2Ji|!O)C^y^LnhO*<H0{8-ee+ZVaP-iCPYXW@3IJBppi@e-Z?RZ1#bWFe2b2WE!%gbd&NgKs?4^ z>ka?ljruIShd`jN%@x5no0kk&n1CxR+&miK4i!$ewUM6`F))S|QOHEDYb1IZ z!15UUZY~9)cAkaIN|>g>zv3Py8wZyQJQchoI?jp@rUXo#l3W2O(h5iLOUEERaMP9z z6az=4ll{jct2zHK0peIzR`L=EcRU=Brv4Ia+!OzpW7ImFLlL}=^kh2t3cj@78f@zhChIAZp@_ zTSWj9tRJF!^|mo9^+Oka=3SgfDrRV=qW-I>CyW%u(0aH$S6exuXr}t=7}t-P=A4qijY}4kZ1%^$PH|PR^ z4c(7R>M?En%|>AhB=oZE_)*EUqrfpv|J;v${s{z*qSBBsGEVBhcHpq$kiy7o|6*(q zOEIuQrFZ-fPElHTnY|Ng%<{7H?xEdkM0Lmy_8<@Fyz&Mz&PEQ}O1OxR*Km=NK(`qP zQiynv!NduHM=cowJJ5;9Go>5q!|SSMc*9sNSEK>_L?ShXSOtG9GCWZ@R!iY737Fs~ zw$yP36na$h0?OI}*A7j3opX!cygs3KY9NX5gIFDfD7K7WQKhd((^5qerTP zTE)h3*j_nd+`jvh7G)S9()tyTh^TZF;RM#u8qOBAOQh}zVu$Ok3A^YS0-}#pQ3~K) z1c|rH<9C0;$?9uIJ{sQPRflo#p1$K9n1?^i$?PB~6{|U{iS^%jQu$%Uk94~q-$PU_ z{VVIeL_7pM-s<=C=~VYDh%$cQ*$Dy;Q2-BafN1KpAB8uWB3U7}xyg>{PCgE9w+lH$ z4={ERo)&5VP8LM8yMUy{$(jyMv_#(~VIZdHLI)iq1jgU|5=DW6p~!S3P&BpwX+M4u zWsU#j`49-~`~Z#(_*0_0{9P|mBisFlB!q@C4V9#71OXN^f@JpWb%i2VQ@oSjO6r!X6&uOya`ASQA%3=MYbg5ddG$awq2W}(C+^CP= zyRyH}O)`A7$YF3aJ`JVk7J2b4bvACN>!;3&8ekioJ~!M)2HB$6r>@-_&(_9QoMyg-og?K?DI$S z2aYW8b%A97d2iWQJ*sBm4ixNe0XLIf7(xu@9{lL6)wq8~&ptIL4|xN9YY=b%it-@+ z^s-eYS!ot+>ru8l8@VN;RVA{gYBn@E8411N#SD{4LabuM)%0qf`43Wy=O}4ZrBHd} z+*j(Lb#brm_F_+1PWy5H_U1iTv2sqO398ns1FAkDKODONVq>fjv-vpG8KSp>7bal$<>V=v8=B`8SbdZXSB){$ zuY<#FH`-extH?DrWe?`j(xKb{_4^6$+ z^z^V0RnCvqlOjBaOw{w9Ij2ZrN#OHkFiTXu?wo9OBKh2O9LvAzLA4fsdOBViOcHip z&|Afu(EV!H<+3-A17k|)RKv)KD(TMee%g%(H+;ir+9Rhd++KECREB{dMtH&sdHnlC zh`HX1yU^!as4Dr^7tIR*>W?tX7suJY%K^SH=#63XFTbF>5lHc6WWomW3@N{OhBBvB zYHO?_U_ODC8HcQG zd+Wv}E2j2TMyorUGM)snz^iLV&trP`I~zR3S!Xy*zMBT>G&952374l0Owklo2dMio zpq*vYxJ$tg*Vjf053^UR&)ZGaez6Hsdqf1o?3@Ks@GSNnnLw}P6Y(*`Z*U(*&f)>_ zXLj}&QrPi>r2d&OU*9NIz20Ph)>1HShn{!q?1rCMz!DR1Y^$!&&s;q?aw8#Xd2l%L z8#_rU7xFDHQP3@x+13ZRcm`q)q*Y!S%l9*H-d;P>M$?}0e@tgflvtFG$ZuZliZ9{4 z@tjHIkTzW?9NL0L``@eNG?d26B!ZKZ#zb#44Qpr z{{FfV7$o!yhZVS)!h)Qiq8x}8tRw@{`X=&yd(nj|DT4zO@=U6wWP0+&#;;}ax8n1t zPjRVaT}1^7iP{j+^{Ia(Z@;6uhdE@To)CgRlt9J$d0O#4={AzDxyMVW&awf(nd(LM zT)%{~6y4Pqd2XI?8nNF1$v6jI@)@cy#90A_A2VJtR}x>fRR*P5gPDu#OJD2zR!|}k z(hV;T<&tbVjU zSr*F<&Ht-c!y8^db92;p-#(?^VGxu)M5OeZR@^VwX&WA@F==020Mw$at-Vr{JC>a!<5UV>eM9 zjysqjMl}gue^t6yZ!isFqun(rzg*YTm>cW6j-6*8bO~^-sP-G2oKJQEXKvx1EE@mD zG%(xA1a?W?_mL+11Hi?Lof|HI6p{zuPal%BLJu-M1cE5A?|b{#_ACz`&Pf3%0Olc4 zhd-gcG*uo=r&xx>jjICWRidWfPxpDWQ?IIZGx1p}%%*?b4Tw)NlX{HaHD8jp0 zCt*$kEC%vS=zK^on_R}Ne7Q!{+K@tdCRWxe5h_#0w?->^{rvjzP>?cVY%2$$uHKcuuRU>h$rg;YMPe0(9H0<(hB~O7xviz+PaJ2*PN^2#&szEy!T3+B zA*01JGgcq47XScRz!shKdkC?w8nTTTMRD1N9Bk_wgK$9`9px_5(`|AO2PLJVp}QGD z@9#OwiQ)#{p^+Y@x)pzkE{&{(}M8 z)u57{A>~vjc#9+u4;ba1K6Ry$v`v0KE0kDus?{x)U8c3h?P|O-5rp{K-T-SQ#vV>u zpeO$4aBUZ07@ZO%8uX|;w)!BZ$v0TdXG97-dtzmB(0!!zkAQ9QCIs;3(tH4QRGLOy+%T zMsoGuwF6}`4V}Z;lh+WE~owT&H6@mh6o%@xxH4n zA+}ZkK!Hc+JN>EK!>P-ZrT6XRs~yA##|cDO!Cr$rrZwj^=Vm4KP=-8V_Ud|X2F&AL zt>M-i+Q1p=_^PFdpKltjaZ7-)B;L%$*!tf<2%>7#=d-zOa*a7PIkV_w&J#{j#AdzG z#~Sw-obUNqBqRklIk9fa`ncmwH=qDtr0X*PEM6&L5U=mxE~5TT5^;7agD~RZZYq@{ zX)gGiaz=_>Np7KmDys37So9;~^>u|X*aHeA1L?}GhiRVg=9*N39EsHU-5dP+T%tB* zc*0%=H?~QpjPWb7CKee6KQucqikSTGEAYMvu^y|c-Rv?T&IgT+BeB}Vs0fuJUWT#& z&IFBgQx)LUnY~s6d4m%!d%nFv{h9d5-Rs7eqoYcqb75H& zlOeO;XiU@_anCJqEO3=>lenV7Y_RU`#IKp++g(CGZ9rwuy{25nv(Gdf*Q*Pkp2hW= z3fNpJ4`COT zJeBRzCanUtF>oPy%rmBqj4HZwwS*_8jez$eg)8VP{f?2rC3xvh#+NL1-97%QHzD0| z8EF+_DBgs(;94XrDVy|V)z&xMX0070^!RWMuFjnqxx5;lT5Y__-|e{A8dy??03n`8 zqPnT4Zo00OG}fLKu-(bfCp6Tdu1L^Ai5@jej_>z=i_*XDz>k{`4IbTck+6!B9 z6apWg7e7vvSR?0zrgVByCx-_20pi@6Ci-cGr;7xp^8}_#1UR%jEW$UqQcY@AD??R- zLuHFYWrIVtQe>(a;!I2_=sc^D;;>99imQBOzq~=`Z8vFUi@U0lU>K5MsFIkB&6(nf zve}%5`mq=y{qyAZd7~Ea+v)ytT~TXVdhUVBlQ*Cf9svv(#S2IF&u+l~9$9BPJmY1; z0Set$9}^$(c5`~Z$j!D~4!5YcriFV4ufKEys31Ed@PTBe;51sAV6~Kz$^Pr`h+@?I zDyl>2oDUDEKF}MJjPeLZ#3()^4h=`A3*dj!G&_yXMtB|0(%c%a_x8;TrvtZ>D;iF$ z90lj1Fyun)t?htA@60Dz>!F*}fcK~11SCc(4G0jdEY=Nq1=LA9iBLeCd}^A)fZ8t* zrtbclK(8O*ogoI6e=)Lp@kTR#U5>xq>o3FX ztho(D79ctuJT_qYZM*%H2v%EN@h$$V^dU3RBB=P%0$~Y64jepkv?z6SaIv8E4gUI& z(dZB6YE6|atQ3{3m&yjlqMwq{tnl&TnkrezSxq-|4__-CCP{t5?R^340p1S{o=bHdGiRoY}{|9Uj4(QkwxZZi>IsBF#t~GAI9Xk~DL< z800kXvXEvR@EHZMD8}6WJ(SwzDs#1I@+3>6VUyl)<5~HEJ*g98B;}~o1*A*PA4iPIebH=xEN_vl2+8@+YBqds$nnirWemQVw4j z$zC*3Yl|Oz@q8^uE56@H6aitVn5!b=LqqMA^mVQoW8LPy?R6v+ib<$sCsRZXdu;mm z_dK#n%hG%0riguH@3g?41>czU$I>@{WD;|ds&+%Hv=C&L;X7!=SjG=DV0MDe?|!r8 z8oDeP3HU7);H44gKjM*Z32dH3CIh@L4GkcJLw?_z1Ha6ePhTf`nl)}@h$`4n1&Taz z<vQSk?&A?rDyb^Vsr70M$HaBIQ)gQJ|7_hp8Hf%N~^f!MF3^ds8HFz(w%SH?&K1%M zLyaMI0LpYC#2~ZA+a{<6PF^blsSTyN8shtUCKXGCWcmo39(pJ8w|9^+cyS+}jP4+C z*pjH`a-yZZ19{fnF;+TNFpQ?ivRLtz+3;*8Y((-aT_fwy<;=3WuO5;L~;0`Bh}S=}q^ z@q12`<(l-gkndbshx;;ML-hJ~xap1O`zh}+d4w=_xFJ8Qd=&J=c>}YGMO|%eIH`fy zrXGM@AJAGR_In`3O9%o&vp)k3sP$p=N9zOd5;$heW5mYE%eAcj>s<3?6b<+S-lGDp zE5Pvv)`nW~Yn?~}9~2c7d1xMzDjrkil-@RJ+*sJF1ZoV~7Xrmx=1;_fdCpA3cVKg5$p}13Ff% zG_(eHzVDck)i5io{rJi=SzW+sJIlg2F$}aG;k$5EeCDcFjQN35U)w^y*3MO%UnHi= zD0xK4b9~Wuu6z;mbCQc0lH(27F4t@+wuB5mUBgf zqlD)9tWMTLLtx*H?;01eYl^5SqQ>;BEi!9x>UL?`KQ?F}pi-abTx!Xr>OdBG+Vg8C zpUfyU03rHj$q!{F%-VL=cBqahu>FKWG6qeC+>ZD8QTNe9_I0eZGx`p3xBsBvUC*KrGU{X!(h@JinQ;?mEFNs#_JgVZl zLEZAC-++?rVlsA-HPXH<#9I$oI%U16u+WCHj@=Bk=B3K#7*l@=HDOS4M!LTaTjn-)Ir zkcA2i^{(AN0<6f2V;y_M=!ORxrJu8qU|I*^jz|Z;e8J5G4`V|X6C)PZZFN!kZWgTLC8nVQGCe3%UIpcXhQaYL?YAwj2od=C@GU=& z$V??s5gt-J(5^h8ZivPl<9eK#+B#~(QUu_VKDjf;oOtPDh$(BAM(osDvS)^pyFLhT zXiH?%pci?E0_5^3Z|UEvue^S%!6t<@R^Qk~W75hs!iB1{KX^SeZ~FOM1(`qX6??@= z)HB+glqSU?InfvJF2Ns^hp+Y;xb6|3&zN(Y?C@gbCrT6|?|5L82%Yq1PbF?EC<8=h zkd009=Y$>@w zo-cz1z8?STZPy5M!+K($>9U>vq{ql@t0DC`L7I)6wTVo6n{VU+C-IjG0bDtRZmWV#n&0lP=l2K^56ucZQenffOaKs1_z z4&w%(mn|ywKP9pMhcR4oUfOg^;&hHXCHuGAoaxJ)=?x=s!3whO3aBPogr;7ECSC+c zlV>di|9mvaZWyyaX16SD$SR6Bv7LxU{Gt>*e=%?6reu2}M311g(NJD;9~)}uS(%xy zLQ>M7`oS`Ms=2=g*6N*3)#27{*CiNKuaJ7y4@Dcched_>*812cekEo)z>AAS1)F3L zIRwVAAaXNSurc;!6eij0kb>8;7M9tsylGtA_}dMzQaLb_NQ&MZ7q z8O#BXUi=h~6pxN7sDcP+l2%~8Jt`G0bbz9$;eelvtOA~6h)M+FXRwh9aam5_nmsD{ zuLL1GGM95IAciIQf9QJuKP3o3{CX6LrV|2TD&XV*e`NGRhEm6>S3zRGH7zE&JXPhh zsL{L2n$yvej`A9cR%2@PH!>5(sFUt8sC-R;p>1H)D~m)!#;V)jyEp`7@#_JuT3tbg z%?B=Z{J%vC9k#)X*noW?q@4DlwSJ4b|L!$$EMZM6`NDA_oV zuve&DB+2XN-Tp_WgZ?$fnXbhMw4mv0Y`Vw-Ns#Duv1qSb@2m}Y)zMo&cYW_Dc$r6+ z?`e#fLU2nAbTLNSEq9>r?G?$a>BVQs(E+8)bwoZK7dJd_Yk?J&%q`@ zhAqctK<`p&BUD4}VA{QZpaOegKm)Ntpt;b;M@&W7xZz}~!7H7Om{!n>V2vcQoCCxC%x)*<+yV{tg-$ywsp9=d zYA(h{X19RK)!Z~Uu%H_;3s^LmDqRQs_Kh|G7WZg?Lmfi0;`* zehfGNLPH;ngCk&`f>r*4L(7@He-Dbz#zdX&2P%p};X=id`56F3)uFH6NAiMNZ(Lh)a3MKZkHHhaajmjQum{n%el) zdia%mYr@86XlM+4XAgz_&o0FOhJQ=%Ca(oVPUlR&Fuya0FC*h`$I-YEX#x7JJtm+o z1n`%3MSB>n8ZR3U#=wR!i$IGk1arXE1!atRNH&by;Flx;<;+MyCb%Ec(vZxz%J^t% z-b?>-%%43nw$^;C!92_+?|REmu;)E;6-_+&25iHR#Cvd1-q|3Lg(z6;4!99=)-DZM zu?ZBt)4*NhY-N=xbExq8(8V&Wgn~_=n~-!R^vCYP=V$KhR7BQ?x|Qlrbt2B0qL8bg z{PO_Mu3yW?%*u^j5QQ5miarS56E@gKC*mPqfdVK(`4m5m&{{K`rkbm5q&Z1oGXX7g{NIscCWbsFoV;wyZ~h#Ki!v|3c*JPM(E<&H*lo;d|d-Q2Jf+BGtu1 zB-ektCrA0c`Z`UNLuI6GGXO%lI5GmdIZ-xSwq-fr*(>&npWGImZy0#=RmvDCM(|Ax zuPR<_$A<}F)UOeYVT`2DanE}|$Cjw^i-o**R^jE25NYoQ@O^^ymm1;4-%9QkCvE*~ zF-vo~;o4#_@O9&Z4hlAxB`%}2?#8YSD?HoF;d z9)Mdyy1(UFjO7OB6vc)wGANi}G9a#i<}qiA@|npCmrT1iUhkadS-qg#aF~tSR`{Hb z%&(vHT{G5Mit?cZ_krVHsm4S?5?C!l&3Pe%$J&{{h5EWc8z<%M&J}%^(2*l2%jy(j zx8-pg>$uJj)ezVlqc}iGHuDDU-(TI!N-H5nt@eVJL*=)x&Xkpf-N+0?=XgnYTd@)? zMc5b&2myf|6)K?5U^&A{=xa3hI^`wn2BmPhWC!gMSDY@f_to4lDLmE3xzC_mct4xj zF3`gTz=n9IjBI_rb2XE_KDf#SSdCb`L4~zlMp;f$?HBvHA@bVRqIUyF$NJ#CWo<*! zx2&?|OtZp^we4y{4xLq+NN#%CevEvW_6{!iQK3w(&WbQQ})mktn@;vGO&pv{QPqxDM5aKJaoi|$(w?Y?qW9QpP>jf8fZEeFR z%P!|$D!b&+YU@qzUd@o4=2B>>K`pwP%z>F;$xJxGA-XwG1sLe_i{y?D0}^Q!$w)P1 zm_47yiWO}>B`W&G@B3`|0eHacpcE6>2i>VWWV!MN6mN4HKjL4Fwr?JMY3PLrtPjOz zBg(5UA3zYNcnt7l#L(=)?50>oxt9o)2dPd>H1o{aiepPp6uX?>Q=$6PqNs*wx6$WAc)n;hfJlXK_gKbi6^IruPUqp}cb<>@;%X<#@kdsi+a5<$ zm=^fQu2H-7Q^&347iL1Kn5FupxVM{@M+m6BIk}jqR!az_%%`R5^Edn_cW-I9r6r5Q zz4%)b+o?|`ln=CC3yitjbzO$d0~jr}@5*1-Yab-1&9z%pmVQ#scrN*3&0ID#+FZ@m z^t1bt+4dd4bXd2p?7*P=3#T%vyq(We$qMI`p%_dqrI+N}pxw#aQ&OhJd&Yw%KqX6( zeKL*Jjn_e|OuJ72;q&OTg||InbxnMI<(6=(U|k0fFBp=Sk^$Zv`20Q+8lcX{&L~We zgoU^R0x=OY#UC$GeEGup4OYj{2S0&-7t0=ig#|h-_9B8`$B+tE9UQG!g6e1J@UyPV zyd5(fT=OJD3nQMIKz)>f}KwW)q89HkaLXme z)MG+GuYdH0R{oJG)(<4$ zCM4(-y}P4!MM6TpPFAAOi-aG7&_aXA6FqidQk2V|)=Azp{I^_jV9FATq^8?TXn&I5 z0vP0QWF*os67qwVKVFf!Fro@6yQY0$YoFHolgu1RFn*Smqah893m7YEPb&Yx5tMe8 z7Xu#oaRp>mtse(1+Tt!v(%v?BE6Nm1xVTwSH*f+J=fO-J{7CoangwYx7m*XKr0`$r zR$a`lVq^nFD-m>|Sen?WaCWu}whKRMLLm5i1Qv8MiWWo1=s#au#v)3#K-ouVieJ1Y zq;h^r3P><8*1vPP%-A`(Im}F!lawu{REYZZ>qple)Fe0QzJG`Q4%X8l9M)}4lv&L%vDTKnDy5t_29YUK-xoY@B{F5Jl*64`iWatuh*TQeaLU`6yDktU>m2BBPeKGm=H7NO zVLXQlKLa<{G{COyIKF>@ky1vKrk&QL2QLyAIxOdAk{!gHC<5%jkVyhp-u?8Zw=F0h zrA!M@u0e-8J+o?9RrNfp9a(pg0|(XA3^ZWojbPX`eo0Q?^on3*PT(ape&3zIzbJq` ze1o0?D@BIrnzzB5!xB{1f|vXdqRh57LeUMSFNp8^9P9D3ZgA7~*esGVmYslb|G>gz z0@+SMA(yjjP!DiF6mwv=H8#Rk@(6!ok*D7;5c2is56^Ql@%}r}y0(=&a*|Qhv!Rqs z5E`*VUcfHzWH^$w)s}L22KDVQ|1qNT^8<&o<!!GG5JXkq_tw zY>YUpAU~NI5Q)7v;(TL9O=1rLKi*sblNvK~o7@qOLXTSwKlAEUpNs|qTuaG13rD6; z!qi;25f3>4EBvds;qc=(CIZ6n%I?PZM7i|dEKF6E7+FiN5H_eq-+q)pFJ>u%#{;Br zsY7!z3ulA~aNF=WOO$wzM*Il?YANeT>ljozTqGO37im4Zbo&$`-6#SiK9jlEl5{5PrXD z(O!n-#qyau>h-lvl=+e9A+b{i3anBiU(wyMmKox-7e-MiX3;3h z0GEMZ#gQ|n{N*`@vzj3cJR~bS+6B0ytd*mzw*wPP9vj=mWaqt$UzdPL$!|}j*&)ae z((6#*%@VDB+hE2#)kt4qLYX=IYQPl4Sy`|U-$ca6c?YPpcf8P$ z2+kd@Qap-#d*{@DcSXB_{-4WDIEY{c(6> zD0VtLellnJ7t7+d;xXs3dhJUs>Xix1Ga4L=h+^XdE(_e0(5LKIBILGO|h{ zOQmS3AB0M%;7|Q_(xBPIq(i`E`wB_WSbG}M^lAlZVE+j7jqs^;C6RFp z{U{R%DAG)V$8jj){O<-H5&I5?jgRkPoPz9){&1OVhM=hU!G``rKELjJ9SNK|hr|NP zlfk_aO<_QT#oDGVEJy@ZAA4J$b`}Ws64i0?7R0`Z!Kh`iav_CE3>JSQEdhVWSP$RiL2Ie}hJ`y!#*3@cE@PQh21}_05^1i{mtC z3j;+TAzz_z@Pck;QC85+47!*(fj@U4@Bqj|5Gf#*j_BjkFEERoB1~Mxbhu#?d98wZ zQ0nhYo#+r=q8W=X4Mb)xWU*$@8(Td(`%U=s245QIh%72lV_~S@;=o8827s|A3pnC+ zU4Tu}re)ihD^!yozBm-f*a`8-et2e*LI$>CNkCIhD;zvYhQLobtu}gGd_o07xpQ4Zyxp}_VI-(totypak z10h|&FJK81^w*Io_fo&x&l%L)^`kUDE!NHZa};+lKtPN5iW)hY$xA2rIbX>ckh3hb4>ZUL-IB27ylKA0OTSPU|-Z(2}v!zIb`wGV=+Pv=me#QEdFIYSu7-RsPWafFL7=9YUPZt*X_H^W|v=r^32Hc0dR% z;-i8vSnuNoiN%LST~@W!;o?$~%&fP_So~OpKrBM6BbvI5*H7;+Hk30OcqZZ4eOU_-?R#U1SvKzGDmdDWEv;#h#WM49rAhcUj2RMF1Y(A;}gUUi43}TyF*r>ye-N@ zkdbzjGLkdX^JG%MMZ{tk1(t;&paS-#VvSU~w!!I?{`T(ihroVu-3&%{MLk}w_PU~g zERn`F1D8>D1TTt~VGx_mBk8q%7+xH>);(p?MvB02PGD2JkQ=`ugH*{%A%{+7Efc{E zgh?es^V&Aw$uGG5)BfD^nh-T$TwKXfB4hs*hGxf?BC zRkfD6*(Pc8tORM)3~g@c`DVDNz$51feZ7|CjYOh? zYIww($$hl^BQvqY9GnqA55>mUx#xZPXj9Vw6#>Svw}%F|nxeeidlm9W$?qjr3Aq*) z8MV+*L=3O@c5n5#p3OX!$oIZ9Qnu`wrW`4+ltLe_gc-R-^&EeGb)6G8_k`JdOv6Ba zO+pUXL4}VJXOn+bd}t$VcXxGh*y#lx`{g9(Wb@+u0kZUTs@7{Bpbd`5{7lpr^PT0E z!$5RK-!K`|NOOLqV%-wvn;4Ss4-*kqmB_|M%jtuuIiDg(F5=NKTxR!t9j8l1lfrG|4~3OhO1#JS4z}GRwbBM>ODEYz9X-Y|*Tx>^7*D#E4O8u~^hqay zDSf^ro?R^CpZcOv0c;|yLB8L>dfm6_y0vQY^U};ObeYF*q(;2XRebVIEGnm*B%|Bf z0S;Fg?bAWpZYU;{w!T?-LU$KDhYQ9VZu$6!I!S%;^Y~eK!$go*+QDrAyaF?Jfe*pp zy{Df(i=Hf6+WZ6>9()K+ys&Az`gw81$lIh>dzJ2V*~+eq2558Hon49+Ixhiw<^Tn{ zt3Ir%*b`Y4&HJFNv~*N7GDppixhxTxSCld%-}d+gJ~6edV)eBl0tT)K>DQ!hb&ngH zF}LpQ4Rvo2S_D44F7ws-+&Xz7sc|MeB&4i=*SI{pdqw1nMin)Zmmjoa5`JJ~51;iq zi57%IU`}3#17yk-74%jB%ix=H`m}Tm-X-%VCMV66UC{gHHxl2!_Z)o`){?h?pWz5G zTQqm)1R~<75L$iCmSD7XuX_4gm4J(IN9ZKVVdrl2UR!&J2uq(&X6cpl94E$VM;U8^ z6$kda$aTpn`%GjfEStPNbVWr?N*k;#y!Kw9rq{IDy?_o@oCwosR!sr-q|N#{WdL5n z$VLJ!y}$7^4(SsgwR7ZmqXm&2(C>ra&!*YnU{(&Z1~Zi<@k*`sHj?!N{%&)<%)CQZ z(d8@ut*vRy!o$YS&d$B8_D7ewC`$uzL)KpO%d6yZ)bO{{05bQY@tpBMV7Og^ZgXr* zydr(;_Wpb>peN#z#uM#1zWV5|40^5v?vo>=t)dB@;>;Aroy`h!p2}HPLY~P3p6Lke zR+YKHLY;|-J2BqeY(oLPVUu^{5pGj9p8n!GD<$cf2w0z^8n!E#HW^M8Z)ilG`683- z9F{@*O86Y`WO~R%sh&<^Wr?v_iJAsGpw)qY028O$Er_AFgD%G~C@b_M@O}IjT4T;U zt04uvH1P~*Z^raU*}~IK!Z?kK&^hosf-T+-Yy)aZoLrz>3-f5A-6dTmWJ@#X3388g{!X0$%AHSjI$!Ld+B5hp*?Ll-8K|~nYz4d()&|hn z8^gM8MkR2{u4ueNyK%+KXU%N5{^mUM#{IV*=F8$D5^+%ofXd=Y*ngeOpv5)jFf?TS z1M!5HZdF5267G)fH78#B>Nr&qzSM}V#uFV00sM#@gJxdV&A{Ake!d0v?f%UN=_oy|bG()Y$kc4miI!ypgjm!;|=$}ihP)3sI&Tkxv|;Mld) zI16b(U28@|V$TQT2dPXP%M&ibI@6cX>sFos%AoMKvp;)(5{gI5)1ti>9-m#{7V*~c z&qzSKMsEy$-L+WTanXe#_Kjygy{+In{=VK&2yRV%u6C(n=v;sKdr;F|{WNuf=o9%c zz8~^Ouei~PjE}e{==YZ>*)ync>8;@^;1ztZeCcowQ0dH{7p=dv)i&y?e+VlrSXCuy z0w|KwUcBLhOZO7=bYuol^8Y*zEcZC&L8%sw7)Nj?e9mtlLkFxH{cM5+aFdSgPTjr^ zXfIsbL=ylS_<-+pgCS+2bW^9%FR*s_ir}cwkR#(cI+?{l&gQ#u(-J5dpy`=UBV!-k zu9Xmy+9zUd{e;ixO&v+fa$LDEPq?+_26Whi5b7X6Mo=G?@@>t8lMEVdA8I<;o6#VH zh%jO|N~Ny-BC4T!3Y#4^AVRh$8+yTEhRSaIa)vSigAJ|M!;pDmej8h5a&t%S2nJiv zdce@Ls!H!+`n2fN?N2aa4{w5YPY;sUEB3IpuN}*?G?LIY$mxt0vcB(5!sI8a0idZ@ zAO4|aV$JtqM+9xMTH?Pq8ZSGS5wGb{GNJ;OG+zJBC04eKtxt``C*%Os#Dv^8wv^n5 zVQ0O$=n*j)bAom!nyt7uDk2{0aT?(>1zbXJ^h-G>LMOl9T6}C=?!$v-)RbJzil+P7@HH!4=ZM|H6^&C>HxcA+e1e?{o?JH;SYYUsH!5;p$YmYY&;Me`1S&NeQU4?)C7oKQIRP+B;d_UEreX zBOt@#M4`N<3j7}Js5XCzX5Ov@w`cDHt{jbqZQho*ndz#X{gjBP;G)@? zMXKe$E1bE)OKjDcbjPz2e<|*r*(2jSH7%n&Jip#zCyn@4aI&b?`5SWJl%~5mfT_fQ zcx{1MtK+-HF$Z(0(#WEH^cpTezi7Q)`U9rB*LUV!E5e91f3(+2LhOhuV3K5vi%^rh z6X`o1O;H=>(g`iJ7N2*Sk0eKle8SjR4{ES?!`JJu&G0^dg7^^uEiwT>cP}rgm}(Ki z^xdrR)s74ioPUg_D$z&OE!NdPnql^y(3F`&fPR`J;LFVHvCbYl#jw{05RVwHi1vs_ za*-IhrOvuLan|$MqP1Vg$Y&(ZF;2sMV4rb$_OZQ4f#9(T#y0z;5U}~ScP)K}!Tr=| z_em?hU3IPXxmWLJwW&34MN z=vczXR;Q3Gt>6a`#m{!b1uO->mcHILZ=Vq!ypn@*D=8z@2Q(gFakBJhBs$lk;cy!KCL9k;sNOwI*s0H}X<}@rE~Mb06HdfTJQr`&aHDD$ zxu2&^yin8z1H7B5`V?`zxibPVRgpZzLwU%Dzk~LG+6ng+U5V>uo>=A%Oed{%m}4&Y z{*eQN#Jon;P8QQqoueP?#`_D1ZPxwE&jpd7exU6HG_W$TwTvGEf&ZNJu_cKz9s=Qfb&Elb) zWHTYG{O6C+6G3jfm>>E1oGl=&Ikoae2l#uTzTjh4^<{`1ixwOzFAb+$ejJ~ z} zb|XKQT(wV}Na%)3(JOyh{Xxps5wT-P#11L209O8h zzve29OqNzLdMF1or;QEk>MMk0GskiJgTwCDet%1VEQN_mcpN-;w zOq&Pg6d74wnrjAl8Nd3&*wQ+n{;){(oPRQW1Tm<^#{K^g_Ey1hHCwi>#mvmi%oaJ$( ztFqp^LkYyij8Xkbyuvo2U58*MAz>ckH=R4`PU^mTNfhU_G8}HPu^kb1VsuBfw&NDE za*sLM1*2Ar@@-f&?LEMqq-X#D*#Nmzi$d}5uts+Y$HK19l%N%2Fgak~yhB%XL@194 z#^?_0bRDI>26?oLoBZ_ohaa-7A=tbS7HM4&)IygXhAr|`=JVqE^WW)UktT}OMeSIu zOvIk8h!3+FT)iQZhvwj|4KD^%Rb%_k*I`PjoOmCtj`OF=B>CAVn`PU;yCDdy>raEH z|4Kvr|BR6$KzSr!aF7AFu)&}oBw#oHG9j%Ku@?*kk(fi`0Mj4TFYe?YWcth?&&$RB z8?&fv#O$)$CGi!<+Ne#jU)*z2t0|O3H{{RF0^xbr=F zWSy7)W;OlJkQSWyvVg2-cx;s4z^ZD!8d-hbqv=4~h}0=$C^GBWL9eb6u-9GUw$>$2 zxGpHncZ|M-18g-$eN;5gX8_!a@-jVTB5|VS9uL>N7pu2#W3yUc4o#u+wK3N$jlT>r zeCIzr!aPVjM0ea{PS-?OV!Tu|fDzFYeYFI-UT#=I_&n+@aV}30cvCi7 zQWW+)08cpK5C3FA&b*g}>@2N4hkwzh`8;1p{4ZOO;%e&7Xv4fXCi=b(_iww%sR_jW zsd-7jz<&ra|F|=KsrsJw`J>e2^O5)t|F6(@Q#Mu$3sW}pJ#}R%Oi^57Rhj7qb~y05 z{`#`RI|0E)F^9P*sb9&+^I;g-?Q7R1?)S0TovKlv4I9JAzi`6BlXy$@jfCYn%NqtA zDmM_5m&G4)jf4fgwRTR%cit|k=iQW(5HDjm`mI-AVhGd;MnT|sR)F}8 zA!qxBb*VrI|1xRY*N%3~$#hhRLJL+155*hndI*7gbaUC&D88|!%^he28X7qw6 zAU6o;(ABV;T>UzBOYp_i*Z=1*rFYL)%Cf>^Iii@_S-EK8M+@fflV?!f2#f*d%7asq z9+@|@kIe`PIpqE=Hz{Gg6=&HyH3uZyh8u?WdM^AoeJO7Dnq6}5Y+Y?x@`>_mDE=gA zB5G`T3AI7R$n2QEvVeL~`S;B@&Rj>i);*ZLoS0s)<{fj0?nRF*mMpuQvQvEoKY2F+ zkM(?j*O8%8iXuEZU;~L;DP+cIi<+JUyOo`*?q=7|+{VkpwY;x++1;ssA5QSE-KtjX zF>Bo0wXPoU#5<+v8+mOy=j0D_vG2WE}+Gbk!B1w;hRk%R7B;%V&Du~ zAk@?ji>Aog>{F2Wk>--LmI#ec4zDaGBQGbK=w<2sdvazt-pK&{aN~;@!J0zAP-%)7 z`LKu-3_+da2C=9}CcKlfY2+N1C7RAI@E?HbKXPYaIX}9{N7>*CWSI>^ z^*=A9+W*cn{)0b}{Fie1e*~XVdB#YVF}ZQ+g@4^j?nzDp_&|rre+%B_<`9{O+&ch0 zfKg-x=Jyh-QeB#``iNMBL0GwyPK8opnlT+TvuTkM6lQqseEP|T&ZdfNQjcuW!8`N7 zE0O`V>zc=7mxfBe5*SHseL?br*A^Jz^?T3f!heYc4lF*4GkJJGXViZU zoCHT0j%3U59$oQosHh(CglgM|EN2Ft%Pd7O!0Cx zeypC4Y7*fofxx=@H25LPasAs>?;{bI6($%mJwFF*3@=Fim{r6z3EIIDQdQAeI%%dI z8+5$}PYEwh4T;wdIV|$414OnC{~7Y1x(p~m5EcVe%><7D`;Sw^_!_)0sI%sO)7Ciu z$5La1X12lLK-9Hx(_q!jceQX3U~n!UlYGrTG;0H;3_$!3*2eVz>YwpXNG~Vp*Xhs2 zX~qMe)+nLYOrX{XL&1K&Glur4z#hW8Pf!83h6$UX&1z~iXO^| zk}@yrsB46u_B_g}xcUil`SkJqeP{Uw@bLBZtyB2ubmwhx)#Ih28Ao5;e|^o$u$pP+ zkB5kCOMt}(u$7^-^KbPe^+JTn1jgiFtPqG`6YeMEKg{O;S!b_hC=9rN`mH2*@c%x8 z@>XDQ0VUNX{9%?zbLE+^JaJ|6C>!bCsz_=Q(JBpXwLb(YkYB>hD56eU7u&%7+=de*w} z?$LGr;$V*))Y1Yfz;PL5FP2I|ODxkYYjq+g0%&xKw&Zep;Sdl|G6{+C$I=P$xhK~m zY6 zH@*!DdrsVt!}ih!IS$r+-`Tg7H036)?++#Y5TXCV#W=u!h7#XDOO2 z22dj-Js0+-YaTnBL#CpomP_;2MG<1Hmc#fKiIpHmCGyJT<@yB{qf5fwG&8WSIB_^O zv23>BA=Wam4myEPFXK4sMe3cv%ennQ)H_A^Y!7Y!qX)k)k(tgihF1G;_+d0yTIQ69 zhUkcbh zrpt_#0)Au{D58L>oOLe?ADeftXHC~5X6~YuuGf5s;T+fKX`gU;Lu*=CXW2HHC;r=q zz0+RH^nKe`@P3n~=p?HD4&>%*WzFjptz_JDf2+>E=gd=+JC`9pEZQhwqvE}SyBk12@uuz+;KRT{p2 zCxf_wWrL%i0yScKI#Mt&EdjiL3HlutInz1m{cxrN?#s`&HnCLSm5RT_qlvkE_4o9` zd@yzPt0&kE3=32m^S*_r9L@bV|59k-cBh7}$|>jyGjp(-LFRiIn?rosr>&Y6x~ zFt$TtG*}l>W%O*sw_`D?X-s*fjh3=46;45j!1%d|uw^AJCfWf{X@wW+3WRU;^1^ud zLW#Hi=&hCu3NBd0M*q1M(~r~!e3GUz&<_(~EnXWV zV#TnNbr*Bbhswj1fW5ROL%Ay0YF_h#LC@D#4J+l-YS)&)rCiT!$eWs?f?Wo5P7lNg zY(kk}G|L^ZxW7pb#0N=iisMVvPl-)e*=5+uh#OWDVd-rTtPC#**G$Hb%=NzP6V0T) z6czn%j&w2-p=swkSDrmT{I1l)En0=FUKjL#i=Rf~Nq4`N0fU%WKQ&o}PTKPRZpDrq z8(I|9$){TIwa9&Leyki^_$@iwx%b*P7(Zf=D|AB6&L|u?p z%gJeMPF-eS@`-qk#&EIg7n|btYI5E1MDxz3viJLb^Q7-1!-0~9(8T;;n6@$7_&wOZ z4~HFv-hi*q1|T1Da&UX7sZQ=}kQk|_Ej00@_9kWFm3FR!L(uh>HXRC*C7`}64?EB0 z#%F{eEcJELN(Py8rcS7R0}c z{duU~l^%gC1S~xCS)dcGCL{lyi+T|D?Mm7x82Qoh53v8D}TkRpHj#H4iT84X9q4_#&Gj6RqyWtEBX2)WJZkuYwPKP>6DNd6q&s zFCwJ9zw%KPzw*Ja$`Hj3!+d;LfZy9=$25mU=Rl_Hr49S&HU&pc^!|Z*gMv9|r!SPY z8AuVs&`=cPXYsh&@7x}}={*-W{N@oQ0rQ=i&f%EU7)A)h;|j+j1f(mALl>w@dIdcD zQsFJ%`pyy<4mLS3-=6Sxfuu#B=f-T;IfFcz)jQ>=p(M_QpA_V8w(Nrs zm$Y}nccjjiuW_9#rSEX(73PXp-QMo@AcG53K_-BZhIJ%|=a|d*ox{8Q$2*?j&^zz) zyAw+)F5Y`woA$`?J$RY%YjyCC<6A9q-_CR5)?XYJOkd9L>l9dR^{CBng$p&OpK@nSU*7TV zfZ+rFnBltjW|Q|FAFzg>Z#Yv-?B1sDxx*heH9vBeK<`m7&<@Re2z_>p<4d`F{8iIM zHgRQ;>Qh`LF(}+KJWZVx;jo=RFkc2DZKbhbMYVRQLDvmZx68QqNM~NyMv%1YcG1*> z-c#WfkB!s?KI!JWdm3aMK7_M9^=z2(<4}tZdY55c;C<#Z+2T8zfUIe(oskvfET83o zqGCUYMHY>-?Ysb2NOfB`2+Q0lIR%Bo?b2AoGvu+W&$pX|8m<2z?2#BK7ToqS=>kie zcH1P|QJK&Td_)%CyC3Co&yAx&xqdw{TWQ<$(SAsCgMv?pt;D3G)X;6Ko7pFkp<^%h za%DAse8e4yUZjpfHC!J^sjJq*PrXqil*Zj zMM*_2NoLLw>bKfW78Cy9nrYODihyX5c8z-YuJajmWAdTFON1D}GI(zU!A797uYYcy zcq2Rw{#gefJ`4r2ubm|N$%Z+AwEzUQIk_0K;<5w3Gx3hnTYOCaCYZUcNa{`ZM#>F) zt=?}t{8nxqHyqUXN@YVLbEEQ{Z@YpkQO&BHlvtudrEo_7`ue_jKXF&6a{tl9A7L$= za#(!VztYCWzo18&FGe@$EBzTSk=5n(9qHdlz&|FR#a`*Ypl1`uezPD3JP{c1PmP8wv*^(Iqej#I?-~s|C$BlX3Gbe|z7(c1X4k$(+iNCd;Cvp| zYfF7~wYIfSWen{Vjm}SE%=UJUcI3$k=IcVM`3Foh7BsSvZRvc7v~jAk+X^3_n|y>mXPcFEg>EEO@mEwt#doX+06tmA0J zuQ>e}76SA;Xn2a06;b5ZHMb=1d&^m2O6P|VV7rL;PvzL4$t zEV@OJfeMPyq8QNO+_){X=z^!Ii0WJe!2VkMJDw=H^!PYX`1?BwPPH1Ksktw02x@76 zUlBC8e*MWY7pWE?MdFF0)lEQVcj+*%r?so(v1D{UjkykoG_~Kx-MtR}i1MWz1TOUHx^dH`w^oc(<9pC@R60y*wsmkV?TE8BdN;m3PC!+G zXJe>i5Mh#S?6|R&Q591)JmIuF09Al5_kQPU(iv?6eu6d;-PiH7Zi| z^jI+^{9r@<)vLkG_%p*LWr)PMFlb~|T2=aYRzu8tlE^s2q%)OI8h5p$Ry1B;9!+6DhpypKF2CLo9Qv9ogK0yvH z1;P~}W4~p5ekgqcMf6)FUF;67IpGcE&#!$fBQ-i?P1q-5-#)!V{`>d+PkCpHnrav% z77q6RPqTy2bYUbwZExVH&AZ_rE$096QcW@RVaoc?Y{g@|)onPRKE-kWS4ozGhnh*der(9B^kERpX`G8cs`X^KA<{ocCE~=+p@L>;BWPJ2?k<`@1}r>-Rjsx$}Ou z3#yoyFB@|*S}tScc-Copd{Sy}c=)(G9uDa5_RhifDbeOB#^&Dn_Rii%*f_)ybyU;I z3!OmW2IA0e!wsadb!sWCK4xypNA|GP{%+5Wr-TkThkP0r(u=S|&Lwk>Hgirna}Edk zrkD2>BIsT9we;Qm`W(6k-0%~?C#tP6Z(LFuj4&+F4AldDn-7@w&CS(&eF}Hl$vSLF zv$culm2ZQcDT)g=p8I|i*Z-r;@X#xs8^KenuMnbm0ZvF2CuVVWv~QwiqI}Nc-DUy* znhXm@Sb0urT24XcyW(FJ1T{!CkI2BIx&>;JYPxOr85!4dD!VxDL)j7_(-!A8KzlC4 zX=M(cZ#AL6=6ga6#i>_n`#Qo&GFpq9D9%-c%3lmFuC(_PZ(eG>YeItLtSFMRGb+|W z-e`8^#fh7Vkn@zsmKLfCQGo{)!9zX}g%IkXbQtdE^FNN?R)=e4qr-)H4L88Bo&Ufu03>_A#^vJnec#M1Pe9rf^4>Eo&L?yuem&xdlx-UALRRL-@RWPKlCsHg~6tG|Wr68~m^H`5|4gU^fjw6(QD~xY{CyJ=TT(*;G%d}m}h~z8o z@_q19=Qe6@1_t(XFE|egmwX+VTbm;eZ3o54^n~2hm<41Q;5OPXS@lLBdyY8)CKzzi zH`Q(4-90*3sPR75dHz|i)?(P>t=rW$bzdmpNbfr?B(WgeJ=n*4w-v9|W%Q=WtklcG zCfKecdj(kXpi!6u|F&e8@m82hvB0KgUzJ%ghQhHXs(-fFXHOwj>&RQkJZ|Z`h6dbx z+Ca2uBKiJvU}1do2GZK-S1s|vIBW=*lGeSOEHg=f1g;<+BS+)Gvg@pc_xg#g#0tN5 zGUddC31m%sLY%PRg&1F@EVNl;?NlIKZFSPYrl_Ih1>u^<<$-(C{#`{B>D~SW8)~&f zvh;=RD!l+dZ!lWNiDU8yeY(LR7bDdOzd62q_p6z?U5;N7Df@}0#p4>+ z1c1IhJb6e)OpF~Lc3pdr_9*m#yd}8l3=#wpwP#1Q3&Da?3`nS3j=WU21-%5^z4#F? zn^Q>8wzr}zp|*+k+Y+9e1XA-xx%_u6Kd%ByI3z5o7(EcEujmICcTYIi1Gc#7fe7X$ zTE}6Yp3Q1x#DAS&zCRdo#?1E#%@Ub>a<$C8)cSPlLzGbn3dzW#be)yy1j#eaAYD4T zs>apP9J#0b3E)XxaBBKsG};b!SaLK*_wP2w4DGz4ke+dC_|bP=XE0qT$cSSN*69Gr zHLdsbMTo>?4wglW#Wj6UR5yjt)}+n`h{YYg+)Lc|i-0c326g+XzG_0w^k%onD*A$` z^m?@Kk$GADi&}eoZPrB2Ir%CwTg_7-W6j3FRpw{IC1}Q@nhbA4nWk%bb?p|mc7=!z}V$_?DG`(5}F;j1(WYhj~Do9o% zqsUSc*u~PO-jp;@s7QKWSBHKs!Zc~GUrUQ|x(w>B{Gl!1iimxC0_`B%c1WM+k7QZ; zwU^{q>1OlX#&xxW2-<}p!5v(PK65sWlSj@l%TZ%R({-&$la6EPK=S6Lh(7T21*O95 zS#5X6OOnPoFzmriq~n7LI;6zIF_185&4u% zg!Jw9!f4qGZ@&AE_D95hKi|VvebqxN@T3>4i;lBG;0PIFOgnmJ_z_Iqcdj-I z6n=Jdq4S8}e4ka=p=JOZQ?2Hp_G-j;aIK~s29Hgz{qBwlBn?-aaYuk zAJBYll?#nSrk4Csll zVnZ7jBDor?1-=qV-Bgds$b|jYyAGE6XaOg+83`7Bm9&yKTmL<;K-$-DLw6DU~k|Yra>{Y{-9L zEGAVp>}s$?QzuoT{HnXWYM~Xn-&!SNvD#z47|k(?+S4{1NHn}!#7MoDF1R?u4JA^86oEaaQfrV=MB5gQS3#BcA+7>A zxqec-C?g!psg27R5!v|Vi<}`J%W1jDOd1ol1LtgmGpgj^i&?)&jEQ_kXiCr;xEC;5 zMWMRsQ#t_Ji~>j_Etb`Cd(lcLlRwT|gmE=FPa_Labj*$WmTZf8Jbw89EV8ML#wIk% z9)eqs-e7mZlte#2Vd%Y{*6>g--{RGY^I~@8@ot$g=3*zH{~qYpc~M2URkl$uK@(L1 z4Si&DBo=zFim^o$+o#)h!ix5j*#y&~Ss!&8e zDQ$H&PhKEPA|yozk*crwn%&vl{R)9O^QBkRb8PRPnQdntTOsWJ&UhY;mWQ5Rbv!#Uu_^cI7S~P(92|yWjf_31VoTc zv{~iLAoR_AjzD9|ITG^UkQz|Fb#+)?)A`B@6ZSjauvBhVu~>3Y)mi3 z(TaF~qE>=LveG#I1J%q?npU2!B~WO-1e#enB;NJxj`=vOd7ZiYpfB7jz`<{4TP7uL z@*HF_Z9!%A#-AXsZ^3&sSU&mBAOsxdHeKE>j^Bo!i+vJ3b#B4rPVl0gXKVq3e7wMW!x0x;0D@ zrOknDd>CwL^~{mE$G^VzyR}iIeBM~hQ6s@ov1~(baF22gxvw^X;XK`Pf2JV0Cnj85 z_7F=WIZ1j$MbMrCQSg2(_5Is?U|+Q>F5=eC7w>nc$_KuQ2Cj225fAuLue>vX>`sfd z)>wskg4o@*7A+TQ%S#mqaMQ|Djq07%_B*y2&Q{A+F2epWR8cpae)NMz&MM zJg)`1!%ss5L)1L*a#i<8jDS$EAS*yy?4J6f6_Gws&Xo34Ir)jXt$6$u(|$cbf)9Xy zzpkc$)o03w#X>}T7U^$DZ(`_4dlwGig!9)y2{Ylc)FwQX0WE+vas%77$mnk8c(dlH zN6q+Q8Glp(6C?BqQipOZF9XF0RQBn}_TgvIy^I5`xFF`w2iCZ}2NO_W6udZ^^!JOl z_*T;xuokq3C$sjdl!M;HZi|nc;;Y)9K zdf9=#Zr(bz0<5nzwPP!So-X$ji^^YkW+9KFMX7N2RESS}Al%HkNOeC)C8TB1&;L-* zW5L3#`F18d7BMb&5gVbXm^L|rN)-rDP_o%qC^0~m!r`r_#^)rXK5LN8g_K+M*;e5) z%SUVKnzX5!DDi@_(wQTr$K({`UpIsmExcoCw>IEsfo4XS^_B&&hNk7uU2QwV9^$~( zt%}G-i8#yfV2>k-9tPyMN{x2G%G8o5<(;<%vqY!JKf#A`BsKvMx2d&A0y@nBZftzA zZe3|6Rw-99s80>yBrlm&B887-IIuTew^_NaartX+DPwjcZpxX(=FP9+$)x$I<`LK8 zCL0mnfNdQQ>7px1jrk+u{xZphr>w4RscHD0gvdCLD&;Yr3-31sFH5LKJ47r3qgws% zRJ|MO1jjI%lF)?0E>#8`i?qn|t5X^MxDqtwI^G=OS6{;F!AChbS{JCT5%B4`dyIU} zIJLMA3jDipNS30xA|ceXgS+#QO>x&Yj*8pefdcfrD!Wq@`XM*g<)3C=MVZ%~!IH6< zsJZ%zl$@q1eT2^b-QR5Anm_J=JsPWa?ut&DEDiZXBfd8YS>QC`1+{3`W+I=gJh<20 z8G{i_@nH;o+?N&4rgQNGIpVQMa!WkcC2Usf0NcaPH&4-O(irh8B~QTO)g-1QUVE84 zu>3ayoKF%0vFX%C%q%`Mcf#%7PkV9RyNc{twFj69#)Chht#>l)%ss^%&O-BUAo9!>@yE_p_x{72y2lxkZSsG8ug zBAX?5>LA|gq_Km@%A>Y9?9Tf7Ah*R2V@5lNOMGq^edLT68OIm?`?vbOPr;{?z`pMl zldeLD!!mj2=YtYCj;3$o@N}l)qu-%p?sC!YD!SBvE(cH(70wl1Qws&*Qnzi zDyp2~JF^Zn*Yj@QVC({#oQq9w=rH||(zib=2!%5OO?WkR?z8)~Fay@48r8i{0vi&3x+Cys5;Vj08=S89YKJ@af8($~My|5?8Om23-Vl`CHVbGaU7o$~b~h zdpvLZHVyA13`6%P`>+y?K*KktHutY&mjnRv}HFtrQG&EzjtFM2DG1XrCn1I+2@$7K9I7i@JN z3%*qcDDp8h=I2RXgVn>IzrGaxrn?a=3Xb(?AP|4?$#wVsH{Coyt3XlwzR&p-xnyhHAn9uHUPbThTEK^Edq*K=wsz>fEx-2rJ3EYI z)oskSbshbeo7SAzMz+wVOj(zu`-OvwsNO{yj`)+hW|S3B?H*IbQ3Y3pGGUo8EmL`% zjA@#Ed_|Lz-0TSpOZ@Oz#9r9?=#GurwX~l9t25vG+`uc~JK1v6nrSYViJ=FIdM+B~ zJFw}F>BFxof>*|9u233yy;10jef-TJsnZ=gi!J9fly!<#^18o(s|pi*`eNusS@tCR zyK<8zJssz3rp&#Bzby8nxU=f_lSHRqe8&@cPiQj3heJh8j&ieqZd)ql&~R7+w5R6F z{y7=V(BuIjx&5VX|Gz_m0wZ!Z6VY%gU&{pl;_i8x!6lxFr0H4c{nrrNtE6u>?`oA0FkiQqeAS3lpk15e zf6KbVbkq9fwBfc1Q|JCkt`DK;>ahxcoK`ty4^ajPU+UHI*C5%o>2LW7={J%x$7(*i z>QyUO^)jmPjBxD;MQM@h3j9v=^s;7LY67Yk54>`BM<5BJ>T(=>>jKi>$pe2g91hqZ zVMyTw%d3DCbvmW??(Ff&eOfuc@VoG}Oi=ajayFq5cH9aG2ujhozP8}knw zO%wvGv+gGC1A5&D`7?Z*es*uLCloh4;?Ll_xZi(sUSISUwh@;7Yp6frO53>T_&v=Z zywOHBPXU`q_v7TP%HmaRw52rFT}ZjjDwWUsiNZ0mCJFt>K%M;5t*vQx(Z&h!y+)Q} z2X3BOk%R(nw-6*UZd3p%p~?CAPt(CjY!fv>yfR@!uE_g;gf#p^H;&;+GPZ&`ZjtCT z|64BuIQjoQ5ycRP1eIHJhSl8(MZ=MEDH?8MgoXLzGbZOQHzgNw?>5S|G%i1Cj4Sak znv`(sU-4c>7L4x8pB5e0dcP8JC!@p4NfgD8A0 z>Pi-28>yB+J_DDr(FET?ifIS04&OnHX(zoF-$Cx<@iF?sw4?nolKFUij3k(LRz5}w zOgo|y84xk|#sQF+tQ>4=v?A((1w@!U{J7YJGp64@s|*`hjnaarEfuY zXu`EkK`@~jp~T+hhukZRp_9~R7{$%r7}M)75bJ^ng7i(@{lc5-j=wDIY*8V5gTE4U z@IPCuPkeD7-wXa#XJ8uCB0qVg`ZsEV4*?ZB9Kz=kcP6i}cR9N~#NMD_^uLS5@VBrVG}ekQLzJ z?4u>k?6k40{~0r*-M-q&_ z7;Hp$U=FIT3_T55JZSCiTlT}BV=TsAFX&oaOixgg88w%>GCL%EJ3!XnaE9J*s_abe zn-kE1IQxTqX)`PddP|P8YsaRdwbw>ppKtzx*Qs!a;pZ1Qu^f&qrKP;SsHhvB2l6jW z)Ku+xP6>ff;!#`riUaQ9y&d}=x{M;6kF8v#+m>;3(-CkErbtN`WW2=^u>0KFooD0A z%hQU_UZE)e*4F+JzZv+y8jpaGupkM6%<44_ZrY3idQ7u6dvMV&zlz5Anwy|utHNbm z#eGDwBQXq1p;seb=Bm-Zkw(%}hCqG<4?-&1Vq6R<@-#ksZJ9HgzjTn2T@G#FqW^|K z>F5!>?3|Q836Y4J`89N8RegG%b-m^?4LW|f7#KKQo||p37+cg6bBghG{o?+C7_Dr> zAYWZRkiGDv?ZTK`_Ga5niXPu7-hVR@fAw(DJ9sttp!W>D$m3s?6ahp7yFBrNf>`YfBNw^ul`P&J%CoCM1t^^K-abkgneB( z8RNA;vTT)m6&(tG9Zo(-xs9qrvW&uirvB(dE=WAQq6@Xl2%;GI3!C@@JqzRY_T~az zB=XFf`!a^UZml6KM2!z_YcF4n9+8ZM=tV>6AHZnF&Ue4$D&>qDmZsR;XO%7i4}UG_ z+20Pw_(L_B0~F7@HbS~c3A*z&_x1YZ!eo}V1qZtW;4Oy9$S z@AEVW2*2Du*C3P^*Dy;1r4D-ZA?)bHQJ#!l)B-G%rV#JJ4??@V=gdVHTE4qFZ-kBz zBmxThNajY2i`(~i>RTwO8^|g=pPSJ9H$nvcNtirex(07`2VY)n)Z5>;hkb-7mY97G z9H`za-wjS)orT9y7MtSo_~5!NYXmfRVUD9N-w@B+b4xRZT*g-SAV7z7`akj+SJDssgm3>jpEi zJZL_02IrNB;G{C8C@E`;2iM(}ewx>oa;b78*wv4VBt{1KqsDpDdJ87(PdpNV>lCyM zEt8RYC&&uxGk!X_a;9dj4U2I!7{22_6jNJp6|3(v%O`6G>gc3W^w%QxCvABN9NBjT z1eDtCdZcBDdd?6Hgt;W^d|JlTS?Dl*w+KvWZsm_h)Rq}fitZD<5*X{7 zQpzbI4@e({@kWIQ)DvFpRTx?xLu}|DumhZs|GICtS9_8~-Vpi~ zw%9dgYZXsf+qiXL6~3IdnuSt#Q5D5s-i2SwJa*NqxGJNi8gfS0X-=P7W>@S z;rME(9lH}B$*o=IS-c)+>7xfMEP5$X^L=+ZDmCfqym3TUV5=%mS;;c`0UKr#GKxji zFy8U)25ZqsBmm6x`}kF&_H0CNsxwx951+v=YjJ0v1x~G$ZYhc0%euh0ofSvp zwe_!M`Dd5pIp5F(YG}gbO?GBMP+X5D%GxAq1~oK%bfaEezIg6%qYx5=wl1-=EqS!nb=hb7hSFhJu!u z%FRX57E)2^lklf~)cu#&ErRaEEl+s@qix|SS3OzX@9Sd!T%F#4Gr$8laj4gyHG;s zP<6ySXZM@N5MN`ed~dkd;(;_wk3wf(nZgY#?&HyC(jGVKq{LGO>gb$L!UMAz#^cM3 zDki+(KCn>J`G?jarE@CfLsDt?7jN-b<~FjAFTiaoy(irzeb%s~%VdvxScvs1A8Ld& zUZDpC9>03VWlnQ=Yz&jepgYLH3%?*Z2qBv@eBU*lyB6t(9FsNL5F~Zexb1|aD|kUa zcxPrfpN%rO3PrA%O)!;6~esEb()zMO7~6fiodM@yTcz-pEH zDj;0xTC9(M)0eW1-jVO?Tp2;}K_T2i_Ivd&kALszfBuzO_u=fBf9z=Xf4ih`a`SMq zvYW4|tyzDBTIU#v>FC5SXJYq?)0d^KaW`s2wP8bkp!~Z9@CmFd+42&1ap@}!%Cyh8 zM@gO(qs2jkpbOwPLT(R7X7;H?b1wo5B+BFG%$4((v-J8UdtsZ?W5FX+?uyj}oFhBN z25bwRo$996R)p?TqN=*O)=n)^)yJ2%whnlmx24-yoaKSN?EPMs2#M0r{`jX?Y{F~g zUOB`z0YX#>rW5y#qch`xHbtn@+?V1%m1KbH^~<~_mALX5!~w>kd5;hg zbiw)nMPC~M?4ZS1gyP>(?JWK{1WT#xawGO0utS7^di`OjC0?@*yrl|aI{wWrIB)5F zLvg8bEHC7X%l^vI(dKcC;Z}~7-)%RruHbi9Yo3kn0;%{$)eEum<$yo%z618~0yV^7 z^p2Y25C9l_N+ZT@ixVsWXDk*qvx|!erqHB>Ui$UDS{A|y*U=h77f)R^Z~hrE9WBgQ zc1EBzu}LzqrhiUc{H!---|=$u%hb+Nip#h;A4&vPYuetNrdg;8s!*Q4RGPT2GBSIW z5jE`PN3^-rn5cp{epTstBB^LN6TQTBMGL%Qls2%ye0jiqoq9z-l5n<#N}^m{0OE)k z{8Daw|JcyQ|FNNsc{t52 zj2BdA|Jl&lMOZeC#cE8+^o%NlVJC@@14YYgYJ=pI_>;jXB_X3{l-hr?kvKBH3*ZU& zh6SFAqpho{}n`m!R)Vn2`EwcC_e=_;_h$>28drajCC7)?|trH9nuOZl8QT zO^i^qRd|y;4@;p&)A3Sde#COd@h5ffv_Q`lanPFo@Fq+z#f*70m6G2rfN8WH8uXU^ zcF-Mt!v4i!`k`|hOks#HAvf^3Iry&fSKD z?xl6`$xrHr9Eu}AZmR+$=o#Ps(`&QWpj~aaHA;B>BYB(O_w^S><;K$Ry+f2?fglIz zPpnxC!TY;|4v%qb=I6^w7@w-{?xfYiU~iTnW5wfx{AM^oP2;X>r5d152m> z$7st4t=O!0JVE$p`5!>0z2z^a>Rx+)Pn)Qjzr;yAwO|gWxs<~Y&g6um6Lx8hI#F>k zug8Z{ehcEipAEiXK+_GpW|d9n!9i<(?Gn{cnkR+YHmP*3=_NFJGvrQx!?}OtF>1!$ z%S?6@nlfm69;OzsE6EU@%d|dKmg9P2I0`fP^7>x{F#_zTe~wg=?vChE8x$1&=E;Cmo9mDQsmYWJI!h_b$IbF~}ampWuwF~XWS?yL^kkBl~m zR|pa7n8tsGAr3b!aK0FayiFJ1b7tGL)%>l){pOt;mT?B_xpUV503q( zCP}X~COEu}FgWjAVjxB&87Q5xFV0S*fYHCDvKZ6t zg4%}NwFul$K5s{6jZVJgOnGi~PJa^bRzW<5=b{tmn;qb9{I%W4?qD*d%x}K50B^YN8Sn0j2^4dgarpnRZ3fRRxOdsE9rZSK8$k-IXtv z>`7fYanGua&K6fm%yQ}TG?BFJn%uKrd*19=E5-Q6J&++BhNCk)&P z1RJ<(aCi6M4#C~s{f^AJ_gZt$J?}c@+~@nm3yd=OOaFUsy|&uwchQrZ*!`Eg_wPm5 z%f$_>!J$6+)`^NraCV+bF_>?j=PXvSrjRA5!UAEn|b6wq<(E`0<^(Hyf zC<@eP5fIuFdvu44f8?Ff)YKrJC#QazVykiPp~V7}t>C`A+sf*zDcC{GkkCyu(EmzD znLcj3<`$l+#azSR6>ne028d7|=soq6a2_Uk1SB?R7s;#WNpPHWx+DP7-}ag2S6BiC zk;uLfNZcj!k`D-Udcz1nRBy)fmoskBWgoG@%|_v=*>{QQ2pCnkEyUCgnNoDo?Tf_3 ziOmD}M5*(_Y!IU`>PE!w@3Nkt0rvzaHh!?+*QX~}ZMi-4UiDwSnBsWez`oFYIZ-$9 zwrwG24|VjgT|#SSs_7`1vyM_4;EO6AdENX{X70_u%Hq>`bthYPQK0%+mv_L;$iB5a zp6{X0MVzRu0y6}5Y@8{g^McNy1+M<7G7|zI0A-BDJRjaDoOh%ZqjsSsK*@=sOTxPx z%4Dg^eO^646rnj)EQEt4We=%ltY+&(4X@b84t-B`EcxCYk_svS7hnHe-(4MsOYa9u zW|CioRct$y+<|O&eOiuEkxY0ipUg)Q9Sl_mJZITFJ{cSM!lC;H=CD1J>5W-^b@@)f z=SHnMxo`ngXKl%yyd3PxXnK^m#iijW&h9;pDQX(Wa66?(-F@RVYapk2_q^+cIhzhO zn`6G1Lf#ezyso4QrT~OTeHK#?0HXQ8W5!s$z`47TB+7+YvN@(UgXqYUd(PPjM5TBc z{cOFF{l55p^c_LCHn+H^PX$5>7fz;Znc)QDlI{(Z$x%w6pZgo)zf0494~kcez+=Mw_FA`%cR>N= z{UQF(&TY_4J`?a<01~}n&L5)U&%unjtjw?*P+1U;1_lQIXLtq&7mEoy*NKLL&5ST! zhTV~rjZR5|e<)flL%8j)G6tUsS1SPz8iY3Y1#R;crrM?I^)K&h7H{mYT z@NlwF5@^)Tv-8cT&#W$-srP;q)_ljq@>Jt&XKZX|H7(8&5uhNG&xh(uxf`C7k;}pc zd7?U5*_@7A^a2JU)xe;8^R^)ta)Y@c7XaX zSN#Vb#iRodDec7oK8w=h_iBJcr0N^gn8uh&Z0XmBfyYz}K-)?=pZ%+s*S*IJm*PtK zi0|ts<&Od9{D@o56K-PhdURi+n_JfGq@;DdVab2AqqQ&fMt7Q!_A+li&~ez=_a&q; zzW>#kbLzZgYEB@JaZYpnf}z_WW*!ut#_mbDmbVRZs378vvM`+j)Jos?UD)&3G3**2MgVwER2(FgAQgij-h> z?Df##`9R;d6b-M|u<{3Q0b^|)9g5v_ZWI@S4 zW4nJO|2Q-d6;SKUWfzGtgyRNfS01@aFMVW7sb@bhY}n|tn6Nm>Y*6!{KE)<|*;?j?Yg$QI5PY5~t{LdrJsZRYI+=u+!9 z;f0-T7C%~3-MNLw&9-mj`v9+W!uqyn@k@aRDVqz7pf)iZM*QHY;5s)WEselJB7_{W^ zGZ7=4Z?oz=(Z-QMio5m$ZC0v7}gWlgmdE4Vf*LH6`fud42&-JLG(p>)d$B z-WdhRSZ|AK32`1w|0p@ds~qC^7fBCqoaz_^l@SBlN*&$^V<{HLI;|;l#oB}fx`8=h)^V~l3?7>@z`eqaVRE~hbv094v*KX z6zZ4PtIy*kQ*bp^J7z}4caGMsENpyy<}GcA<8$?ki?;R*gwl!8Ogi*7XnhTKsNDU)_arCL=TTJc@vC;yCNSg=k{Q2LQ=V}KnX z3+F5oKc}#bWG*i)%~QxzoGKr&U#n7=K;`JKm+~#uyh@*;Ce1}Sr@yZi`J$Rk&B@r} zA(U<2QkYr>`VjU$lkwo|t?*D%kX|7mJylpx9;>57tW9T)4fvZsF-vH54r(#OOz#ew)J0;XR9Q zQ%wJUqkk_OB#2z#01zzz85G+HI^)pRrvJMt%+^q5kzoQ!IVm{M*q#ehA#`a(OQzH1 z+l)qBO+uk3Z3mx}AL;I)p(K9ZREg>syxnQYAMw9mWQJw@D%CkMagwX5;#Ds_r*xM@_Gk#d!d7MSp~M$6py-*gYF zbDShxuxFh_=ha_bURFAExkAuAmm((6u`(@oeF+-CuE4L!2KgDh{CGob04V!A1%2blz>LWwSB6T*sKgRj;0Jz|E;D=pS^gBaY0E*lNBuNli zzSpH>y~Z2dFs(R6hYk6R2CXZPVkr*=g&nPyy1-gQjUI1m56-s9YzxhfJVpsB5ivBy zFj|qg0^I={&}YG)%$$bJ2=2nLo0IYnVEWNgW%e)UP#hRiN}bQFzF{;9z&HAmI!Ae&QZW>U<*!8p-}e zU3pIeWADWDd^3sOk=ssLxxm#Y-eQT=#Dc`tRlO@3k`1_nhZSDS49)5We-SQQ=OWBf zOR{H7hlhrBckU|W58*|~X(D!8WK`1y-!Lz~bv?JfbjDK{Gy0yVxu3;=c@W^ zTGQ_uaj}u#PZapR7lu~o|Ek@-W@rLTI-lBn=5Jdz-ogt04h|%zM8d}v<7KAc!6UmE z3hhGyQC?}tMxl)Za(IBgSRm-BD>SbekcAYU2mm>1xd1o=yu7a1AKnFw9KRZ%V$>M8 z+FIqIjprsd=r`;!B)MAle@^D4o|W@vEdS8)`ue?$-x9I50?m>U6Kx56kykk7e-KR6 zjBc-lS9oj+@&u3quJIuHxc`gI%EW?OE&_FE=|krFCs6f50qB~H@+Wk&TT?9?ID`fH z4@L3c#j+|_NQMSsY)B>WKbR)F4@IMKug3rMhyNRCLix9ZtAB#?C<0aT!AaRrF?&Bq z(n!LBau+9sQwT%9szrdrg@G-k!#?%`z_vUJ}blZpE}=^yg>SMFndwG$*vGto33nS#p1X?*N6gtAx_58g}bq9KbJh zJ$vj68%J!EP;6homq8P%nzcKR=!Y>Xnz*Jk`5LX_&Let}>^w``U?x@>eG5tIB;|dI z*Ffr|$?wXIfN{uMca}Xuyl%FKvFfxOgdAIkq5BVEaF}=zN)~un_`6dcvlEv;7d(Meqq*A7C3&T!g?(McTy7@3u_B2L(3Q;Iz-?envahixmC2R5-=`ZQkBvyEH80fDE+pO|cZCP;7AjI7! zFFfIG0SrAllyK@}7U3r~p7KU6_u7hixXq0;5`w(;d5&WV7;a?FJhK`?=jKDoYL*}q zpHDbgx$IM(6{8nXt}dvtQa!F_Jh=oz8=q+N81x$;mfV&OYc`bzewK*M-X%S33?mtf z@>OXh-|P)_v)MHCEDMeI>d$VIy~*uTnwNVX13H3eTLnY*e28AtN^AUUE0tNrJsTeV zUe^rW%i&5kLO4kl;d`EutR zn~9@(Pf=p+tw>isvDe z$EFGpLt=x3goUIO#IIT~g8Y~Z5f6eY16hBG-x!q+4Z&W(4!D_EV=4tsZfQK7_;f)}L6H=YL6*%@~lwFhxgtm!|O>cD4 zeuAZ}A&gn%(!W-$hfZk`GB6pats8j^2rb8CBm;J;!qWahFc!sub#w*Uoo@eacjDwWW;Qi7 zT~QJFBUyEq@n->q<@PCJDH%BTQ01(aPISCrt|%k zRJV==my#b3A8Y9LHpvVY*Vt4oo;r00N7i2X&bIa%NZ^LP` zx)S?sNn>=T0(wuK9xzbCHLvFrLpDBu0^$TY)JlkxI56t$z=PhnD}sH?AFiFIgq2Wj zzEoQUPaBy0l5lmB$@S1BfSbqj3)if2aOnsKcQ`M?d@tC~-QmpdJSVg{y`di|6{h-Q z9m0EwRL|sCpFnZBw{ZjHU%Zi$xw1ML|zJgD7>&jqx6@zIX(OF z?Q=fMjTCLvJ|+`9%iEBps5l z+x|9VVw|su(v;TrUt;@zSI5nZNv>ibMJVOJuxZThCY+``+-9br&gZ1{j4;;drhjcM z*-~Nn`fsT5=I7$s96dyT1ijMZ00jDBTh>M5WXhfq(&YnMAW zx;y7I`m=ukcr)u#`MBcfX>^Q9<@Ge4VOi@*Ji-$dOsttG;2%VA!_$M-A>_DVWc%`| zhlEUrB9%O~grz!!RkXg)u#YqgB-R6Nfm@0_)vGf#nsr1wj=0b=!6yIjc z&C+X2j)ipCJeRVnGHr;21&d+^c{-omm-`z#ARXB$%jiUM?hD0jMCa0oa8?5FMLx+w zF_HPYNm%HKLLV(Cg+qz9pjIngzGG%{$&sYTybb>BGS!3RlOo~01a+6>KuN9NT}e}5 zKL~@3&Xa>q-Tm(Sk8o4$k+7H;S($-6x=Uxv!l-8*It=Gy6%MVBeb`A1<3G$PwHuSU z!6Fs}!U4$X4N8lxAir7O-4!d0XHJZVO6(-V(>C4oKS zDzHYHE|RR%ARCqJ>;gWN0}|+?0divmNKY{mnu1f>57I7f5A1LlT2|!*wHJ^qH1H1K zRX=|Gh$u-lDN=&dMIAJt8{(1h3~Q1}F7|lOY)9sJz3rb3jAln+hUkk2cCn)nLfC!) zu7ZBDV`draz~r$XREIn`1XNx7`I91r;AK(eG`AVOX`k^IX(k|sLjC0_|9-1~r(RP1 zA)1iRDp{WZg>$y^BJ;Y4zmzQAgNK@MGNh?AX1w2NaMzY?dL8UpuhaCvR=(L+ZWY_=Blj@x zAXgUw8|Hz zz90dlF3(00DjJsgkVIm zD&_)T@X5mDS4O=AWuYB$9H2=)LpkfavTmeX-wNgES3je_)6R(m&jD z{vpYi@Nf5=zhuiN0{ujxFah^H&@2(ep~;oMD;Z}*q6vgsEPX4D!T1bGx;6A1ZHP$Q~< z>h~)?H7Qw&p+=;f12!ccoMQu z1}sW3yzPKhA*6im&`7I!^O@^(EbKZCFjFlds+M&o?gQ|V*y?OoziGDi_`t@6zqmx` z9-q1GEQIhE!!FHV(~h)nEaBM1@CXWppJ1DYcij%9%xt4qgHr6llfDYK-1Qunh*eia zi9aD^-M*}w8ESUClBi)NAn*beYUrEadsi`~Ta6JS}ZhCJ7w5fuxoA+b*ky z`JZ-KAY4O|??|id{PmZHoM+ukhqm}|_TUYa-=tF_0C=P{3XHTjt8rBiOc51=w6otr zr{y=)%RAI66GO|&fm15ei{O|0nNC|a*k5SfV2;o<$+Tpk=ngoG(QW>i#C}&W8fUOU zSFmb7%~7K{c^NP7g=rZdAj8D5g|M@x?*a%y3pJG{Y@3;?nF9nSr6SZwLxm>$C6R{e zsZL`6Ef1iPflQ>x*aY(0+9@D`fFHgl2DhN%U$E?Vl;XgRL`1SbZn7Dj(LkWd0L(wE zdFKBasSK<_LZJpe`N1FnR|jC);9WpZuvBwps~_l(1o6L~Ag0NGdV*4WN$dWRGdVNo zBe6)CBiE4_ZM~+ypWts{#Zrt5@xSf>-$#P0?0l`=eTfvwmL_@lJ7}oiuloMZz@Fym zjbI_iCxOe;^5ce$w~pa39dEPi1!Pm7k$sC{0w~Nfxri3@jQL66u?+Dm|+7b^*`EH-j}3kagu2tItpmo>C3+O zY!TnwDvgya$-9)o!mf2(t<}cMjT~emugr0 zh3h4dZk2K}lNGxZ@Pb>kENaONC+`bnrBr<*zCbPaTiU_FtD8&8!Ou7B)yq zaw;mqLa-g=E;QcfY~GKus`S@Wtj?-NDuzIV50C_iN#QqYm=Ut9o$u9vYgNc3gzpH@ zMescT#luV!*fN3bAroj;?(hRr%0rWB|JsZkX&q^u*)&dK#0gX%Bb)ufOi%U$Q_UAV zF`_gHnxK`ekB&Jy0Bi40u(2`0vY|b~M@0F}(2O2WGUJHOHGtwT{Qk#BJEIG|w4u)pG#ays@>m)SwOG)@ zjVUHvvJ#GJ>Jx7c?`=e5;bkPG=LidO;NE!OT7+5|GlWBl#P^x2@7OjkNE|ES(rQ5N ziz5UxDvh5mIp5V6?(Rbl`V3`yKu%eDVh0WWJ_7L~DC|nvFZ?$-6z?-D%t#a@Jpo=` zXKvg_Tjc7V?p}N~7dKYfx!+_6_cB_oTiZUQFK6hZ@V<+_;t1te`(Dn4d?psyesT}( z27IBiM-XCT6pMtoEK}&POA;IrXn0s|hG0QqhGTp6kt!D>f~?i~$W~gP_Z(zaG;HE6gNFrzpDo5utfi@^C3{RMi&_Bo{8t`sTvrFf3`2m~{N;{r zmr{kp0{J#W6YZq$s%U|lqfZ}Dp#=l(GtvD z9>FY}2_toV#qlmTA9%?Yqn8jmM}0R0Wsp9+O|%HJZ{(D)zG#LP+a}fl!~LgqD(`)$ zZ+mB&48H0x9);FLe)Vbbf_l3KC&O1H!vK8G&TgxhSn2yb1EnxxVX9%q_ftvjE&Um zgxU3of!~1VQU;4kM9TC;Oyazw+;Md$vn-_yU4X5*7r`X`0MCDJ6}opiQZ}!b$6@Pz zZmtAk*zP@#pJmh}>#-26E?4*As%*tho<-$f=P`ZI0*FSK!l}E6l1-o$S)b3ttG{*z zC& z0l6sL6}n2`SBqk&*f%=Lg}!E%yrKs(mJ9ELPtZw@$ve+Wh9+wr_Sz~?mZBjMWs|3o zHn|(H01AnNzv3quU$0br*evgqBMgeukCiLKmiM$`blJ!QHci=8;;L9p$C~9TA7&7_ zlw})mKH#4;9Nh+3)r(w=zjoE3!S?32I|Q||d@%)(yl<#aa+;)I)r8+7T)z+I5j0HMgPikd?;(Y* z@$MA&#TI(cVPsX|s?&JwfDSc3XgKQMJDS&hpYE z#Ah(ZZ1MI}>0x3fooO@a(C?e0Dwbz zFtLv(`rP|rT;P{v5uxxj*xMdMChD0+BAf3Y7M0(Z)$qqC=tUDHhZmXO8~@138+ouj zER3!{uuoxOOWA@ppdJ41GRr=@+DhrOgB^PvN;go}f`!03Om9lHV<{UK8HAu-DO!sk zmWQQY=5yO*A!tG46<4^jYHEV4H3^z5$iH3X=t4JueG>c7b*!-^vl!~cWpwc~dP#!7 z0Dcel!9B^(>Q(JaI^O_-oZ=IfdYsk)^)knb2p85)w>l@Y`WlQxJj^jgip;;UJ z*jPghGmjJFHNHLbol4+y!jc7n3eKrxRJqV!oXKvWU0_1hIs{w=_+t;AM&WP8C8qO# zDvhW~KM4Vo)~9~-wzkf!PvymrRJ*@Zd)JniHq(j~ynz4|S%D!@KQ;|X>VxZJ2HRQ! zn@xjYbr-RvR{m0e0}Z-gEU+-MFPQL#xwBBwAexHc#h61HuRXUO&&Zk*YwsxCk*CJS z4K<@K#uuGHSQd!QbhSdTrl-!0p#oEPkc6OML<0JN3TFuXVp`z)x+rKCkj#&3WSi;u zp7J-Lpl`j*VHORVHJSh`X{|5mvup!wkt0UZQTv4HCl5EvLS+(q}v9BNY}!6Ket@X5?LHG%8Y5I77XFk}Lc${_(a zSosAzc~n5tM59Jj{3M9FMKbIMc?Wz=a>Seq6U;1pSDHRPph_$}*&kD;7pK$3njlqg z?%%2&H@i8T88i3npYsf>hQfc$GyI|IE$h{Qn&6xaaCGdNLqY#N&tQ?1tUwSnHK4pE z5i18>!n9F`E9ht8>b6N`gN6Ne&!cAQ+ZW-VY%qOC_@B*@xE2{6?_l$+@# z;%QK6YlrM8v)f)SvS;`dY1;-+(bI!1$zUiU?k9m4e_B5jhrl+51h|YU9G8SVp=SW14*WdrvF~Z0S%?fGC$|G#9BtH1%ed|T@zQKOx>rS&8Tjcoc z2aWdw&&`NwoD0}>Avo|-!~l{3r+H>Y0<+u9wrP;M=NMx{B>G$3!|!Zq7^g1GWK{Hi zn=^I3dL~)GdR{!b@H}xZ{gCCD?YgY|7b`BzYfEJZj4S*ETvaUv5e7qLY(yILGPR&0 zL^7|g-=2DBuv1KrrgF6Vui})R!QAl}o(mq=_YAT00FT9RZ*12+_9nyz#m*gHxtdV> z!}ZUd3|*nAP)WGc^QKX;q5IRJ=%=yLi4xTa=Hk-QL0OQhI1f$n(~_?SbQo;Msyx~s z`^**?luA&fYtNZ0j*4Q5w8+ixLlMgK$F@yNy+7l8jrH4Jh~}^_OMB5rF`;7HIf8BE zQcoS12Yj8%r;URV$5g-jLFEbNUTtz#7%=O)mE>hiX)6<0Tccvtll0Nyc(bT>T4ix6 zZpw4Wb7y8sjJ`mFe^pL$uA7$4Jc2ICr|Q{O9p-8|oMnE7=M#3!2ZU$(%k_rsQl2VU zt-yXFtwI(%*x6)~n-}qTf~&2N5acM*KYSO+AX_0E*za=T=@b$fxI6t%UD?Y2*-8Xi z6>)&=Kj0~Vaw{-c4c;@5M1M9G-DDw#+kqNykR$+=QiRP>9W-ocOk0s>5d~;e1O@~F z_u_cFYAf8!fz$f@hI<^)=neW2WGK_dqJ=~K%51GV8b2J$OVYt^>RGCm^f&s1n#&;d zLUMDxX*=jD^{#Fj6LT!rC~qH9pQRQ_5H%ouI7@_I*K7|+HvE>Tj!Xf(Z`E$*2hx1> zSO!o=&hUO@w?PiplNB|3NQZkFU_J^SLZ0S&9ejHLRyBl99Bd2I=Q0z(b~c6Zqc&!p zNGH8teqUN2q-;#DcnON8d|!NJx{Y+eW=Dn0NUj9go~S69r*^-NEOYeL^w`%M{xU61 zC?e*&wraVL8{hO*YcUD`frwrpL8S&%`TzjSHmU)bIxjY%ndOyV3HhNE z4OX0Rgch@D3I4)i822Su-6fm8TI36bqTc3VK`Dglp_r*8e=xDg^mb%3iHv@TwMg92 zxui4f6T7YV09Re(7F)zXuhm0R{s3rcvS6;}8ObL>GCej983vGJf^6besgbGP!E(0R zD&vn-Dv`u=&1-g5Nb091HkpA!E%K{@s2>;LB!@7=TZ^S)oLgqDw4WoYFrRouZq+I* zJN{+of&=pat%-Cy;ha$*`Xv;t$luNmwf`vp{&{x%4DWRp`>*rjJJ@egf)G-(XABtL z3vmh%j{Az2eK7?^nS%C1xa*d&{4*d{cEjiFI?M}I&$e>y_7d^Tj-492p?~-Djv+F+&-4AseS{TZpCA-_6O`ix!{gRrQHtY+ zW{7qEP_6}alid>bW!-qY^kJn#qMHrJ^bR_p<)_ol(I#hbs#^H0#SZ^rM9qakPcFqZ zjdC|-V8}uAc)l+~$h?o|wdsjaLW@LXAyEm}suG=GWva{A$qV&(UAi~HXyz{0>1)&csO_(2fBzGm4uLezuS4PZLpbX6YZr{B8ExKj3)i_Um^ES=9S`k* zkyBWcnQ4zwRCaqj{k=KQuNBwZ@Ci&|aVX2$H_dl@5JA`)NY11AwlBOSKN{aWayj3< zx4Af(34`}1Uh%Ku3i?pt$eO14w*B@LzNkhbu-tA(Pb1G`Xp{m*iGfB7g;j9XJ$vG; zCW_MgKJ_HMY|^yjz&!pXOaoS#buBs&aAK6CoK&6Z`Qm1Bll~)XnDq1R%IXBam&g4S zGK5s2_*WEwp6UqhGrjX_2+{i;iM?Ah29Kw`2Sq<7KgkA+Mb!AOLrgqVblN|v4)@9` z)eMerm${kq6GWcnRFYcaWW6^h5m&Af#`*bi+g+D39^5|RaCr-DV!jE=svbV*0p|Ok zj)&~x3`pu$T6`kvVum)~2p-4Y)S;90Kg&LD0w<@5UIR?BFA0H>kn~i?*dQ5UK-SV7 zbT(W6>xj%AcDd~>W!ZMhN7tY4&+ zm2{)DL}MlV1d^en|3?F6L+C6g7^6!&AEl=ni!rdHa5`KxEYiP-48NJ8Ht}We zfDcLksDb@|^|$;MfTi5KpjaZ%!zcZal}BC4M!|c3v%q{h;VgdZfFEUA@kU5u7XR*i zq2VCeB}QY0)i#1~X~%^8fh!U>WgBj!@n2~;RpRp-y4^o6}NFXsVg=f2H^gc7IZl!afi*7YDTK$0B&LaaF>Xprvx zeV#>rGT`7NFNw(5&84U9F_!p+PNJNo-aB4;?8D}79J-)rnx-L!@X;S-CW@xWnAdCi zL)G!7s;a
&~@p9am)G^HbGQvbw24GVuBD8pgiyS!h0kyg@KKpj4W9L=N1Z_Yqk=1-Y3)A*x{}32<|`QvWC+;2y(x<(Dlj_D1c<~gxfS_B$lLV z$vCB1TJ#GTqjPDVfZ~;x)hn3|Qj?2Fe5k-QNk+^`BFXaEAxdQ#GI_#EplHwwjDF(5 zRPC$Skd!n~p6TUS`WMDL`g%#P*6IjX^cJn+=Ymr3x=CJw-yMn4w_lJe@QTI|-iC#G zB$CEs+&V?_gA?9L4yUYoB&D!H?eMW+CGGqTs2G1-1n5Nr?~6qKucu4}T@}opEm|T; zeK_kfO_ndKas@bz#b#Hd*E$kM;>PHW({u{CSvATk)>p9wK}y?=Uj&Y2w`B}`965pf zTs8=J)j9axW&1-XxrX1l6YB1kbRS;NVI8}rL@f(oG=jiO+>$Y1dH3)DFfY`p7wTzH zCG#YCyQBTAHo--tUSc13tyWg6pmr%?!B~N{QUCE+@CtE^Vyd z_|40BBhg6M0;Z54^wT;N9l`b+TGAUFO$WCsi{1ZfFiKSKL!peZfykA+&)fG}Z~See zq>6cJ45DH6qF#r3hDW?eP9%tyD8NeeF8CE+u#~!Ip>az=dZCFw2Iz?;($A5l92@V8 za*uA}{F>1gF=&!L*tCpS+(AuSy8{Ie2!w@q=WOnKYvFv6u1D)`z*=Z17KPG-qGR72E=L1Rysmu2i%IRS6T~|qyjG&WL{*y>k(KC5EL{n z6yhh}_2%zh(R8gj^Nfr#9_7SXKoRJlISpa{9PWb1~~rpNna z6^qDm2($RgG}Lk|qlZ0}hYxZzqV(Yox`p@8;mMM@c~)knw55BWSCr)0xnU5Em#{E8 zlYZAUhs#&+eg>R>yFqH0tX!2pYLPG^qB8Mx zA)U4>SYtSTtis!7IoaPte=axIw!pGjt+lB=($yW@>;Eby)Cm`}b$G!Bj`f~!1e{Q( z0emlFQ*fKncCd-QEmL{f{xg2vv2Nqy>q0MF_|jRzV*}c`w4F;k6i8!hU%~~7v%@Kg z_}JrH#MtATzsIR(0!W@9t@8*}HYX^f+^aNS)+(@6R(i$%qIhRofaJ!vo>SLXAn>~G zLTKf*v}s)45*S3)-YXu_OOL?w>qNy;G3hM2WMBOTp(k%6Q4(6Ydg*M*`WD~K!8tQs zj@DYb`nuE<|HZN5_CbN)I;oDbeRR6ErL01jtFAJ1)djx?A0WJjAeY-x`Cott!O!;^ zVuAPZ{wLs~f6n3{da`SPE@2Egqr{n#zWzZ{`-R!PuK(>;E?t>0?L_e@U#%yMdir8c z4?SBrHJ%rcc3WKFjhfFLuQX8TvMV|uRi+L$xyCj$=vOWoZFJmDsn=CAFM?xGp$`8- z2Xsq{GX=_67r$G6BdEQ|AX#ddO-8seVrRZkIoDaqSMq|vUXt=3!hL8G0!X+^_{PP% zUC@jQ?ETPBvAoW>IrA zO=LI~ZxN(9xz1`bhI=Gq8h`=oUXPO zi}~jdm$-AT94l?&M0F(2A&aqG%pS;}&&46b+ zl*~m`MYw+9&cdN>j%zc%_iVPDo6#tI#cG?>HJ@jj!mO)_n%|nHf~grnS2Hi+JE*^# z@;qL*mb3;nAzHZyN%VU21xmiFq`B$)ne=;I@E#3Q!6WLFU-j;b$4{ppUixFp7(W4G zFup1M9kS_lr-gjg8>%ezf13?6^z4PgI0)}P~ zR#Jcb`jfPAClj&lCgf6nx(sQ~lHc%&@IV4s%TlSdZEB5hI5dw6Y-x*0Ka6>5feq-;bpXPsv}+fi0@hDx9nuw=KJBt0jLRCFzI-hAZ!4@ zI-(SA+3uH6V&XSnuo=~)HND*CQgVP@H18i?jkCaU6CqsF=8^E*S6+Hv+$_(CW;EVYFGSovIpePV%xPApaZH6{owE zPJJcjoKOj2+FMM=6WiI7d1wStR zbMOkYW${Hkn+UH8l_2u2=xNsas1Qrgyo7sK>VT!~!ThpZ{6A18#-7)`T{poan34_v6Q_yoMZe;(-N{M0u|TuWmgTloc@A&?U7G?NGX+N~Xw9!+IBY5G z2Q9cR${^(PAGo+|bTt}Q@AT~*flC|nmN*?eabbHPBd4TW%(@fRv>qwGP_?)#(iOd} zdSj5vWB^-wZI;{`wKsUV9Et+FkHQkwFlIL)x%n>ACXj1^_C^H>7W2*9f@}xJZ>tfy zTK}6zbaFf%Z($QCs2Yi>nN_pX#k?pRG#{)zSYo#DqkE-&5}Sf6lTHT&x(sn$x4fUk z62)i}04z9zPhVifB%SOXto&eJL@<~%h@2w1i}wV28LYA&Grn*`U4MX}jA;$$Gf8ue zFthCb8&%4S7WjKw3I-PW?}l@FU6spA3MeLHQL*FoHE={HvxxN)lIDGtPy61>z$Iv59O!G%N^;KpM}TTE95>%(2sO zY6nd1k5k43_<55W7XzO&Esy!xeUp^6-&?Clh9AQX)fed2vrh$@@gB&Am#8#PEQg%1 zlvhf|F#X4r>^(De@!Z)P&JVH9hEx_67eTbi&@nGOS<9B_ST7oeFH(07&-xhr`p21} ze5Lp)iZHbxrM#=%xNk1R19w|BIM{K{_FIG`+GpE?+WJoXmhyQsW$s;YnRbIqxe`FB}LKNK;*Ss+_m)ytE0%AFhzYA90kpiYr${&fB$F{3Nj);&x(Gyz;)gOn$r* zkcYk8nGk0J1QtjVf+H4Ub&*KlQPiK{ep(-STfQIWL`=j>Gho}+JpyCB*kHPU+$K-; z+l!-wuh(Nz@vXN<)p)oD52%wBHNLVy*8XgqAzaIK+12vu(A zSHFH^-`>t~(&f(eLbXP)dhu3QuizQCQ?ILg+>_(4mDylL&SToM2%wb{|D{vODEbs{YWeD8EXjRP9+s_E4cPOnWB%2fdsL zPzmL~K+#p5bTyg4$YZSPB*h%``S^vSRo(z$v6vI1SJQ*1Amf%^?aA_ny$pjKr4B{m@iu-PtHc@ zKE|fQluylRrkrYzVwQaHev2#*Tjr_Sms&SeE^(icOT;v6T!tY5gi9*${4q1;js`~m zi#}#BvepvwYj`vXUwcDh7+`{=*vd5?)Q$BP+sfE1LmLj4g6(@9|2XWP!>=P8u3G1L zm7AY%!F*rTY}Ot)KNiH&K)tjZyZNEnpOJt8pyviFaYDOX7zj5(WXy&rp&b&An@7dB zZbF=(qYmUEw|#v6RSnPy|Ud!W3@T6cRHce-&_as2Nfiw>3)t-NU_6cyrk0 zJ;qhIR22Kge%9czYCP>vRwB)ukXVU9_ukldOcJ|v1Fn?gD^PgurjkDh{o){AMYY~f zN`V{kr>Jk+_6XEmt-}hfgjETwniqv8AHiC`jSqe`lPCJO9`Rrm=OdMaLZaqOg zm_EZL+QFu_X^&=4_9fMbZE0#|Gg?tywYn>DMa?UV=YtQ{`kb;}j&)}5#k8Y5S8m-w zFi(+PjD^R+(=Kaag}vqiIZ1$&%?zv8Z4szS_TkJfIJHCoR} zNxK_X;jOsHc4Bn_5CiyNUHx2Y4s0n-{#!-s zq2tWK*mZFP19n2z5P5E+n;>+c`#6uwSk2FSD|>;*vQ)V~mgm_Bt}yO=!H*2XzSHkh z>AuXVw#kW+>rfThP^7ZetLRT6MBcK8E=$vicpr0Ak>jlRoT zi@!a&QX5B*){TGr`ZNF+5Yl@%7whqq{+gu!p)N!N90^Qep{r2tf?Eb-{iKTa`5z^v zE@OZx?dsZKlG|yQC9^viu=^k76$U;Je5c9HZno?MqR4kF{rX<+UYor|o+p8_pu|e4 zzQKE|X^YFo^BxWnAh6hNdTr?9Nx9O|#r-ehJ1~{0008{K6ax4^U{LEA^gJxX&ab(W z+<5GL;c5dd9nT-m>X20^?p@dAJQmkn-pdr1XT7y5#db)>@h$x5#(-h`GQLGQ*>LTn z-~f?mF3%+9XXO>2s#$oyAW~ywMj8_^?RqQ0jX`{N8GkSSZnY>7!7-?MvjSv8DKFie zt~MPJD_!nIyohnZEdtF>i@~X!+cGR8ckC)vDu*E>?#%_C2WR0wx3UeQ`n)K1pj!ishwk2nkXGeYBQp zNak8=E=$6X2Yh-F3b(WR$C_8m*Uv(`8v^b%%Jf~^KdcjrwIq5%fL;ZjAGEGfJw14M zqVA4W7r2nRHuuvm0UpjH<9vDt1#BR{e>C;zV z(7y*wBYEC~BvU#6!R3*sC(hUV>n|_$SgDIS4nh9n@H`_ib9@gXg+t@9g#P%zeqVn7 zWhmqGh$}Oa#p)H1jZ)d7o5bt;Rg`D;U@r$qi7ZSsrAs>uEKe|%hZh&<>MFZN`44`8 z+V{N!0Zjc{trod3Kz00M?1Vpx6GwWBIF?&8K;>OWPwcOZ1g7d$=t2VwbzL}m;|2Ty z#5f*FHjTnO@dHL@BC{mGpk_fQ%iJ>2Y$U3*(dWwN_r!ifJo^HvF%%W}ESI5xA359YcMRd9TrK$$lA+XpVp7ciV}+4uvG6l`LP3Ibv#;D-75Krk`qq>+VCMBnDe~ zyBes}Tt9gC-(_xH#6Lkb9(w`r??cQ}UTF9l7ZNHYbv=d-Bj(G!ZSGS=Mvq6iIR+5( z%q;?TZe_XAUwp8o0)S<}yWmA*aKHP06rT5fC)Ap{7tyeXA4<(u;%(@wf=GW^u^-d; z>FFn%N3G7A1cUMGH8n;)TSXRY&;UXGmbIQX#4dZ3a=Qhcq;gAjkp>)1_h_Ho&Lbhh z`~I1aI*e1~}*1@Z^Gk2QJgO)oWm&yu#E5hRshUbtI$_v0VuHHS~-I{ayQo2BPM=g+g% zZ!rUy(#9iV#FGwV8@=H|IH{2se+WY6Z6=}zH_pvQ3MA}}GzI~9?eV<(qy9e8e}q2_ zP;|a*kKZGk_FT*Ea(hO5`9c-0D{oi()+e?2Z^Or;L6nydR0Sp~a~!a+O3Q>*t7NVu z^G2z_TLsrlg3GbK=)E}0FrQrhd=sbfHK^g24LEyS)T_4VUKlbhiE%=0$4Ac*F4OdT zVcZITX$1^Typh8<`hKmG2O5xwk^m!u!n>~FzWPqj&Ixvsg4;i*G3I0W94 zyG<@V?>q`FKGM=}k5u-5y^hBZ+lNv#`3mu5T@Wzb#si+?Cctyt4HbGCgLnf3gtrkn0rd?2>kW*-|W;myMkHv+mA@5^6pF4LF z;lq#j)>W^RNjm~2`Py#bnZ>!Aqxu_OdBUWJ8ZEG>LlL2-ppnB{B^GJN+m~wl??=ro zxJmYvJH+ZcX>VN^8&D5$(RctvfU2ddpeI5S`){nhChnHQ2;E5!H#rJTsJIJP-VH z6dwiP3YbzmRzu<;-W(lECWZrtA~>lZ_Mt&|i>OwG7H-B6ZJZd644A?{r~>E$lPaaM zYWlKQA2Dv1qB}~dE|2g~BE)+dPJ}CE)Rf3k>6n-IbJtd*tnf&~_m^?gUs>3w(zJ6G z{?ccR(j%=oUb>j5TdkNr-?-A>=oj(QQp@>8v&`^C6kk@*bB|{1enS?;SN_0g9@fc_ zeF?A|PdgS>`BgDdJRuW*x%Nk(JjeE#z3Y|DVEp1daZ|2)S@?j(KO=yls#xsN-xKTG zubA4^9S^Y0W^&rcmzlqlQ+GC4;9LvFI$~P}o}90VXUV3- zV~3{B4wq7gP2C{q_KnQJt5?T@R-RF*k9zHf-H?z(Owk!Vx$na1yoDD^rR5Kn*~z`y`>^B)?gMLV!^5%Bnsi((JVEHXsLlt^o&@dtymxi`x^g+^P(Oq13h zLgC$qm>`eT79jivfYN3;Pv~s0P~l4SK1;wOToybCc8bOh$Ke6Qt%twRc!$>np@@yF zhMw?t$2@%>zyZRb$i4i7cS*yZ`wL#YSJM4xcwg7P(f;!DSvV@Fu)Ps^2X;U+WBjJo zqV&>?$nj30imAm?70PlFTA|%mv2xI9tcp(!fEz8S3bMlgDXOCxqccCkX zl;p_p0}3d-C>DoD(2x)Ll&dBgf!^8PU=}-{movg8+B!A$pho^ft#HJL%-9s6IMPre zd?Sc1{4cz!9Eznszb3uZ;{{A{mcG<@@f;Nb?Z;nhJl%ynQ#qAdazv?(Y+HG8-fRjy zrNzVC!SS%!%~JJFHK!QDRx2Yj!>U*U*8NPo!@sP_6V&04UblnLUJR-c*H@qgeE5QH%xl zn?{iXUDM}#Cn?YaF-Cy7WM}YmdwOk%z9lR66q#hoQ$%UTd2_s?F~ktTNef$n$*;Cs z>~5MKnFLI25^FANF-AUuk4rfLEG_lG(!ftCpv%!dgo&AXek(3p3Fk%?C?moq)~rHp znJ#M#n@rr#zDn1o_7UDa$&X~y=pk18>mht9QgWBXUy*HU6%0}!B^ z0kZ81@V;fDaq)%T0Hbrv<4SL6d1*>$!B`ghROHCF*XyRT7Pf1qW_>4stRs;kksgD( z12=**jnrC{?euk`eG5M7CRd$0Hu;niOZgY8a8{eAW_-?4W&`PDS3Lp0EYsV3)}$1@ zIM+4u>!oEaD?I=g-)UHX-&SUKAP`HC7zV5WM$D|A6kv~ayQ)j9>9I;GqvrHn1f_Xj z=K*Tm>FKEx_Q$H23}(%7?9uUbX3Z%014r~b$TB%vXNkTaDEi@@^szOMften>|0VRL zB`tV9in?A{?@wGp2+=cIu&%pGx`*Sfz1~hn)X1&%RK}O}RTYMW?!bpwC6fo4`N#w? zg=`W5AxHy~DV{LAOp^d3RXu`N=);{s`Ip}VJPKay%!G9;8xkC9*5=Z{zY3ISR33`A zT3!p+ms^u)81LDp=WQQ$p!LnP@*DaYkORK12Pa%TX9#f27Refe%+n4yIgPfRzTd$F zY`yq$dA3ji8wbfbNZo-65!?+ui;$lk_m*yb`*z$cQoERADKGaM|N7jZ68no7C=fS* z>=Yn4`>zh+^gQOh&|hkZew4M!rz80#C}>Tm-A&N3Fv^*?oEN+DDjZbw2+%TUr0uhT zQ}_W^_=4+IJm0W8IXMsh-RnnMRf0Qst*)*7JPx8h+w9uLkP&&{1$ubMPQg!B`%t3~n3{F=>5AYJx3}1->h%#xF*JMQl^U3sN4r8>@owPE zSJ`By9*E~K@|@v9$*BFV?osd?*qlyQ==deON$>EN1%B+H8CEPm5ITp^XUT`w_m~a- zckITGO(G%+@zk~#fA=WLz1~#67IGrqzpXD^2uuOH17UNRfLWjuswS+BoTnxlSiS8W z*BC7h6s)0zoiQG8?C0rvJ~$jB8U7xsYT#8NCq3OJX0zO^Qqd_lD`OkaMO{%U>hC3Q zd-5)=(uE(7ds~|xkw^{0-N`?yos};3djMO6q2hlKNT9U;L=ZbTc4~5!e+GL7um+K)8T+ZpY}T)z8hk}> z8A?@v@C*Q$AhnZB^v!YaoqmgX1#Tz>&q5k0cR&2*vo)vV``HwC(fTKiQPj<_e^^cQ z!9IZ`D!%^_H_6*y;o`sqf23d`3tPKW&w zf#tmUaV^{h@n|~Jqx>rHBUP<&Qu9xpg_;-Rjk(W}%55XDA1`baaq^MbOik=9Tz%X7^bJ;K zUuuXIIjE|k=6NQr)6vXzEo|R6PeF-%lDHH_fT+!jN3agJ#@~VZZP#Bu z^V=yyx)ZLZ*;(Yl!$`80B-3?qH^wjjqd0On+_6xk6 zK`}`9h^^idM_D1iMNf@8EO`x*XO?cdV+AlKai3>GEOYy4oEiOv#qzb&fYoqOy2%4h&%ZHA->^kw@ zr=Qc_@kkXgb2vD_&?uA*Dw6kn!%pxcm^?m7PsH`dZ#@A5kMoha7~4vg%x;D*9EKed z#ZAd~Xs-k?syBY=u31{G!cfTnesLSPx0kQ4?;( zHJ3o<+9auUC?FX-ktP=xHwjj4u)Z6Mb-A)(lg0Ks9(p>Sb-yxx-<9oBS8SJ}yAlDH zjpHMeD~hbCxv1>^%Iyum^2J>On9YK1>Q3_#S_l`H2tMi()z?O zGQZib&-=V(SmykU7`rQz=Wp=9kp=-)UF^I;8&uAH%@{Fgt%~W|@kj5;+uH$s>B5V5b2=cq!Dly)5UJ>5MB0;+U06=Gyg-0OG`bBK(%e4yTy%w(t z7GItToFqF?%cGz#rGKe${goDE@tToVfM$Nqk6{hiv!f0WfYWI9&s$27>RUhM{L!_X zuwPa+mM>E|*#P+z&`E~XkeS$%G)iPUYt=AEIybf~Q9s4@Z?;+V(zp=7(CK9F|09pN zGq5wBPE)_C0?2hR^-rz?1Yr(3-G7&YHveBM$e1IRQUvJbMnv*bOuLW}*Etx>=pwyn ze31wSCv;{w8j=k;Q7CCxDlxmv5J!(UrrX!A)U1(L74Gp{B-hWhcL@$O3~0u(rVpfV za(v3g-08{RSs*u7fu6 zJ2;p9^}7hVxC?B;^F%==_+sj!NoyI5&0X`kLlaG8Bo>mJ$RRl_AbzfrY7sKSk$zIz zKL}G<97cI$8>v{ZI?*F*iw(<-Jo3&ePFw>-0I6aPMl8s$xPiWg^)VZs$@WNws5z!a z8On*cqR+odYUR)1|Dm*EK_1LP#JoW#r@#tiB>s;=R(=3sy>`yI5M^pu|BsSByz0CV zUV(Kp3qQZ+3eF}(**Pj0L8p#YgZ)sMa_bRlvkhXDh>*?jzcQoz|ENq!*?KdyG7viv z5kK~6;%{Zji}IUKH%&LN^NgF^|EyAp^0&T^INg8N_i_1GeIMihSA8Ee#VRB|)?sy9 z?x7>zD%6iwh+oy{A_&9psB##uUpxAVkRVu&(AiXxLhMcs)btx?T3y%eUwxc8Yx`)5 znP!e@VTTN)tok;h!uewm)f3ftN%$VXObQNg@wR=(#fWdhSvPru|= z(od4>lS5KaqAESrF~Cmg^YC>%YD*RwqoZ^1E)IN`5R ze>@|zhX@aI@h7uMSjTB{`8PU%=-@L^t;;ixiWJ8oYa@lcBt~ zNPM|Mld{`E&uFZOeeyyhztBb=1ZDFTMzekRD)kZ)#SYBwf5e1AvS zn@5UtO5bK$e$KykMC-^Kn&B)W8gYWM>IwvDPkfwyw-_p|`W+p*eg62Vrs&d;e8jU4 zy4V(Bsw$A9%8&BKKmzPuIe5v!0^wZ1*;Z_+gwc$0@xJ7sz$vli+0FR$y1Pzd!m9*a z8S6ul#V%He<&0DJaSPhTw>^saSBL3M!#6`BG4F`tN=vWbHg4TYI8zwwQt%QmaSoKU zwldc8M$_ABTj}muhF{`B!MBxGV-BD^Ukf<$UX@Aq*LUT$6EuN)2k;^X2}SqOH}5~z z{q(LrH=&ixUc#o9bCu0d_#lV%j3xQa(smtoNCva1ynfNR&^71J0seqt4tdL-%6;|@ z0t^~Ex*1z7QOyD>=D;t}Ox*SDFnuA(ZnPOq%ID~fxv7vJksqj%2PHA?8h@ACB2+Ec zoifKi?l0f|=t5*>cKwEzxs&NoINwK%9#L^k3Yz^<{OU3)r|8-v`f6w3XVIA6Z=YAM zQ@fUcJC{7xZTq}$xk_^tpf9s+eCFCXhD7mlYA z8L-rW8!GNB`g=a1*XE1!jO~ukcAR7G3@Ys=4aqV&_PaBpCkhK+r#P z0#NmT;QywbR1G&Otp^LIWe#@4M?Vzq1sbmhPnCRvkgI zs60}6E@0$NY*Ixh&_&e4x3WA)1Ad=64501>Bc@>5qZ?c&t6#0n27+x>D7Zp?-YCDD z>m6pya#TIC#f+GTBNT6+Dt-IVlV2)M^xd5b-&4s}en}Tqp`(};Kb=@K14mgVltTza z7U`Db(9NjIXejX_#xt5I{)M7WX7`&*Bk396r<_z#$&SNRj`+DZiIMNE$8F?fqfY;; z0FL1O69L3k1u88(_vo{+uVJx?X%72oIdq(`^|kxS3wZ|OxAbQ~RzbJ154-kbnJVL+ z1KNl59-0wL?ST}8S%MQr5oQjb=x2>brI-5ME5-Nhg>1`Lx*61d^>4h-I?r@>1E&re z4*pUn{~Elftyh++4GN`Ui+pQy^XXBHamdI-kbo3<_I4ya+`XxV=7|J)-2KbM0KFgK z?KoQzrY1BL@w+dDJ{PB8T+xLz(f7mR@s&zBQD90&Q>mv1$MB!O>s(NBh677=x&kR* z5RSLi6DEA-9npN*sZgrO=|uB~CMSfPyYSljg+q_#8vP$6jijU&HKy^sHT&#vEi=$O zP$|Rw>{^BN1fG`?*ms@M1FkqaENTL`W@t`_Fb?nS#XQM4yNoT6tZyvk-jh(99`=2^ zbyFpr=dM$ou)|c9Nlu^PAS;2?H`-lE`eyAs>f_R{H=`E(w;Zby##C(#LzmZ| z(AOTXH4=R?in|MdW7>B(gnV1QWOf_J(y)5CHM)&>QOua7b=EP=sH7c}Q2G4M;Q-+RttuR*a_&%dgtZ|!@ zn1KN;_07ZM;_X7zFA87#@M|8N2ny6-`4*CtjBqO?g)K2Pl!U+jHXtYT zr3y}-Ws4}O?9j{14j%f`#BaUocIeHCMWd{nXfd^nKL{aK3Z=x)I2aRDp4k5ib5SA+ z54xMPI-lDevO>K5lY(_e9W`@Ta5rK6tuq+QP%l!Q8*-AG1gRBtL(L}?OV3$U)=TVb z@yk{I!f&F_e zkP+iBP36OM(92lzzRrD|gC{iUmuPsI^+A`z{`dDhUepTvbD|@{2Cr}G{@6Q#l%!l) zE>L*mY&D*KF-_`=sus@`r$cvL{VcsAwM2Q!N*LLMYuzXjeH7@C?<4))M{9MGDy2O?jo>$j{c~15G*0 z-#+6eyhGjK^Zni%^`+{a#33m9I&{SY|1hh1xURNoKgy$SQmt6fePi$k75>!SUo z+dMN>sXGg<46JRlGoq zM@bF?;qwEzjXR}}aNHNo4x-3ZsvP0+(f+XnLgvJ=dKv2tE;3j^mXm;u_$HC}V06sZ zZ%rxzzf_W6(pa-GcktA|ei3xaP7$1-AD1f1a9m4hI#jJDtvg2DM5r0tnX-uFmd@afJdPOnZrFHuQ`4spC5yTSj||wjtyJIT zuA#~D9P<2o34i$B@ZMRQz5uZNYnm6<8Opfe&P377QQe`yJtr2kvJ zPXtzNir-Mvo9R=R+D|tI*^bSL5dtC01j!s&%;?L+0%ngBRPC8eo)g4wAoZ8?^0Ly4 z20i|2I|ciW`t%2?jm;ZOzc-=P0)q5b&ZBcx#yTxs;rb}S3AQmv(INx z_Pj9!=w8zV(!{>S$`$qh`G3+$ZXgktGXZIX5kLN*KH{blVec1x=E;_7W0TkI*o>mC zmYrACNh)~b=t&z8_G17mSl)ZcD zAx-ivblLsO`EI)EaJym5!5>DpHBnu^3>ew$f9I#P;1l8J zwG>&`_@_wxH%9#%>8-czbn1$)Z6l>8Fpkz_h@6hp3Fr2|=_!ttr?WSo5u*`G`LWQ+ zdi(zYUkC&wNUJ1J;{;HIdJnz%b8Te>WD@1&E-RfBau1_qcQI)!l#%d$h6XRCHCGW2 zE;H(!jCjdIq5it8)_L&N(rr!Qw_PdA3jy>1TAZOp>L)=ZM#Y+j)?M zeiM5t3cSEs`SA+H6Q%w>vi=O-krs21&10>8@K|xM++Nlj$(Q)!T$d(|8C=>RTRnon zp15&1=nHzp!fWSV9mNFo{nK4tL5dv8ylh6VbDw^;&o+>VKCdMmvtvn$Vh$4gyqToU zDL1iX^&FY+)I1xdIZZavryrt^?cM41qE+u@zK*Yaz7X50{NBdM$d&N{-aAZLFKgw@ zc4=tT4f|5_TAIi+Kx7PL)}u))TTNxR4Cb0TavD^XWRv8_uyG0%hYhSz%7UcMXRe7# zdUp?G=bu=in_d;L5D!tJ=|N?~l3d;RtMIMjEv+zlLsn51N~ltmaPs{2^2q4&#-sx(ULM4b7{Msn;_W zrui);QG{P*FCJANA2)OTJ1H1MIY|xA5sLI7iTLxac20^}_FFW8Xf#@ss2#;k^mHeK z4UOo_=93@|8Nb)Bgl0Dd%)>zyQ`7}%K;6UNt<_OGAxH1P zk=g@%wuF9~!BKVtq2~5I74wh}IpX!XD_4i!RL@y7+80$O?k@HDHux#6kue$I(P4Wx z>_Z5hY^fVnF&ba|4!TZV_+~Q8#-NCC(PHac z*%nLs;dXD_8*v3Ua_&x&XDNoaoVbNZPst7i+Ih${x(#(xFef}2o~O8?k|=SdjV$gS zrKgwnr1TK7s`%a|jSIXqk}o8NqmDskhn_!6)X*`9$?MX~J3^8RUMp*jPZrR2q0Zy3 zrT!{2unDmVcqQh)5@EiJ`TvpjCSWyo-{1I2v!YQcq9_%`nFnKvgd~JA<&36CL{vJJ zF_IFF$5ffiSd>|Y5F)dT$sDCj4U*oq?|t$+yW8*mzt{Ee`&`d+UEgbc&fa@Xd#$zC z-uI}qcGp|K>pPbdI%mZCF@u&Sf2>%0_EcWV%gE~IQE%IY3K!I`yo~&MX0)nQf|yj8IMK z+M4!U_?Z7|0Z!?BWb^LdtLyHV3cNVZM?w7cMdqMtZv~EMYth z(Yp8BBhl<~o0`qGtE`s>>F0DYoq5h-&kDAE{pF6+j~Z$hDD8_@>^9F*Anzsq`L1*0 zY*pBe);A5%tEgr3I-F6>n%(+e1+6heK`Zs5RlAO1^H;CZ%Hk(Q7%!~(kr>u%SkZ8| zp$~@-&zjmkNi}MZRwt!)j~)eX-CVr&`5wFkk1f`##zv1>b8pO;-?3qxLeoz?j^t>2 zU5T zlk%0PMx8o$Wc>2R*LFW^Ht*1SVwhb!&F4_>oF(vnU9J5oU0La3zxt)ud!6eT6k*gk zIym5SU6)&h<*#*Yu7zu@ZL~Vjr{-qK)hhj*%D9jy`wk(can=J4iu209KD<~d4LJN; zW^}wt=guTQ`%-vPep>9&%J~+eH=YjqJCXx)qU zC^9T4^675lkX6%F9Hrx(ZM5{roOWj(TTQRw*ss%FRT&%NwcoCWdLth`1i*aP#ea=T zt4_y4^=yUUPRvtc+aWb#_QpB+_gB6T_|kB{x~bywDd zTb=_w4bm!(k9CbdeaLiGhEu_a!1zm|{$q^N>|Si|+MOknD&pFF9TM(7czfXHxaGQc zm2u1CBC<{XyPBb`{n|C{ z%TCBX@$OI9(Q`(oUEhO6J!4hVmMNcdYkUfytvRu6;j!Gya|;?b-?h6m_|NmO(?Z8v zo8%9A*G8vV+zt6}MZ&l~YXheaOx!qOrC#Edg9%ps4mUb0PM*HFpzDLCQB5Yw83#V_ zD&IhfYD3xX7mVBe>s)Ov^8~L056*acp=T%8w9Xxq-t70zsnf2W#`tMEq~Q4K;rmYY zQucb8-($|tD8G%tao^6o>JdAH(eK(e#=XxYjfN=dFQxSLI&1j#eP?)l*}7)9DA-vU zop0ErOR)@7TwTiPj=UGpxjT6HJ(d-{NTuA!p?#@@ef zSJ3Zyn}Qv`^1lt|wCA5Rz8iF9L7C`vb%@U0H(|er&$Pe(;Y^8k&s(WZH=fwLoJq{G zADPm5*`N_oJvCiUKC@#@0H zu(wXRo~qv5+AsmjmmyAEv; zAdZ>;e+v-P<|I~EQ#lN7)ls=fp{LhY&nKEK z$-b<&|GiGKmG0}h8 zcKnjkeo?30@A!sw)6<)iE{lbTnn6U=ia6#2^Zxcdhr0JnFu8rJxYzZ#iF=2{fGh6%iGP2}&xDOmPX~ULr8#Yf`pKx%qne8z9E4Ch+7`|cV%w5*b z&hKLnUdc$kn_;8f{^J3aLzaQFDm1pOtNn5dor>F4+1Y2J%GcXzI2jb`2xh4!s+J`g zcOTe-*Z(iU_&WdKAp_JAcnU)`@P%F{&*|A7MUrKb_OV}Q$IkR)*qpV`vv8R?W=;IJ z@53wFx3{feZ69>Dy~PII9D5y~rO(SIZP_p^^Az*i<)Zg{bKhvEC)K8=+c?+{FHO*Y zS>3I2Y;Q+-K0IuH{?)Bc`jZyM6}4$~FT|r_o60M>O&^c>v0Q!A0dpl&OB`bTuNW5$ z7+lbHw_8|A)58T%wCtY^9NV*G$NVNe{WE`Z8gK~R3irJSnDLG$4ylY4A2?SPH{QbNA5dUTl{sk{~DvMj9W*&hK^Dl zOlf1UMA1U+{9o*gkUPZuPlPFF%0)b}^u?Ir=#lc5GY7hjE7*F%zI*F#CGmA0v)lFZ z9GsD^S{;(QcCrs&95J!neM;Y`>T8S48nl0WstV)3c=*G?ppyf9w z@qEVU6^kF&JQY_w$Ug4JI&tIKIA!K>qvH2@V_&+=wwkv;w0L~|>sE_?ei5!^e)F-n z&ArK4KF@1j(V#?;c+O+PIbDCG-I_BY?`Xw^U%TKb^5feVFYBGUu%Szwd+%au>UL2`)b-1(FJ)7undb@A+zmey0 zUa1$Ocjrde!Kx{22WW&{dV%!>UCB<+q#^oHw!-Qvc@pNFtzmSc%}W8Ti;x}dM1iHyXMXIj?n(H zYV*lT#`lV_#N!uz%nUP4k9&EqIq%!fy}a}ud^hh*z``N>JZCH&Y|uJQ(AuDb=-enf z;koHzlb$whQ=NH>UnHi#ui0O9;>zai)EkrI@AdkjQN&*cvNrvG`uq&Y{v+W->F|&0 z#V&)+_Jp;uxjF2k0WG62E7hIXT862iOT!t_j3Q+FFMwJ&9rq~07KGbhK8Srimo zk?Jua&E}Gx*246kdk)MpVfGZ|mCAZnX>DpsY5R2V%F1b{i;u0F6p$bMVNBzncl$oo z9vPRF9b7&(G&F5|X#RqQKmR-)wY=et@?ll*uM;o-ObAF^QgVZaVv!@#>S-y<4h zf}ce;EMI?(*JoK9zv&HThDN*hN;`+HiGAEcRuT8;8R(3x@OLRRsC;N<+X7+-?Tw` z#?E1)Fz&61j&kFlqE*opw)sba{R(=SLGx&YpQ~ciG|af#$V+yS0gU*VOd0#y+uP zn2cpSe#@&hVg9J7*p{f;u`u}ecawjrEzCOZjb*~$~H`Ot6 z47J}_w`z+j{XacR)pWjri*}ung({VA(BHV{!$$WeX=RFT zo<|?mErV9=mD(QhMgG^c-WgxaTF~CU_t^FGSN|BzzJG7nnljr(uljqPG}t}F+U1hb z{nRa6gC=bYS~1w7)zrWZo40QGZ_D`j!_$6oSyAn;9^HS^o_C7toNX}qe$8z=$6Ua-aYjKa~=-A;m$ZysPleu@{W5s>vt9$ zkKW8TOFS7n*s(yM+Tmr`!2lhnFTLuWrApD(`WJ6Wy@4OFLX0BE4>Po&VnAiIb;Z5WA4g z>*DF-=?HzF{+rxt{c6vYMttd4`zNgU)Q9H-zC_*r-oL7?URQq|X)}Mi6w<{eoE*UcB{;9~$VY5G{r8fOI<~O2y*Wh1$=0k|8Sp=Rk{7jukYUQ$L=cc>t5)n`}i&F+N@67I=q>& zr0$%Z@6RnacJ$V49&W_en{M%8!m6e{59xeWy-e?wlEN{N&Lu^G7Yu z)j!hb(2W(hS3c}Az3l$dsUKaLYZoL=JTx=gtJ~F!yJV)>H3y?hrv2g6uJc}{FbURs zF=WEty^}vH7iSBVGnQ1(J$j|}=(Mfut|RxoG|y^!ZfdK@h_UEhE9`%H=H|xRXI6ix zeI@) zxDl_0Ej(#w8GiD#-$dUjZSECMI5N&-C3}XSYx$hX1<#pSidBq+>51{ zd`oA6bM}>ANxi@IS=!}J!~%ZAynyggTMdqQS^0-~*;xHIw$<;pLrs#oYh!q$Ztj)l z`EbrZN&a4WF>gw^e(QE5~N99*O*wi~!SUcA5^X>aH zug3__?6kRAWqnULI(%}fy*zTJ-M3v2V$wg3m+{OljoUL!G^;85XP0`t=>3DQS;mgp z=sWUWhjB+&&u`e19PvCWA}#47$D&h}^2FeV_s)zEt@p!fH|iNYo;#@i>F!LW!zx?H zLa%zmsAIQQiiY&GuUx*qwsYW(FL&LIX4~}-$1FG zuPH;_GJedSynK9C(b(FTMeQzfjxXKtl6!N>=+v3FyPp;GIQHjG)|9HzkM(RLMuy+w zIMfF`+&{4Hb(eK&)jd-lHRmq=xPI`v6W#KxGGAYPzxP@GrV;u+ zF%|xO<*}WlcA~WowX(C-*E@U-Q|wqZyT^yzH__f_7X)XwwX+ZP`jpBv$~V`+J_BN*SbQ?ash~Iv?BcmqgQLyDMUeLn2%`Y8|Y~mvGV}0tr zcDv;fc|Z`ShK~$6p@SIH5{pkm2T-+Lbp8{6;F zntm_khPFTFh0fU))R^mj;78-TXC;H0bUyNPp5B$7-<58ZyWllG^GO;ujMSM+H( zS~oGsd|Q2r#~%;A_q)%Dlen9|FFuhqBy#kg)8VcD^`=fAN2|)C=I?BO*l>8ei?ZA8 z7@4grT8-MN7~JuYS6YePul@?Nu5X_%nwgs`=-l;b^~*=Sbk3GnY}>9kZvK@UF9cTW zx0Ft?d11KJidT5>xnaVyQNvt}U))mlSDveua$V}LZ$8lZ)TV&9Ben(Ku`lv|RM)2e z_NN18cXta5ng8RWS=rk4PfZ72cVy@}mi5nHWZq9aWLv-=kHwwsre-^R$$0)y{QUQp z8D*~vLpfE0R*P>Z@V2H;?w$7E3A39Qakbr{?^etTF_ z+jBj?E19#7&8U$pXZa7j96f3KraO@(c9DCc#$aO|aS`Fp(2mfya@&Rb^j zWAov>ju)+ayB-O(OH(dfbfS3F$c--tWV)p#d|E$Z)Ak9&l)cB#4(eXFZH`rrRm`d@ zH|@rAccs^dPB!tEYk$>!k)&L{ zUDxom>*J^{Zd+!W`Iq(?q%8h9Lpdj<=E12BT@pTq=$Om>Qh)Y*B+|Bu$Id7-Q6;g@Wy9reugS3r}$ zog{tNq_3}{Bm3P9`@J(o*Fl(-u&i&y6i&{XVc{=F-{g(_ZkKj!!M(*V#|>28<+QFb zw?6kVZpO+l*9Ti(4jOE(Fd2O*K<8LR?bA#%qvV7usjRp4HD}gNt3GX9YFfn9E;9D8 z$u(cPxV`Xm+?BX~tSM9KOn-EK6!)QON|&m`1{Eg1pO2FNXzy*n_&#KLyte-zWlx69 zRB>$6zGog$8Pz5J^DQsmllTW-2-fm9`}W{(yKr!isXxkQH_OKD|%m-8%dWS0ecN-_|_!0*dXM?_{(#B(p?kc<3 zPQ7DyueaNOq5IYscaLN&32i98slOzzn{djLEANFvWS0h}iyG3hHdZMa1@@fI2R1$% zp!3@On0sxNMW$XtWt!mGy_h3Dxs5UQ@BiqU^;ujT-PtGld%yW-K6@CqzU&&buA=?> zgC)8-oL%fo=RXw7`j|Ep4m_o_uT{Fooeqt6(O#;>J#3TlMf-HQec_UqBbD(luH`M* zB)!s2dr0zRpOQ|7sg7-v-e@;1yzqP<6EZHTxufym@f*_yoRnUV%o};ob4+*byr->R z*cR&yowm>;4^DD*Bn{6C%+H-IcpeaV;hQ##V>(|eJ5(}s<|u_EDb8V%iBJBpd8)IW zwc2Qvs^T0B*{a{2wWJ-|q>N2&yD-_X=!Cud9=X%tgcS9LvvO3YMqf6qFLz*5}>2Jwx zvP{;?sT}ye)svd>aliLCJJw8Tb?wR3XQsw0TSEiQ$t$^e7+US8PCdaGJRV;_=*9eh2ZzD@Q$9S zy6ULq>i_>!@ON@vy)A$vnebEtBzv(TRVr2PKI(}}rAY4V|6T5SyPw3KY`-nWg=h1k z{B!&L72&eW+HqW$x_KUkor1h-5~DU1u9!ZuZHd=G`FoG07O{EI&ux1l`IF~7^zZF1@LIY<9fRKUiyA)oJkdD1TaQotMO5qIa$ksXqs?mw`&=ETzj7mn?z zHq-K*`m5pfm&)nmckP7ddymYIZW9t$c2LKd+jDAN3Hrw92FYLH8ih}>S14i!`ABlY zTKm5=J$Siume=1N?@jzfmBZz>?E>UGdmVk?_Gsh?x9-;&)?5F(uyb^;1NL?y2MztL zO^QmIiwD=c7$?7NTvQ(7@A#}k2c@3((Rgj`2Nu1V=QPgKl-0}&IeISHs#TZU&R5>} z|1cM^m`oN^&Jwr8 z#q@sfUktcj`uHP~7zN)Vjavf$FT$}zOa)5@IP<>)qK@4MJ8gQbQ>9!mu~6p4g+tX3 z(TaFHHWShQB}Jb#v~s#V?qq)`2(HjVb-}-Xd2v0UDoo+{VxF9>i9>~|p!EE}FEERP z>e_KLFfYz%5XMOqOdeOs*90PF>}_j()&-{2#<=C89K115&X#c{LQNbxkg5H6wVM>$ zAq;8E2pdY_SZtP*sUVmbEmlT*PrRc0Y5)LN>9rj2_izm42qbJdPjf)DE0zBIE#|`t z@4{qJ&s6hYUYyhqFVI;=!gc7NU;3!&Pq1SJN zg)q+-w0Rbf!Z^N=FP0OGK@6R-H@9my&@8QCE!Q_YfT2VpWQnv@zJ!=4T4CZ6hY)ALeKl%1V8uj?lPd%YAs3COY_}7$=p=6&xioAksvyIgWvH04CFbU&1IL zN2Cx56vX<`fPRjXB&czJJq;H%ALGPwfso78C#e&%9M%7nxduFms})5xAgRQWjyZ$OtCR z+!HVwtgeP;bxvTrU_4xwRLEo!BOsmhQN7_-T7es5w^V|(IE-Vnw{A&{iLM7IQ@v_JtxHu~ki~;B#amO-7;VT+CniaDu9=1Es#b zcVkkCLeAk3D@MHexnbGZF0kT5G|zo@FUHBmTppX44Z7xc<>&9MJwX;JG_}{uq;Nd0 zj3b6Ge`wAPt(f6GI&8lx+s4!aGfuc~nho=~imYt9Xcx^j5iX~6(IOw(B7>lBdB;t6GZn)@m0(k5UI@b&}P63N@t zn;6I8i}-}|0d-M&+gVnwTL$AD17AnFJC|D+$K`R@a>8q)^OAujz81^O7>w~2EpZQu zF;31`@MOe1DRluC0>e>%tr@D~D3jJ8uh=q-QGmG^2my!7Qg8_MN7JGd2Y!9xdo`69TqiO4ML^Z3 zX8YZ3@av0c!db4yahVE*lu*mRzYfl7XgU6Mfq=*25_3R$-gnf_Ey!8PXum#RjS~uG zLK&elNY^6v`sPK0=y%fGXys=-o`TI}@|A>lN510fB**%Ea|T1tyQK_MDk-24RwLvQ z10p6fj}G4Y2`0LkrZbBeTF9#kS!@nlMi|pF6s$?kJ~$Qt4rUk)xLR8clt{omX(|9R z>wu2sNhnk{rCF1nKE`pl3IUtY2E=#am;9wEplT~%vaMC8rkWao5E>0IgePb6nZ!_w z0iu_*YP=ON@;Dd~X%BgZYMesK714NUF)iqK3QX}e&42!AL*YaagtEj+!ha&^J)ZX< z;yW@28t{+_28x&*CXetiNO*p$CTyJw>uO7zXrU>_iPg0s{}$C1rCU6?<@L-lny6?k+Wgh!Aw6%r01WW?=O2Q5GC0&dTxac!kH z#wqwrv4YTHw4ztC;fQ2+`J39;mp^70P z9VWshXI8vCpe`|xN*wHqaa<{nbYGxzO7GA7(4Q)p=xpFS>1bJNFpketn^Fv`GD``qpsK&{~a+aKyTF%WJ zXs}$BQc0yIqW`EN6il{UCM5I?>FM6S+WOa37duia{eBB36-X2^HZf=9?k-xLc!>&S zw`m&ocpJvaxC#Z2a8GE5EEQ)SLZ%Q%TSdSQjFUqU&hjI+eH?#pQPpfevK3`6oXokXO&k0yy4dUqZzxxr2&g#x$AdkgolZhM>#n7as zo+t@uOB2Q8^J<)eBa{*=M4T!5-M4UqDjSk(@P<(rFe#rc6Nrhqp&>SPoMqPlYf7M{ ze1gjuC*U)|`Dz9L$YU=XC~edS{;hRxX@(OZE<`*OF_}D`k_cfC(EV7Bi4X=1qNz#3 zJq(mf6fAOoM)_jg>Kqnq`;0p@Eh&FM;n*yWjHMs~&R8UEx3*9BQ~}f3G@vJx_F$%L zHb=rG!wAI0!X_Of31FVmV)3BIY8+SIVxq{ijd(QfvNJ5u94(MZNc+uGHBiXqD+n7! zUf@HKAbvKrQ$QTZet}6L1>!SlQiGQYUQjx#`j93e{rNwnrf(VDJz z4Ro0flhmP^Ilmg?L>#y;L`*bZJOKKx9%Qwj2P>o}Q&+!ZphPB?$OzAgSpD^3=Zg81 z8waUO{fSAXY_5#l{*XVWwt8^(4Yim`CJ`|Cghn7%kKfgFsu48k7OaAF_D*WB3c>IAD!r2@NUv zp*MlCMN%jFe#TSkdWSwirfczOop6*@tvkGHySaH#}vXpn&SJbxWJ-LO_)ju z2@&Zc5sQXCjNgii*+*zq1Rsp!u?2D#ec=V)o!nG&*HPu>Agxx2nLM7H&m!wQ$YJ?) zcZ-DWn{kcCqDs(8gyYMY60)Fz{6|iZ&BG{I^G}-pIHQYka1_Pmm=WQ}--Ux2PBFw} zaQMMt(sE!ra?tip>QtLH)OdWRT&$2Q zHN}A>zC31S!xq3n|9gwjepg$JW6Rk>a+gLL_MuM)`6jSl2`#jjn_?Uv9EOO9w_!Y8 zZ^fQdk*bWzrk0>#T`e%FfWv3;2~sq~@=Jw3*Zgyc;C5;p>?tB*YtUr0Ib^aRN4`YB zh4;lc0hcEc@d$5#W~JS+d&3r(l_jlWakT?A9@NuWGO^kJ zI;~Zm)MOH-lnexsdVO8{x(vc2Mm0?yIn6joCP{NdUhzX%?ZO(EQWB@-auV(FctVa) zD7GSk3dDyZpNj?ADluf>s9@`cY2}cD%ZRE1(iQ!>obYH^x|rs%m-fUsg_x&c|9j=I zS2?pNDj{16g;0mz-+elQIpD{QbgDjau0`R>?=uX&hNVR$D~3yN%~*%JJ=eY zz}YtFn@}tfF(ou@ZZ6ztdtfT5Kqw$nG&JnCCE;F4u(F#p@w+$UL_DdG_;tj*O$&VE zUjZ(i<}cq2RF5a)vxH_eAT=$R{AVvrCWqWfPRIs1d)3|ZChZ;b;@S!XT-fY#VWGZWGGerHPB9=@+42@PcB_%TPJ1E^Cnxok{ zRE-lum4uiL+CiRvt4@Ch9HH+Z=X@!gh{xx0M1F+ikpL9QD%25G~0D7=uR}vVf~U|oP^7k$;=1`qsiz9IVO|C7D8wy z(y(qD8qM=zR`xWTOUE!NTO#4`33rGT?4$7a0i>BuG~CK*)NoP`3xW^+2u+Tm0T1Sw z-i2Z_qc5lqS%%v%qZ!EOkw?-?DPeICa;n9%+>8gxsYHmm8 zscEGkOd@PXian^(d{!ikVMCMVqHqc)gY2FyAp$Qn#Mb}boCP)cM{U|R0^F0YjDs_F4wne`C`Cif z7huus7>Y^`#eA-uw(_apz8BiVuhUPcC#i7?85|iCCXIHJxC=dgfhsZ*fMaA(xI2~_ zPr(%N#hiAUt3e8LrDC~zxaun`9Hz!xib>gQsfbLc5s#)HKkIuQ%u+>*SBv1N8n#0P zUoMsiXmSs<%9dTVW-!+ATTU$}0po-Ma5gj>81(tnQaRXw5zQ5(Wgr}f$rQ+1gl&k? z`UP`Rj!?-HEXi#bCS{2^&{n0ndZf!+;+|!qz4SiKKDBpKI2M-)XG?^)L0o&4V;TAIyB;(d?PPIp=@2(?B2hFeZ@h$oG9gFKA>1N5JzGBT)JjwlHmB{yqpo6{LL?E1 z2}456_l=6Rvj#ofi7c0_lnuE-0ol+=Bcmsa1I&lUECJwn+Og7#B8=m5_#6&l@<+z?}nrkhWEP z598zt5lcW*;D$6y|IL6ar!7hG0OJ%gv7BtkL0UO=n)ju_s=Mu}*tOduij>0<3*}5g zOlWF-Ox!o;t1ecVph7|FQ%uSeu|-URQ795=>mUB024-VM^Qn<9Fis(43WbD3Q9$UE z@ih^j+d=HOxs)P>{wy(vLzGwlx;O}ltjjPJnZNb-uk+X&)+FZhXp5}8a$W^{-Ry=Lz|JyrG9no`-4T8fkpM^g~vX}Tn&Bpm|2pFK?F4&a`r z{#KL9WGu2f7oGUD-*En0Z&(Js`;89~2rProf~3;`6Og{1HPYlc8o(OOL< zWGP60@RthGH!CAd1*hFiQUejyq0JwLJXDRs2Za!1XAZtnNT?BcM?dMeuQU2esbLVSzX2fu!;ukY=(hc zfsn_c?cNDan>NO)v?Nr_v)vq%3PfBXS@K5v^@hU55h%mD3{ob&$q-A76LC;WfreK= z!dg22a=v8Fit2Ez+s6d+vlT` zqIP{+>7$cR`pJ5MqZ$Y;>tu-&4VdUGEP->pf5da}RS{%q;4Go2La02_z{bY=fx$4* z$!IH61uZc(0<$ZGn-&yAz*7i`GytgvRbK&7jqHJ`z#vEsMe^L7wPF5r_}vEDUcE>S zgZ=<9m*)7i*d8%(^uw4yQ&)qY)No=hAFhZHEe&99C~eyRu;18{_0WiJWXmMMLzSSlyr+c+A8SgzynEXApu|E`c^IqVPirL7j^| z7|={5#(u$NGC%Wx{c~sDjpZ=(E3JDxC6Cy@9{H$Cxq3Ym<{ z@gwvXsndc#i}{lP_ywsGky_4xh6z}X1dckTY(fo@x?EoSWbH00;{ktOITVv}Wdb&z zrXeXu_qAWGy6a0Nx+jNWQjq|4-)f2h&Bkc&ox%uECOz6NIukm5U^Y@{Q;>>@q6b<& zrQx0P;tc&T6-Oaq6TVy1W3kmlaKt7i7lt%pd*YG3;~;u2n$(gZlhioAP|6_#0OaWw zpBmZLZKjgQ_z~{9h?{!)0~A^ zOu(ezF*xMmBwCZRimmMmLhe8l@~MexoCMmJh}Z-TaqN4+n&&XJc$yb(4FyId4uw=M z6_KZ}$SjJ^MtY&%+1}7oOlnnIF$I({`H*uGB0^4~Hfhi!D`+aPbZxnb`N}blC2A4i zfNk~nUbJAg5g(X;m6rA-K+g+I6b|{JyNQVJkxE=07JNIqS&KhJVp6t1#vzkM#KZk1 zWlnjji@2zK0nX^quR<&=CQr+dsi!S=o$Ca%=|h{%4kgBkMSPZkuqm|Z-Aq}igEDS< z_2F|I#sR-s5+z|a2zb?~oqh=bGl1pf-oJb)27=EJ6HWsy>9cOHEjlny`kkI-%P~w2 zAp?)t`axrr-sj%+eg!>?j0d1oqMk zX420E<&&MNp1|7DY38^%wHYVjvW60#6zM!GEok-Ef8G>|+=zits1lP$g?~2&$Y4_s zVk()O1DyhztV5nLe3Z?eaF~`3ZCdBlIE4(3tO=avuLm8bejU_R!sQTiM>qEL^AE}4 zoP;5#Ij^M@j?09mFEQz_|GHE-x%qY!{W_NkT@^yo@gfh`@w5L5Rhf^eC3xtL*_e`t zXf+r4_vau`$;rV)0ygy65NeC4j(0X`{qLiM=gl}CmrY*%L(>r1ni@I7BKOn0*|=Oh zo)op$lV|JH?xNnh_ng3F5bDAvuQ_={wURZ+2l0@eixmIGaXDn6A1y~*I42US*bFu( zH)*{6PgCQ;y-w(jAuJw15mFHtJ313W7p~KVWB14jzND6IPWJ5n%vtHZwu6YiSE%RI6 zMm~vgY_>=Uw`VnZjMn^x@Aw<~ei(;nRLp=Y0Nu@&AScz>1 zE#o|MZOIW>Mi^}w+u+L$AOhHbBrLLaj8^eJMUuFsxy(Gj0+X_2ToxIQptP>1-u8Ty z4rbCUnpcT&Tpn~f(>QEB&U_RqzLddtQe{iw>y#t4u6`X|X>rrAz@)B(cdMz0GW;c=-xOctG1#&;6uuT&{%A zVG=O~^2-h;-Fa!vOuJHtNqG=_$Osij{5|89IPwE5zWJfl=6E`uaa@6%PsT}Tz~i?+%@+gk9gSd}hqP-hVc7TpOaK#X{Pt;bELI*l|jR|cyhSl}$MpDTWknV+T z2mLBb2)zfyX$w;4+m(5{I4TyLvcWcH2eCUMW%D77B6f0QTtRU7px^0>E~=Cys>(84O)6wbr3#{!hV-@5meG^< zfsXspLgKA$ClX7Ad@CZjLo1i|-x-sm%CIxF z=$aQdx+_J?=SjtKLbzxMmehNvDrE@OW!A$96Y_;3wv^a%kQ&5W59sCri=f}4y9zg# zKni?5MD^skAac@;USr-I<3S%i9ITV^ThAV9oP@`ek&8ez*RjinPVl2H)PO7u#T2c8 zDS*ldv0fxG-A3p3LCxJTN{O0O2F(;i_J)=bGrm9(uY!*fp~e}89FuaSJT9LwX2ivL z*NVqpru;ah^jXs|Dflt5l=iEyTV?i#+?Qew>B%Eig;}V z#zE&3w2y1z{u&yr{0QU{@arOI0d3LkilR#9u3uew;D4-uvE&M#sBusO<%kH?Mk~MO z*)CuKaE#u6#@~&{gPI7Jr6h!jG}g*h)N4Ah>%3RX0q^g@K(G%v*-wW=WPbXc3pzEW z_jXA0FitF!h*~Ds(9X+ybY=fL*gK~>wj6N!Neq-op=wSzIK)4G-iH;ZDFp>xUXYJT zLFIKI4s-x+@MuaCvF&ZY zO}h^N^VOHU0tzRFY5`B=N4Pm8;4`@q?;2si>ooV6sI7|>Lkw3~1!VULT7F|emTxGf zp|GE4>ta$kqlYG0&AA~Bee>gw&0GC+EH~#<5sX4W!}nU-sUn037``%UsyFU}_SM0IsRF zqe*}Ev<6F6SuRx${9}Si!OY;^uIB2|)SBbu*XEc?!eR5tVid9$ACJ?<0+`5M@MEN% z8C$4v3cgfGco?*W{J46KJrgiYI2R#(-z-avlW|xAk)`IWkW3rVy8F>)^Dag>(&+kv5wgnhMzY|3&g_Cn3d0K>6 zgj1!D*c4BG3>a>2AlTHFwmzcEO|~o`g%rQD_y-VZ}*D zHI+aFpF7q3LCX5d*4{YX{JhL-H7Q&!l1T{#K%}XC>$EbP-@qv7M*XUc1()Z^j2=bk zqi<}uHXHOGHT94(+USCDY^j)Z&=gk^?rn&mPLiPH>q`v+|o!Q*%+sQ z%s@c)Vj^ISk!<@&kictNEN9|P0p)zTM9LoX#anWB*1xH+BLR#nt>uS4Hgi}xUzz=@LqzaZm zEFkY7AUkMQ?v-PxA5_3i3;3v*<_r-Ny6+A(*sEftP{CJrGpPj1ID~SeAC%o+#XHcv zVJXMsUll-Uh}2RvOql`xnA>73>{`+F)B# z&QRm=guJ-%Gcgd}z2Hj;t3odBc<||d=qAk#+6r|;)Hor041(tLewBS0*cmvvZ)8ge z2F=z*&yDezA|~uvghHVKw>ssVt%l5*O&c(MAsP^HaDpNrM1lO_Ug5<~&}jOPcG{B> zYMdNyr%=}T_qj1N;H}ze?YjJPg+n7T5W2=70Mpcbl*~*Ot*ieJ*r}q0;i*w-96YB+ zauk_C%&JPB9`qhF9?@zm0kIe;69`(|qChgF3=%x;lXx|iNF*f_Z{*<3@&)CT2Xv`3_R|*rXa&Z>I}A+u2qI=fB3hE}IXw{uL~UuLb^0b?pin9l((1u4`Y`6= z91^mUz1>J=zTA8gxIwhCzEmTTXoG3Zy;tnPP09KuDMNI zI~h~Lxd4-FB0|y|b{9fY7(qaDO&?Pz92}HFQy!t$Xoww?lUBIEy>t2KmWC9z0ps8* zlT>U*M4=S7QQ3JSYzR9s8CSxE2cI;x7){HIUlW9$c|cw0N#}zF?NF=CkN2ok8$wc4yh{$R(I)O6}n>wQALX# zKo9ztzzskNRSNe6eKZ$@__gq5{=JZYDyKC(Wkvxdau%EBuqf+-)f_mCsf2Q#fYcMT z!KCCJd0Yak*+J_leyGNY*yx&o=B$vjFdsMlu?&`CL6iPN=$l5fl8IR?b~|FjMykKJ zF40*fUQFFc6Q7_+InY5SBljY-6Q9o5@84di0-un*zJJiMZX5Bgz<_t)_d=v5dY;Z_iD zYd02-Na_OVRzk}KWZ%Fz9vcKlun0+f8*^iF8WmrInNO=!lL~k;HW7lL6GVPn_7|j8 z^x}NaDvVP=S0m}`QEZuV#Q2>mWrC?Cj4wv7RYG%_w*36M)-ZxEZG&u8hj9XN z%j?#NP3G;^W+(xtL$fGuy&5NlXEm*89;l|Ij~;v^2p;hO5kC7x(ZWRlnTR}@KvsKp z{&6c^&=LsJT3BsdBgTp0X;ON9c2Z$&p0YXTI^2Xw;mJl0`J~9-I2V{Swv`@IYMx90 zw`2&NKx!wOk+G`TpOXQkQjLR474TSqCUemO9OKu=psE4~KqO9E7mo)=pnNeIKqBte zwskl)6S%vKwkN)Vm=Y!mm$LXRZYm>b`q+LRcNzw~M?037XNYku$RS8$iAIlaM(33p z!E=fDZIJ+DObc(2Fv+MGjp4}KeP|<$L4P5~u?@z7#}bn1EyC%?-AO==$#h(q3C0O{ za66VfE<^Q$X}040CRJP`b#EpMGE}sFkytJ#YtU$njZb`s{`+d^T}zCE&Z!oifk;p* zXCG=E1N^2xQ&DA4;UJQb@`dDMP)Jbyv)e90kAd-Mg4);x1BGHJxDXBy4ai@!DgK&D z3qPId;D|{@JR#VDrV=5ay>Xe9!4Mb%ni*Osk*RYt4%*!b_qN;2nb==8I z#-uXj$Z6VhtF-m}`KmH_gBLV=?s|$8x@6%|U?OisYh`}BJ$@`Om!AF^ZNxZuyb9h; z)U*gB%ptwbd8`6l2u(p(sW1*+AZE9C7aGN$|JjvHas*&0%_M~IxEr`;iGl;Kq7$Zs zyu*OFe#@7D+R+1sW!os6lnGHQ*~1Zw-ZJSGV$m$BY;3 z#)lukMC)`+3ZWv0Y*mxC|$p*5VXgM1mJ1c#JdxS*k_7HDFdJI|Tt0GvRr?xZX3m_y-Y@LY>P z)=m?LrnWdN$mbw6H8>2E9j8d)9cXy!lQ3(9;JIXHBJPtGm<4OlrCshb^Uz=W)(r(A^x1iVQrCzIj z`MKB2?EoyI4QQ8-feHmYH&5i|h%>FbKmB+LaQ-yDzrH}>;3+*Zk4JD6#Z*W+ficuy zYt`*26V&5>`H~tUfNB<@-e_&j4!BZH1rG%C=&wZ$EDIeo27a0Dx~wnbUzds%GLmzs z_a>$wL3<7?ww?^+HomHeX#xvq#Bg2fgIMDmuC_Rb9YGI&Ar zS3LZRF)8%V!o>+qQ$tr|&z(9y2Yrr#{tnCMI~XT|V^cEuNBs0Wwbb-`l^`kF%Cq?=8|tWBSjy%GtdgP=SpbHg2vN0eqiLq?fQ;^Qg~39JcCET#~Gb0 z5@DjNXi<-4Eyf`Yp||aAjaW4SdO`njP*PYQfPv7uARvQuw5YUXfWK%Jz9Wqk z4qor!!kMh5&LG)0-;%n(&_@=*g}3g>cmN$UjbHq|eHO@g7ENB|Y8ZOYjNA#3e)t;n z3Tq940sZB}GrD*@7kELvIu}(Xajz8rht65 zkOR&`llf>sMPA+1^MIpwM7?*#I39;1C!gzEi0&PF-U#9k2m3Igalfbs28zTI=&R5i z5ZUA0q$w%rAd&u!fC2C>J19OMUX_uOuPq~?Wj*X;-U@J3ySd76ov9Ioos~=skuxEc zrzuw7imZ|75d->nX{@2y9flGxVVe^W;Sb_vb1ZX&gQ=h&0UB;J7lO2*VE)(lCBT5? zG*f({#z};bco24u)IF_dvFAci4J%rl{zQPsld<_it{H8>=4nOrZYC2zo3`e(&@tw^ zVR5NU_<8h+H?jbk(Tsx_nk+-0=<1&z5!E8#o^{)e(9QGq zw5=!F0|TLrKt>k!5g%T>s9&>mqk}2>mWs6}MJeP!hY0z;0UCi?I8a^k!c<(A46=01 zh5wZrP*td@cmgqeIzy8RjoSQMR)g?w@jyq(`o-Vhf{4RIO$9fe*=(95{TA3v4yWqc z;NxbhNhM5ZHzNW9r1jCiwmYAL%V;4kEv2G2gqnzm%YxT5iRq%H%Ma${1c5aBKxRft z^K+0I2P~5)2{k|t|5MEUSOWmUfp808$RrGetX)bz){iDC9<=oAzaQh-HU;B^LZ*y- zQ7&5C>VJ&p?Nm%AV#-DI3lwHsVk%JGk6zhqE53C76< z&@xO0kcfdVx^>&AqA^WlG*%J)~TKt+9KQdAPQ6yAp?>|B#-o|+0?wv&*Z z?0>0XP1`UPd@6w{C&hxq*{|x5lPdNrb^|6kXFk6oV<@=^6N7o~9Tm zv8vx9tcsJniE!CA^9OpFPq1J+!|Yy6oxo4Gaz{AuarX z_EL<4*LV~%Vjjp(ewn+(^#|afyQ~GyZaKz*5y96R2<=6{jP2c~pmP=IK5YRMt)zhP zl?k}ZM|e7fGvAn_LIDhPhqu6$uEIFDz6{^8&|KhhO~-S8H74V7`C{^<0`cM2m;om6 z7!#vAEnI1A#=)cdWaf%+NrR1sBR)uJ{Ht1v$Agrb%OiW`5wL3bo*sKu8PL}TGBQfW zv{DwN)x^$)6zRJAe-RciH|Qj9vGgaYY8*_Be3B9+{EDf)o@4=z{_cq0jcSr6~M$7ubYV!b}g+)O^Dp z43vmua0^*eT@erYd7e|?k!tF>3UWiw+^5FDM^WT7j-px|%#-@VB{@*5o0%9Qg;No- zp$&QT(K{YJLk&adt2Ja{_oo^shi6)e$N|l8Mfj92=;22L+RBzdu^ggiaD{LUjV!jI z@qS#k`S22eJOGm8$quW5VhQ8e140!EYP%O*Keyu zHFG#3Xu-ctcQ8-@pEV-C!-yiMGQ|U}I(QF&+0+teb|2&597#&vAPPr~A-$9CUkjxk zHUk&K`h;nrkqG*lG+krG27#n>@wkXUsgnYuRF%@|X%6>v&G{3=>K z??>3rp|A)D1Y1bd*c9UgP#O{vnfCvw>na1QI+}Ly;t3Kg6f17m1#7Y3l;93maVxGN zK!H-+F794jf)_3BPzn@x*W&g)vwLpdGk5v&Cx7O-yJvQGc6N4zR7I^a5yw#xHLQa2 z@dGnRoYx39dNsCng-@X1Z+!;?SXBY$%PfJY@M7jQEE0AEBG!&(5mXiv8szctIV#@p z@AUA&lZF>{H`J8r9(Wu*at0+qnVUj@HmaV)122FJIq^c?1*d}Tdky93lb30ISl_~jw zWDYIcn6X-J0J}iLakHkWO#)F?9GQM08!Wo%?yKD?%uY=}Uw}Ag>}ND?#d|tC#7H7a z_gvY!GjMgttMB=rj)#&jP)Y-$W;Rc5CeFn7IN5e3fM*qhZ$}x4^ZN}x9^I?o3gdqi zR5m0XqoJ?>X?Qm}1EHPR133-b0##b}K)O=-21|mF?%p`1NbZ z%JW?PW)kN|q%gk^;k1p7K6&ZaN)!W>1q*o(sacLU6Y_i}47DYcN|rT7~uzHKz~5fa=Y@NjC{Z6FfUF`$ytZwOI7F znZT(5Cds-BoXZ5auQBADgsph6Z6(JnahJl*JJdtcBKYoG?H$Ox#?BkvQ&ORGO-L;d zTAt1+QY`E%$})nx@fs;y1@Oe`SA-_rX!WoZlma|h5xGY27DB_Iyn-dfIYHdb^P%Uh zl)$`IEwXJ25x4J_msn=&RSeZ>h=4KsB`0EZN|B4(tM@XC> zo)T`}(??YLygthwOl_6o6*x9Z;5=y6Y_o;yxlOpBrL%F2q;fedD0Qr-q7R=wWcpZY z)O26bJ6AOvij#!&f~Jeao?G7qiUV^lSLo%k=QueYDj8XAnM23>`uX+)1fgXUOLBOU zBt`KGCoi!{o3Z8>lcf|s+^uY?*;6FWXZD9=5EG-5?f7^pV3;7D1-=F(rQZOFWV(!4 zbR&A_*)JGD6|7S;1!q1At*z`^uH2mw>iv=oPrdh@QsN2rhVY5tTrv={K0 zd7UQujHMfz4Gy~UxIVeFO9Ih1I3x~zQlPylVd_q%j zW_7!HPxk*5WEgy7zYOrQUbB)w# zH=uB%{?mzNjhyN3qBTNTv|?9eKOu)e)lD=D(c?%aZogdIE+d3*U^t8flTK|E>!$YHom7=5+H8kbU6^X;6s*{H$l4`HHA+zW~y-cjahQukT^FfdZvv?Br;vE^I>qXFm3ZE8mZqE z(n*rOsn^1GwQ}H_W|G+bZ)T9Xq|YSI1IIA0x=mI}`G((@$qgPN^)duk<+;GYvu5(y zxF?1dZMdOZ3nzdGJqrPjdntiV1WX(*&{o$;7wI~Rvwxajvyb(By2RYvkZf_DF5-)XJO@+_7sqkUgI{`$( zrOnQBl4*%5o^X|WO>9t1u=o!Whhlv;9(E`)1KQr(`PPE3Q@yBXKTDv)1f8bnmws83 zgs%`)CJ;4LGEquWVOA$qfKbGz<^n^B7|iW}vP6lJNgP%C;_nd&ng~a1zZ8Zqx$SB6M87*GlH)``1+nX{s zX;!)`aS<<_MFZO0sA{Yqkgl0y`lHJ&+M&!Os*jPivHfnVe2EmDJF;yf6SzflU=J$Jp3%zMCMpZ-CT`dxURWmk3D z9`mZzYqtraq^5)|&M$BdBOW4*O!Lux9KIlD7HUaS1A3jW*^ojKXF~+Ivlct&$Q8S2 zOnnpCxYY25p9y!0NTA(f;aSb(9Z$I*F=L_?7(OYwxTJI#kfF@DMjG?h-E_S_K~v^Y z#9~fKiF3k{$&W{3MYa4_;-fG#(wKZ^dkqrjMd4u^^DB^83_j+Ga$-NB%CJ7jbLoir6qnxf6{AjQn|#_}9D4n~#)ArMe*Um6bTEWXZQ9@o&Y5ybbq> zY*k$BBYu>me$*%C&R@Oa`&3?|LUC~}({z3LFxZr;4*0rU;cI~k0_Q?fe@H8Enn+Ao zL^V5jqt=+5Q%S?QJw6Bb;S;dx^!z6S%H0n2StP8 z+`RNN4H!K4uhr4WP#T#hCXfzHl&D+lve27qC#RG#5@)rV)H5Y@+onCK^@=*HPE8~X zFUW9Huo4-h1kz?4v2GcF50$kX)l34tCa;~Bn9_eu(-xA-=QX0Fj(!W0bf@w=w_Zc6 zWb)|HOu1na=Yd;?odd+;Ci$kgTalc=q~HqXx2|F|kI^jJV#Fp&i25Tj`McoXe^L~| z1EsfP`W_Nzra)$z6J6K9(0{e8BC&atNEOkghRj)W-1C2m;Dyh&0-pT`9h^pqmwn>);lY`O>6QsDzBJ)@AZ0t`~cfiqL;`qNB zDf|U)KXWV6uXbPCU`rARl4_ft7$Jvnn0$5@!_i`mbxvqD<(qHX??-7k6f<@4fD8hz z|JNFG6HKb0+#KWQ3!vYC#-F^26z!85zN9BhW1>a{w|kL>!<{G8y9}r8p~4U9tq2Cd z2WGMe+NoB#~(T9`>VRr?*)pacJ3Rw`68_0pj

dYeA+v|pbj2Ln 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 F{{ylmWw-zU From a77f9419a2b50212770a331beb9cb44b697ab4d4 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 13:09:18 +0100 Subject: [PATCH 118/166] XGLLoader: set aiImporterFlags_SupportCompressedFlavour flag. --- code/XGLLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/XGLLoader.cpp b/code/XGLLoader.cpp index 6c22709d2..f8d85aa84 100644 --- a/code/XGLLoader.cpp +++ b/code/XGLLoader.cpp @@ -87,7 +87,7 @@ static const aiImporterDesc desc = { "", "", "", - aiImporterFlags_SupportTextFlavour, + aiImporterFlags_SupportTextFlavour | aiImporterFlags_SupportCompressedFlavour, 0, 0, 0, From e5d4f537bd635d83bb2b9cb1c630f111d258d9b7 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 13:10:34 +0100 Subject: [PATCH 119/166] CompareDump: do not use C++11 range based for loop. --- tools/assimp_cmd/CompareDump.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/assimp_cmd/CompareDump.cpp b/tools/assimp_cmd/CompareDump.cpp index 0c7a52b46..7ddd40b5b 100644 --- a/tools/assimp_cmd/CompareDump.cpp +++ b/tools/assimp_cmd/CompareDump.cpp @@ -252,8 +252,8 @@ private: } ss << std::endl << "Debug trace: "<< std::endl; - for (const std::string& s : debug_trace) { - ss << s << std::endl; + for (std::vector::const_iterator it = debug_trace.begin(); it != debug_trace.end(); ++it) { + ss << *it << std::endl; } return ss.str(); } From fcdefc7b16179b7461323af862e76867e31d758f Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 13:18:06 +0100 Subject: [PATCH 120/166] Re-enable LWS for regression testing (original reason no longer applies), blacklist some material file format otherwise causing noise. --- test/regression/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/regression/settings.py b/test/regression/settings.py index eca2e79fd..77570ff52 100644 --- a/test/regression/settings.py +++ b/test/regression/settings.py @@ -60,9 +60,9 @@ files_to_ignore = ["pond.0.ply"] # File extensions are case insensitive # ------------------------------------------------------------------------------- exclude_extensions = [ - ".lws", ".assbin", ".assxml", ".txt", ".md", + ".assbin", ".assxml", ".txt", ".md", ".jpeg", ".jpg", ".png", ".gif", ".tga", ".bmp", - ".skeleton", ".skeleton.xml", ".license" + ".skeleton", ".skeleton.xml", ".license", ".mtl", ".material" ] # ------------------------------------------------------------------------------- From 0943936b3192547f48dc11af66c41f53e46ae4af Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 13:18:54 +0100 Subject: [PATCH 121/166] Fix an issue in the regression DB generator that caused the very last file extension in the list returned by `assimp listext` to be ignored because of a trailing CRLF. --- test/regression/gen_db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/regression/gen_db.py b/test/regression/gen_db.py index 87d656d16..2a9d55a5f 100644 --- a/test/regression/gen_db.py +++ b/test/regression/gen_db.py @@ -201,7 +201,7 @@ if __name__ == "__main__": if ext_list is None: (ext_list, err) = subprocess.Popen([assimp_bin_path, "listext"], stdout=subprocess.PIPE).communicate() - ext_list = str(ext_list).lower().split(";") + ext_list = str(ext_list.strip()).lower().split(";") # todo: Fix for multi dot extensions like .skeleton.xml ext_list = list(filter(lambda f: not f in settings.exclude_extensions, From d717c4b2dd63ef4e9da09a5f31a6d278ac7921a0 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 13:36:47 +0100 Subject: [PATCH 122/166] Fix to have gen_db.py also include files that accidentally have uppercase file extensions, affecting ~200 files previously skipped. --- test/regression/gen_db.py | 2 +- test/regression/utils.py | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/test/regression/gen_db.py b/test/regression/gen_db.py index 2a9d55a5f..4005fe161 100644 --- a/test/regression/gen_db.py +++ b/test/regression/gen_db.py @@ -164,7 +164,7 @@ def gen_db(ext_list,outfile): num = 0 for tp in settings.model_directories: num += process_dir(tp, outfile, - lambda x: os.path.splitext(x)[1] in ext_list and not x in settings.files_to_ignore) + lambda x: os.path.splitext(x)[1].lower() in ext_list and not x in settings.files_to_ignore) print("="*60) print("Updated {0} entries".format(num)) diff --git a/test/regression/utils.py b/test/regression/utils.py index 8e358e9b0..7c759b795 100644 --- a/test/regression/utils.py +++ b/test/regression/utils.py @@ -50,15 +50,13 @@ def hashing(file,pp): needs to be persistent across different python implementations and platforms, so we implement the hashing manually. """ - + file = file.lower() file = file.replace('\\','/')+":"+pp # SDBM hash res = 0 for t in file: res = (ord(t) + (res<<6) + (res<<16) - res) % 2**32 - - # Python 2.7 normalization: strip 'L' suffix. - return hex(res).rstrip('L') + return '{:x}'.format(res) # vim: ai ts=4 sts=4 et sw=4 From c07cddff9e08e10163c7b00066c1d62eb6ea0732 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sat, 28 Mar 2015 13:43:52 +0100 Subject: [PATCH 123/166] Make regression test runner include "expected failure, ok" cases in its statistics. This previously caused discrepancy between the runner and the test generator. --- test/regression/run.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/test/regression/run.py b/test/regression/run.py index 1898fb962..162e6f880 100644 --- a/test/regression/run.py +++ b/test/regression/run.py @@ -65,7 +65,7 @@ import utils # ------------------------------------------------------------------------------- EXPECTED_FAILURE_NOT_MET, DATABASE_LENGTH_MISMATCH, \ DATABASE_VALUE_MISMATCH, IMPORT_FAILURE, \ -FILE_NOT_READABLE, COMPARE_SUCCESS = range(6) +FILE_NOT_READABLE, COMPARE_SUCCESS, EXPECTED_FAILURE = range(7) messages = collections.defaultdict(lambda: " Date: Sat, 28 Mar 2015 13:47:52 +0100 Subject: [PATCH 124/166] Update regression database (again). --- test/regression/db.zip | Bin 1186737 -> 1466985 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/regression/db.zip b/test/regression/db.zip index decad75bb80661950c5efd7e506d8fb86b1caa40..42cf9d5a78c8b5318574c5200dd942bda4010553 100644 GIT binary patch delta 1154030 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�! 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

    ^CJnqKo&nDN{)PvF^OnSV7T}RD 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
  1. )oEccS8GmV( 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 X%wA!!KEpdlYJ57nO4Np{e98GgWBZ^` delta 894356 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

    ry$OvuT5 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

  2. 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%0D^KMnoK^3;iC7jP2TI~wCx*pG_a!8 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ΜOkd~t~QEMY@$jJ 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

    )&m+$O8kRdcy#oa}zOXuqq1Js@Ij4o51j!0x?_a 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 Yn>dy-C1pY81(`R&tvK-$?o28F2P9~pwg3PC From 79768ddc14609be1a6552eff55d8f60b6f85ad55 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 28 Mar 2015 14:21:47 +0100 Subject: [PATCH 125/166] prepare for removal of hardcoded struct and primitive sizes. added getter to determine struct and primitive sizes. (cleanup in the java code can be done later.) --- port/jassimp/jassimp-native/src/jassimp.cpp | 48 ++++++++++++++++ port/jassimp/jassimp-native/src/jassimp.h | 14 +++++ port/jassimp/jassimp/src/jassimp/AiMesh.java | 12 ++-- .../jassimp/src/jassimp/AiNodeAnim.java | 6 +- port/jassimp/jassimp/src/jassimp/Jassimp.java | 55 ++++++++++++++++++- 5 files changed, 126 insertions(+), 9 deletions(-) diff --git a/port/jassimp/jassimp-native/src/jassimp.cpp b/port/jassimp/jassimp-native/src/jassimp.cpp index 710168e98..e093bb178 100644 --- a/port/jassimp/jassimp-native/src/jassimp.cpp +++ b/port/jassimp/jassimp-native/src/jassimp.cpp @@ -1344,7 +1344,55 @@ JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getVKeysize (JNIEnv *env, jclass jClazz) { const int res = sizeof(aiVectorKey); + return res; +} +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getQKeysize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(aiQuatKey); + return res; +} + +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getV3Dsize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(aiVector3D); + return res; +} + +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getfloatsize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(float); + return res; +} + +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getintsize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(int); + return res; +} + +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getuintsize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(unsigned int); + return res; +} + +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getdoubletsize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(double); + return res; +} + +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getlongsize + (JNIEnv *env, jclass jClazz) +{ + const int res = sizeof(long); return res; } diff --git a/port/jassimp/jassimp-native/src/jassimp.h b/port/jassimp/jassimp-native/src/jassimp.h index fadea4fe6..188a4e904 100644 --- a/port/jassimp/jassimp-native/src/jassimp.h +++ b/port/jassimp/jassimp-native/src/jassimp.h @@ -9,6 +9,20 @@ extern "C" { #endif JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getVKeysize (JNIEnv *, jclass); +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getQKeysize + (JNIEnv *, jclass); +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getV3Dsize + (JNIEnv *, jclass); +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getfloatsize + (JNIEnv *, jclass); +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getintsize + (JNIEnv *, jclass); +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getuintsize + (JNIEnv *, jclass); +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getdoublesize + (JNIEnv *, jclass); +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getlongsize + (JNIEnv *, jclass); /* * Class: jassimp_Jassimp diff --git a/port/jassimp/jassimp/src/jassimp/AiMesh.java b/port/jassimp/jassimp/src/jassimp/AiMesh.java index c9cb3669a..c2ebcd307 100644 --- a/port/jassimp/jassimp/src/jassimp/AiMesh.java +++ b/port/jassimp/jassimp/src/jassimp/AiMesh.java @@ -140,13 +140,17 @@ public final class AiMesh { /** * Number of bytes per float value. */ - private static final int SIZEOF_FLOAT = 4; - - + private static final int SIZEOF_FLOAT = Jassimp.NATIVE_FLOAT_SIZE; + /** * Number of bytes per int value. */ - private static final int SIZEOF_INT = 4; + private static final int SIZEOF_INT = Jassimp.NATIVE_INT_SIZE; + + /** + * Size of an AiVector3D in the native world. + */ + private static final int SIZEOF_V3D = Jassimp.NATIVE_AIVEKTOR3D_SIZE; /** diff --git a/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java b/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java index c084accd6..cb1c6987c 100644 --- a/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java +++ b/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java @@ -70,17 +70,17 @@ public final class AiNodeAnim { /** * Size of one position key entry. */ - private static final int POS_KEY_SIZE = Jassimp.getVKeysize(); + private static final int POS_KEY_SIZE = Jassimp.NATIVE_AIVEKTORKEY_SIZE; /** * Size of one rotation key entry. */ - private static final int ROT_KEY_SIZE = 24; + private static final int ROT_KEY_SIZE = Jassimp.NATIVE_AIQUATKEY_SIZE; /** * Size of one scaling key entry. */ - private static final int SCALE_KEY_SIZE = Jassimp.getVKeysize(); + private static final int SCALE_KEY_SIZE = Jassimp.NATIVE_AIVEKTORKEY_SIZE; /** diff --git a/port/jassimp/jassimp/src/jassimp/Jassimp.java b/port/jassimp/jassimp/src/jassimp/Jassimp.java index 25b8f6371..8850e68ff 100644 --- a/port/jassimp/jassimp/src/jassimp/Jassimp.java +++ b/port/jassimp/jassimp/src/jassimp/Jassimp.java @@ -97,12 +97,47 @@ public final class Jassimp { /** - * Returns the size of a struct.

    + * Returns the size of a struct or ptimitive.

    * * @return the result of sizeof call */ public static native int getVKeysize(); + /** + * @see #getVKeysize + */ + public static native int getQKeysize(); + + /** + * @see #getVKeysize + */ + public static native int getV3Dsize(); + + /** + * @see #getVKeysize + */ + public static native int getfloatsize(); + + /** + * @see #getVKeysize + */ + public static native int getintsize(); + + /** + * @see #getVKeysize + */ + public static native int getuintsize(); + + /** + * @see #getVKeysize + */ + public static native int getboublesize(); + + /** + * @see #getVKeysize + */ + public static native int getlongsize(); + /** * Returns a human readable error description.

    * @@ -256,8 +291,24 @@ public final class Jassimp { /* nothing to do */ } - + public static final int NATIVE_AIVEKTORKEY_SIZE; + public static final int NATIVE_AIQUATKEY_SIZE; + public static final int NATIVE_AIVEKTOR3D_SIZE; + public static final int NATIVE_FLOAT_SIZE; + public static final int NATIVE_INT_SIZE; + public static final int NATIVE_UINT_SIZE; + public static final int NATIVE_DOUBLE_SIZE; + public static final int NATIVE_LONG_SIZE; + static { System.loadLibrary("jassimp"); + NATIVE_AIVEKTORKEY_SIZE = getVKeysize(); + NATIVE_AIQUATKEY_SIZE = getQKeysize(); + NATIVE_AIVEKTOR3D_SIZE = getV3Dsize(); + NATIVE_FLOAT_SIZE = getfloatsize(); + NATIVE_INT_SIZE = getintsize(); + NATIVE_UINT_SIZE = getuintsize(); + NATIVE_DOUBLE_SIZE = getdoublesize(); + NATIVE_LONG_SIZE = getlongsize(); } } From 311c1ecadbb659a1e4c5c845e684f9cd69095f0a Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 28 Mar 2015 14:32:06 +0100 Subject: [PATCH 126/166] typo in method name fixed --- port/jassimp/jassimp/src/jassimp/Jassimp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/jassimp/jassimp/src/jassimp/Jassimp.java b/port/jassimp/jassimp/src/jassimp/Jassimp.java index 8850e68ff..eb4665f17 100644 --- a/port/jassimp/jassimp/src/jassimp/Jassimp.java +++ b/port/jassimp/jassimp/src/jassimp/Jassimp.java @@ -131,7 +131,7 @@ public final class Jassimp { /** * @see #getVKeysize */ - public static native int getboublesize(); + public static native int getdoublesize(); /** * @see #getVKeysize From 19d9b31d56553a0de864e7f595ce81296cbf7f90 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 28 Mar 2015 14:45:21 +0100 Subject: [PATCH 127/166] =?UTF-8?q?makro=20=C2=BBlprintf=C2=AB=20substitut?= =?UTF-8?q?ion=20gcc=20warnings=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- port/jassimp/jassimp-native/src/jassimp.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/port/jassimp/jassimp-native/src/jassimp.cpp b/port/jassimp/jassimp-native/src/jassimp.cpp index e093bb178..d42126c9d 100644 --- a/port/jassimp/jassimp-native/src/jassimp.cpp +++ b/port/jassimp/jassimp-native/src/jassimp.cpp @@ -284,7 +284,7 @@ static bool copyBuffer(JNIEnv *env, jobject jMesh, const char* jBufferName, void if (env->GetDirectBufferCapacity(jBuffer) != size) { - lprintf("invalid direct buffer, expected %u, got %u\n", size, env->GetDirectBufferCapacity(jBuffer)); + lprintf("invalid direct buffer, expected %u, got %llu\n", size, env->GetDirectBufferCapacity(jBuffer)); return false; } @@ -315,7 +315,7 @@ static bool copyBufferArray(JNIEnv *env, jobject jMesh, const char* jBufferName, if (env->GetDirectBufferCapacity(jBuffer) != size) { - lprintf("invalid direct buffer, expected %u, got %u\n", size, env->GetDirectBufferCapacity(jBuffer)); + lprintf("invalid direct buffer, expected %u, got %llu\n", size, env->GetDirectBufferCapacity(jBuffer)); return false; } @@ -839,7 +839,7 @@ static bool loadMaterials(JNIEnv *env, const aiScene* cScene, jobject& jScene) { const aiMaterial* cMaterial = cScene->mMaterials[m]; - lprintf("converting material ...\n", m); + lprintf("converting material %d ...\n", m); jobject jMaterial = NULL; From 38a1abc908e4102e2fd9ea32052d6ea40ed4eb83 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sat, 28 Mar 2015 15:01:01 +0100 Subject: [PATCH 128/166] ... method name ... --- port/jassimp/jassimp-native/src/jassimp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/jassimp/jassimp-native/src/jassimp.cpp b/port/jassimp/jassimp-native/src/jassimp.cpp index d42126c9d..8093db7ba 100644 --- a/port/jassimp/jassimp-native/src/jassimp.cpp +++ b/port/jassimp/jassimp-native/src/jassimp.cpp @@ -1382,7 +1382,7 @@ JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getuintsize return res; } -JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getdoubletsize +JNIEXPORT jint JNICALL Java_jassimp_Jassimp_getdoublesize (JNIEnv *env, jclass jClazz) { const int res = sizeof(double); From ef7009f2c3adcd0578a5dfe7098a37364cdad740 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sun, 29 Mar 2015 11:51:17 +0200 Subject: [PATCH 129/166] maybe Fixes assimp/assimp#516 --- .travis.yml | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3310b881b..2090fce7a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,16 +31,20 @@ install: - if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi script: - - if [ $ANDROID ]; then ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; fi - - cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD - - make - - sudo make install - - sudo ldconfig - - cd test/unit - - ../../bin/unit - - cd ../regression - - chmod 755 run.py - - ./run.py - - echo "==========================================================" - - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" - - cat ../results/run_regression_suite_failures.csv + - if [ $ANDROID ]; then + ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; + elif [ $RESERVED ]; then + echo "Reserved condition" ; + else + cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD ; + make ; + sudo make install ; + sudo ldconfig ; + cd test/unit ; + ../../bin/unit ; + cd ../regression ; + chmod 755 run.py ; + ./run.py ; + echo "==========================================================" ; + echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" ; + cat ../results/run_regression_suite_failures.csv; From c2e6e3439e07f7a43297ee00119ac738c1f9032f Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sun, 29 Mar 2015 11:59:57 +0200 Subject: [PATCH 130/166] sry, one fi too less... --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 2090fce7a..cfa7342f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,3 +48,4 @@ script: echo "==========================================================" ; echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" ; cat ../results/run_regression_suite_failures.csv; + fi From 0e11cfbe6ff115ed709fad07cb0e63309d992da3 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 29 Mar 2015 18:53:23 +0200 Subject: [PATCH 131/166] add copy op for positions, normals and texture coordinates. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 60 +++++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 7188ce018..cf637f22d 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -562,6 +562,51 @@ static MeshAttribute getAttributeByName( const char *attribName ) { return None; } +//------------------------------------------------------------------------------------------------ +static void fillVector3( aiVector3D *vec3, Value *vals ) { + ai_assert( NULL != vec3 ); + ai_assert( NULL != vals ); + + float x( 0.0f ), y( 0.0f ), z( 0.0f ); + Value *next( vals ); + x = next->getFloat(); + next = next->m_next; + y = next->getFloat(); + next = next->m_next; + if( NULL != next ) { + z = next->getFloat(); + } + + vec3->Set( x, y, z ); +} + +//------------------------------------------------------------------------------------------------ +static size_t countDataArrayListItems( DataArrayList *vaList ) { + size_t numItems( 0 ); + if( NULL == vaList ) { + return numItems; + } + + DataArrayList *next( vaList ); + while( NULL != next ) { + if( NULL != vaList->m_dataList ) { + numItems++; + } + next = next->m_next; + } + + return numItems; +} + +//------------------------------------------------------------------------------------------------ +static void copyVectorArray( size_t numItems, DataArrayList *vaList, aiVector3D *vectorArray ) { + for( size_t i = 0; i < numItems; i++ ) { + Value *next( vaList->m_dataList ); + fillVector3( &vectorArray[ i ], next ); + vaList = vaList->m_next; + } +} + //------------------------------------------------------------------------------------------------ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene *pScene ) { if( NULL == node ) { @@ -583,16 +628,17 @@ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene return; } + const size_t numItems( countDataArrayListItems( vaList ) ); + Value *next( vaList->m_dataList ); if( Position == attribType ) { - aiVector3D *pos = new aiVector3D[ vaList->m_numItems ]; - Value *next( vaList->m_dataList ); - for( size_t i = 0; i < vaList->m_numItems; i++ ) { - - } + m_currentMesh->mVertices = new aiVector3D[ numItems ]; + copyVectorArray( numItems, vaList, m_currentMesh->mVertices ); } else if( Normal == attribType ) { - aiVector3D *normal = new aiVector3D[ vaList->m_numItems ]; + m_currentMesh->mNormals = new aiVector3D[ numItems ]; + copyVectorArray( numItems, vaList, m_currentMesh->mNormals ); } else if( TexCoord == attribType ) { - aiVector3D *tex = new aiVector3D[ vaList->m_numItems ]; + m_currentMesh->mTextureCoords[0] = new aiVector3D[ numItems ]; + copyVectorArray( numItems, vaList, m_currentMesh->mTextureCoords[0] ); } } } From 7f3b044b834f7e5f74b20861728f6ccab3c3cafa Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 30 Mar 2015 11:55:57 +0200 Subject: [PATCH 132/166] add import of index array data. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index cf637f22d..21c55b3b7 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -645,7 +645,30 @@ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene //------------------------------------------------------------------------------------------------ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + if( NULL == node ) { + throw DeadlyImportError( "No parent node for name." ); + return; + } + DataArrayList *vaList = node->getDataArrayList(); + if( NULL == vaList ) { + return; + } + + const size_t numItems( countDataArrayListItems( vaList ) ); + m_currentMesh->mNumFaces = numItems; + m_currentMesh->mFaces = new aiFace[ numItems ]; + for( size_t i = 0; i < numItems; i++ ) { + aiFace *current( & ( m_currentMesh->mFaces[ i ] ) ); + current->mNumIndices = 3; + current->mIndices = new unsigned int[ 3 ]; + Value *next( vaList->m_dataList ); + for( size_t i = 0; i < 3; i++ ) { + current->mIndices[ i ] = next->getInt32(); + next = next->m_next; + } + vaList = vaList->m_next; + } } //------------------------------------------------------------------------------------------------ From 8857f26efb073a80cace809824df69c56ed67b85 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 30 Mar 2015 12:04:28 +0200 Subject: [PATCH 133/166] fix: add setup for number of copied vertex attributes. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 21c55b3b7..782392bde 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -631,13 +631,15 @@ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene const size_t numItems( countDataArrayListItems( vaList ) ); Value *next( vaList->m_dataList ); if( Position == attribType ) { + m_currentMesh->mNumVertices = numItems; m_currentMesh->mVertices = new aiVector3D[ numItems ]; copyVectorArray( numItems, vaList, m_currentMesh->mVertices ); } else if( Normal == attribType ) { m_currentMesh->mNormals = new aiVector3D[ numItems ]; copyVectorArray( numItems, vaList, m_currentMesh->mNormals ); } else if( TexCoord == attribType ) { - m_currentMesh->mTextureCoords[0] = new aiVector3D[ numItems ]; + m_currentMesh->mNumUVComponents[0] = numItems; + m_currentMesh->mTextureCoords[ 0 ] = new aiVector3D[ numItems ]; copyVectorArray( numItems, vaList, m_currentMesh->mTextureCoords[0] ); } } From 754897d1aa69663497d75c946b0dc6cb1c250625 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 30 Mar 2015 23:54:32 +0200 Subject: [PATCH 134/166] add imported meshes from OpenGEX-importer to scene. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 15 +++++++++++++++ code/OpenGEXImporter.h | 1 + 2 files changed, 16 insertions(+) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 782392bde..a9e415f52 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -238,6 +238,7 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce handleNodes( m_ctx->m_root, pScene ); } + copyMeshes( pScene ); resolveReferences(); } @@ -678,6 +679,20 @@ void OpenGEXImporter::handleMaterialNode( ODDLParser::DDLNode *node, aiScene *pS } +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::copyMeshes( aiScene *pScene ) { + if( m_meshCache.empty() ) { + return; + } + pScene->mNumMeshes = m_meshCache.size(); + pScene->mMeshes = new aiMesh*[ pScene->mNumMeshes ]; + size_t i( 0 ); + for( std::vector::iterator it = m_meshCache.begin(); it != m_meshCache.end(); it++ ) { + pScene->mMeshes[ i ] = *it; + i++; + } +} + //------------------------------------------------------------------------------------------------ void OpenGEXImporter::resolveReferences() { if( m_unresolvedRefStack.empty() ) { diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index d890bde76..2e26a8e18 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -114,6 +114,7 @@ protected: void handleMaterialNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleColorNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleTextureNode( ODDLParser::DDLNode *node, aiScene *pScene ); + void copyMeshes( aiScene *pScene ); void resolveReferences(); void pushNode( aiNode *node, aiScene *pScene ); aiNode *popNode(); From 45cc0b582a54b7c028d2d426d856ff95ed905946 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 31 Mar 2015 12:18:57 +0200 Subject: [PATCH 135/166] fix creation of unused mesh instance. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index a9e415f52..40d90cfb1 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -440,15 +440,6 @@ void OpenGEXImporter::handleGeometryNode( DDLNode *node, aiScene *pScene ) { //------------------------------------------------------------------------------------------------ void OpenGEXImporter::handleGeometryObject( DDLNode *node, aiScene *pScene ) { - aiMesh *currentMesh( new aiMesh ); - const size_t idx( m_meshCache.size() ); - m_meshCache.push_back( currentMesh ); - - // store name to reference relation - m_mesh2refMap[ node->getName() ] = idx; - - // todo: child nodes? - handleNodes( node, pScene ); } From 6fd3863198a5057e99ede935e88d4f004758650a Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Tue, 31 Mar 2015 21:35:58 +0200 Subject: [PATCH 136/166] catch apt-get problem for wine install and install packages for MinGW + sample apps --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cfa7342f5..158994c58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,8 +26,12 @@ compiler: - gcc - clang +before_install: + - sudo apt-get update -qq + - if [ $WINDOWS ]; then sudo apt-get install -qq gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 wine ; fi + - if [ $LINUX ]; then sudo apt-get install -qq freeglut3-dev libxmu-dev libxi-dev ; fi + install: - - if [ $WINDOWS ]; then travis_retry sudo apt-get install -q -y gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64; fi - if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi script: From 0c4fb363e1649996d7e920fed1af0feb53302122 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Tue, 31 Mar 2015 22:55:07 +0200 Subject: [PATCH 137/166] never work on a 13'' screen... --- .travis.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 158994c58..ae3a0b983 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,8 @@ before_install: + - sudo apt-get update -qq - sudo apt-get install cmake python3 + - if [ $WINDOWS ]; then sudo apt-get install -qq gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 wine ; fi + - if [ $LINUX ]; then sudo apt-get install -qq freeglut3-dev libxmu-dev libxi-dev ; fi - echo -e "#ifndef A_R_H_INC\n#define A_R_H_INC\n#define GitVersion ${TRAVIS_JOB_ID}\n#define GitBranch \"${TRAVIS_BRANCH}\"\n#endif // A_R_H_INC" > revision.h branches: @@ -26,11 +29,6 @@ compiler: - gcc - clang -before_install: - - sudo apt-get update -qq - - if [ $WINDOWS ]; then sudo apt-get install -qq gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 wine ; fi - - if [ $LINUX ]; then sudo apt-get install -qq freeglut3-dev libxmu-dev libxi-dev ; fi - install: - if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi From 65cb05f38163ac36f5f5b263a4e29f0c25fcd148 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 2 Apr 2015 01:10:53 +0200 Subject: [PATCH 138/166] fix invalid index counter. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 40d90cfb1..322604415 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -655,10 +655,11 @@ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene * for( size_t i = 0; i < numItems; i++ ) { aiFace *current( & ( m_currentMesh->mFaces[ i ] ) ); current->mNumIndices = 3; - current->mIndices = new unsigned int[ 3 ]; + current->mIndices = new unsigned int[ current->mNumIndices ]; Value *next( vaList->m_dataList ); - for( size_t i = 0; i < 3; i++ ) { - current->mIndices[ i ] = next->getInt32(); + for( size_t indices = 0; indices < current->mNumIndices; indices++ ) { + const int idx = next->getInt32(); + current->mIndices[ indices ] = next->getInt32(); next = next->m_next; } vaList = vaList->m_next; From a50fa5f1deeeb8000c832c547bbe765dea1c9a3c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 4 Apr 2015 18:52:24 +0200 Subject: [PATCH 139/166] add missing doc in obj importer. Signed-off-by: Kim Kulling --- code/ObjFileImporter.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/ObjFileImporter.h b/code/ObjFileImporter.h index 0168c2673..5a40984b9 100644 --- a/code/ObjFileImporter.h +++ b/code/ObjFileImporter.h @@ -96,13 +96,15 @@ private: //! \brief Creates vertices from model. void createVertexArray(const ObjFile::Model* pModel, const ObjFile::Object* pCurrentObject, - unsigned int uiMeshIndex, aiMesh* pMesh,unsigned int uiIdxCount); + unsigned int uiMeshIndex, aiMesh* pMesh, unsigned int numIndices ); //! \brief Object counter helper method. void countObjects(const std::vector &rObjects, int &iNumMeshes); //! \brief Material creation. void createMaterials(const ObjFile::Model* pModel, aiScene* pScene); + + /// @brief Adds special property for the used texture mapping mode of the model. void addTextureMappingModeProperty(aiMaterial* mat, aiTextureType type, int clampMode = 1); //! \brief Appends a child node to a parent node and updates the data structures. From 3fa68823849bf19eeb587ed2c36a5c8dbf62e990 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 4 Apr 2015 18:52:59 +0200 Subject: [PATCH 140/166] generate unique indices for importes vertices in opengex importer. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 76 +++++++++++++++++++++++++++++++--------- code/OpenGEXImporter.h | 17 +++++++++ 2 files changed, 77 insertions(+), 16 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 322604415..932ae9460 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AssimpPCH.h" #include "OpenGEXImporter.h" #include "DefaultIOSystem.h" +#include "MakeVerboseFormat.h" #include @@ -174,6 +175,22 @@ namespace OpenGEX { USE_ODDLPARSER_NS +OpenGEXImporter::VertexContainer::VertexContainer() +: m_numVerts( 0 ) +, m_vertices( NULL ) +, m_numNormals( 0 ) +, m_normals( NULL ) { + ::memset( &m_numUVComps[ 0 ], 0, sizeof( size_t )*AI_MAX_NUMBER_OF_TEXTURECOORDS ); +} + +OpenGEXImporter::VertexContainer::~VertexContainer() { + delete[] m_vertices; + delete[] m_normals; + for( size_t i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; i++ ) { + delete[] m_textureCoords[ i ]; + } +} + //------------------------------------------------------------------------------------------------ OpenGEXImporter::RefInfo::RefInfo( aiNode *node, Type type, std::vector &names ) : m_node( node ) @@ -514,10 +531,12 @@ static void propId2StdString( Property *prop, std::string &name, std::string &ke //------------------------------------------------------------------------------------------------ void OpenGEXImporter::handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene ) { - Property *prop = node->getProperties(); m_currentMesh = new aiMesh; + const size_t meshidx( m_meshCache.size() ); m_meshCache.push_back( m_currentMesh ); + m_mesh2refMap[ node->getName() ] = meshidx; + Property *prop = node->getProperties(); if( NULL != prop ) { std::string propName, propKey; propId2StdString( prop, propName, propKey ); @@ -623,16 +642,17 @@ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene const size_t numItems( countDataArrayListItems( vaList ) ); Value *next( vaList->m_dataList ); if( Position == attribType ) { - m_currentMesh->mNumVertices = numItems; - m_currentMesh->mVertices = new aiVector3D[ numItems ]; - copyVectorArray( numItems, vaList, m_currentMesh->mVertices ); + m_currentVertices.m_numVerts = numItems; + m_currentVertices.m_vertices = new aiVector3D[ numItems ]; + copyVectorArray( numItems, vaList, m_currentVertices.m_vertices ); } else if( Normal == attribType ) { - m_currentMesh->mNormals = new aiVector3D[ numItems ]; - copyVectorArray( numItems, vaList, m_currentMesh->mNormals ); + m_currentVertices.m_numNormals = numItems; + m_currentVertices.m_normals = new aiVector3D[ numItems ]; + copyVectorArray( numItems, vaList, m_currentVertices.m_normals ); } else if( TexCoord == attribType ) { - m_currentMesh->mNumUVComponents[0] = numItems; - m_currentMesh->mTextureCoords[ 0 ] = new aiVector3D[ numItems ]; - copyVectorArray( numItems, vaList, m_currentMesh->mTextureCoords[0] ); + m_currentVertices.m_numUVComps[ 0 ] = numItems; + m_currentVertices.m_textureCoords[ 0 ] = new aiVector3D[ numItems ]; + copyVectorArray( numItems, vaList, m_currentVertices.m_textureCoords[ 0 ] ); } } } @@ -644,6 +664,11 @@ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene * return; } + if( NULL == m_currentMesh ) { + throw DeadlyImportError( "No current mesh for index data found." ); + return; + } + DataArrayList *vaList = node->getDataArrayList(); if( NULL == vaList ) { return; @@ -652,14 +677,33 @@ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene * const size_t numItems( countDataArrayListItems( vaList ) ); m_currentMesh->mNumFaces = numItems; m_currentMesh->mFaces = new aiFace[ numItems ]; - for( size_t i = 0; i < numItems; i++ ) { - aiFace *current( & ( m_currentMesh->mFaces[ i ] ) ); - current->mNumIndices = 3; - current->mIndices = new unsigned int[ current->mNumIndices ]; + m_currentMesh->mNumVertices = numItems * 3; + m_currentMesh->mVertices = new aiVector3D[ m_currentVertices.m_numVerts ]; + m_currentMesh->mNormals = new aiVector3D[ m_currentVertices.m_numVerts ]; + m_currentMesh->mNumUVComponents[ 0 ] = numItems * 3; + m_currentMesh->mTextureCoords[ 0 ] = new aiVector3D[ m_currentVertices.m_numUVComps[ 0 ] ]; + + unsigned int index( 0 ); + for( size_t i = 0; i < m_currentMesh->mNumFaces; i++ ) { + aiFace ¤t( m_currentMesh->mFaces[ i ] ); + current.mNumIndices = 3; + current.mIndices = new unsigned int[ current.mNumIndices ]; Value *next( vaList->m_dataList ); - for( size_t indices = 0; indices < current->mNumIndices; indices++ ) { + for( size_t indices = 0; indices < current.mNumIndices; indices++ ) { const int idx = next->getInt32(); - current->mIndices[ indices ] = next->getInt32(); + ai_assert( idx <= m_currentVertices.m_numVerts ); + + aiVector3D pos = ( m_currentVertices.m_vertices[ idx ] ); + aiVector3D normal = ( m_currentVertices.m_normals[ idx ] ); + aiVector3D tex = ( m_currentVertices.m_textureCoords[ 0 ][ idx ] ); + + ai_assert( index < m_currentMesh->mNumVertices ); + m_currentMesh->mVertices[ index ] = pos; + m_currentMesh->mNormals[ index ] = normal; + m_currentMesh->mTextureCoords[0][ index ] = tex; + current.mIndices[ indices ] = index; + index++; + next = next->m_next; } vaList = vaList->m_next; @@ -703,7 +747,7 @@ void OpenGEXImporter::resolveReferences() { node->mMeshes[ i ] = meshIdx; } } else if( RefInfo::MaterialRef == currentRefInfo->m_type ) { - // ToDo + // ToDo! } else { throw DeadlyImportError( "Unknown reference info to resolve." ); } diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index 2e26a8e18..a9cdde1db 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -122,6 +122,22 @@ protected: void clearNodeStack(); private: + struct VertexContainer { + size_t m_numVerts; + aiVector3D *m_vertices; + size_t m_numNormals; + aiVector3D *m_normals; + size_t m_numUVComps[ AI_MAX_NUMBER_OF_TEXTURECOORDS ]; + aiVector3D *m_textureCoords[ AI_MAX_NUMBER_OF_TEXTURECOORDS ]; + + VertexContainer(); + ~VertexContainer(); + + private: + VertexContainer( const VertexContainer & ); + VertexContainer &operator = ( const VertexContainer & ); + }; + struct RefInfo { enum Type { MeshRef, @@ -146,6 +162,7 @@ private: ODDLParser::Context *m_ctx; MetricInfo m_metrics[ MetricInfo::Max ]; aiNode *m_currentNode; + VertexContainer m_currentVertices; aiMesh *m_currentMesh; std::vector m_nodeStack; std::vector m_unresolvedRefStack; From da3c347a5704d91b130201527870e87000b41d9d Mon Sep 17 00:00:00 2001 From: George Papadopoulos Date: Sun, 5 Apr 2015 14:55:42 +0300 Subject: [PATCH 141/166] add strtol10_64 and fix FBX text parsing for int_64 (for animation KTime) --- code/FBXParser.cpp | 2 +- code/fast_atof.h | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/code/FBXParser.cpp b/code/FBXParser.cpp index a9fe97a5e..f4d140fb3 100644 --- a/code/FBXParser.cpp +++ b/code/FBXParser.cpp @@ -459,7 +459,7 @@ int64_t ParseTokenAsInt64(const Token& t, const char*& err_out) ai_assert(length > 0); const char* out; - const int64_t id = strtoul10_64(t.begin(), &out, &length); + const int64_t id = strtol10_64(t.begin(), &out, &length); if (out > t.end()) { err_out = "failed to parse Int64 (text)"; return 0L; diff --git a/code/fast_atof.h b/code/fast_atof.h index bc6c96d1a..b6bc5d3d6 100644 --- a/code/fast_atof.h +++ b/code/fast_atof.h @@ -220,6 +220,23 @@ inline uint64_t strtoul10_64( const char* in, const char** out=0, unsigned int* return value; } +// ------------------------------------------------------------------------------------ +// signed variant of strtoul10_64 +// ------------------------------------------------------------------------------------ +inline int64_t strtol10_64(const char* in, const char** out = 0, unsigned int* max_inout = 0) +{ + bool inv = (*in == '-'); + if (inv || *in == '+') + ++in; + + int value = strtoul10_64(in, out, max_inout); + if (inv) { + value = -value; + } + return value; +} + + // Number of relevant decimals for floating-point parsing. #define AI_FAST_ATOF_RELAVANT_DECIMALS 15 From 6a1522ded8678aac9c1d2edaff6928b8e2bf1729 Mon Sep 17 00:00:00 2001 From: George Papadopoulos Date: Sun, 5 Apr 2015 16:08:06 +0300 Subject: [PATCH 142/166] [OpenGEXImporter] Correctly initialize m_textureCoords array --- code/OpenGEXImporter.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 932ae9460..76cee77a8 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -176,10 +176,12 @@ namespace OpenGEX { USE_ODDLPARSER_NS OpenGEXImporter::VertexContainer::VertexContainer() -: m_numVerts( 0 ) -, m_vertices( NULL ) -, m_numNormals( 0 ) -, m_normals( NULL ) { +: m_numVerts() +, m_vertices() +, m_numNormals() +, m_normals() +, m_textureCoords() +, m_numUVComps() { ::memset( &m_numUVComps[ 0 ], 0, sizeof( size_t )*AI_MAX_NUMBER_OF_TEXTURECOORDS ); } From 54ce3d843f11660448d0ad81aed40fc687c192d4 Mon Sep 17 00:00:00 2001 From: George Papadopoulos Date: Sun, 5 Apr 2015 16:40:40 +0300 Subject: [PATCH 143/166] fix for strtol10_64 --- code/fast_atof.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/fast_atof.h b/code/fast_atof.h index b6bc5d3d6..35b1e6b94 100644 --- a/code/fast_atof.h +++ b/code/fast_atof.h @@ -229,7 +229,7 @@ inline int64_t strtol10_64(const char* in, const char** out = 0, unsigned int* m if (inv || *in == '+') ++in; - int value = strtoul10_64(in, out, max_inout); + int64_t value = strtoul10_64(in, out, max_inout); if (inv) { value = -value; } From c0e3540ec1597a1964c6733f1c3204e7627d0b7d Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 5 Apr 2015 21:19:07 +0200 Subject: [PATCH 144/166] use size_t instead of unsigned int ( static code analysis finding ). Signed-off-by: Kim Kulling --- code/ObjFileImporter.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/code/ObjFileImporter.cpp b/code/ObjFileImporter.cpp index 8f201aa5a..ef294536d 100644 --- a/code/ObjFileImporter.cpp +++ b/code/ObjFileImporter.cpp @@ -197,7 +197,7 @@ void ObjFileImporter::CreateDataFromImport(const ObjFile::Model* pModel, aiScene pScene->mMeshes = new aiMesh*[ MeshArray.size() ]; for (size_t index =0; index < MeshArray.size(); index++) { - pScene->mMeshes [ index ] = MeshArray[ index ]; + pScene->mMeshes[ index ] = MeshArray[ index ]; } } @@ -227,7 +227,7 @@ aiNode *ObjFileImporter::createNodes(const ObjFile::Model* pModel, const ObjFile appendChildToParentNode( pParent, pNode ); } - for ( unsigned int i=0; i< pObject->m_Meshes.size(); i++ ) + for ( size_t i=0; i< pObject->m_Meshes.size(); i++ ) { unsigned int meshId = pObject->m_Meshes[ i ]; aiMesh *pMesh = createTopology( pModel, pObject, meshId ); @@ -267,16 +267,17 @@ aiNode *ObjFileImporter::createNodes(const ObjFile::Model* pModel, const ObjFile // ------------------------------------------------------------------------------------------------ // Create topology data aiMesh *ObjFileImporter::createTopology( const ObjFile::Model* pModel, const ObjFile::Object* pData, - unsigned int uiMeshIndex ) + unsigned int meshIndex ) { // Checking preconditions ai_assert( NULL != pModel ); + if( NULL == pData ) { return NULL; } // Create faces - ObjFile::Mesh *pObjMesh = pModel->m_Meshes[ uiMeshIndex ]; + ObjFile::Mesh *pObjMesh = pModel->m_Meshes[ meshIndex ]; if( !pObjMesh ) { return NULL; } @@ -345,7 +346,7 @@ aiMesh *ObjFileImporter::createTopology( const ObjFile::Model* pModel, const Obj } // Create mesh vertices - createVertexArray(pModel, pData, uiMeshIndex, pMesh, uiIdxCount); + createVertexArray(pModel, pData, meshIndex, pMesh, uiIdxCount); return pMesh; } @@ -356,7 +357,7 @@ void ObjFileImporter::createVertexArray(const ObjFile::Model* pModel, const ObjFile::Object* pCurrentObject, unsigned int uiMeshIndex, aiMesh* pMesh, - unsigned int uiIdxCount) + unsigned int numIndices) { // Checking preconditions ai_assert( NULL != pCurrentObject ); @@ -371,7 +372,7 @@ void ObjFileImporter::createVertexArray(const ObjFile::Model* pModel, return; // Copy vertices of this mesh instance - pMesh->mNumVertices = uiIdxCount; + pMesh->mNumVertices = numIndices; pMesh->mVertices = new aiVector3D[ pMesh->mNumVertices ]; // Allocate buffer for normal vectors From df1134b1a3e3a2b3ba69976a76c715a5e401cd25 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 5 Apr 2015 21:19:47 +0200 Subject: [PATCH 145/166] - initiate texture coordinate array. - use correct number of vertices for vertex array, Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 76cee77a8..814d27a39 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -176,20 +176,23 @@ namespace OpenGEX { USE_ODDLPARSER_NS OpenGEXImporter::VertexContainer::VertexContainer() -: m_numVerts() +: m_numVerts( 0 ) , m_vertices() -, m_numNormals() +, m_numNormals( 0 ) , m_normals() , m_textureCoords() , m_numUVComps() { - ::memset( &m_numUVComps[ 0 ], 0, sizeof( size_t )*AI_MAX_NUMBER_OF_TEXTURECOORDS ); + ::memset( &m_numUVComps[ 0 ], 0, sizeof( size_t )*AI_MAX_NUMBER_OF_TEXTURECOORDS ); + for( size_t i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; i++ ) { + m_textureCoords[ i ] = NULL; + } } OpenGEXImporter::VertexContainer::~VertexContainer() { delete[] m_vertices; delete[] m_normals; for( size_t i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; i++ ) { - delete[] m_textureCoords[ i ]; + delete [] m_textureCoords[ i ]; } } @@ -680,8 +683,8 @@ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene * m_currentMesh->mNumFaces = numItems; m_currentMesh->mFaces = new aiFace[ numItems ]; m_currentMesh->mNumVertices = numItems * 3; - m_currentMesh->mVertices = new aiVector3D[ m_currentVertices.m_numVerts ]; - m_currentMesh->mNormals = new aiVector3D[ m_currentVertices.m_numVerts ]; + m_currentMesh->mVertices = new aiVector3D[ m_currentMesh->mNumVertices ]; + m_currentMesh->mNormals = new aiVector3D[ m_currentMesh->mNumVertices ]; m_currentMesh->mNumUVComponents[ 0 ] = numItems * 3; m_currentMesh->mTextureCoords[ 0 ] = new aiVector3D[ m_currentVertices.m_numUVComps[ 0 ] ]; @@ -695,14 +698,14 @@ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene * const int idx = next->getInt32(); ai_assert( idx <= m_currentVertices.m_numVerts ); - aiVector3D pos = ( m_currentVertices.m_vertices[ idx ] ); - aiVector3D normal = ( m_currentVertices.m_normals[ idx ] ); - aiVector3D tex = ( m_currentVertices.m_textureCoords[ 0 ][ idx ] ); + aiVector3D &pos = ( m_currentVertices.m_vertices[ idx ] ); + aiVector3D &normal = ( m_currentVertices.m_normals[ idx ] ); + aiVector3D &tex = ( m_currentVertices.m_textureCoords[ 0 ][ idx ] ); ai_assert( index < m_currentMesh->mNumVertices ); - m_currentMesh->mVertices[ index ] = pos; - m_currentMesh->mNormals[ index ] = normal; - m_currentMesh->mTextureCoords[0][ index ] = tex; + m_currentMesh->mVertices[ index ].Set( pos.x, pos.y, pos.z ); + m_currentMesh->mNormals[ index ].Set( normal.x, normal.y, normal.z ); + m_currentMesh->mTextureCoords[0][ index ].Set( tex.x, tex.y, tex.z ); current.mIndices[ indices ] = index; index++; From 22fc756d4a2dac411a32364af130ac0977d8d046 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 5 Apr 2015 23:17:16 +0200 Subject: [PATCH 146/166] - fix double initialization. - use correct number of vectors for dynamic array. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 814d27a39..a9e8c3e39 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -182,10 +182,7 @@ OpenGEXImporter::VertexContainer::VertexContainer() , m_normals() , m_textureCoords() , m_numUVComps() { - ::memset( &m_numUVComps[ 0 ], 0, sizeof( size_t )*AI_MAX_NUMBER_OF_TEXTURECOORDS ); - for( size_t i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; i++ ) { - m_textureCoords[ i ] = NULL; - } + // empty } OpenGEXImporter::VertexContainer::~VertexContainer() { @@ -686,7 +683,7 @@ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene * m_currentMesh->mVertices = new aiVector3D[ m_currentMesh->mNumVertices ]; m_currentMesh->mNormals = new aiVector3D[ m_currentMesh->mNumVertices ]; m_currentMesh->mNumUVComponents[ 0 ] = numItems * 3; - m_currentMesh->mTextureCoords[ 0 ] = new aiVector3D[ m_currentVertices.m_numUVComps[ 0 ] ]; + m_currentMesh->mTextureCoords[ 0 ] = new aiVector3D[ m_currentMesh->mNumUVComponents[ 0 ] ]; unsigned int index( 0 ); for( size_t i = 0; i < m_currentMesh->mNumFaces; i++ ) { From b5e3e18bf0e747028be38711f8c0ed7129fe30da Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 6 Apr 2015 13:24:03 +0200 Subject: [PATCH 147/166] Cleanup Readme --- Readme.md | 49 ++++++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/Readme.md b/Readme.md index 1945b9dbb..481298cdc 100644 --- a/Readme.md +++ b/Readme.md @@ -1,18 +1,25 @@ Open Asset Import Library (assimp) ======== -Open Asset Import Library is a Open Source library designed to load various __3d file formats and convert them into a shared, in-memory format__. It supports more than __40 file formats__ for import and a growing selection of file formats for export. Additionally, assimp features various __post processing tools__ to refine the imported data: _normals and tangent space generation, triangulation, vertex cache locality optimization, removal of degenerate primitives and duplicate vertices, sorting by primitive type, merging of redundant materials_ and many more. +Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory format. It supports more than __40 file formats__ for import and a growing selection of file formats for export. -This is the development trunk of assimp containing the latest features and bugfixes. For productive use though, we recommend one of the stable releases available from [assimp.sf.net](http://assimp.sf.net) or from *nix package repositories. According to [Travis-CI] (https://travis-ci.org/), the current build status of the trunk is [![Build Status](https://travis-ci.org/assimp/assimp.png)](https://travis-ci.org/assimp/assimp) +APIs are provided for C and C++. There are various bindings to other languages (C#, Java, Python, Delphi, D). Assimp also runs on Android and iOS. -[open3mod](https://github.com/acgessler/open3mod) is an Open Source 3D model viewer based off Assimp's import and export abilities. +Additionally, assimp features various __mesh post processing tools__: normals and tangent space generation, triangulation, vertex cache locality optimization, removal of degenerate primitives and duplicate vertices, sorting by primitive type, merging of redundant materials and many more. + +This is the development trunk containing the latest features and bugfixes. For productive use though, we recommend one of the stable releases available from [assimp.sf.net](http://assimp.sf.net) or from *nix package repositories. According to [Travis-CI] (https://travis-ci.org/), the current build status is: + +[![Build Status](https://travis-ci.org/assimp/assimp.png)](https://travis-ci.org/assimp/assimp) + +__[open3mod](https://github.com/acgessler/open3mod) is a powerful 3D model viewer based on Assimp's import and export abilities.__ #### Supported file formats #### -The library provides importers for a lot of file formats, including: +A full list [is here](http://assimp.sourceforge.net/main_features_formats.html). +__Importers__: - 3DS -- BLEND (Blender 3D) +- BLEND (Blender) - DAE/Collada - FBX - IFC-STEP @@ -46,13 +53,13 @@ The library provides importers for a lot of file formats, including: - Ogre Binary - Ogre XML - Q3D -- ASSBIN (Assimp scene serialization) +- ASSBIN (Assimp custom format) -Additionally, the following formats are also supported, but not part of the core library as they depend on proprietary libraries. +Additionally, some formats are supported by dependency on non-free code or external SDKs (not built by default): - C4D (https://github.com/acgessler/assimp-cinema4d) -Exporters include: +__Exporters__: - DAE (Collada) - STL @@ -63,23 +70,21 @@ Exporters include: - JSON (for WebGl, via https://github.com/acgessler/assimp2json) - ASSBIN -See [the full list here](http://assimp.sourceforge.net/main_features_formats.html). +### Building ### +Take a look into the `INSTALL` file. Our build system is CMake, if you used CMake before there is a good chance you know what to do. + #### Repository structure #### -Open Asset Import Library is implemented in C++ (but provides both a C and a -C++ish interface). The directory structure is: +Open Asset Import Library is implemented in C++. The directory structure is: - /bin Folder for binaries, only used on Windows /code Source code /contrib Third-party libraries /doc Documentation (doxysource and pre-compiled docs) /include Public header C and C++ header files - /lib Static library location for Windows - /obj Object file location for Windows /scripts Scripts used to generate the loading code for some formats /port Ports to other languages and scripts to maintain those. /test Unit- and regression tests, test suite of models @@ -90,24 +95,15 @@ C++ish interface). The directory structure is: CMake has superseeded all legacy build options!) - -### Building ### - - -Take a look into the `INSTALL` file. Our build system is CMake, if you already used CMake before there is a good chance you know what to do. - - ### Where to get help ### For more information, visit [our website](http://assimp.sourceforge.net/). Or check out the `./doc`- folder, which contains the official documentation in HTML format. (CHMs for Windows are included in some release packages and should be located right here in the root folder). -If the documentation doesn't solve your problems, -[try our forums at SF.net](http://sourceforge.net/p/assimp/discussion/817654) or ask on -[StackOverflow](http://stackoverflow.com/questions/tagged/assimp?sort=newest). +If the docs don't solve your problem, ask on [StackOverflow](http://stackoverflow.com/questions/tagged/assimp?sort=newest). If you think you found a bug, please open an issue on Github. -For development discussions, there is also a mailing list, _assimp-discussions_ +For development discussions, there is also a (very low-volume) mailing list, _assimp-discussions_ [(subscribe here)]( https://lists.sourceforge.net/lists/listinfo/assimp-discussions) ### Contributing ### @@ -115,10 +111,9 @@ For development discussions, there is also a mailing list, _assimp-discussions_ Contributions to assimp are highly appreciated. The easiest way to get involved is to submit a pull request with your changes against the main repository's `master` branch. - ### License ### -Our license is based on the modified, __3-clause BSD__-License, which is very liberal. +Our license is based on the modified, __3-clause BSD__-License. An _informal_ summary is: do whatever you want, but include Assimp's license text with your product - and don't sue us if our code doesn't work. Note that, unlike LGPLed code, you may link statically to Assimp. From ecf390d51f2cdadd1c8ff2b03bf9481866a733e6 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 6 Apr 2015 14:56:12 +0200 Subject: [PATCH 148/166] set the correct reference to meshes. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 17 ++++++++++++++--- code/OpenGEXImporter.h | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index a9e8c3e39..2b8fd207f 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -175,6 +175,7 @@ namespace OpenGEX { USE_ODDLPARSER_NS +//------------------------------------------------------------------------------------------------ OpenGEXImporter::VertexContainer::VertexContainer() : m_numVerts( 0 ) , m_vertices() @@ -185,6 +186,7 @@ OpenGEXImporter::VertexContainer::VertexContainer() // empty } +//------------------------------------------------------------------------------------------------ OpenGEXImporter::VertexContainer::~VertexContainer() { delete[] m_vertices; delete[] m_normals; @@ -536,7 +538,6 @@ void OpenGEXImporter::handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene m_currentMesh = new aiMesh; const size_t meshidx( m_meshCache.size() ); m_meshCache.push_back( m_currentMesh ); - m_mesh2refMap[ node->getName() ] = meshidx; Property *prop = node->getProperties(); if( NULL != prop ) { @@ -550,6 +551,12 @@ void OpenGEXImporter::handleMeshNode( ODDLParser::DDLNode *node, aiScene *pScene } handleNodes( node, pScene ); + + DDLNode *parent( node->getParent() ); + if( NULL != parent ) { + const std::string &name = parent->getName(); + m_mesh2refMap[ name ] = meshidx; + } } //------------------------------------------------------------------------------------------------ @@ -745,8 +752,12 @@ void OpenGEXImporter::resolveReferences() { if( RefInfo::MeshRef == currentRefInfo->m_type ) { for( size_t i = 0; i < currentRefInfo->m_Names.size(); i++ ) { const std::string &name(currentRefInfo->m_Names[ i ] ); - unsigned int meshIdx = m_mesh2refMap[ name ]; - node->mMeshes[ i ] = meshIdx; + ReferenceMap::const_iterator it( m_mesh2refMap.find( name ) ); + if( m_mesh2refMap.end() != it ) { + unsigned int meshIdx = m_mesh2refMap[ name ]; + node->mMeshes[ i ] = meshIdx; + node->mNumMeshes++; + } } } else if( RefInfo::MaterialRef == currentRefInfo->m_type ) { // ToDo! diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index a9cdde1db..f1b608a4b 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -157,6 +157,7 @@ private: }; std::vector m_meshCache; + typedef std::map ReferenceMap; std::map m_mesh2refMap; ODDLParser::Context *m_ctx; From fb7661c43033fa2c7eb19c5461ee2dcc2878ed3f Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Tue, 7 Apr 2015 08:20:27 +0200 Subject: [PATCH 149/166] add static flag for exe build if no shared build is requested --- .travis.yml | 10 +++++----- CMakeLists.txt | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index ae3a0b983..0630cc268 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,12 +15,12 @@ env: matrix: - LINUX=1 TRAVIS_NO_EXPORT=YES - LINUX=1 TRAVIS_NO_EXPORT=NO - - LINUX=1 TRAVIS_STATIC_BUILD=ON - - LINUX=1 TRAVIS_STATIC_BUILD=OFF + - LINUX=1 SHARED_BUILD=ON + - LINUX=1 SHARED_BUILD=OFF - WINDOWS=1 TRAVIS_NO_EXPORT=YES - WINDOWS=1 TRAVIS_NO_EXPORT=NO - - WINDOWS=1 TRAVIS_STATIC_BUILD=ON - - WINDOWS=1 TRAVIS_STATIC_BUILD=OFF + - WINDOWS=1 SHARED_BUILD=ON + - WINDOWS=1 SHARED_BUILD=OFF - ANDROID=1 language: cpp @@ -38,7 +38,7 @@ script: elif [ $RESERVED ]; then echo "Reserved condition" ; else - cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD ; + cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD ; make ; sudo make install ; sudo ldconfig ; diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a3a325be..226ab911f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,10 @@ cmake_minimum_required( VERSION 2.8 ) PROJECT( Assimp ) +if(NOT BUILD_SHARED_LIBS) + set(CMAKE_EXE_LINKER_FLAGS "-static") +endif(NOT BUILD_SHARED_LIBS) + # Define here the needed parameters set (ASSIMP_VERSION_MAJOR 3) set (ASSIMP_VERSION_MINOR 1) From 297e1d21171d0e7c3a87c0d036a4a40589c8f3fa Mon Sep 17 00:00:00 2001 From: arris69 Date: Tue, 7 Apr 2015 16:07:29 +0200 Subject: [PATCH 150/166] it's a difference if it's set to OFF or it's undefined... --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 226ab911f..011f66864 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required( VERSION 2.8 ) PROJECT( Assimp ) +option(BUILD_SHARED_LIBS "Build package with shared libraries." OFF) if(NOT BUILD_SHARED_LIBS) set(CMAKE_EXE_LINKER_FLAGS "-static") endif(NOT BUILD_SHARED_LIBS) From 7a6c00ca11e2766331e210a09b54b71b2fbc5e31 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Wed, 8 Apr 2015 12:34:54 +0200 Subject: [PATCH 151/166] looks like cmake is per design not for building static executables, clang too. =%-| --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 011f66864..aa4d35124 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,8 @@ PROJECT( Assimp ) option(BUILD_SHARED_LIBS "Build package with shared libraries." OFF) if(NOT BUILD_SHARED_LIBS) - set(CMAKE_EXE_LINKER_FLAGS "-static") + #set(CMAKE_EXE_LINKER_FLAGS "-static") + set(LINK_SEARCH_START_STATIC 1) endif(NOT BUILD_SHARED_LIBS) # Define here the needed parameters From ed57fac879a980fb6c71ceffd57b59d7b61d88ff Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 8 Apr 2015 20:43:55 +0200 Subject: [PATCH 152/166] create node tree Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 53 ++++++++++++++++++++++++++++++++++------ code/OpenGEXImporter.h | 9 +++++++ 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 2b8fd207f..8454ae1f2 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -211,6 +211,8 @@ OpenGEXImporter::RefInfo::~RefInfo() { //------------------------------------------------------------------------------------------------ OpenGEXImporter::OpenGEXImporter() : m_meshCache() +, m_root( NULL ) +, m_nodeChildMap() , m_mesh2refMap() , m_ctx( NULL ) , m_currentNode( NULL ) @@ -261,6 +263,7 @@ void OpenGEXImporter::InternReadFile( const std::string &filename, aiScene *pSce copyMeshes( pScene ); resolveReferences(); + createNodeTree( pScene ); } //------------------------------------------------------------------------------------------------ @@ -724,6 +727,16 @@ void OpenGEXImporter::handleMaterialNode( ODDLParser::DDLNode *node, aiScene *pS } +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleColorNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + +//------------------------------------------------------------------------------------------------ +void OpenGEXImporter::handleTextureNode( ODDLParser::DDLNode *node, aiScene *pScene ) { + +} + //------------------------------------------------------------------------------------------------ void OpenGEXImporter::copyMeshes( aiScene *pScene ) { if( m_meshCache.empty() ) { @@ -756,7 +769,7 @@ void OpenGEXImporter::resolveReferences() { if( m_mesh2refMap.end() != it ) { unsigned int meshIdx = m_mesh2refMap[ name ]; node->mMeshes[ i ] = meshIdx; - node->mNumMeshes++; + //node->mNumMeshes++; } } } else if( RefInfo::MaterialRef == currentRefInfo->m_type ) { @@ -769,13 +782,21 @@ void OpenGEXImporter::resolveReferences() { } //------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleColorNode( ODDLParser::DDLNode *node, aiScene *pScene ) { - -} - -//------------------------------------------------------------------------------------------------ -void OpenGEXImporter::handleTextureNode( ODDLParser::DDLNode *node, aiScene *pScene ) { +void OpenGEXImporter::createNodeTree( aiScene *pScene ) { + if( NULL == m_root ) { + return; + } + if( m_root->m_children.empty() ) { + return; + } + size_t i( 0 ); + pScene->mRootNode->mNumChildren = m_root->m_children.size(); + pScene->mRootNode->mChildren = new C_STRUCT aiNode*[ pScene->mRootNode->mNumChildren ]; + for( ChildInfo::NodeList::iterator it = m_root->m_children.begin(); it != m_root->m_children.end(); it++ ) { + pScene->mRootNode->mChildren[ i ] = *it; + i++; + } } //------------------------------------------------------------------------------------------------ @@ -783,12 +804,30 @@ void OpenGEXImporter::pushNode( aiNode *node, aiScene *pScene ) { ai_assert( NULL != pScene ); if( NULL != node ) { + ChildInfo *info( NULL ); if( m_nodeStack.empty() ) { node->mParent = pScene->mRootNode; + NodeChildMap::iterator it( m_nodeChildMap.find( node->mParent ) ); + if( m_nodeChildMap.end() == it ) { + info = new ChildInfo; + m_root = info; + m_nodeChildMap[ node->mParent ] = info; + } else { + info = it->second; + } + info->m_children.push_back( node ); } else { aiNode *parent( m_nodeStack.back() ); ai_assert( NULL != parent ); node->mParent = parent; + NodeChildMap::iterator it( m_nodeChildMap.find( node->mParent ) ); + if( m_nodeChildMap.end() == it ) { + info = new ChildInfo; + m_nodeChildMap[ node->mParent ] = info; + } else { + info = it->second; + } + info->m_children.push_back( node ); } m_nodeStack.push_back( node ); } diff --git a/code/OpenGEXImporter.h b/code/OpenGEXImporter.h index f1b608a4b..f5c328ff7 100644 --- a/code/OpenGEXImporter.h +++ b/code/OpenGEXImporter.h @@ -120,6 +120,7 @@ protected: aiNode *popNode(); aiNode *top() const; void clearNodeStack(); + void createNodeTree( aiScene *pScene ); private: struct VertexContainer { @@ -156,6 +157,14 @@ private: RefInfo &operator = ( const RefInfo & ); }; + struct ChildInfo { + typedef std::list NodeList; + std::list m_children; + }; + ChildInfo *m_root; + typedef std::map NodeChildMap; + NodeChildMap m_nodeChildMap; + std::vector m_meshCache; typedef std::map ReferenceMap; std::map m_mesh2refMap; From cdeb95611d03495b5b2f59958009904543df01cd Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sun, 12 Apr 2015 18:16:49 +0200 Subject: [PATCH 153/166] double definition, should better open my eyes... --- CMakeLists.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa4d35124..b31f2c7f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,10 @@ cmake_minimum_required( VERSION 2.8 ) PROJECT( Assimp ) -option(BUILD_SHARED_LIBS "Build package with shared libraries." OFF) +option(BUILD_SHARED_LIBS "Build package with shared libraries." ON) if(NOT BUILD_SHARED_LIBS) #set(CMAKE_EXE_LINKER_FLAGS "-static") - set(LINK_SEARCH_START_STATIC 1) + set(LINK_SEARCH_START_STATIC TRUE) endif(NOT BUILD_SHARED_LIBS) # Define here the needed parameters @@ -94,9 +94,6 @@ SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Debug Postfitx for lib, samples and tools") -# Allow the user to build a shared or static library -option ( BUILD_SHARED_LIBS "Build a shared version of the library" ON ) - # Only generate this target if no higher-level project already has IF (NOT TARGET uninstall) # add make uninstall capability From 2f372c0ac5ad93e128087b565ce3d7d6b3832e9c Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sun, 12 Apr 2015 19:05:27 +0200 Subject: [PATCH 154/166] add the mingw compile step --- .travis.yml | 4 ++++ cmake-modules/MinGW_x86_64.cmake | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 cmake-modules/MinGW_x86_64.cmake diff --git a/.travis.yml b/.travis.yml index 0630cc268..eb89ddf92 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,6 +35,10 @@ install: script: - if [ $ANDROID ]; then ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; + elif [ $WINDOWS ]; then + cmake -G "Unix Makefiles" -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD -DCMAKE_TOOLCHAIN_FILE=cmake-modules/MinGW_x86_64.cmake ; + cmake --build . ; + make install ; elif [ $RESERVED ]; then echo "Reserved condition" ; else diff --git a/cmake-modules/MinGW_x86_64.cmake b/cmake-modules/MinGW_x86_64.cmake new file mode 100644 index 000000000..d5c1f1501 --- /dev/null +++ b/cmake-modules/MinGW_x86_64.cmake @@ -0,0 +1,16 @@ +# this one sets internal to crosscompile (in theory) +SET(CMAKE_SYSTEM_NAME Windows) + +# the minimalistic settings +SET(CMAKE_C_COMPILER "/usr/bin/x86_64-w64-mingw32-gcc") +SET(CMAKE_CXX_COMPILER "/usr/bin/x86_64-w64-mingw32-g++") +SET(CMAKE_RC_COMPILER "/usr/bin/x86_64-w64-mingw32-windres") + +# where is the target (so called staging) environment +SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) + +# search for programs in the build host directories (default BOTH) +#SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# for libraries and headers in the target directories +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) From 20e23fbd0a8f62383e904ee2ac037e56fd31f025 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sun, 12 Apr 2015 19:10:10 +0200 Subject: [PATCH 155/166] i see no reason to check it with clang too. --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index eb89ddf92..2480c4633 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,10 +35,12 @@ install: script: - if [ $ANDROID ]; then ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; - elif [ $WINDOWS ]; then + elif [ $WINDOWS -a $CC = "gcc" ]; then cmake -G "Unix Makefiles" -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD -DCMAKE_TOOLCHAIN_FILE=cmake-modules/MinGW_x86_64.cmake ; cmake --build . ; make install ; + elif [ $WINDOWS ]; then + echo "Skip compile with non-gcc setting." ; elif [ $RESERVED ]; then echo "Reserved condition" ; else From 5f58188de51bb8d17a25fd3f2e275866d36b13c8 Mon Sep 17 00:00:00 2001 From: Ser Lev Arris Date: Sun, 12 Apr 2015 19:12:48 +0200 Subject: [PATCH 156/166] mingwin headers are a bit 'outdated' --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2480c4633..20b7a058a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,8 @@ script: - if [ $ANDROID ]; then ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; elif [ $WINDOWS -a $CC = "gcc" ]; then + sudo sh -c "wget http://source.winehq.org/git/wine.git/commitdiff_plain/86781a6a524fa336f893ffd0a87373ffd306913c?hp=076edfe9d4b6cd39b6cf41b9f1d3e18688cc8673 -O - | patch -p 1 -d /usr/x86_64-w64-mingw32" ; + sudo sh -c "wget https://www.winehq.org/pipermail/wine-patches/2012-February/111438.html -O - | patch -p 1 -d /usr/x86_64-w64-mingw32" ; cmake -G "Unix Makefiles" -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD -DCMAKE_TOOLCHAIN_FILE=cmake-modules/MinGW_x86_64.cmake ; cmake --build . ; make install ; From e2f234707a18cb72530970288ef570a7dafcccac Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Sun, 12 Apr 2015 19:53:24 +0200 Subject: [PATCH 157/166] Fix possible crash in SceneCombiner when the destinations scene has mPrivate==null. Fixes #401. --- code/SceneCombiner.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/SceneCombiner.cpp b/code/SceneCombiner.cpp index f9face9b1..26ed94712 100644 --- a/code/SceneCombiner.cpp +++ b/code/SceneCombiner.cpp @@ -1023,7 +1023,9 @@ void SceneCombiner::CopyScene(aiScene** _dest,const aiScene* src,bool allocate) dest->mFlags = src->mFlags; // source private data might be NULL if the scene is user-allocated (i.e. for use with the export API) - ScenePriv(dest)->mPPStepsApplied = ScenePriv(src) ? ScenePriv(src)->mPPStepsApplied : 0; + if (dest->mPrivate != NULL) { + ScenePriv(dest)->mPPStepsApplied = ScenePriv(src) ? ScenePriv(src)->mPPStepsApplied : 0; + } } // ------------------------------------------------------------------------------------------------ From 806d3ac8e15bf4112dbb7ece7dba8cfc4e688bd0 Mon Sep 17 00:00:00 2001 From: ulf Date: Mon, 13 Apr 2015 16:01:33 +0200 Subject: [PATCH 158/166] - IFC reader regenerated from schema to include IfcArbitraryProfileDefWithVoids - implemented IfcArbitraryProfileDefWithVoids to fix solar panel covers in test\models-nonbsd\IFC\rac_basic_sample_project.ifc - warning: another dirty hack on top of dirty hacks - one day all these CSG implementations will blow up in our faces. Mark my words. --- code/IFCGeometry.cpp | 173 +- code/IFCReaderGen.cpp | 8572 ++++++++++++------------- code/IFCReaderGen.h | 7292 ++++++++++----------- code/IFCUtil.h | 1 + scripts/IFCImporter/entitylist.txt | 9 +- scripts/IFCImporter/schema.exp | 9571 ++++++++++++++++++++++++++++ 6 files changed, 17607 insertions(+), 8011 deletions(-) create mode 100644 scripts/IFCImporter/schema.exp diff --git a/code/IFCGeometry.cpp b/code/IFCGeometry.cpp index d0a55ad5b..1e62147e3 100644 --- a/code/IFCGeometry.cpp +++ b/code/IFCGeometry.cpp @@ -522,43 +522,23 @@ IfcMatrix3 DerivePlaneCoordinateSpace(const TempMesh& curmesh, bool& ok, IfcVect return m; } - -// ------------------------------------------------------------------------------------------------ -void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& result, - ConversionData& conv, bool collect_openings) +// Extrudes the given polygon along the direction, converts it into an opening or applies all openings as necessary. +void ProcessExtrudedArea(const IfcExtrudedAreaSolid& solid, const TempMesh& curve, + const IfcVector3& extrusionDir, TempMesh& result, ConversionData &conv, bool collect_openings) { - TempMesh meshout; - - // First read the profile description - if(!ProcessProfile(*solid.SweptArea,meshout,conv) || meshout.verts.size()<=1) { - return; - } - - IfcVector3 dir; - ConvertDirection(dir,solid.ExtrudedDirection); - - dir *= solid.Depth; /* - if(conv.collect_openings && !conv.apply_openings) { - dir *= 1000.0; - } */ - - // Outline: assuming that `meshout.verts` is now a list of vertex points forming - // the underlying profile, extrude along the given axis, forming new - // triangles. - - std::vector& in = meshout.verts; - const size_t size=in.size(); - - const bool has_area = solid.SweptArea->ProfileType == "AREA" && size>2; - if(solid.Depth < 1e-6) { - if(has_area) { - result = meshout; + // Outline: 'curve' is now a list of vertex points forming the underlying profile, extrude along the given axis, + // forming new triangles. + const bool has_area = solid.SweptArea->ProfileType == "AREA" && curve.verts.size() > 2; + if( solid.Depth < 1e-6 ) { + if( has_area ) { + result.Append(curve); } return; } - result.verts.reserve(size*(has_area?4:2)); - result.vertcnt.reserve(meshout.vertcnt.size()+2); + result.verts.reserve(curve.verts.size()*(has_area ? 4 : 2)); + result.vertcnt.reserve(curve.verts.size() + 2); + std::vector in = curve.verts; // First step: transform all vertices into the target coordinate space IfcMatrix4 trafo; @@ -566,7 +546,7 @@ void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& resul IfcVector3 vmin, vmax; MinMaxChooser()(vmin, vmax); - BOOST_FOREACH(IfcVector3& v,in) { + BOOST_FOREACH(IfcVector3& v, in) { v *= trafo; vmin = std::min(vmin, v); @@ -575,93 +555,91 @@ void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& resul vmax -= vmin; const IfcFloat diag = vmax.Length(); - - IfcVector3 min = in[0]; - dir *= IfcMatrix3(trafo); + IfcVector3 dir = IfcMatrix3(trafo) * extrusionDir; // reverse profile polygon if it's winded in the wrong direction in relation to the extrusion direction - IfcVector3 profileNormal = TempMesh::ComputePolygonNormal( in.data(), in.size()); + IfcVector3 profileNormal = TempMesh::ComputePolygonNormal(in.data(), in.size()); if( profileNormal * dir < 0.0 ) - std::reverse( in.begin(), in.end()); + std::reverse(in.begin(), in.end()); std::vector nors; const bool openings = !!conv.apply_openings && conv.apply_openings->size(); - + // Compute the normal vectors for all opening polygons as a prerequisite // to TryAddOpenings_Poly2Tri() // XXX this belongs into the aforementioned function - if (openings) { + if( openings ) { - if (!conv.settings.useCustomTriangulation) { + if( !conv.settings.useCustomTriangulation ) { // it is essential to apply the openings in the correct spatial order. The direction // doesn't matter, but we would screw up if we started with e.g. a door in between // two windows. - std::sort(conv.apply_openings->begin(),conv.apply_openings->end(), - TempOpening::DistanceSorter(min)); + std::sort(conv.apply_openings->begin(), conv.apply_openings->end(), TempOpening::DistanceSorter(in[0])); } - + nors.reserve(conv.apply_openings->size()); - BOOST_FOREACH(TempOpening& t,*conv.apply_openings) { + BOOST_FOREACH(TempOpening& t, *conv.apply_openings) { TempMesh& bounds = *t.profileMesh.get(); - - if (bounds.verts.size() <= 2) { + + if( bounds.verts.size() <= 2 ) { nors.push_back(IfcVector3()); continue; } - nors.push_back(((bounds.verts[2]-bounds.verts[0])^(bounds.verts[1]-bounds.verts[0]) ).Normalize()); + nors.push_back(((bounds.verts[2] - bounds.verts[0]) ^ (bounds.verts[1] - bounds.verts[0])).Normalize()); } } - + TempMesh temp; TempMesh& curmesh = openings ? temp : result; std::vector& out = curmesh.verts; - + size_t sides_with_openings = 0; - for(size_t i = 0; i < size; ++i) { - const size_t next = (i+1)%size; + for( size_t i = 0; i < in.size(); ++i ) { + const size_t next = (i + 1) % in.size(); curmesh.vertcnt.push_back(4); - + out.push_back(in[i]); out.push_back(in[next]); - out.push_back(in[next]+dir); - out.push_back(in[i]+dir); + out.push_back(in[next] + dir); + out.push_back(in[i] + dir); - if(openings) { - if((in[i]-in[next]).Length() > diag * 0.1 && GenerateOpenings(*conv.apply_openings,nors,temp,true, true, dir)) { + if( openings ) { + if( (in[i] - in[next]).Length() > diag * 0.1 && GenerateOpenings(*conv.apply_openings, nors, temp, true, true, dir) ) { ++sides_with_openings; } - + result.Append(temp); temp.Clear(); } } - if(openings) { + if( openings ) { BOOST_FOREACH(TempOpening& opening, *conv.apply_openings) { - if (!opening.wallPoints.empty()) { + if( !opening.wallPoints.empty() ) { IFCImporter::LogError("failed to generate all window caps"); } opening.wallPoints.clear(); } } - - size_t sides_with_v_openings = 0; - if(has_area) { - for(size_t n = 0; n < 2; ++n) { + size_t sides_with_v_openings = 0; + if( has_area ) { + + for( size_t n = 0; n < 2; ++n ) { if( n > 0 ) { - for(size_t i = 0; i < size; ++i ) - out.push_back(in[i]+dir); - } else { - for(size_t i = size; i--; ) + for( size_t i = 0; i < in.size(); ++i ) + out.push_back(in[i] + dir); + } + else { + for( size_t i = in.size(); i--; ) out.push_back(in[i]); } - curmesh.vertcnt.push_back(size); - if(openings && size > 2) { - if(GenerateOpenings(*conv.apply_openings,nors,temp,true, true, dir)) { + curmesh.vertcnt.push_back(in.size()); + if( openings && in.size() > 2 ) { + if( GenerateOpenings(*conv.apply_openings, nors, temp, true, true, dir) ) { ++sides_with_v_openings; } @@ -671,7 +649,7 @@ void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& resul } } - if(openings && ((sides_with_openings == 1 && sides_with_openings) || (sides_with_v_openings == 2 && sides_with_v_openings))) { + if( openings && ((sides_with_openings == 1 && sides_with_openings) || (sides_with_v_openings == 2 && sides_with_v_openings)) ) { IFCImporter::LogWarn("failed to resolve all openings, presumably their topology is not supported by Assimp"); } @@ -679,17 +657,58 @@ void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& resul // If this is an opening element, store both the extruded mesh and the 2D profile mesh // it was created from. Return an empty mesh to the caller. - if(collect_openings && !result.IsEmpty()) { + if( collect_openings && !result.IsEmpty() ) { ai_assert(conv.collect_openings); boost::shared_ptr profile = boost::shared_ptr(new TempMesh()); profile->Swap(result); boost::shared_ptr profile2D = boost::shared_ptr(new TempMesh()); - profile2D->Swap(meshout); - conv.collect_openings->push_back(TempOpening(&solid,dir,profile, profile2D)); + profile2D->verts.insert(profile2D->verts.end(), in.begin(), in.end()); + profile2D->vertcnt.push_back(in.size()); + conv.collect_openings->push_back(TempOpening(&solid, dir, profile, profile2D)); ai_assert(result.IsEmpty()); - } + } +} + +// ------------------------------------------------------------------------------------------------ +void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& result, + ConversionData& conv, bool collect_openings) +{ + TempMesh meshout; + + // First read the profile description. + if(!ProcessProfile(*solid.SweptArea,meshout,conv) || meshout.verts.size()<=1) { + return; + } + + IfcVector3 dir; + ConvertDirection(dir,solid.ExtrudedDirection); + dir *= solid.Depth; + + // Some profiles bring their own holes, for which we need to provide a container. This all is somewhat backwards, + // and there's still so many corner cases uncovered - we really need a generic solution to all of this hole carving. + std::vector fisherPriceMyFirstOpenings; + std::vector* oldApplyOpenings = conv.apply_openings; + if( const IfcArbitraryProfileDefWithVoids* const cprofile = solid.SweptArea->ToPtr() ) { + if( !cprofile->InnerCurves.empty() ) { + // read all inner curves and extrude them to form proper openings. + std::vector* oldCollectOpenings = conv.collect_openings; + conv.collect_openings = &fisherPriceMyFirstOpenings; + + BOOST_FOREACH(const IfcCurve* curve, cprofile->InnerCurves) { + TempMesh curveMesh, tempMesh; + ProcessCurve(*curve, curveMesh, conv); + ProcessExtrudedArea(solid, curveMesh, dir, tempMesh, conv, true); + } + // and then apply those to the geometry we're about to generate + conv.apply_openings = conv.collect_openings; + conv.collect_openings = oldCollectOpenings; + } + } + + ProcessExtrudedArea(solid, meshout, dir, result, conv, collect_openings); + conv.apply_openings = oldApplyOpenings; } // ------------------------------------------------------------------------------------------------ @@ -784,7 +803,7 @@ bool ProcessGeometricItem(const IfcRepresentationItem& geo, unsigned int matid, meshtmp->RemoveDegenerates(); if(fix_orientation) { - meshtmp->FixupFaceOrientation(); +// meshtmp->FixupFaceOrientation(); } aiMesh* const mesh = meshtmp->ToMesh(); diff --git a/code/IFCReaderGen.cpp b/code/IFCReaderGen.cpp index 00ff4aa35..5e551eec2 100644 --- a/code/IFCReaderGen.cpp +++ b/code/IFCReaderGen.cpp @@ -52,986 +52,986 @@ namespace { typedef EXPRESS::ConversionSchema::SchemaEntry SchemaEntry; const SchemaEntry schema_raw[] = { - SchemaEntry("ifcstairtypeenum",NULL ) -, SchemaEntry("ifcspacetypeenum",NULL ) -, SchemaEntry("ifcwalltypeenum",NULL ) -, SchemaEntry("ifcmonthinyearnumber",NULL ) -, SchemaEntry("ifcheatfluxdensitymeasure",NULL ) -, SchemaEntry("ifckinematicviscositymeasure",NULL ) -, SchemaEntry("ifcsequenceenum",NULL ) -, SchemaEntry("ifcairtoairheatrecoverytypeenum",NULL ) -, SchemaEntry("ifcactorselect",NULL ) -, SchemaEntry("ifctransformertypeenum",NULL ) -, SchemaEntry("ifcunitaryequipmenttypeenum",NULL ) -, SchemaEntry("ifcelectricflowstoragedevicetypeenum",NULL ) -, SchemaEntry("ifcenergysequenceenum",NULL ) -, SchemaEntry("ifcworkcontroltypeenum",NULL ) -, SchemaEntry("ifccurvaturemeasure",NULL ) -, SchemaEntry("ifcparametervalue",NULL ) -, SchemaEntry("ifcappliedvalueselect",NULL ) -, SchemaEntry("ifcwarpingconstantmeasure",NULL ) + SchemaEntry("ifcsiprefix",NULL ) +, SchemaEntry("ifccolour",NULL ) +, SchemaEntry("ifcevaporativecoolertypeenum",NULL ) +, SchemaEntry("ifcmetricvalueselect",NULL ) +, SchemaEntry("ifccurtainwalltypeenum",NULL ) +, SchemaEntry("ifcvolumetricflowratemeasure",NULL ) +, SchemaEntry("ifcphmeasure",NULL ) +, SchemaEntry("ifctimestamp",NULL ) +, SchemaEntry("ifcsoundpressuremeasure",NULL ) , SchemaEntry("ifcarithmeticoperatorenum",NULL ) -, SchemaEntry("ifclinearforcemeasure",NULL ) +, SchemaEntry("ifcoutlettypeenum",NULL ) +, SchemaEntry("ifclamptypeenum",NULL ) +, SchemaEntry("ifcobjectreferenceselect",NULL ) +, SchemaEntry("ifcdatetimeselect",NULL ) +, SchemaEntry("ifcelectricgeneratortypeenum",NULL ) +, SchemaEntry("ifcmoisturediffusivitymeasure",NULL ) +, SchemaEntry("ifccompoundplaneanglemeasure",NULL ) +, SchemaEntry("ifcderivedunitenum",NULL ) +, SchemaEntry("ifcrotationalstiffnessmeasure",NULL ) +, SchemaEntry("ifcpipefittingtypeenum",NULL ) +, SchemaEntry("ifcshearmodulusmeasure",NULL ) +, SchemaEntry("ifccontextdependentmeasure",NULL ) +, SchemaEntry("ifclightfixturetypeenum",NULL ) +, SchemaEntry("ifcresourceconsumptionenum",NULL ) +, SchemaEntry("ifcdistributionchamberelementtypeenum",NULL ) +, SchemaEntry("ifcplaneanglemeasure",NULL ) +, SchemaEntry("ifcslabtypeenum",NULL ) +, SchemaEntry("ifccharacterstyleselect",NULL ) +, SchemaEntry("ifcdimensionextentusage",NULL ) +, SchemaEntry("ifcdynamicviscositymeasure",NULL ) +, SchemaEntry("ifcpropertysourceenum",NULL ) +, SchemaEntry("ifcconstraintenum",NULL ) +, SchemaEntry("ifclayersetdirectionenum",NULL ) +, SchemaEntry("ifcfontvariant",NULL ) +, SchemaEntry("ifcmodulusofelasticitymeasure",NULL ) +, SchemaEntry("ifcdoorpanelpositionenum",NULL ) +, SchemaEntry("ifcwindowstyleconstructionenum",NULL ) +, SchemaEntry("ifcamountofsubstancemeasure",NULL ) +, SchemaEntry("ifccurvaturemeasure",NULL ) +, SchemaEntry("ifccablecarrierfittingtypeenum",NULL ) +, SchemaEntry("ifcminuteinhour",NULL ) +, SchemaEntry("ifcpressuremeasure",NULL ) +, SchemaEntry("ifcelectricconductancemeasure",NULL ) +, SchemaEntry("ifcisothermalmoisturecapacitymeasure",NULL ) +, SchemaEntry("ifcfantypeenum",NULL ) +, SchemaEntry("ifccurveoredgecurve",NULL ) +, SchemaEntry("ifcpipesegmenttypeenum",NULL ) +, SchemaEntry("ifcevaporatortypeenum",NULL ) +, SchemaEntry("ifcelectriccapacitancemeasure",NULL ) +, SchemaEntry("ifcelementassemblytypeenum",NULL ) +, SchemaEntry("ifcelectriccurrentmeasure",NULL ) +, SchemaEntry("ifcthermaladmittancemeasure",NULL ) +, SchemaEntry("ifclibraryselect",NULL ) +, SchemaEntry("ifcsanitaryterminaltypeenum",NULL ) +, SchemaEntry("ifcvalue",NULL ) +, SchemaEntry("ifcroleenum",NULL ) +, SchemaEntry("ifcmodulusofrotationalsubgradereactionmeasure",NULL ) +, SchemaEntry("ifcwindowstyleoperationenum",NULL ) +, SchemaEntry("ifcdayinmonthnumber",NULL ) +, SchemaEntry("ifcdirectionsenseenum",NULL ) +, SchemaEntry("ifcmotorconnectiontypeenum",NULL ) +, SchemaEntry("ifcmassdensitymeasure",NULL ) +, SchemaEntry("ifcspacetypeenum",NULL ) +, SchemaEntry("ifctextalignment",NULL ) +, SchemaEntry("ifcabsorbeddosemeasure",NULL ) +, SchemaEntry("ifcobjectiveenum",NULL ) +, SchemaEntry("ifcsoundscaleenum",NULL ) +, SchemaEntry("ifcilluminancemeasure",NULL ) +, SchemaEntry("ifcdoseequivalentmeasure",NULL ) +, SchemaEntry("ifcpowermeasure",NULL ) +, SchemaEntry("ifcelectricvoltagemeasure",NULL ) +, SchemaEntry("ifcfootingtypeenum",NULL ) +, SchemaEntry("ifcfontstyle",NULL ) +, SchemaEntry("ifcshell",NULL ) +, SchemaEntry("ifcpermeablecoveringoperationenum",NULL ) +, SchemaEntry("ifcwarpingmomentmeasure",NULL ) +, SchemaEntry("ifcsectionalareaintegralmeasure",NULL ) +, SchemaEntry("ifcmodulusofsubgradereactionmeasure",NULL ) +, SchemaEntry("ifcrotationalfrequencymeasure",NULL ) +, SchemaEntry("ifcfillareastyletileshapeselect",NULL ) +, SchemaEntry("ifcloadgrouptypeenum",NULL ) +, SchemaEntry("ifcsolidanglemeasure",NULL ) +, SchemaEntry("ifccolourorfactor",NULL ) +, SchemaEntry("ifchourinday",NULL ) +, SchemaEntry("ifclinearstiffnessmeasure",NULL ) +, SchemaEntry("ifctimemeasure",NULL ) +, SchemaEntry("ifcboxalignment",NULL ) +, SchemaEntry("ifcelectricflowstoragedevicetypeenum",NULL ) +, SchemaEntry("ifcorientationselect",NULL ) +, SchemaEntry("ifcsecondinminute",NULL ) +, SchemaEntry("ifcworkcontroltypeenum",NULL ) +, SchemaEntry("ifcheatfluxdensitymeasure",NULL ) +, SchemaEntry("ifcsizeselect",NULL ) +, SchemaEntry("ifcdimensioncount",NULL ) +, SchemaEntry("ifcvalvetypeenum",NULL ) +, SchemaEntry("ifctransportelementtypeenum",NULL ) +, SchemaEntry("ifcinductancemeasure",NULL ) +, SchemaEntry("ifcyearnumber",NULL ) +, SchemaEntry("ifcdoorstyleconstructionenum",NULL ) +, SchemaEntry("ifcthermalexpansioncoefficientmeasure",NULL ) +, SchemaEntry("ifccompressortypeenum",NULL ) +, SchemaEntry("ifcaxis2placement",NULL ) +, SchemaEntry("ifcswitchingdevicetypeenum",NULL ) +, SchemaEntry("ifcdocumentconfidentialityenum",NULL ) +, SchemaEntry("ifcgasterminaltypeenum",NULL ) +, SchemaEntry("ifcservicelifetypeenum",NULL ) +, SchemaEntry("ifcintegercountratemeasure",NULL ) +, SchemaEntry("ifcdocumentstatusenum",NULL ) +, SchemaEntry("ifcspaceheatertypeenum",NULL ) +, SchemaEntry("ifcwasteterminaltypeenum",NULL ) +, SchemaEntry("ifcairterminaltypeenum",NULL ) +, SchemaEntry("ifcprojectedortruelengthenum",NULL ) +, SchemaEntry("ifcductfittingtypeenum",NULL ) +, SchemaEntry("ifclabel",NULL ) +, SchemaEntry("ifctextfontselect",NULL ) +, SchemaEntry("ifcanalysistheorytypeenum",NULL ) +, SchemaEntry("ifcprojectorderrecordtypeenum",NULL ) +, SchemaEntry("ifcunit",NULL ) , SchemaEntry("ifcwindowpanelpositionenum",NULL ) -, SchemaEntry("ifcflowmetertypeenum",NULL ) +, SchemaEntry("ifcsymbolstyleselect",NULL ) +, SchemaEntry("ifcwalltypeenum",NULL ) +, SchemaEntry("ifclightemissionsourceenum",NULL ) +, SchemaEntry("ifcmodulusoflinearsubgradereactionmeasure",NULL ) +, SchemaEntry("ifcspecularroughness",NULL ) +, SchemaEntry("ifctendontypeenum",NULL ) +, SchemaEntry("ifcelectricmotortypeenum",NULL ) +, SchemaEntry("ifccurvestylefontselect",NULL ) +, SchemaEntry("ifcplanarforcemeasure",NULL ) +, SchemaEntry("ifccoiltypeenum",NULL ) +, SchemaEntry("ifcsimplevalue",NULL ) +, SchemaEntry("ifclogicaloperatorenum",NULL ) +, SchemaEntry("ifctransformertypeenum",NULL ) +, SchemaEntry("ifcvaporpermeabilitymeasure",NULL ) +, SchemaEntry("ifcmassflowratemeasure",NULL ) +, SchemaEntry("ifcbooleanoperator",NULL ) +, SchemaEntry("ifcradioactivitymeasure",NULL ) +, SchemaEntry("ifcsurfaceside",NULL ) +, SchemaEntry("ifcribplatedirectionenum",NULL ) +, SchemaEntry("ifcgeometricsetselect",NULL ) +, SchemaEntry("ifcvolumemeasure",NULL ) +, SchemaEntry("ifcdoorpaneloperationenum",NULL ) +, SchemaEntry("ifcelectricheatertypeenum",NULL ) +, SchemaEntry("ifcmagneticfluxmeasure",NULL ) +, SchemaEntry("ifcthermaltransmittancemeasure",NULL ) +, SchemaEntry("ifcstructuralcurvetypeenum",NULL ) +, SchemaEntry("ifcmonetarymeasure",NULL ) +, SchemaEntry("ifcassemblyplaceenum",NULL ) +, SchemaEntry("ifcreinforcingbarsurfaceenum",NULL ) +, SchemaEntry("ifcpointorvertexpoint",NULL ) +, SchemaEntry("ifcspecificheatcapacitymeasure",NULL ) +, SchemaEntry("ifcchangeactionenum",NULL ) +, SchemaEntry("ifcelectricdistributionpointfunctionenum",NULL ) +, SchemaEntry("ifcbuildingelementproxytypeenum",NULL ) +, SchemaEntry("ifcsequenceenum",NULL ) +, SchemaEntry("ifcaheadorbehind",NULL ) +, SchemaEntry("ifcprojectordertypeenum",NULL ) +, SchemaEntry("ifctextstyleselect",NULL ) +, SchemaEntry("ifccooledbeamtypeenum",NULL ) +, SchemaEntry("ifcconnectiontypeenum",NULL ) +, SchemaEntry("ifcsensortypeenum",NULL ) +, SchemaEntry("ifctrimmingpreference",NULL ) +, SchemaEntry("ifcstructuralsurfacetypeenum",NULL ) +, SchemaEntry("ifccostscheduletypeenum",NULL ) +, SchemaEntry("ifcsoundpowermeasure",NULL ) +, SchemaEntry("ifcstairflighttypeenum",NULL ) +, SchemaEntry("ifcductsegmenttypeenum",NULL ) +, SchemaEntry("ifcservicelifefactortypeenum",NULL ) +, SchemaEntry("ifcbsplinecurveform",NULL ) +, SchemaEntry("ifcluminousintensitymeasure",NULL ) +, SchemaEntry("ifccoolingtowertypeenum",NULL ) +, SchemaEntry("ifcunitenum",NULL ) +, SchemaEntry("ifcpositiveplaneanglemeasure",NULL ) +, SchemaEntry("ifclightdistributiondatasourceselect",NULL ) +, SchemaEntry("ifckinematicviscositymeasure",NULL ) +, SchemaEntry("ifcdampertypeenum",NULL ) +, SchemaEntry("ifcvectorordirection",NULL ) +, SchemaEntry("ifcjunctionboxtypeenum",NULL ) +, SchemaEntry("ifcactorselect",NULL ) +, SchemaEntry("ifcelectricappliancetypeenum",NULL ) +, SchemaEntry("ifcthermodynamictemperaturemeasure",NULL ) +, SchemaEntry("ifcmomentofinertiameasure",NULL ) +, SchemaEntry("ifcmonthinyearnumber",NULL ) +, SchemaEntry("ifcstairtypeenum",NULL ) +, SchemaEntry("ifcprotectivedevicetypeenum",NULL ) +, SchemaEntry("ifctextdecoration",NULL ) +, SchemaEntry("ifcunitaryequipmenttypeenum",NULL ) +, SchemaEntry("ifcelementcompositionenum",NULL ) +, SchemaEntry("ifccurvefontorscaledcurvefontselect",NULL ) +, SchemaEntry("ifcdescriptivemeasure",NULL ) +, SchemaEntry("ifcprofiletypeenum",NULL ) +, SchemaEntry("ifcdoorstyleoperationenum",NULL ) +, SchemaEntry("ifctorquemeasure",NULL ) +, SchemaEntry("ifcdaylightsavinghour",NULL ) +, SchemaEntry("ifcrotationalmassmeasure",NULL ) +, SchemaEntry("ifcnullstyle",NULL ) +, SchemaEntry("ifcfiresuppressionterminaltypeenum",NULL ) +, SchemaEntry("ifcheatingvaluemeasure",NULL ) , SchemaEntry("ifcrampflighttypeenum",NULL ) , SchemaEntry("ifcspecularhighlightselect",NULL ) -, SchemaEntry("ifcactiontypeenum",NULL ) -, SchemaEntry("ifcgeometricprojectionenum",NULL ) -, SchemaEntry("ifctimeseriesdatatypeenum",NULL ) -, SchemaEntry("ifcmagneticfluxmeasure",NULL ) -, SchemaEntry("ifcobjecttypeenum",NULL ) -, SchemaEntry("ifcdataoriginenum",NULL ) -, SchemaEntry("ifcmassdensitymeasure",NULL ) -, SchemaEntry("ifclightfixturetypeenum",NULL ) -, SchemaEntry("ifcservicelifetypeenum",NULL ) -, SchemaEntry("ifcelectricvoltagemeasure",NULL ) -, SchemaEntry("ifcheatingvaluemeasure",NULL ) -, SchemaEntry("ifcpresentabletext",NULL ) -, SchemaEntry("ifcaheadorbehind",NULL ) -, SchemaEntry("ifcsimplevalue",NULL ) -, SchemaEntry("ifcsensortypeenum",NULL ) -, SchemaEntry("ifcderivedunitenum",NULL ) -, SchemaEntry("ifcsizeselect",NULL ) -, SchemaEntry("ifctransportelementtypeenum",NULL ) -, SchemaEntry("ifcinventorytypeenum",NULL ) -, SchemaEntry("ifctextdecoration",NULL ) -, SchemaEntry("ifcdirectionsenseenum",NULL ) -, SchemaEntry("ifcductfittingtypeenum",NULL ) -, SchemaEntry("ifcdocumentstatusenum",NULL ) -, SchemaEntry("ifcslabtypeenum",NULL ) -, SchemaEntry("ifcdoorstyleconstructionenum",NULL ) -, SchemaEntry("ifcvolumemeasure",NULL ) -, SchemaEntry("ifcinductancemeasure",NULL ) -, SchemaEntry("ifccurtainwalltypeenum",NULL ) -, SchemaEntry("ifcsiunitname",NULL ) -, SchemaEntry("ifcspecularexponent",NULL ) -, SchemaEntry("ifcsoundpressuremeasure",NULL ) -, SchemaEntry("ifcanalysistheorytypeenum",NULL ) -, SchemaEntry("ifcgasterminaltypeenum",NULL ) -, SchemaEntry("ifcyearnumber",NULL ) -, SchemaEntry("ifcmodulusofelasticitymeasure",NULL ) -, SchemaEntry("ifcchangeactionenum",NULL ) -, SchemaEntry("ifcdampertypeenum",NULL ) -, SchemaEntry("ifcevaporatortypeenum",NULL ) -, SchemaEntry("ifcionconcentrationmeasure",NULL ) -, SchemaEntry("ifcductsegmenttypeenum",NULL ) -, SchemaEntry("ifcprotectivedevicetypeenum",NULL ) -, SchemaEntry("ifcabsorbeddosemeasure",NULL ) -, SchemaEntry("ifcmassperlengthmeasure",NULL ) -, SchemaEntry("ifctextfontname",NULL ) -, SchemaEntry("ifcorientationselect",NULL ) -, SchemaEntry("ifcilluminancemeasure",NULL ) -, SchemaEntry("ifcfiresuppressionterminaltypeenum",NULL ) -, SchemaEntry("ifcfontstyle",NULL ) -, SchemaEntry("ifcmomentofinertiameasure",NULL ) -, SchemaEntry("ifcmodulusofsubgradereactionmeasure",NULL ) -, SchemaEntry("ifccomplexnumber",NULL ) -, SchemaEntry("ifchumidifiertypeenum",NULL ) -, SchemaEntry("ifcpresentationstyleselect",NULL ) -, SchemaEntry("ifcthermaltransmittancemeasure",NULL ) -, SchemaEntry("ifcribplatedirectionenum",NULL ) -, SchemaEntry("ifcclassificationnotationselect",NULL ) -, SchemaEntry("ifcminuteinhour",NULL ) -, SchemaEntry("ifcinternalorexternalenum",NULL ) -, SchemaEntry("ifcrotationalfrequencymeasure",NULL ) -, SchemaEntry("ifcsanitaryterminaltypeenum",NULL ) -, SchemaEntry("ifcsymbolstyleselect",NULL ) -, SchemaEntry("ifcelementcompositionenum",NULL ) -, SchemaEntry("ifctextpath",NULL ) -, SchemaEntry("ifcpowermeasure",NULL ) -, SchemaEntry("ifcsurfacestyleelementselect",NULL ) -, SchemaEntry("ifcresourceconsumptionenum",NULL ) -, SchemaEntry("ifcelectriccapacitancemeasure",NULL ) -, SchemaEntry("ifclayersetdirectionenum",NULL ) -, SchemaEntry("ifcrailingtypeenum",NULL ) -, SchemaEntry("ifcobjectiveenum",NULL ) -, SchemaEntry("ifcdocumentselect",NULL ) -, SchemaEntry("ifcmodulusoflinearsubgradereactionmeasure",NULL ) -, SchemaEntry("ifcthermaladmittancemeasure",NULL ) -, SchemaEntry("ifctransitioncode",NULL ) -, SchemaEntry("ifcconnectiontypeenum",NULL ) -, SchemaEntry("ifcmonetarymeasure",NULL ) -, SchemaEntry("ifcstackterminaltypeenum",NULL ) -, SchemaEntry("ifccolour",NULL ) -, SchemaEntry("ifctext",NULL ) -, SchemaEntry("ifccontextdependentmeasure",NULL ) -, SchemaEntry("ifcthermalconductivitymeasure",NULL ) -, SchemaEntry("ifcprojectedortruelengthenum",NULL ) -, SchemaEntry("ifcpressuremeasure",NULL ) -, SchemaEntry("ifcmoisturediffusivitymeasure",NULL ) -, SchemaEntry("ifcbooleanoperator",NULL ) -, SchemaEntry("ifcpropertysourceenum",NULL ) -, SchemaEntry("ifctimestamp",NULL ) -, SchemaEntry("ifcmaterialselect",NULL ) -, SchemaEntry("ifcgloballyuniqueid",NULL ) -, SchemaEntry("ifcreflectancemethodenum",NULL ) -, SchemaEntry("ifcvaporpermeabilitymeasure",NULL ) -, SchemaEntry("ifctimeseriesscheduletypeenum",NULL ) -, SchemaEntry("ifclinearmomentmeasure",NULL ) -, SchemaEntry("ifcgeometricsetselect",NULL ) -, SchemaEntry("ifcsectionmodulusmeasure",NULL ) -, SchemaEntry("ifcbsplinecurveform",NULL ) -, SchemaEntry("ifcdimensionextentusage",NULL ) -, SchemaEntry("ifcthermalexpansioncoefficientmeasure",NULL ) -, SchemaEntry("ifchourinday",NULL ) -, SchemaEntry("ifclinearvelocitymeasure",NULL ) -, SchemaEntry("ifctorquemeasure",NULL ) -, SchemaEntry("ifctemperaturegradientmeasure",NULL ) -, SchemaEntry("ifcfillstyleselect",NULL ) -, SchemaEntry("ifcelectricchargemeasure",NULL ) -, SchemaEntry("ifcheatexchangertypeenum",NULL ) -, SchemaEntry("ifcelectriccurrentenum",NULL ) -, SchemaEntry("ifcdaylightsavinghour",NULL ) -, SchemaEntry("ifcshell",NULL ) -, SchemaEntry("ifcdoseequivalentmeasure",NULL ) -, SchemaEntry("ifcprojectordertypeenum",NULL ) -, SchemaEntry("ifcderivedmeasurevalue",NULL ) -, SchemaEntry("ifclightdistributioncurveenum",NULL ) -, SchemaEntry("ifcwarpingmomentmeasure",NULL ) -, SchemaEntry("ifcmembertypeenum",NULL ) -, SchemaEntry("ifcsoundpowermeasure",NULL ) -, SchemaEntry("ifctextalignment",NULL ) -, SchemaEntry("ifccurveoredgecurve",NULL ) -, SchemaEntry("ifcmassflowratemeasure",NULL ) -, SchemaEntry("ifcisothermalmoisturecapacitymeasure",NULL ) -, SchemaEntry("ifccsgselect",NULL ) -, SchemaEntry("ifccoolingtowertypeenum",NULL ) -, SchemaEntry("ifcmassmeasure",NULL ) -, SchemaEntry("ifcpileconstructionenum",NULL ) -, SchemaEntry("ifcdoorstyleoperationenum",NULL ) -, SchemaEntry("ifcflowdirectionenum",NULL ) -, SchemaEntry("ifcthermalloadsourceenum",NULL ) -, SchemaEntry("ifclengthmeasure",NULL ) -, SchemaEntry("ifcconstraintenum",NULL ) -, SchemaEntry("ifcaxis2placement",NULL ) -, SchemaEntry("ifcloadgrouptypeenum",NULL ) -, SchemaEntry("ifcvalue",NULL ) -, SchemaEntry("ifcreinforcingbarsurfaceenum",NULL ) -, SchemaEntry("ifcprojectorderrecordtypeenum",NULL ) -, SchemaEntry("ifcdatetimeselect",NULL ) -, SchemaEntry("ifcstructuralsurfacetypeenum",NULL ) -, SchemaEntry("ifcpermeablecoveringoperationenum",NULL ) -, SchemaEntry("ifcfontweight",NULL ) -, SchemaEntry("ifcphmeasure",NULL ) -, SchemaEntry("ifcdescriptivemeasure",NULL ) -, SchemaEntry("ifccurvestylefontselect",NULL ) -, SchemaEntry("ifcunit",NULL ) -, SchemaEntry("ifchatchlinedistanceselect",NULL ) -, SchemaEntry("ifctextstyleselect",NULL ) -, SchemaEntry("ifcmetricvalueselect",NULL ) -, SchemaEntry("ifcvectorordirection",NULL ) -, SchemaEntry("ifcassemblyplaceenum",NULL ) -, SchemaEntry("ifcairterminaltypeenum",NULL ) -, SchemaEntry("ifccoveringtypeenum",NULL ) -, SchemaEntry("ifcplanarforcemeasure",NULL ) -, SchemaEntry("ifcvalvetypeenum",NULL ) -, SchemaEntry("ifcalarmtypeenum",NULL ) -, SchemaEntry("ifcdynamicviscositymeasure",NULL ) -, SchemaEntry("ifccurrencyenum",NULL ) -, SchemaEntry("ifcmodulusofrotationalsubgradereactionmeasure",NULL ) -, SchemaEntry("ifccablecarrierfittingtypeenum",NULL ) -, SchemaEntry("ifcboolean",NULL ) -, SchemaEntry("ifcactionsourcetypeenum",NULL ) -, SchemaEntry("ifcstructuralactivityassignmentselect",NULL ) -, SchemaEntry("ifcdistributionchamberelementtypeenum",NULL ) -, SchemaEntry("ifcevaporativecoolertypeenum",NULL ) -, SchemaEntry("ifcmagneticfluxdensitymeasure",NULL ) -, SchemaEntry("ifclightdistributiondatasourceselect",NULL ) -, SchemaEntry("ifctubebundletypeenum",NULL ) -, SchemaEntry("ifcaccelerationmeasure",NULL ) -, SchemaEntry("ifcboilertypeenum",NULL ) -, SchemaEntry("ifcramptypeenum",NULL ) -, SchemaEntry("ifcluminousintensitydistributionmeasure",NULL ) -, SchemaEntry("ifctrimmingpreference",NULL ) -, SchemaEntry("ifcspecificheatcapacitymeasure",NULL ) -, SchemaEntry("ifcamountofsubstancemeasure",NULL ) -, SchemaEntry("ifcroleenum",NULL ) -, SchemaEntry("ifcdocumentconfidentialityenum",NULL ) -, SchemaEntry("ifcfrequencymeasure",NULL ) -, SchemaEntry("ifcsectiontypeenum",NULL ) -, SchemaEntry("ifcelementassemblytypeenum",NULL ) -, SchemaEntry("ifcfootingtypeenum",NULL ) -, SchemaEntry("ifclayereditem",NULL ) -, SchemaEntry("ifccablesegmenttypeenum",NULL ) -, SchemaEntry("ifcdefinedsymbolselect",NULL ) -, SchemaEntry("ifcbuildingelementproxytypeenum",NULL ) -, SchemaEntry("ifcelectricgeneratortypeenum",NULL ) -, SchemaEntry("ifcrotationalstiffnessmeasure",NULL ) -, SchemaEntry("ifcspaceheatertypeenum",NULL ) -, SchemaEntry("ifcareameasure",NULL ) -, SchemaEntry("ifclabel",NULL ) -, SchemaEntry("ifccostscheduletypeenum",NULL ) -, SchemaEntry("ifcswitchingdevicetypeenum",NULL ) -, SchemaEntry("ifcelectrictimecontroltypeenum",NULL ) -, SchemaEntry("ifcfiltertypeenum",NULL ) -, SchemaEntry("ifcpositivelengthmeasure",NULL ) -, SchemaEntry("ifcnullstyle",NULL ) -, SchemaEntry("ifcconditioncriterionselect",NULL ) -, SchemaEntry("ifcshearmodulusmeasure",NULL ) -, SchemaEntry("ifcnormalisedratiomeasure",NULL ) -, SchemaEntry("ifcdoorpaneloperationenum",NULL ) -, SchemaEntry("ifcpointorvertexpoint",NULL ) -, SchemaEntry("ifcrooftypeenum",NULL ) -, SchemaEntry("ifccountmeasure",NULL ) -, SchemaEntry("ifcelectricconductancemeasure",NULL ) -, SchemaEntry("ifcproceduretypeenum",NULL ) -, SchemaEntry("ifcflowinstrumenttypeenum",NULL ) -, SchemaEntry("ifcelectricmotortypeenum",NULL ) -, SchemaEntry("ifcsurfaceside",NULL ) -, SchemaEntry("ifcstructuralcurvetypeenum",NULL ) -, SchemaEntry("ifccondensertypeenum",NULL ) -, SchemaEntry("ifclinearstiffnessmeasure",NULL ) -, SchemaEntry("ifcunitenum",NULL ) -, SchemaEntry("ifcoccupanttypeenum",NULL ) , SchemaEntry("ifcthermalloadtypeenum",NULL ) -, SchemaEntry("ifcreinforcingbarroleenum",NULL ) -, SchemaEntry("ifcbenchmarkenum",NULL ) -, SchemaEntry("ifcpositiveplaneanglemeasure",NULL ) -, SchemaEntry("ifctexttransformation",NULL ) -, SchemaEntry("ifcdraughtingcalloutelement",NULL ) -, SchemaEntry("ifcratiomeasure",NULL ) -, SchemaEntry("ifcsolidanglemeasure",NULL ) -, SchemaEntry("ifcpipesegmenttypeenum",NULL ) -, SchemaEntry("ifccablecarriersegmenttypeenum",NULL ) -, SchemaEntry("ifccolourorfactor",NULL ) -, SchemaEntry("ifcidentifier",NULL ) -, SchemaEntry("ifctendontypeenum",NULL ) -, SchemaEntry("ifccontrollertypeenum",NULL ) -, SchemaEntry("ifcradioactivitymeasure",NULL ) -, SchemaEntry("ifctimemeasure",NULL ) -, SchemaEntry("ifcpumptypeenum",NULL ) -, SchemaEntry("ifcelectricheatertypeenum",NULL ) -, SchemaEntry("ifcbeamtypeenum",NULL ) -, SchemaEntry("ifcstateenum",NULL ) -, SchemaEntry("ifcsiprefix",NULL ) -, SchemaEntry("ifcnumericmeasure",NULL ) -, SchemaEntry("ifcoutlettypeenum",NULL ) -, SchemaEntry("ifccompoundplaneanglemeasure",NULL ) -, SchemaEntry("ifcservicelifefactortypeenum",NULL ) -, SchemaEntry("ifclogicaloperatorenum",NULL ) -, SchemaEntry("ifcbooleanoperand",NULL ) -, SchemaEntry("ifcobjectreferenceselect",NULL ) -, SchemaEntry("ifccooledbeamtypeenum",NULL ) -, SchemaEntry("ifcductsilencertypeenum",NULL ) -, SchemaEntry("ifcsectionalareaintegralmeasure",NULL ) -, SchemaEntry("ifcfontvariant",NULL ) -, SchemaEntry("ifcvolumetricflowratemeasure",NULL ) -, SchemaEntry("ifcplatetypeenum",NULL ) -, SchemaEntry("ifcenvironmentalimpactcategoryenum",NULL ) , SchemaEntry("ifcvibrationisolatortypeenum",NULL ) -, SchemaEntry("ifcthermodynamictemperaturemeasure",NULL ) -, SchemaEntry("ifcrotationalmassmeasure",NULL ) -, SchemaEntry("ifcsecondinminute",NULL ) -, SchemaEntry("ifcdayinmonthnumber",NULL ) -, SchemaEntry("ifcdimensioncount",NULL ) -, SchemaEntry("ifcwindowstyleoperationenum",NULL ) -, SchemaEntry("ifcthermalresistancemeasure",NULL ) -, SchemaEntry("ifcmeasurevalue",NULL ) -, SchemaEntry("ifcwindowpaneloperationenum",NULL ) -, SchemaEntry("ifcchillertypeenum",NULL ) -, SchemaEntry("ifcpositiveratiomeasure",NULL ) -, SchemaEntry("ifcinteger",NULL ) -, SchemaEntry("ifclogical",NULL ) -, SchemaEntry("ifcjunctionboxtypeenum",NULL ) -, SchemaEntry("ifcaddresstypeenum",NULL ) -, SchemaEntry("ifcwasteterminaltypeenum",NULL ) -, SchemaEntry("ifctrimmingselect",NULL ) -, SchemaEntry("ifclightemissionsourceenum",NULL ) -, SchemaEntry("ifcsoundscaleenum",NULL ) -, SchemaEntry("ifcluminousfluxmeasure",NULL ) -, SchemaEntry("ifcelectricresistancemeasure",NULL ) -, SchemaEntry("ifcintegercountratemeasure",NULL ) -, SchemaEntry("ifcphysicalorvirtualenum",NULL ) -, SchemaEntry("ifcmolecularweightmeasure",NULL ) -, SchemaEntry("ifcprofiletypeenum",NULL ) -, SchemaEntry("ifcboxalignment",NULL ) -, SchemaEntry("ifcglobalorlocalenum",NULL ) -, SchemaEntry("ifcspecularroughness",NULL ) -, SchemaEntry("ifclamptypeenum",NULL ) -, SchemaEntry("ifcpiletypeenum",NULL ) -, SchemaEntry("ifcelectriccurrentmeasure",NULL ) -, SchemaEntry("ifcfantypeenum",NULL ) -, SchemaEntry("ifcsurfaceorfacesurface",NULL ) -, SchemaEntry("ifcpipefittingtypeenum",NULL ) -, SchemaEntry("ifctanktypeenum",NULL ) -, SchemaEntry("ifccurvefontorscaledcurvefontselect",NULL ) -, SchemaEntry("ifcwindowstyleconstructionenum",NULL ) -, SchemaEntry("ifcairterminalboxtypeenum",NULL ) -, SchemaEntry("ifcstairflighttypeenum",NULL ) -, SchemaEntry("ifcluminousintensitymeasure",NULL ) -, SchemaEntry("ifcmotorconnectiontypeenum",NULL ) -, SchemaEntry("ifcplaneanglemeasure",NULL ) -, SchemaEntry("ifcactuatortypeenum",NULL ) -, SchemaEntry("ifccolumntypeenum",NULL ) -, SchemaEntry("ifctextfontselect",NULL ) -, SchemaEntry("ifcdoorpanelpositionenum",NULL ) -, SchemaEntry("ifccoiltypeenum",NULL ) -, SchemaEntry("ifcangularvelocitymeasure",NULL ) +, SchemaEntry("ifcfillstyleselect",NULL ) +, SchemaEntry("ifcobjecttypeenum",NULL ) +, SchemaEntry("ifchatchlinedistanceselect",NULL ) +, SchemaEntry("ifcpresentabletext",NULL ) , SchemaEntry("ifcanalysismodeltypeenum",NULL ) -, SchemaEntry("ifclibraryselect",NULL ) -, SchemaEntry("ifcforcemeasure",NULL ) -, SchemaEntry("ifcfillareastyletileshapeselect",NULL ) -, SchemaEntry("ifcelectricappliancetypeenum",NULL ) +, SchemaEntry("ifcangularvelocitymeasure",NULL ) +, SchemaEntry("ifcaccelerationmeasure",NULL ) +, SchemaEntry("ifcthermalloadsourceenum",NULL ) +, SchemaEntry("ifcflowdirectionenum",NULL ) +, SchemaEntry("ifctanktypeenum",NULL ) , SchemaEntry("ifcsurfacetextureenum",NULL ) -, SchemaEntry("ifccharacterstyleselect",NULL ) -, SchemaEntry("ifcenergymeasure",NULL ) +, SchemaEntry("ifctimeseriesdatatypeenum",NULL ) +, SchemaEntry("ifcphysicalorvirtualenum",NULL ) +, SchemaEntry("ifcdraughtingcalloutelement",NULL ) +, SchemaEntry("ifcdocumentselect",NULL ) +, SchemaEntry("ifcthermalresistancemeasure",NULL ) +, SchemaEntry("ifctemperaturegradientmeasure",NULL ) +, SchemaEntry("ifccomplexnumber",NULL ) +, SchemaEntry("ifcgeometricprojectionenum",NULL ) +, SchemaEntry("ifcglobalorlocalenum",NULL ) +, SchemaEntry("ifcareameasure",NULL ) +, SchemaEntry("ifccsgselect",NULL ) +, SchemaEntry("ifcoccupanttypeenum",NULL ) +, SchemaEntry("ifcenergysequenceenum",NULL ) +, SchemaEntry("ifcflowmetertypeenum",NULL ) +, SchemaEntry("ifcsectionmodulusmeasure",NULL ) +, SchemaEntry("ifcairterminalboxtypeenum",NULL ) +, SchemaEntry("ifcidentifier",NULL ) +, SchemaEntry("ifcinteger",NULL ) +, SchemaEntry("ifcproceduretypeenum",NULL ) +, SchemaEntry("ifcbenchmarkenum",NULL ) +, SchemaEntry("ifcwindowpaneloperationenum",NULL ) +, SchemaEntry("ifctrimmingselect",NULL ) , SchemaEntry("ifcreal",NULL ) -, SchemaEntry("ifccompressortypeenum",NULL ) -, SchemaEntry("ifcelectricdistributionpointfunctionenum",NULL ) +, SchemaEntry("ifcsurfacestyleelementselect",NULL ) +, SchemaEntry("ifcairtoairheatrecoverytypeenum",NULL ) +, SchemaEntry("ifcnormalisedratiomeasure",NULL ) +, SchemaEntry("ifccablesegmenttypeenum",NULL ) +, SchemaEntry("ifcbeamtypeenum",NULL ) +, SchemaEntry("ifcbooleanoperand",NULL ) +, SchemaEntry("ifcfrequencymeasure",NULL ) +, SchemaEntry("ifcdataoriginenum",NULL ) +, SchemaEntry("ifcalarmtypeenum",NULL ) +, SchemaEntry("ifcmassmeasure",NULL ) +, SchemaEntry("ifcstateenum",NULL ) +, SchemaEntry("ifcstackterminaltypeenum",NULL ) +, SchemaEntry("ifcreinforcingbarroleenum",NULL ) +, SchemaEntry("ifcelectrictimecontroltypeenum",NULL ) +, SchemaEntry("ifcinternalorexternalenum",NULL ) +, SchemaEntry("ifcductsilencertypeenum",NULL ) +, SchemaEntry("ifcconditioncriterionselect",NULL ) +, SchemaEntry("ifchumidifiertypeenum",NULL ) +, SchemaEntry("ifcforcemeasure",NULL ) +, SchemaEntry("ifcmembertypeenum",NULL ) +, SchemaEntry("ifcionconcentrationmeasure",NULL ) +, SchemaEntry("ifcchillertypeenum",NULL ) +, SchemaEntry("ifcmassperlengthmeasure",NULL ) +, SchemaEntry("ifctimeseriesscheduletypeenum",NULL ) +, SchemaEntry("ifcfiltertypeenum",NULL ) +, SchemaEntry("ifclogical",NULL ) +, SchemaEntry("ifcinventorytypeenum",NULL ) +, SchemaEntry("ifcclassificationnotationselect",NULL ) +, SchemaEntry("ifcaddresstypeenum",NULL ) +, SchemaEntry("ifcpositivelengthmeasure",NULL ) +, SchemaEntry("ifcratiomeasure",NULL ) +, SchemaEntry("ifcramptypeenum",NULL ) +, SchemaEntry("ifcmaterialselect",NULL ) +, SchemaEntry("ifccoveringtypeenum",NULL ) +, SchemaEntry("ifcpiletypeenum",NULL ) +, SchemaEntry("ifctransitioncode",NULL ) +, SchemaEntry("ifcparametervalue",NULL ) +, SchemaEntry("ifccondensertypeenum",NULL ) +, SchemaEntry("ifctextpath",NULL ) +, SchemaEntry("ifcelectriccurrentenum",NULL ) +, SchemaEntry("ifccolumntypeenum",NULL ) +, SchemaEntry("ifcluminousfluxmeasure",NULL ) +, SchemaEntry("ifcplatetypeenum",NULL ) +, SchemaEntry("ifcpileconstructionenum",NULL ) +, SchemaEntry("ifcactionsourcetypeenum",NULL ) +, SchemaEntry("ifcmagneticfluxdensitymeasure",NULL ) +, SchemaEntry("ifcsurfaceorfacesurface",NULL ) +, SchemaEntry("ifcpresentationstyleselect",NULL ) +, SchemaEntry("ifcgloballyuniqueid",NULL ) +, SchemaEntry("ifclinearmomentmeasure",NULL ) +, SchemaEntry("ifcheatexchangertypeenum",NULL ) +, SchemaEntry("ifcpumptypeenum",NULL ) +, SchemaEntry("ifcspecularexponent",NULL ) +, SchemaEntry("ifcelectricresistancemeasure",NULL ) +, SchemaEntry("ifcthermalconductivitymeasure",NULL ) +, SchemaEntry("ifcreflectancemethodenum",NULL ) +, SchemaEntry("ifctubebundletypeenum",NULL ) +, SchemaEntry("ifcactuatortypeenum",NULL ) +, SchemaEntry("ifccontrollertypeenum",NULL ) +, SchemaEntry("ifclightdistributioncurveenum",NULL ) +, SchemaEntry("ifcpositiveratiomeasure",NULL ) +, SchemaEntry("ifcelectricchargemeasure",NULL ) +, SchemaEntry("ifcnumericmeasure",NULL ) +, SchemaEntry("ifcstructuralactivityassignmentselect",NULL ) +, SchemaEntry("ifcluminousintensitydistributionmeasure",NULL ) +, SchemaEntry("ifcmolecularweightmeasure",NULL ) +, SchemaEntry("ifclayereditem",NULL ) +, SchemaEntry("ifclengthmeasure",NULL ) +, SchemaEntry("ifcwarpingconstantmeasure",NULL ) +, SchemaEntry("ifcboilertypeenum",NULL ) +, SchemaEntry("ifccablecarriersegmenttypeenum",NULL ) +, SchemaEntry("ifcfontweight",NULL ) +, SchemaEntry("ifctextfontname",NULL ) +, SchemaEntry("ifcenvironmentalimpactcategoryenum",NULL ) +, SchemaEntry("ifcactiontypeenum",NULL ) +, SchemaEntry("ifcdefinedsymbolselect",NULL ) +, SchemaEntry("ifctexttransformation",NULL ) +, SchemaEntry("ifcappliedvalueselect",NULL ) +, SchemaEntry("ifcenergymeasure",NULL ) +, SchemaEntry("ifcflowinstrumenttypeenum",NULL ) +, SchemaEntry("ifccountmeasure",NULL ) +, SchemaEntry("ifccurrencyenum",NULL ) +, SchemaEntry("ifcsectiontypeenum",NULL ) +, SchemaEntry("ifclinearforcemeasure",NULL ) +, SchemaEntry("ifcderivedmeasurevalue",NULL ) +, SchemaEntry("ifcrailingtypeenum",NULL ) +, SchemaEntry("ifcsiunitname",NULL ) +, SchemaEntry("ifcmeasurevalue",NULL ) +, SchemaEntry("ifcrooftypeenum",NULL ) +, SchemaEntry("ifctext",NULL ) +, SchemaEntry("ifclinearvelocitymeasure",NULL ) +, SchemaEntry("ifcboolean",NULL ) +, SchemaEntry("ifcrepresentationitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctopologicalrepresentationitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedge",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternalreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometricrepresentationitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompositecurvesegment",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcroot",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcobjectdefinition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcobject",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproduct",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralsurfaceconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapprovalactorrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertexbasedtexturemap",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpresentationstyleassignment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurtainwall",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturecoordinate",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturecoordinategenerator",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproxy",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedtextfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstylefontmodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstyleditem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationsymboloccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcterminatorsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensioncurveterminator",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifctypeobject",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifctypeproduct",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcelementtype",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcdistributionelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionflowelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowcontrollertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectrictimecontroltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshapemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctopologyrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnects",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelcoversspaces",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowfittingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccablecarrierfittingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralconnectioncondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcslippageconnectioncondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenergyconversiondevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoiltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcobject",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcperformancehistory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrepresentationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometricrepresentationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextliteral",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextliteralwithextent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproductrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproduct",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionflowelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundedcurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompositecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifc2dcompositecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundarycondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundaryfacecondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator3d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproperty",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsimpleproperty",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyenumeratedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpresentationlayerassignment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpresentationlayerwithstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstairflighttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementarysurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplane",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbooleanresult",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbooleanclippingresult",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsolidmodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmanifoldsolidbrep",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeneralprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstackterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralcurveconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcjunctionboxtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociates",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesconstraint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertydefinition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertysetdefinition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoorpanelproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstraintrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspacethermalloadproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclibraryinformation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprocess",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctask",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcappliedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenvironmentalimpactvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelfillselement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprocedure",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralload",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadstatic",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingledisplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproxy",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestylefont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstructionresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsubcontractresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccalendardate",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentelectronicformat",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelcontainedinspatialstructure",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproductsofcombustionproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctopologicalrepresentationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedge",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedgecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplatetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcobjectplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgridplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfiresuppressionterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowstoragedevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcperson",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsweptsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfaceofrevolution",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorientededge",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcownerhistory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassigns",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdirection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcementbarproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccshapeprofiledef",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcfeatureelement",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcfeatureelementsubtraction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedgefeature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcchamferedgefeature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolumn",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyreferencevalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterialclassificationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricmotortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspatialstructureelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspacetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternalreference",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedhatchstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolumntype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccranerailashapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccondensertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectselements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectswithrealizingelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccircleprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccirclehollowprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorganizationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcaxis2placement3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcopeningelement",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcpresentationstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcequipmentelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompositecurvesegment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectangleprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcphysicalquantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcphysicalcomplexquantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociateslibrary",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelsequence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementproxy",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributioncontrolelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingcallout",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensioncurvedirectedcallout",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclineardimension",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementassembly",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingcalloutrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccsgprimitive3d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrightcircularcone",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedsurfacestyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectorder",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyconstraintrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcangulardimension",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstylefordefinedfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclocalplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsweptareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrevolvedareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralsurfaceconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcradiusdimension",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsweptdisksolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifchalfspacesolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpolygonalboundedhalfspace",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseriesschedule",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensioncalloutrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccooledbeamtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproject",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapprovalrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcevaporatortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclaborresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingledisplacementdistortion",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyboundedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrampflighttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadplanarforce",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctubebundletype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvalvetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedtextfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctrimmedcurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldefines",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldefinesbyproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstocontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoccupant",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifchumidifiertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcarbitraryopenprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoprojectorder",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpermit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoffsetcurve3d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcepositional",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacetexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcblobtexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompositeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentinformation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylelighting",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcphysicalsimplequantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantityarea",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseries",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcramp",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedcurvefont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurrencyrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowmovingdevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspaceheatertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclamptype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementcomponent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcingelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcingbar",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricheatertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstraint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcobjective",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralactivity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturecoordinate",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturemap",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmonetaryunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantitytime",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctablerow",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightdistributiondata",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcductfittingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator2dnonuniform",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationnotationfacet",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesapproval",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingpredefinedcurvefont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingleforce",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingleforcewarping",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestylefontandscaling",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvirtualelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrightcircularcylinder",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoutlettype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldecomposes",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelnests",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccovering",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcirregulartimeseries",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpolyline",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpath",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementcomponent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfastener",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmappeditem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmetric",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentreference",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsectionproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectangularpyramid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelreferencedinspatialstructure",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccrewresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcnamedunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccontextdependentunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcunitaryequipmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcroof",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstasks",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralmember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsports",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstylemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstyledrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuilding",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectedfaceset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcopenshell",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacetedbrep",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclocaltime",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalconcretematerialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconic",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoveringtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcroundedrectangleprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcairterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowmovingdevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompressortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindowpanelproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedterminatorsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcishapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcasymmetricishapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccontrollertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrailing",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcasset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterialdefinitionrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestylefontpattern",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapprovalpropertyrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrailingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwall",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralpointconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectiongeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectionpointgeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseriesvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertylistvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurniturestandard",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelschedulescostitems",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricgeneratortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstyleditem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationsymboloccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcarbitraryprofiledefwithvoids",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcline",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmateriallayerset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowsegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsstructuralmember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertysinglevalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcalarmtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcellipseprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstair",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedtextfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstylefontmodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestyleshading",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpumptype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdefinedsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationitemrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeneralmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementcomponenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfastenertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalfastenertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpermeablecoveringproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowfitting",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapproval",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshapeaspect",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstraintclassificationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcedirectional",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcsurfacestyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfuelproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowcontroller",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfailureconnectioncondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingstorey",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcworkcontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcworkschedule",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctable",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcductsegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralsteelprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingpredefinedtextfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastyletilesymbolwithstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapplication",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnects",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsstructuralelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralmember",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcstructuralsurfacemember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralsurfacemembervarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacesurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassification",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcmateriallist",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccostschedule",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoordinateduniversaltimeoffset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplanarextent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplanarbox",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsectionreinforcementproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolourspecification",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvector",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbeam",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolourrgb",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralplanaraction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralplanaractionvarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsite",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdiscreteaccessorytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvibrationisolatortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcevaporativecoolertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionchamberelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfeatureelementaddition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructureddimensioncallout",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoolingtowertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccenterlineprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturevertex",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorganization",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindowstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcegoniometric",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcribplateprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctransformertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmembertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfaceoflinearextrusion",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmotorconnectiontype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowtreatmentdevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcductsilencertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindowliningproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurnishingelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsystemfurnitureelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectionpointeccentricity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwasteterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbsplinecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbeziercurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentinformationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactuatortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributioncontrolelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesdocument",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoorliningproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshellbasedsurfacemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactionrequest",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcextrudedareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsystem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastylehatching",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelvoidselement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectspathelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelspaceboundary",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacecurvesweptareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator3dnonuniform",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelinteractionrequirements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurtainwalltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantitylength",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionflowelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsanitaryterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenergyconversiondevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricgeneratortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstructionresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccontrol",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcequipmentstandard",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowstoragedevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvirtualgridintersection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdiameterdimension",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcswitchingdevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcaddress",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctelecomaddress",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindow",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalmaterialproperties",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcmechanicalsteelmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowtreatmentdevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelservicesbuildings",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcchillertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoproduct",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectanglehollowprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenergyproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboxedhalfspace",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcaxis2placement2d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspaceprogram",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricappliancetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifchygroscopicmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurniturestandard",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcirregulartimeseriesvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdefinedsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolourspecification",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcline",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelaxation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproperty",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccomplexproperty",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccovering",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundedcurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbsplinecurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcnamedunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsubcontractresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralconnectioncondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcobjectplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgridplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfailureconnectioncondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcphysicalquantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcphysicalsimplequantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertydefinition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertysetdefinition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindowliningproperties",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcpoint",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifccartesianpoint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundedsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpolyloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedpointmarkersymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcterminatorsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensioncurveterminator",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctrapeziumprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrepresentationcontext",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometricrepresentationcontext",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstylewithboxcharacteristics",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurveboundedplane",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantitycount",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseriesreferencerelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadtemperature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsiunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacebound",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundarycondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundaryfacecondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedgecurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclibraryinformation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifconedirectionrepeatfactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctwodirectionrepeatfactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectselements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectspathelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassigns",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyconstraintrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourceambient",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowcontrollertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowmetertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationcurveoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclocaltime",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociates",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesapproval",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompositeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsubedge",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowstoragedevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctanktype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementcomponent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementpart",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshapemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshaperepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrailing",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralload",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadstatic",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingleforce",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingleforcewarping",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstylemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstyledrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolourrgb",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementcomponenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdiscreteaccessorytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvibrationisolatortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprocess",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprocedure",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfeatureelementaddition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedgefeature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctrimmedcurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelcoversbldgelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextliteral",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccranerailashapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementcomponent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccsgprimitive3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcblock",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrailingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralpointconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowmovingdevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpumptype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralcurvemember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralcurvemembervarying",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcingelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcingmesh",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplanarextent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplanarbox",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccooledbeamtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantityarea",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingcalloutrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensioncalloutrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectorderrecord",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpointonsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpointoncurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelcontainedinspatialstructure",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsimpleproperty",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertylistvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingstorey",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcunitaryequipmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoutlettype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfastenertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsystem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralanalysismodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcslabtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoproduct",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassification",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionflowelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpolyline",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantityvolume",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingcallout",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcaddress",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralsurfacemembervarying",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmotorconnectiontype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcairtoairheatrecoverytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplatetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsolidmodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccsgsolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalfastenertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldecomposes",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricalelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolumntype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectangularpyramid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactionrequest",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralactivity",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcstructuralreaction",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcstructuralpointreaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcementdefinitionproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricappliancetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsensortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurnishingelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprotectivedevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcscheduletimecontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrepresentationmap",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclosedshell",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementpart",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpostaladdress",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcblock",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightfixturetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcopeningelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcespot",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctendonanchor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylerefraction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricflowstoragedevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfluidflowproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsphere",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesappliedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdampertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectorderrecord",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensionalexponents",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldefinesbytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionchamberelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalfastener",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantityvolume",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectangulartrimmedsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdateandtime",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifczone",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfantype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometricset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastyletiles",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpixeltexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccablesegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreloverridesproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmeasurewithunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcslabtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcservicelife",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurnituretype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccostitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcingmesh",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcextendedmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactorrole",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacetedbrepwithvoids",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstraintaggregationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgasterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectswitheccentricity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpile",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastyletilesymbolwithstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricalbaseproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstructionmaterialresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationcurveoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensioncurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometriccurveset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacebasedsurfacemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenergyconversiondevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrampflight",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyenumeration",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertexloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplate",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifchygroscopicmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacebound",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfaceouterbound",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifconedirectionrepeatfactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboilertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstructionequipmentresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccomplexproperty",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfooting",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcopticalmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstructionproductresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundaryedgecondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcderivedprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertytablevalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstogroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowmetertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsporttoelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesclassification",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcunitassignment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowterminal",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccranerailfshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowsegment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementquantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundarynodecondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundarynodeconditionwarping",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurtainwall",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdiscreteaccessory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgrid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsanitaryterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsoundproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsubedge",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstyletextmodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfiltertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsymbolstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctendon",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensionpair",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadgroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpresentationstyleassignment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcregulartimeseries",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralcurvemember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourceambient",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcport",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspace",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcheatexchangertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctanktype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcinventory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcappliedvaluerelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsoundvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctransportelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcairtoairheatrecoverytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstairflight",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricalelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationreference",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylewithtextures",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundingbox",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapplication",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwalltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmove",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccircle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoffsetcurve2d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmateriallayersetusage",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpointoncurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralresultgroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsectionedspine",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcslab",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectionportgeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantityweight",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesmaterial",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertex",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreferencesvaluedocument",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpersonandorganization",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelflowcontrolelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoprocess",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertydependencyrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedterminatorsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralaction",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcstructurallinearaction",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcstructurallinearactionvarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementproxytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectionelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcderivedunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapprovalactorrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconversionbasedunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterial",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometricrepresentationsubcontext",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefineddimensionsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcroundededgefeature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelcoversbldgelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricdistributionpoint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccablecarriersegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadlinearforce",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgridaxis",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcirregulartimeseriesvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwallstandardcase",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreloccupiesspaces",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcderivedunitelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccsgsolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccrewresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcchamferedgefeature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstraintrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompositecurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifc2dcompositecurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgrid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctendon",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectangleprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcroundedrectangleprofiledef",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcbeamtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationfillarea",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelaxation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralcurvemembervarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpointonsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertydependencyrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertexbasedtexturemap",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorderaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclibraryreference",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedgeloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationfillareaoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsstructuralelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcworkplan",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcellipse",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproductdefinitionshape",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectioncurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricalcircuit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcservicelifefactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcthermalmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturecoordinategenerator",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpipesegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctwodirectionrepeatfactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshaperepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylerendering",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionport",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclamptype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseriesreferencerelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacetexture",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcimagetexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpipefittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcegoniometric",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproductrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterialdefinitionrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpermit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeneralmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccontextdependentunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowmovingdevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolumn",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstocontrol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoprojectorder",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributioncontrolelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprotectivedevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturemap",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowsegment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompressortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeneralprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcappliedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctrapeziumprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldefines",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldefinesbytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctask",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmove",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundaryedgecondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcedirectional",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccondensertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctablerow",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesappliedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconic",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcellipse",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesclassification",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproductsofcombustionproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributioncontrolelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsensortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationfillareaoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwall",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantityweight",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurnishingelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurnituretype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccontrollertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowfitting",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelnests",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccalendardate",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightdistributiondata",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcphysicalcomplexquantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentelectronicformat",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrepresentationcontext",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcderivedunitelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindowpanelproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrepresentationmap",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsstructuralmember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterialclassificationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdirection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensioncurvedirectedcallout",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcangulardimension",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcworkcontrol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcworkplan",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspatialstructureelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspacetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcslippageconnectioncondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcport",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionport",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorderaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoorpanelproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbeam",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsectionreinforcementproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmanifoldsolidbrep",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacetedbrep",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcopticalmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylewithtextures",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectswitheccentricity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifchumidifiertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpolyloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowfittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastyletiles",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturevertex",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertex",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationfillarea",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplate",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrightcircularcone",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundedsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclibraryreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstraintclassificationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadgroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometricrepresentationcontext",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctubebundletype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralplanaraction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundarynodecondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcheatexchangertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelschedulescostitems",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfaceouterbound",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsphere",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcepositional",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowsegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfiresuppressionterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertysinglevalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspacethermalloadproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcperson",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstylefordefinedfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacebasedsurfacemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcaxis2placement3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralresultgroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestylefont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifchalfspacesolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgasterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsoundvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentinformation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmateriallayersetusage",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyenumeratedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpermeablecoveringproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionchamberelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextliteralwithextent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowcontroller",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricdistributionpoint",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifctransportelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationtextoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectionsurfacegeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralanalysismodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectioncurvegeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcasset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpersonandorganization",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsweptareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrevolvedareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenergyconversiondevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsoundproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestyleshading",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylerendering",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboilertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementproxy",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclocalplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifczone",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstair",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwallstandardcase",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdiameterdimension",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcductsegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseries",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcirregulartimeseries",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcjunctionboxtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator3dnonuniform",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapproval",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestylefontandscaling",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcinventory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantitylength",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcconditioncriterion",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwaterproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmateriallayer",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectedfaceset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcopenshell",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralsteelprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbeziercurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcarbitraryprofiledefwithvoids",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterial",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbooleanresult",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstackterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefineddimensionsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcishapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcasymmetricishapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcequipmentelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedcurvefont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshapeaspect",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationnotationfacet",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoorliningproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingledisplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesmaterial",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundarynodeconditionwarping",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoordinateduniversaltimeoffset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclosedshell",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalconcretematerialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmateriallayerset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcellipseprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyboundedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoveringtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelcoversspaces",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationitemrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactuatortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoffsetcurve2d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectiongeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectionsurfacegeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionchamberelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestylefontpattern",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoffsetcurve3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfooting",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmappeditem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpostaladdress",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelspaceboundary",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctransformertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrightcircularcylinder",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspaceprogram",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcthermalmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectanglehollowprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometricset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometriccurveset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcarbitraryopenprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentinformationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacetedbrepwithvoids",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvector",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedsurfacestyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcservicelife",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurveboundedplane",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccircle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfuelproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertexloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcservicelifefactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyenumeration",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacecurvesweptareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstructionequipmentresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsectionedspine",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreferencesvaluedocument",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyreferencevalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelservicesbuildings",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsite",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcperformancehistory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedtextfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertytablevalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenvironmentalimpactvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctransportelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpolygonalboundedhalfspace",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectionportgeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelflowcontrolelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapprovalpropertyrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelreferencedinspatialstructure",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcaxis2placement2d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastylehatching",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfastener",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcscheduletimecontrol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricmotortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseriesschedule",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctable",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpipesegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowterminal",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcementdefinitionproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwalltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoiltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingledisplacementdistortion",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurnishingelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstylewithboxcharacteristics",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwasteterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindow",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactorrole",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricflowstoragedevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcderivedunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcramp",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingpredefinedcurvefont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclineardimension",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementarysurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstructionproductresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccablesegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingpredefinedtextfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpath",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstyletextmodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorganizationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmonetaryunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoccupant",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcswitchingdevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsweptsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfaceoflinearextrusion",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshellbasedsurfacemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsymbolstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuilding",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsiunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdiscreteaccessory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedpointmarkersymbol",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifccostvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcownerhistory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsystemfurnitureelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementassembly",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoolingtowertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadlinearforce",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpresentationlayerassignment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpresentationlayerwithstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcespot",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcextendedmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpixeltexture",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensionalexponents",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcevaporatortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadplanarforce",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspaceheatertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementquantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurrencyrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrampflight",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconversionbasedunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcextrudedareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectorder",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectionpointgeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectionpointeccentricity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstraintaggregationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensionpair",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbooleanclippingresult",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstraint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadtemperature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesconstraint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcingbar",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccenterlineprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundingbox",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindowstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcblobtexture",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmembertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightfixturetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowstoragedevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctopologyrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldefinesbyproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreloverridesproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstairflighttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccircleprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsweptdisksolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcregulartimeseries",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralplanaractionvarying",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvalvetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcunitassignment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectioncurvegeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorganization",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvirtualelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantitycount",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralcurveconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcairterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowtreatmentdevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcroof",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsectionproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseriesvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstogroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectrictimecontroltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpile",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccostschedule",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrampflighttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcderivedprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccostitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcevaporativecoolertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcchillertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmateriallayer",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboxedhalfspace",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurtainwalltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometricrepresentationsubcontext",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensioncurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplane",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectioncurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdampertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylerefraction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcribplateprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwaterproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalfastener",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcductsilencertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesdocument",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcementbarproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclaborresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfantype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenergyproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectionelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelinteractionrequirements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccranerailfshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapprovalrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproject",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelvoidselement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmetric",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricalcircuit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelsequence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowtreatmentdevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationtextoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfiltertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantitytime",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedgeloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccirclehollowprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructureddimensioncallout",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricalbaseproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccablecarriersegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcappliedvaluerelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcductfittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedhatchstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociateslibrary",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectangulartrimmedsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproductdefinitionshape",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstairflight",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcslab",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpipefittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspace",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdateandtime",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcobjective",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvirtualgridintersection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementproxytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoprocess",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcalarmtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccablecarrierfittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcroundededgefeature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctelecomaddress",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsporttoelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstasks",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacesurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreloccupiesspaces",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgridaxis",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctendonanchor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfluidflowproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcworkschedule",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfaceofrevolution",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylelighting",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricheatertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmeasurewithunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorientededge",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator2dnonuniform",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectswithrealizingelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsports",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelfillselement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstructionmaterialresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcradiusdimension",&STEP::ObjectHelper::Construct ) }; } @@ -1045,13 +1045,59 @@ void IFC::GetSchema(EXPRESS::ConversionSchema& out) namespace STEP { // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const STEP::DB& /*db*/, const LIST& /*params*/, NotImplemented* /*in*/) +template <> size_t GenericFill(const STEP::DB& db, const LIST& params, NotImplemented* in) { return 0; } +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationItem* in) +{ + size_t base = 0; + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologicalRepresentationItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdge* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurveSegment* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcCompositeCurveSegment"); } do { // convert the 'Transition' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Transition, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurveSegment to be a `IfcTransitionCode`")); } + } while(0); + do { // convert the 'SameSense' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SameSense, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurveSegment to be a `BOOLEAN`")); } + } while(0); + do { // convert the 'ParentCurve' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ParentCurve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCompositeCurveSegment to be a `IfcCurve`")); } + } while(0); + return base; +} // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoot* in) { @@ -1091,6 +1137,158 @@ template <> size_t GenericFill(const DB& db, const LIST& pa if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcObjectDefinition"); } return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcObject* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcObject"); } do { // convert the 'ObjectType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ObjectType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcObject to be a `IfcLabel`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProduct* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcProduct"); } do { // convert the 'ObjectPlacement' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ObjectPlacement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProduct to be a `IfcObjectPlacement`")); } + } while(0); + do { // convert the 'Representation' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Representation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProduct to be a `IfcProductRepresentation`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyleAssignment* in) +{ + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyleAssignment"); } do { // convert the 'Styles' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Styles, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyleAssignment to be a `SET [1:?] OF IfcPresentationStyleSelect`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcElement"); } do { // convert the 'Tag' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Tag, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcElement to be a `IfcIdentifier`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcBuildingElement"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWall* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProxy* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyledItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcStyledItem"); } do { // convert the 'Item' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Item, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcStyledItem to be a `IfcRepresentationItem`")); } + } while(0); + do { // convert the 'Styles' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->Styles, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcStyledItem to be a `SET [1:?] OF IfcPresentationStyleAssignment`")); } + } while(0); + do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcStyledItem to be a `IfcLabel`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSymbolOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTerminatorSymbol* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveTerminator* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcTypeObject* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -1119,69 +1317,56 @@ template <> size_t GenericFill(const DB& db, const L return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionFlowElementType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElement* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElement"); } return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowControllerType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementSubtraction* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElementSubtraction"); } return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricTimeControlType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpeningElement* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcOpeningElement"); } return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentation* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyle* in) { size_t base = 0; - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRepresentation"); } do { // convert the 'ContextOfItems' argument + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyle"); } do { // convert the 'Name' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->ContextOfItems, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentation to be a `IfcRepresentationContext`")); } - } while(0); - do { // convert the 'RepresentationIdentifier' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RepresentationIdentifier, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentation to be a `IfcLabel`")); } - } while(0); - do { // convert the 'RepresentationType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RepresentationType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRepresentation to be a `IfcLabel`")); } - } while(0); - do { // convert the 'Items' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } - try { GenericConvert( in->Items, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRepresentation to be a `SET [1:?] OF IfcRepresentationItem`")); } + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyle to be a `IfcLabel`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeModel* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyle* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcSurfaceStyle"); } do { // convert the 'Side' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Side, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSurfaceStyle to be a `IfcSurfaceSide`")); } + } while(0); + do { // convert the 'Styles' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Styles, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSurfaceStyle to be a `SET [1:5] OF IfcSurfaceStyleElementSelect`")); } + } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologyRepresentation* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTileSymbolWithStyle* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -1198,193 +1383,16 @@ template <> size_t GenericFill(const DB& db, const LIST& params, if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelConnects"); } return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFittingType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralMember* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierFittingType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMember* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoilType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcObject* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcObject"); } do { // convert the 'ObjectType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ObjectType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcObject to be a `IfcLabel`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcControl* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPerformanceHistory* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& /*db*/, const LIST& /*params*/, IfcRepresentationItem* /*in*/) -{ - size_t base = 0; - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteral* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteralWithExtent* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProductRepresentation* in) -{ - size_t base = 0; - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcProductRepresentation"); } do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProductRepresentation to be a `IfcLabel`")); } - } while(0); - do { // convert the 'Description' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Description, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProductRepresentation to be a `IfcText`")); } - } while(0); - do { // convert the 'Representations' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - try { GenericConvert( in->Representations, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcProductRepresentation to be a `LIST [1:?] OF IfcRepresentation`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProduct* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcProduct"); } do { // convert the 'ObjectPlacement' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ObjectPlacement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProduct to be a `IfcObjectPlacement`")); } - } while(0); - do { // convert the 'Representation' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Representation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProduct to be a `IfcProductRepresentation`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcElement"); } do { // convert the 'Tag' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Tag, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcElement to be a `IfcIdentifier`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionFlowElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCompositeCurve"); } do { // convert the 'Segments' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Segments, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurve to be a `LIST [1:?] OF IfcCompositeCurveSegment`")); } - } while(0); - do { // convert the 'SelfIntersect' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->SelfIntersect, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurve to be a `LOGICAL`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, Ifc2DCompositeCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -1435,124 +1443,13 @@ template <> size_t GenericFill(const DB& d return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProperty* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionFlowElementType* in) { - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProperty"); } do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProperty to be a `IfcIdentifier`")); } - } while(0); - do { // convert the 'Description' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Description, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProperty to be a `IfcText`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSimpleProperty* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSimpleProperty"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyEnumeratedValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlightType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementarySurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcElementarySurface"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcElementarySurface to be a `IfcAxis2Placement3D`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlane* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlane"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanResult* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanResult"); } do { // convert the 'Operator' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Operator, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBooleanResult to be a `IfcBooleanOperator`")); } - } while(0); - do { // convert the 'FirstOperand' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->FirstOperand, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBooleanResult to be a `IfcBooleanOperand`")); } - } while(0); - do { // convert the 'SecondOperand' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - try { GenericConvert( in->SecondOperand, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBooleanResult to be a `IfcBooleanOperand`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanClippingResult* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanClippingResult"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSolidModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcManifoldSolidBrep* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcManifoldSolidBrep"); } do { // convert the 'Outer' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Outer, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcManifoldSolidBrep to be a `IfcClosedShell`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTerminalType* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -1560,93 +1457,23 @@ template <> size_t GenericFill(const DB& db, const LIST& pa return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStackTerminalType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSanitaryTerminalType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralItem* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDeviceType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralConnection* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricGeneratorType* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveConnection* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcJunctionBoxType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyDefinition* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyDefinition"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySetDefinition* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySetDefinition"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcess* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTask* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelFillsElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelFillsElement"); } do { // convert the 'RelatingOpeningElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatingOpeningElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelFillsElement to be a `IfcOpeningElement`")); } - } while(0); - do { // convert the 'RelatedBuildingElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatedBuildingElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelFillsElement to be a `IfcElement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcedure* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProxy* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -1665,1281 +1492,27 @@ template <> size_t GenericFill(const DB& db, const LIST return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubContractResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelContainedInSpatialStructure* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelContainedInSpatialStructure"); } do { // convert the 'RelatedElements' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatedElements, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelContainedInSpatialStructure to be a `SET [1:?] OF IfcProduct`")); } - } while(0); - do { // convert the 'RelatingStructure' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatingStructure, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelContainedInSpatialStructure to be a `IfcSpatialStructureElement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologicalRepresentationItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdge* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlateType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& /*db*/, const LIST& /*params*/, IfcObjectPlacement* /*in*/) -{ - size_t base = 0; - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGridPlacement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFireSuppressionTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDevice* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfRevolution* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOrientedEdge* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDirection* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcDirection"); } do { // convert the 'DirectionRatios' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->DirectionRatios, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcDirection to be a `LIST [2:3] OF REAL`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProfileDef* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->ProfileType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); } - } while(0); - do { // convert the 'ProfileName' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ProfileName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcParameterizedProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElement"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementSubtraction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElementSubtraction"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeFeature* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcChamferEdgeFeature* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcBuildingElement"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumn* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyReferenceValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricMotorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumnType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailAShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondenserType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCircleProfileDef"); } do { // convert the 'Radius' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Radius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCircleProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleHollowProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCircleHollowProfileDef"); } do { // convert the 'WallThickness' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->WallThickness, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCircleHollowProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlacement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlacement"); } do { // convert the 'Location' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Location, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPlacement to be a `IfcCartesianPoint`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement3D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcAxis2Placement3D"); } do { // convert the 'Axis' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Axis, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement3D to be a `IfcDirection`")); } - } while(0); - do { // convert the 'RefDirection' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefDirection, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcAxis2Placement3D to be a `IfcDirection`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyle* in) -{ - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyle"); } do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyle to be a `IfcLabel`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurveSegment* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcCompositeCurveSegment"); } do { // convert the 'Transition' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Transition, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurveSegment to be a `IfcTransitionCode`")); } - } while(0); - do { // convert the 'SameSense' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SameSense, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurveSegment to be a `BOOLEAN`")); } - } while(0); - do { // convert the 'ParentCurve' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ParentCurve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCompositeCurveSegment to be a `IfcCurve`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRectangleProfileDef"); } do { // convert the 'XDim' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->XDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'YDim' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->YDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxy* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowInstrumentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDraughtingCallout* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveDirectedCallout* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLinearDimension* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementAssembly* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgPrimitive3D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCone* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrder* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAngularDimension* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLocalPlacement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLocalPlacement"); } do { // convert the 'PlacementRelTo' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->PlacementRelTo, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLocalPlacement to be a `IfcObjectPlacement`")); } - } while(0); - do { // convert the 'RelativePlacement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelativePlacement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLocalPlacement to be a `IfcAxis2Placement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptAreaSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSweptAreaSolid"); } do { // convert the 'SweptArea' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->SweptArea, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptAreaSolid to be a `IfcProfileDef`")); } - } while(0); - do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptAreaSolid to be a `IfcAxis2Placement3D`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRevolvedAreaSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRevolvedAreaSolid"); } do { // convert the 'Axis' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Axis, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRevolvedAreaSolid to be a `IfcAxis1Placement`")); } - } while(0); - do { // convert the 'Angle' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Angle, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRevolvedAreaSolid to be a `IfcPlaneAngleMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceConnection* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRadiusDimension* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptDiskSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcSweptDiskSolid"); } do { // convert the 'Directrix' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Directrix, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptDiskSolid to be a `IfcCurve`")); } - } while(0); - do { // convert the 'Radius' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Radius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'InnerRadius' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->InnerRadius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'StartParam' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->StartParam, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSweptDiskSolid to be a `IfcParameterValue`")); } - } while(0); - do { // convert the 'EndParam' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->EndParam, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcSweptDiskSolid to be a `IfcParameterValue`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcHalfSpaceSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcHalfSpaceSolid"); } do { // convert the 'BaseSurface' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->BaseSurface, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcHalfSpaceSolid to be a `IfcSurface`")); } - } while(0); - do { // convert the 'AgreementFlag' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->AgreementFlag, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcHalfSpaceSolid to be a `BOOLEAN`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolygonalBoundedHalfSpace* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPolygonalBoundedHalfSpace"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPolygonalBoundedHalfSpace to be a `IfcAxis2Placement3D`")); } - } while(0); - do { // convert the 'PolygonalBoundary' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->PolygonalBoundary, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPolygonalBoundedHalfSpace to be a `IfcBoundedCurve`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTimeSeriesSchedule* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCooledBeamType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProject* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcProject"); } do { // convert the 'LongName' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->LongName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProject to be a `IfcLabel`")); } - } while(0); - do { // convert the 'Phase' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Phase, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProject to be a `IfcLabel`")); } - } while(0); - do { // convert the 'RepresentationContexts' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RepresentationContexts, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcProject to be a `SET [1:?] OF IfcRepresentationContext`")); } - } while(0); - do { // convert the 'UnitsInContext' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->UnitsInContext, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcProject to be a `IfcUnitAssignment`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporatorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLaborResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyBoundedValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlightType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMember* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTubeBundleType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcValveType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTrimmedCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcTrimmedCurve"); } do { // convert the 'BasisCurve' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->BasisCurve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcTrimmedCurve to be a `IfcCurve`")); } - } while(0); - do { // convert the 'Trim1' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Trim1, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } - } while(0); - do { // convert the 'Trim2' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Trim2, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } - } while(0); - do { // convert the 'SenseAgreement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SenseAgreement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcTrimmedCurve to be a `BOOLEAN`")); } - } while(0); - do { // convert the 'MasterRepresentation' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MasterRepresentation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcTrimmedCurve to be a `IfcTrimmingPreference`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefines* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRelDefines"); } do { // convert the 'RelatedObjects' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->RelatedObjects, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDefines to be a `SET [1:?] OF IfcObject`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefinesByProperties* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDefinesByProperties"); } do { // convert the 'RelatingPropertyDefinition' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->RelatingPropertyDefinition, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDefinesByProperties to be a `IfcPropertySetDefinition`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcActor* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcControl* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOccupant* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcHumidifierType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryOpenProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryOpenProfileDef"); } do { // convert the 'Curve' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Curve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryOpenProfileDef to be a `IfcBoundedCurve`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPermit* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentStandard* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve3D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourcePositional* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRamp* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMovingDevice* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceHeaterType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLampType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricApplianceType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementComponent* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingBar* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricHeaterType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralActivity* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctFittingType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2DnonUniform* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVirtualElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCylinder* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOutletType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDecomposes* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDecomposes"); } do { // convert the 'RelatingObject' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->RelatingObject, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDecomposes to be a `IfcObjectDefinition`")); } - } while(0); - do { // convert the 'RelatedObjects' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->RelatedObjects, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDecomposes to be a `SET [1:?] OF IfcObjectDefinition`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCovering* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolyline* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyline"); } do { // convert the 'Points' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Points, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyline to be a `LIST [2:?] OF IfcCartesianPoint`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPath* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponent* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastener* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMappedItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMappedItem"); } do { // convert the 'MappingSource' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappingSource, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMappedItem to be a `IfcRepresentationMap`")); } - } while(0); - do { // convert the 'MappingTarget' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappingTarget, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMappedItem to be a `IfcCartesianTransformationOperator`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularPyramid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCrewResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcNamedUnit* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcNamedUnit"); } do { // convert the 'Dimensions' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Dimensions, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcNamedUnit to be a `IfcDimensionalExponents`")); } - } while(0); - do { // convert the 'UnitType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->UnitType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcNamedUnit to be a `IfcUnitEnum`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcContextDependentUnit* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcUnitaryEquipmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoof* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralMember* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyleModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyledRepresentation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcSpatialStructureElement"); } do { // convert the 'LongName' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->LongName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcSpatialStructureElement to be a `IfcLabel`")); } - } while(0); - do { // convert the 'CompositionType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->CompositionType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcSpatialStructureElement to be a `IfcElementCompositionEnum`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuilding* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 12) { throw STEP::TypeError("expected 12 arguments to IfcBuilding"); } do { // convert the 'ElevationOfRefHeight' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ElevationOfRefHeight, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcBuilding to be a `IfcLengthMeasure`")); } - } while(0); - do { // convert the 'ElevationOfTerrain' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ElevationOfTerrain, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcBuilding to be a `IfcLengthMeasure`")); } - } while(0); - do { // convert the 'BuildingAddress' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->BuildingAddress, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcBuilding to be a `IfcPostalAddress`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConnectedFaceSet* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConnectedFaceSet"); } do { // convert the 'CfsFaces' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->CfsFaces, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConnectedFaceSet to be a `SET [1:?] OF IfcFace`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpenShell* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrep* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConic* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConic"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConic to be a `IfcAxis2Placement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoveringType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedRectangleProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMovingDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompressorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcIShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcIShapeProfileDef"); } do { // convert the 'OverallWidth' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->OverallWidth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'OverallDepth' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->OverallDepth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'WebThickness' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - try { GenericConvert( in->WebThickness, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'FlangeThickness' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } - try { GenericConvert( in->FlangeThickness, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'FilletRadius' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[4]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->FilletRadius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsymmetricIShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcControllerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailing* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGroup* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsset* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMaterialDefinitionRepresentation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailingType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWall* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointConnection* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyListValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyListValue"); } do { // convert the 'ListValues' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ListValues, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertyListValue to be a `LIST [1:?] OF IfcValue`")); } - } while(0); - do { // convert the 'Unit' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Unit, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertyListValue to be a `IfcUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnitureStandard* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -2947,87 +1520,29 @@ template <> size_t GenericFill(const DB& db, const LIST& p return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricGeneratorType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDefinedSymbol* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoor* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcColourSpecification* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 10) { throw STEP::TypeError("expected 10 arguments to IfcDoor"); } do { // convert the 'OverallHeight' argument + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->OverallHeight, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'OverallWidth' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->OverallWidth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyledItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcStyledItem"); } do { // convert the 'Item' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Item, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcStyledItem to be a `IfcRepresentationItem`")); } - } while(0); - do { // convert the 'Styles' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->Styles, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcStyledItem to be a `SET [1:?] OF IfcPresentationStyleAssignment`")); } - } while(0); - do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } if (dynamic_cast(&*arg)) break; try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcStyledItem to be a `IfcLabel`")); } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationOccurrence* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurve* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSymbolOccurrence* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryClosedProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryClosedProfileDef"); } do { // convert the 'OuterCurve' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->OuterCurve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryClosedProfileDef to be a `IfcCurve`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryProfileDefWithVoids* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members + size_t base = GenericFill(db,params,static_cast(in)); return base; } // ----------------------------------------------------------------------------------------------------------- @@ -3047,469 +1562,57 @@ template <> size_t GenericFill(const DB& db, const LIST& params, IfcLin return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalBoxType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySingleValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySingleValue"); } do { // convert the 'NominalValue' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->NominalValue, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertySingleValue to be a `IfcValue`")); } - } while(0); - do { // convert the 'Unit' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Unit, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertySingleValue to be a `IfcUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAlarmType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipseProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStair* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleShading* in) -{ - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleShading"); } do { // convert the 'SurfaceColour' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->SurfaceColour, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleShading to be a `IfcColourRgb`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPumpType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDefinedSymbol* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastenerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastenerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFitting* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceDirectional* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcSurfaceStyle"); } do { // convert the 'Side' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Side, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSurfaceStyle to be a `IfcSurfaceSide`")); } - } while(0); - do { // convert the 'Styles' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Styles, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSurfaceStyle to be a `SET [1:5] OF IfcSurfaceStyleElementSelect`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowController* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingStorey* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkControl* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkSchedule* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFace* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLoop* in) { size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFace"); } do { // convert the 'Bounds' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Bounds, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFace to be a `SET [1:?] OF IfcFaceBound`")); } - } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMember* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMemberVarying* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostSchedule* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarExtent* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarBox* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcColourSpecification* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProperty* in) { size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProperty"); } do { // convert the 'Name' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProperty to be a `IfcIdentifier`")); } + } while(0); + do { // convert the 'Description' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Description, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProperty to be a `IfcText`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVector* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcComplexProperty* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcVector"); } do { // convert the 'Orientation' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcComplexProperty"); } do { // convert the 'UsageName' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Orientation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcVector to be a `IfcDirection`")); } + try { GenericConvert( in->UsageName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcComplexProperty to be a `IfcIdentifier`")); } } while(0); - do { // convert the 'Magnitude' argument + do { // convert the 'HasProperties' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Magnitude, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcVector to be a `IfcLengthMeasure`")); } + try { GenericConvert( in->HasProperties, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcComplexProperty to be a `SET [1:?] OF IfcProperty`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeam* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCovering* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcColourRgb* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedCurve* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcColourRgb"); } do { // convert the 'Red' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Red, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); } - } while(0); - do { // convert the 'Green' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Green, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); } - } while(0); - do { // convert the 'Blue' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Blue, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarAction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarActionVarying* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSite* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 14) { throw STEP::TypeError("expected 14 arguments to IfcSite"); } do { // convert the 'RefLatitude' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefLatitude, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } - } while(0); - do { // convert the 'RefLongitude' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefLongitude, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } - } while(0); - do { // convert the 'RefElevation' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefElevation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcSite to be a `IfcLengthMeasure`")); } - } while(0); - do { // convert the 'LandTitleNumber' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->LandTitleNumber, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 12 to IfcSite to be a `IfcLabel`")); } - } while(0); - do { // convert the 'SiteAddress' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->SiteAddress, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 13 to IfcSite to be a `IfcPostalAddress`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessoryType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVibrationIsolatorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporativeCoolerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementAddition* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuredDimensionCallout* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoolingTowerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCenterLineProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindowStyle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceGoniometric* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransformerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMemberType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfLinearExtrusion* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMotorConnectionType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSilencerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystemFurnitureElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWasteTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members + size_t base = GenericFill(db,params,static_cast(in)); return base; } // ----------------------------------------------------------------------------------------------------------- @@ -3549,209 +1652,54 @@ template <> size_t GenericFill(const DB& db, const LIST& params return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBezierCurve* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcNamedUnit* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcActuatorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcAnnotation"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcShellBasedSurfaceModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcShellBasedSurfaceModel"); } do { // convert the 'SbsmBoundary' argument + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcNamedUnit"); } do { // convert the 'Dimensions' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SbsmBoundary, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcShellBasedSurfaceModel to be a `SET [1:?] OF IfcShell`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Dimensions, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcNamedUnit to be a `IfcDimensionalExponents`")); } + } while(0); + do { // convert the 'UnitType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->UnitType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcNamedUnit to be a `IfcUnitEnum`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcActionRequest* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubContractResource* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcExtrudedAreaSolid* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcObjectPlacement* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcExtrudedAreaSolid"); } do { // convert the 'ExtrudedDirection' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ExtrudedDirection, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcExtrudedAreaSolid to be a `IfcDirection`")); } - } while(0); - do { // convert the 'Depth' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Depth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcExtrudedAreaSolid to be a `IfcPositiveLengthMeasure`")); } - } while(0); + size_t base = 0; return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystem* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGridPlacement* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleHatching* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyDefinition* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyDefinition"); } return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelVoidsElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySetDefinition* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelVoidsElement"); } do { // convert the 'RelatingBuildingElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatingBuildingElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelVoidsElement to be a `IfcElement`")); } - } while(0); - do { // convert the 'RelatedOpeningElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatedOpeningElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelVoidsElement to be a `IfcFeatureElementSubtraction`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceCurveSweptAreaSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator3DnonUniform* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcCartesianTransformationOperator3DnonUniform"); } do { // convert the 'Scale2' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Scale2, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } - } while(0); - do { // convert the 'Scale3' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Scale3, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWallType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentStandard* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiameterDimension* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSwitchingDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindow* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDevice* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcChillerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleHollowProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoxedHalfSpace* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement2D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis2Placement2D"); } do { // convert the 'RefDirection' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefDirection, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement2D to be a `IfcDirection`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceProgram* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySetDefinition"); } return base; } // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcPoint* in) @@ -3771,40 +1719,984 @@ template <> size_t GenericFill(const DB& db, const LIST& para return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLoop* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceBound* in) { size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolyLoop* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyLoop"); } do { // convert the 'Polygon' argument + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceBound"); } do { // convert the 'Bound' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Polygon, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyLoop to be a `LIST [3:?] OF IfcCartesianPoint`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Bound, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBound to be a `IfcLoop`")); } + } while(0); + do { // convert the 'Orientation' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->Orientation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcFaceBound to be a `BOOLEAN`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTerminatorSymbol* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeCurve* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveTerminator* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOneDirectionRepeatFactor* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTwoDirectionRepeatFactor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceAmbient* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlacement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlacement"); } do { // convert the 'Location' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Location, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPlacement to be a `IfcCartesianPoint`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis1Placement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis1Placement"); } do { // convert the 'Axis' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Axis, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis1Placement to be a `IfcDirection`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurfaceOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowControllerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMeterType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationCurveOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProfileDef* in) +{ + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->ProfileType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); } + } while(0); + do { // convert the 'ProfileName' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ProfileName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubedge* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTankType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementComponent* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementPart* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentation* in) +{ + size_t base = 0; + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRepresentation"); } do { // convert the 'ContextOfItems' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->ContextOfItems, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentation to be a `IfcRepresentationContext`")); } + } while(0); + do { // convert the 'RepresentationIdentifier' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RepresentationIdentifier, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentation to be a `IfcLabel`")); } + } while(0); + do { // convert the 'RepresentationType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RepresentationType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRepresentation to be a `IfcLabel`")); } + } while(0); + do { // convert the 'Items' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } + try { GenericConvert( in->Items, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRepresentation to be a `SET [1:?] OF IfcRepresentationItem`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeRepresentation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailing* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyleModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyledRepresentation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcColourRgb* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcColourRgb"); } do { // convert the 'Red' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Red, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); } + } while(0); + do { // convert the 'Green' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Green, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); } + } while(0); + do { // convert the 'Blue' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Blue, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessoryType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVibrationIsolatorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcess* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcedure* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementAddition* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeFeature* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTrimmedCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcTrimmedCurve"); } do { // convert the 'BasisCurve' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->BasisCurve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcTrimmedCurve to be a `IfcCurve`")); } + } while(0); + do { // convert the 'Trim1' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Trim1, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } + } while(0); + do { // convert the 'Trim2' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Trim2, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } + } while(0); + do { // convert the 'SenseAgreement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SenseAgreement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcTrimmedCurve to be a `BOOLEAN`")); } + } while(0); + do { // convert the 'MasterRepresentation' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MasterRepresentation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcTrimmedCurve to be a `IfcTrimmingPreference`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteral* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcParameterizedProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailAShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponent* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgPrimitive3D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBlock* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMovingDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPumpType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMember* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMemberVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingMesh* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarExtent* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarBox* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCooledBeamType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrderRecord* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelContainedInSpatialStructure* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelContainedInSpatialStructure"); } do { // convert the 'RelatedElements' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatedElements, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelContainedInSpatialStructure to be a `SET [1:?] OF IfcProduct`")); } + } while(0); + do { // convert the 'RelatingStructure' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatingStructure, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelContainedInSpatialStructure to be a `IfcSpatialStructureElement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSimpleProperty* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSimpleProperty"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyListValue* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyListValue"); } do { // convert the 'ListValues' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ListValues, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertyListValue to be a `LIST [1:?] OF IfcValue`")); } + } while(0); + do { // convert the 'Unit' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Unit, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertyListValue to be a `IfcUnit`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcSpatialStructureElement"); } do { // convert the 'LongName' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->LongName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcSpatialStructureElement to be a `IfcLabel`")); } + } while(0); + do { // convert the 'CompositionType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->CompositionType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcSpatialStructureElement to be a `IfcElementCompositionEnum`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingStorey* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcUnitaryEquipmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOutletType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastenerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGroup* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAnalysisModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlabType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionFlowElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolyline* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyline"); } do { // convert the 'Points' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Points, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyline to be a `LIST [2:?] OF IfcCartesianPoint`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDraughtingCallout* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFace* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFace"); } do { // convert the 'Bounds' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Bounds, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFace to be a `SET [1:?] OF IfcFaceBound`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMemberVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMotorConnectionType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirToAirHeatRecoveryType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlateType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSolidModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastenerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDecomposes* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDecomposes"); } do { // convert the 'RelatingObject' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->RelatingObject, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDecomposes to be a `IfcObjectDefinition`")); } + } while(0); + do { // convert the 'RelatedObjects' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->RelatedObjects, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDecomposes to be a `SET [1:?] OF IfcObjectDefinition`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumnType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularPyramid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcActionRequest* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralActivity* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralReaction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointReaction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearAction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearActionVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCrewResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcChamferEdgeFeature* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCompositeCurve"); } do { // convert the 'Segments' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Segments, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurve to be a `LIST [1:?] OF IfcCompositeCurveSegment`")); } + } while(0); + do { // convert the 'SelfIntersect' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->SelfIntersect, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurve to be a `LOGICAL`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, Ifc2DCompositeCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGrid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendon* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRectangleProfileDef"); } do { // convert the 'XDim' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->XDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'YDim' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->YDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedRectangleProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeamType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLampType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceGoniometric* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProductRepresentation* in) +{ + size_t base = 0; + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcProductRepresentation"); } do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProductRepresentation to be a `IfcLabel`")); } + } while(0); + do { // convert the 'Description' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Description, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProductRepresentation to be a `IfcText`")); } + } while(0); + do { // convert the 'Representations' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + try { GenericConvert( in->Representations, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcProductRepresentation to be a `LIST [1:?] OF IfcRepresentation`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMaterialDefinitionRepresentation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPermit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcContextDependentUnit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMovingDevice* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumn* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProtectiveDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegment* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompressorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -3816,6 +2708,137 @@ template <> size_t GenericFill(const DB& db, const LIST& return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefines* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRelDefines"); } do { // convert the 'RelatedObjects' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->RelatedObjects, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDefines to be a `SET [1:?] OF IfcObject`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTask* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMove* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceDirectional* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondenserType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConic* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConic"); } do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConic to be a `IfcAxis2Placement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipse* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcEllipse"); } do { // convert the 'SemiAxis1' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SemiAxis1, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'SemiAxis2' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SemiAxis2, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoorStyle* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSensorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillAreaOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWall* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnitureType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcControllerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFitting* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationContext* in) { size_t base = 0; @@ -3836,6 +2859,225 @@ template <> size_t GenericFill(const DB& db, const LIS return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationMap* in) +{ + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationMap"); } do { // convert the 'MappingOrigin' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappingOrigin, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationMap to be a `IfcAxis2Placement`")); } + } while(0); + do { // convert the 'MappedRepresentation' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappedRepresentation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationMap to be a `IfcRepresentation`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDirection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcDirection"); } do { // convert the 'DirectionRatios' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->DirectionRatios, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcDirection to be a `LIST [2:3] OF REAL`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveDirectedCallout* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAngularDimension* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkControl* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkPlan* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPort* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionPort* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOrderAction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeam* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcManifoldSolidBrep* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcManifoldSolidBrep"); } do { // convert the 'Outer' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Outer, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcManifoldSolidBrep to be a `IfcClosedShell`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrep* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleWithTextures* in) +{ + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleWithTextures"); } do { // convert the 'Textures' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Textures, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleWithTextures to be a `LIST [1:?] OF IfcSurfaceTexture`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryClosedProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryClosedProfileDef"); } do { // convert the 'OuterCurve' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->OuterCurve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryClosedProfileDef to be a `IfcCurve`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcHumidifierType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolyLoop* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyLoop"); } do { // convert the 'Polygon' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Polygon, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyLoop to be a `LIST [3:?] OF IfcCartesianPoint`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFittingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTiles* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertex* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillArea* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlate* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCone* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLoadGroup* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationContext* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -3868,166 +3110,31 @@ template <> size_t GenericFill(const DB& db, return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurveBoundedPlane* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTubeBundleType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSIUnit* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarAction* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcSIUnit"); } do { // convert the 'Prefix' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Prefix, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSIUnit to be a `IfcSIPrefix`")); } - } while(0); - do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSIUnit to be a `IfcSIUnitName`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralReaction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointReaction* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcHeatExchangerType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis1Placement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceOuterBound* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis1Placement"); } do { // convert the 'Axis' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Axis, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis1Placement to be a `IfcDirection`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricApplianceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSensorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProtectiveDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcZShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcScheduleTimeControl* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationMap* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationMap"); } do { // convert the 'MappingOrigin' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappingOrigin, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationMap to be a `IfcAxis2Placement`")); } - } while(0); - do { // convert the 'MappedRepresentation' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappedRepresentation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationMap to be a `IfcRepresentation`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcClosedShell* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcClosedShell"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementPart* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBlock* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightFixtureType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpeningElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcOpeningElement"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceSpot* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendonAnchor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricFlowStorageDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceOuterBound"); } return base; } // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcSphere* in) @@ -4037,196 +3144,52 @@ template <> size_t GenericFill(const DB& db, const LIST& params, IfcS return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDamperType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourcePositional* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrderRecord* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointAction* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegmentType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastener* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularTrimmedSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcZone* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFanType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricSet* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTiles* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelOverridesProperties* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMeasureWithUnit* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMeasureWithUnit"); } do { // convert the 'ValueComponent' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ValueComponent, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMeasureWithUnit to be a `IfcValue`")); } - } while(0); - do { // convert the 'UnitComponent' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->UnitComponent, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMeasureWithUnit to be a `IfcUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlabType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcServiceLife* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnitureType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingMesh* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrepWithVoids* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGasTerminalType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFireSuppressionTerminalType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPile* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySingleValue* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySingleValue"); } do { // convert the 'NominalValue' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->NominalValue, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertySingleValue to be a `IfcValue`")); } + } while(0); + do { // convert the 'Unit' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Unit, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertySingleValue to be a `IfcUnit`")); } + } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTileSymbolWithStyle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionMaterialResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationCurveOccurrence* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricCurveSet* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelAggregates* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelAggregates"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceBasedSurfaceModel* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -4238,430 +3201,24 @@ template <> size_t GenericFill(const DB& db, const LIS return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDevice* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement3D* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlight* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertexLoop* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlate* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcUShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceBound* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceBound"); } do { // convert the 'Bound' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Bound, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBound to be a `IfcLoop`")); } - } while(0); - do { // convert the 'Orientation' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->Orientation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcFaceBound to be a `BOOLEAN`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceOuterBound* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceOuterBound"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOneDirectionRepeatFactor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoilerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionEquipmentResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcComplexProperty* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcComplexProperty"); } do { // convert the 'UsageName' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->UsageName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcComplexProperty to be a `IfcIdentifier`")); } - } while(0); - do { // convert the 'HasProperties' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->HasProperties, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcComplexProperty to be a `SET [1:?] OF IfcProperty`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFooting* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionProductResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDerivedProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyTableValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMeterType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoorStyle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcUnitAssignment* in) -{ - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcUnitAssignment"); } do { // convert the 'Units' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Units, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcUnitAssignment to be a `SET [1:?] OF IfcUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTerminal* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailFShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegment* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementQuantity* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcElementQuantity"); } do { // convert the 'MethodOfMeasurement' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcAxis2Placement3D"); } do { // convert the 'Axis' argument boost::shared_ptr arg = params[base++]; if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->MethodOfMeasurement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcElementQuantity to be a `IfcLabel`")); } + try { GenericConvert( in->Axis, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement3D to be a `IfcDirection`")); } } while(0); - do { // convert the 'Quantities' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Quantities, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcElementQuantity to be a `SET [1:?] OF IfcPhysicalQuantity`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWall* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessory* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGrid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSanitaryTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubedge* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFilterType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendon* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLoadGroup* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyleAssignment* in) -{ - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyleAssignment"); } do { // convert the 'Styles' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Styles, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyleAssignment to be a `SET [1:?] OF IfcPresentationStyleSelect`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMember* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceAmbient* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondition* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPort* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpace* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 11) { throw STEP::TypeError("expected 11 arguments to IfcSpace"); } do { // convert the 'InteriorOrExteriorSpace' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->InteriorOrExteriorSpace, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSpace to be a `IfcInternalOrExternalEnum`")); } - } while(0); - do { // convert the 'ElevationWithFlooring' argument + do { // convert the 'RefDirection' argument boost::shared_ptr arg = params[base++]; if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ElevationWithFlooring, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSpace to be a `IfcLengthMeasure`")); } + try { GenericConvert( in->RefDirection, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcAxis2Placement3D to be a `IfcDirection`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcHeatExchangerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTankType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcInventory* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirToAirHeatRecoveryType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlight* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleWithTextures* in) -{ - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleWithTextures"); } do { // convert the 'Textures' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Textures, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleWithTextures to be a `LIST [1:?] OF IfcSurfaceTexture`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundingBox* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcBoundingBox"); } do { // convert the 'Corner' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Corner, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBoundingBox to be a `IfcCartesianPoint`")); } - } while(0); - do { // convert the 'XDim' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->XDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'YDim' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->YDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'ZDim' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ZDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMove* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCircle"); } do { // convert the 'Radius' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Radius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCircle to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve2D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralResultGroup* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -4669,255 +3226,38 @@ template <> size_t GenericFill(const DB& db, const LIS return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSectionedSpine* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcHalfSpaceSolid* in) { size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcHalfSpaceSolid"); } do { // convert the 'BaseSurface' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->BaseSurface, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcHalfSpaceSolid to be a `IfcSurface`")); } + } while(0); + do { // convert the 'AgreementFlag' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->AgreementFlag, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcHalfSpaceSolid to be a `BOOLEAN`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGasTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlab* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMember* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertex* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertexPoint* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearAction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearActionVarying* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxyType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConversionBasedUnit* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcConversionBasedUnit"); } do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcConversionBasedUnit to be a `IfcLabel`")); } - } while(0); - do { // convert the 'ConversionFactor' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ConversionFactor, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcConversionBasedUnit to be a `IfcMeasureWithUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationSubContext* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurfaceOccurrence* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedEdgeFeature* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricDistributionPoint* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallStandardCase* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeamType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillArea* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMemberVarying* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOrderAction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeLoop* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillAreaOccurrence* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkPlan* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipse* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcEllipse"); } do { // convert the 'SemiAxis1' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SemiAxis1, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'SemiAxis2' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SemiAxis2, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProductDefinitionShape* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalCircuit* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRationalBezierCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointAction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTwoDirectionRepeatFactor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeRepresentation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySet* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -4929,6 +3269,122 @@ template <> size_t GenericFill(const DB& db, const LIST& params, return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondition* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyEnumeratedValue* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteralWithExtent* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowController* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricDistributionPoint* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsset* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptAreaSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSweptAreaSolid"); } do { // convert the 'SweptArea' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->SweptArea, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptAreaSolid to be a `IfcProfileDef`")); } + } while(0); + do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptAreaSolid to be a `IfcAxis2Placement3D`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRevolvedAreaSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRevolvedAreaSolid"); } do { // convert the 'Axis' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Axis, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRevolvedAreaSolid to be a `IfcAxis1Placement`")); } + } while(0); + do { // convert the 'Angle' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Angle, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRevolvedAreaSolid to be a `IfcPlaneAngleMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowInstrumentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDevice* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleShading* in) +{ + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleShading"); } do { // convert the 'SurfaceColour' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->SurfaceColour, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleShading to be a `IfcColourRgb`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleRendering* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -4982,27 +3438,1354 @@ template <> size_t GenericFill(const DB& db, const LIS return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionPort* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoilerType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeFittingType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxy* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLocalPlacement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLocalPlacement"); } do { // convert the 'PlacementRelTo' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->PlacementRelTo, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLocalPlacement to be a `IfcObjectPlacement`")); } + } while(0); + do { // convert the 'RelativePlacement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelativePlacement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLocalPlacement to be a `IfcAxis2Placement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcZone* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStair* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallStandardCase* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiameterDimension* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcJunctionBoxType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator3DnonUniform* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcCartesianTransformationOperator3DnonUniform"); } do { // convert the 'Scale2' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Scale2, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } + } while(0); + do { // convert the 'Scale3' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Scale3, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcInventory* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConditionCriterion* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConnectedFaceSet* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConnectedFaceSet"); } do { // convert the 'CfsFaces' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->CfsFaces, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConnectedFaceSet to be a `SET [1:?] OF IfcFace`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpenShell* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 10) { throw STEP::TypeError("expected 10 arguments to IfcDoor"); } do { // convert the 'OverallHeight' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->OverallHeight, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'OverallWidth' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->OverallWidth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBezierCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRationalBezierCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryProfileDefWithVoids* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcArbitraryProfileDefWithVoids"); } do { // convert the 'InnerCurves' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->InnerCurves, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcArbitraryProfileDefWithVoids to be a `SET [1:?] OF IfcCurve`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanResult* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanResult"); } do { // convert the 'Operator' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Operator, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBooleanResult to be a `IfcBooleanOperator`")); } + } while(0); + do { // convert the 'FirstOperand' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->FirstOperand, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBooleanResult to be a `IfcBooleanOperand`")); } + } while(0); + do { // convert the 'SecondOperand' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + try { GenericConvert( in->SecondOperand, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBooleanResult to be a `IfcBooleanOperand`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStackTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcIShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcIShapeProfileDef"); } do { // convert the 'OverallWidth' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->OverallWidth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'OverallDepth' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->OverallDepth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'WebThickness' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + try { GenericConvert( in->WebThickness, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'FlangeThickness' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } + try { GenericConvert( in->FlangeThickness, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'FilletRadius' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[4]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->FilletRadius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsymmetricIShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentElement* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcClosedShell* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcClosedShell"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipseProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyBoundedValue* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoveringType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcActuatorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve2D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcAnnotation"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve3D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFooting* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMappedItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMappedItem"); } do { // convert the 'MappingSource' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappingSource, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMappedItem to be a `IfcRepresentationMap`")); } + } while(0); + do { // convert the 'MappingTarget' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappingTarget, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMappedItem to be a `IfcCartesianTransformationOperator`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransformerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCylinder* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceProgram* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcZShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleHollowProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricSet* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricCurveSet* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryOpenProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryOpenProfileDef"); } do { // convert the 'Curve' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Curve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryOpenProfileDef to be a `IfcBoundedCurve`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrepWithVoids* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVector* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcVector"); } do { // convert the 'Orientation' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Orientation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcVector to be a `IfcDirection`")); } + } while(0); + do { // convert the 'Magnitude' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Magnitude, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcVector to be a `IfcLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcServiceLife* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurveBoundedPlane* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircle* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCircle"); } do { // convert the 'Radius' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Radius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCircle to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertexLoop* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceCurveSweptAreaSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionEquipmentResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSectionedSpine* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyReferenceValue* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSite* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 14) { throw STEP::TypeError("expected 14 arguments to IfcSite"); } do { // convert the 'RefLatitude' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefLatitude, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } + } while(0); + do { // convert the 'RefLongitude' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefLongitude, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } + } while(0); + do { // convert the 'RefElevation' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefElevation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcSite to be a `IfcLengthMeasure`")); } + } while(0); + do { // convert the 'LandTitleNumber' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->LandTitleNumber, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 12 to IfcSite to be a `IfcLabel`")); } + } while(0); + do { // convert the 'SiteAddress' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->SiteAddress, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 13 to IfcSite to be a `IfcPostalAddress`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPerformanceHistory* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyTableValue* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolygonalBoundedHalfSpace* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPolygonalBoundedHalfSpace"); } do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPolygonalBoundedHalfSpace to be a `IfcAxis2Placement3D`")); } + } while(0); + do { // convert the 'PolygonalBoundary' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->PolygonalBoundary, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPolygonalBoundedHalfSpace to be a `IfcBoundedCurve`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement2D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis2Placement2D"); } do { // convert the 'RefDirection' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefDirection, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement2D to be a `IfcDirection`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleHatching* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastener* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcScheduleTimeControl* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricMotorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTimeSeriesSchedule* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTerminal* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoilType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWasteTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindow* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricFlowStorageDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelAggregates* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelAggregates"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRamp* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLinearDimension* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementarySurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcElementarySurface"); } do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcElementarySurface to be a `IfcAxis2Placement3D`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionProductResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPath* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcActor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOccupant* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSwitchingDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfLinearExtrusion* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcShellBasedSurfaceModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcShellBasedSurfaceModel"); } do { // convert the 'SbsmBoundary' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SbsmBoundary, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcShellBasedSurfaceModel to be a `SET [1:?] OF IfcShell`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuilding* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 12) { throw STEP::TypeError("expected 12 arguments to IfcBuilding"); } do { // convert the 'ElevationOfRefHeight' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ElevationOfRefHeight, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcBuilding to be a `IfcLengthMeasure`")); } + } while(0); + do { // convert the 'ElevationOfTerrain' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ElevationOfTerrain, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcBuilding to be a `IfcLengthMeasure`")); } + } while(0); + do { // convert the 'BuildingAddress' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->BuildingAddress, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcBuilding to be a `IfcPostalAddress`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSIUnit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcSIUnit"); } do { // convert the 'Prefix' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Prefix, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSIUnit to be a `IfcSIPrefix`")); } + } while(0); + do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSIUnit to be a `IfcSIUnitName`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessory* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystemFurnitureElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementAssembly* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoolingTowerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceSpot* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporatorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceHeaterType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementQuantity* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcElementQuantity"); } do { // convert the 'MethodOfMeasurement' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->MethodOfMeasurement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcElementQuantity to be a `IfcLabel`")); } + } while(0); + do { // convert the 'Quantities' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Quantities, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcElementQuantity to be a `SET [1:?] OF IfcPhysicalQuantity`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlight* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConversionBasedUnit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcConversionBasedUnit"); } do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcConversionBasedUnit to be a `IfcLabel`")); } + } while(0); + do { // convert the 'ConversionFactor' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ConversionFactor, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcConversionBasedUnit to be a `IfcMeasureWithUnit`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcExtrudedAreaSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcExtrudedAreaSolid"); } do { // convert the 'ExtrudedDirection' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ExtrudedDirection, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcExtrudedAreaSolid to be a `IfcDirection`")); } + } while(0); + do { // convert the 'Depth' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Depth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcExtrudedAreaSolid to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrder* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanClippingResult* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanClippingResult"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingBar* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCenterLineProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcUShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundingBox* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcBoundingBox"); } do { // convert the 'Corner' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Corner, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBoundingBox to be a `IfcCartesianPoint`")); } + } while(0); + do { // convert the 'XDim' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->XDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'YDim' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->YDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'ZDim' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ZDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindowStyle* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMemberType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightFixtureType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDevice* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologyRepresentation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefinesByProperties* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDefinesByProperties"); } do { // convert the 'RelatingPropertyDefinition' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->RelatingPropertyDefinition, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDefinesByProperties to be a `IfcPropertySetDefinition`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelOverridesProperties* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlightType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCircleProfileDef"); } do { // convert the 'Radius' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Radius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCircleProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptDiskSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcSweptDiskSolid"); } do { // convert the 'Directrix' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Directrix, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptDiskSolid to be a `IfcCurve`")); } + } while(0); + do { // convert the 'Radius' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Radius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'InnerRadius' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->InnerRadius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'StartParam' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->StartParam, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSweptDiskSolid to be a `IfcParameterValue`")); } + } while(0); + do { // convert the 'EndParam' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->EndParam, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcSweptDiskSolid to be a `IfcParameterValue`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarActionVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcValveType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcUnitAssignment* in) +{ + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcUnitAssignment"); } do { // convert the 'Units' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Units, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcUnitAssignment to be a `SET [1:?] OF IfcUnit`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVirtualElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoof* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricTimeControlType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPile* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostSchedule* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlightType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDerivedProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporativeCoolerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcChillerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoxedHalfSpace* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWallType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationSubContext* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlane* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlane"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDamperType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastener* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSilencerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLaborResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFanType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailFShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProject* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcProject"); } do { // convert the 'LongName' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->LongName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProject to be a `IfcLabel`")); } + } while(0); + do { // convert the 'Phase' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Phase, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProject to be a `IfcLabel`")); } + } while(0); + do { // convert the 'RepresentationContexts' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RepresentationContexts, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcProject to be a `SET [1:?] OF IfcRepresentationContext`")); } + } while(0); + do { // convert the 'UnitsInContext' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->UnitsInContext, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcProject to be a `IfcUnitAssignment`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelVoidsElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelVoidsElement"); } do { // convert the 'RelatingBuildingElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatingBuildingElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelVoidsElement to be a `IfcElement`")); } + } while(0); + do { // convert the 'RelatedOpeningElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatedOpeningElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelVoidsElement to be a `IfcFeatureElementSubtraction`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalCircuit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDevice* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertexPoint* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationTextOccurrence* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -5010,16 +4793,237 @@ template <> size_t GenericFill(const DB& db, const return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAnalysisModel* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFilterType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConditionCriterion* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeLoop* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleHollowProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCircleHollowProfileDef"); } do { // convert the 'WallThickness' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->WallThickness, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCircleHollowProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalBoxType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuredDimensionCallout* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctFittingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularTrimmedSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProductDefinitionShape* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlight* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlab* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeFittingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpace* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 11) { throw STEP::TypeError("expected 11 arguments to IfcSpace"); } do { // convert the 'InteriorOrExteriorSpace' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->InteriorOrExteriorSpace, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSpace to be a `IfcInternalOrExternalEnum`")); } + } while(0); + do { // convert the 'ElevationWithFlooring' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ElevationWithFlooring, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSpace to be a `IfcLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxyType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAlarmType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierFittingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedEdgeFeature* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendonAnchor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkSchedule* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfRevolution* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricHeaterType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMeasureWithUnit* in) +{ + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMeasureWithUnit"); } do { // convert the 'ValueComponent' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ValueComponent, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMeasureWithUnit to be a `IfcValue`")); } + } while(0); + do { // convert the 'UnitComponent' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->UnitComponent, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMeasureWithUnit to be a `IfcUnit`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOrientedEdge* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2DnonUniform* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelFillsElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelFillsElement"); } do { // convert the 'RelatingOpeningElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatingOpeningElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelFillsElement to be a `IfcOpeningElement`")); } + } while(0); + do { // convert the 'RelatedBuildingElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatedBuildingElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelFillsElement to be a `IfcElement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionMaterialResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRadiusDimension* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } diff --git a/code/IFCReaderGen.h b/code/IFCReaderGen.h index dd4376872..f87cf2b45 100644 --- a/code/IFCReaderGen.h +++ b/code/IFCReaderGen.h @@ -61,1320 +61,1348 @@ namespace IFC { // ****************************************************************************** - // C++ wrapper type for IfcStairTypeEnum - typedef ENUMERATION IfcStairTypeEnum; - // C++ wrapper type for IfcSpaceTypeEnum - typedef ENUMERATION IfcSpaceTypeEnum; - // C++ wrapper type for IfcWallTypeEnum - typedef ENUMERATION IfcWallTypeEnum; - // C++ wrapper type for IfcMonthInYearNumber - typedef INTEGER IfcMonthInYearNumber; - // C++ wrapper type for IfcHeatFluxDensityMeasure - typedef REAL IfcHeatFluxDensityMeasure; - // C++ wrapper type for IfcKinematicViscosityMeasure - typedef REAL IfcKinematicViscosityMeasure; - // C++ wrapper type for IfcSequenceEnum - typedef ENUMERATION IfcSequenceEnum; - // C++ wrapper type for IfcAirToAirHeatRecoveryTypeEnum - typedef ENUMERATION IfcAirToAirHeatRecoveryTypeEnum; - // C++ wrapper type for IfcActorSelect - typedef SELECT IfcActorSelect; - // C++ wrapper type for IfcTransformerTypeEnum - typedef ENUMERATION IfcTransformerTypeEnum; - // C++ wrapper type for IfcUnitaryEquipmentTypeEnum - typedef ENUMERATION IfcUnitaryEquipmentTypeEnum; - // C++ wrapper type for IfcElectricFlowStorageDeviceTypeEnum - typedef ENUMERATION IfcElectricFlowStorageDeviceTypeEnum; - // C++ wrapper type for IfcEnergySequenceEnum - typedef ENUMERATION IfcEnergySequenceEnum; - // C++ wrapper type for IfcWorkControlTypeEnum - typedef ENUMERATION IfcWorkControlTypeEnum; - // C++ wrapper type for IfcCurvatureMeasure - typedef REAL IfcCurvatureMeasure; - // C++ wrapper type for IfcParameterValue - typedef REAL IfcParameterValue; - // C++ wrapper type for IfcAppliedValueSelect - typedef SELECT IfcAppliedValueSelect; - // C++ wrapper type for IfcWarpingConstantMeasure - typedef REAL IfcWarpingConstantMeasure; + // C++ wrapper type for IfcSIPrefix + typedef ENUMERATION IfcSIPrefix; + // C++ wrapper type for IfcColour + typedef SELECT IfcColour; + // C++ wrapper type for IfcEvaporativeCoolerTypeEnum + typedef ENUMERATION IfcEvaporativeCoolerTypeEnum; + // C++ wrapper type for IfcMetricValueSelect + typedef SELECT IfcMetricValueSelect; + // C++ wrapper type for IfcCurtainWallTypeEnum + typedef ENUMERATION IfcCurtainWallTypeEnum; + // C++ wrapper type for IfcVolumetricFlowRateMeasure + typedef REAL IfcVolumetricFlowRateMeasure; + // C++ wrapper type for IfcPHMeasure + typedef REAL IfcPHMeasure; + // C++ wrapper type for IfcTimeStamp + typedef INTEGER IfcTimeStamp; + // C++ wrapper type for IfcSoundPressureMeasure + typedef REAL IfcSoundPressureMeasure; // C++ wrapper type for IfcArithmeticOperatorEnum typedef ENUMERATION IfcArithmeticOperatorEnum; - // C++ wrapper type for IfcLinearForceMeasure - typedef REAL IfcLinearForceMeasure; + // C++ wrapper type for IfcOutletTypeEnum + typedef ENUMERATION IfcOutletTypeEnum; + // C++ wrapper type for IfcLampTypeEnum + typedef ENUMERATION IfcLampTypeEnum; + // C++ wrapper type for IfcObjectReferenceSelect + typedef SELECT IfcObjectReferenceSelect; + // C++ wrapper type for IfcDateTimeSelect + typedef SELECT IfcDateTimeSelect; + // C++ wrapper type for IfcElectricGeneratorTypeEnum + typedef ENUMERATION IfcElectricGeneratorTypeEnum; + // C++ wrapper type for IfcMoistureDiffusivityMeasure + typedef REAL IfcMoistureDiffusivityMeasure; + // C++ wrapper type for IfcCompoundPlaneAngleMeasure + typedef ListOf< INTEGER, 3, 3 > IfcCompoundPlaneAngleMeasure; + // C++ wrapper type for IfcDerivedUnitEnum + typedef ENUMERATION IfcDerivedUnitEnum; + // C++ wrapper type for IfcRotationalStiffnessMeasure + typedef REAL IfcRotationalStiffnessMeasure; + // C++ wrapper type for IfcPipeFittingTypeEnum + typedef ENUMERATION IfcPipeFittingTypeEnum; + // C++ wrapper type for IfcShearModulusMeasure + typedef REAL IfcShearModulusMeasure; + // C++ wrapper type for IfcContextDependentMeasure + typedef REAL IfcContextDependentMeasure; + // C++ wrapper type for IfcLightFixtureTypeEnum + typedef ENUMERATION IfcLightFixtureTypeEnum; + // C++ wrapper type for IfcResourceConsumptionEnum + typedef ENUMERATION IfcResourceConsumptionEnum; + // C++ wrapper type for IfcDistributionChamberElementTypeEnum + typedef ENUMERATION IfcDistributionChamberElementTypeEnum; + // C++ wrapper type for IfcPlaneAngleMeasure + typedef REAL IfcPlaneAngleMeasure; + // C++ wrapper type for IfcSlabTypeEnum + typedef ENUMERATION IfcSlabTypeEnum; + // C++ wrapper type for IfcCharacterStyleSelect + typedef SELECT IfcCharacterStyleSelect; + // C++ wrapper type for IfcDimensionExtentUsage + typedef ENUMERATION IfcDimensionExtentUsage; + // C++ wrapper type for IfcDynamicViscosityMeasure + typedef REAL IfcDynamicViscosityMeasure; + // C++ wrapper type for IfcPropertySourceEnum + typedef ENUMERATION IfcPropertySourceEnum; + // C++ wrapper type for IfcConstraintEnum + typedef ENUMERATION IfcConstraintEnum; + // C++ wrapper type for IfcLayerSetDirectionEnum + typedef ENUMERATION IfcLayerSetDirectionEnum; + // C++ wrapper type for IfcFontVariant + typedef STRING IfcFontVariant; + // C++ wrapper type for IfcModulusOfElasticityMeasure + typedef REAL IfcModulusOfElasticityMeasure; + // C++ wrapper type for IfcDoorPanelPositionEnum + typedef ENUMERATION IfcDoorPanelPositionEnum; + // C++ wrapper type for IfcWindowStyleConstructionEnum + typedef ENUMERATION IfcWindowStyleConstructionEnum; + // C++ wrapper type for IfcAmountOfSubstanceMeasure + typedef REAL IfcAmountOfSubstanceMeasure; + // C++ wrapper type for IfcCurvatureMeasure + typedef REAL IfcCurvatureMeasure; + // C++ wrapper type for IfcCableCarrierFittingTypeEnum + typedef ENUMERATION IfcCableCarrierFittingTypeEnum; + // C++ wrapper type for IfcMinuteInHour + typedef INTEGER IfcMinuteInHour; + // C++ wrapper type for IfcPressureMeasure + typedef REAL IfcPressureMeasure; + // C++ wrapper type for IfcElectricConductanceMeasure + typedef REAL IfcElectricConductanceMeasure; + // C++ wrapper type for IfcIsothermalMoistureCapacityMeasure + typedef REAL IfcIsothermalMoistureCapacityMeasure; + // C++ wrapper type for IfcFanTypeEnum + typedef ENUMERATION IfcFanTypeEnum; + // C++ wrapper type for IfcCurveOrEdgeCurve + typedef SELECT IfcCurveOrEdgeCurve; + // C++ wrapper type for IfcPipeSegmentTypeEnum + typedef ENUMERATION IfcPipeSegmentTypeEnum; + // C++ wrapper type for IfcEvaporatorTypeEnum + typedef ENUMERATION IfcEvaporatorTypeEnum; + // C++ wrapper type for IfcElectricCapacitanceMeasure + typedef REAL IfcElectricCapacitanceMeasure; + // C++ wrapper type for IfcElementAssemblyTypeEnum + typedef ENUMERATION IfcElementAssemblyTypeEnum; + // C++ wrapper type for IfcElectricCurrentMeasure + typedef REAL IfcElectricCurrentMeasure; + // C++ wrapper type for IfcThermalAdmittanceMeasure + typedef REAL IfcThermalAdmittanceMeasure; + // C++ wrapper type for IfcLibrarySelect + typedef SELECT IfcLibrarySelect; + // C++ wrapper type for IfcSanitaryTerminalTypeEnum + typedef ENUMERATION IfcSanitaryTerminalTypeEnum; + // C++ wrapper type for IfcValue + typedef SELECT IfcValue; + // C++ wrapper type for IfcRoleEnum + typedef ENUMERATION IfcRoleEnum; + // C++ wrapper type for IfcModulusOfRotationalSubgradeReactionMeasure + typedef REAL IfcModulusOfRotationalSubgradeReactionMeasure; + // C++ wrapper type for IfcWindowStyleOperationEnum + typedef ENUMERATION IfcWindowStyleOperationEnum; + // C++ wrapper type for IfcDayInMonthNumber + typedef INTEGER IfcDayInMonthNumber; + // C++ wrapper type for IfcDirectionSenseEnum + typedef ENUMERATION IfcDirectionSenseEnum; + // C++ wrapper type for IfcMotorConnectionTypeEnum + typedef ENUMERATION IfcMotorConnectionTypeEnum; + // C++ wrapper type for IfcMassDensityMeasure + typedef REAL IfcMassDensityMeasure; + // C++ wrapper type for IfcSpaceTypeEnum + typedef ENUMERATION IfcSpaceTypeEnum; + // C++ wrapper type for IfcTextAlignment + typedef STRING IfcTextAlignment; + // C++ wrapper type for IfcAbsorbedDoseMeasure + typedef REAL IfcAbsorbedDoseMeasure; + // C++ wrapper type for IfcObjectiveEnum + typedef ENUMERATION IfcObjectiveEnum; + // C++ wrapper type for IfcSoundScaleEnum + typedef ENUMERATION IfcSoundScaleEnum; + // C++ wrapper type for IfcIlluminanceMeasure + typedef REAL IfcIlluminanceMeasure; + // C++ wrapper type for IfcDoseEquivalentMeasure + typedef REAL IfcDoseEquivalentMeasure; + // C++ wrapper type for IfcPowerMeasure + typedef REAL IfcPowerMeasure; + // C++ wrapper type for IfcElectricVoltageMeasure + typedef REAL IfcElectricVoltageMeasure; + // C++ wrapper type for IfcFootingTypeEnum + typedef ENUMERATION IfcFootingTypeEnum; + // C++ wrapper type for IfcFontStyle + typedef STRING IfcFontStyle; + // C++ wrapper type for IfcShell + typedef SELECT IfcShell; + // C++ wrapper type for IfcPermeableCoveringOperationEnum + typedef ENUMERATION IfcPermeableCoveringOperationEnum; + // C++ wrapper type for IfcWarpingMomentMeasure + typedef REAL IfcWarpingMomentMeasure; + // C++ wrapper type for IfcSectionalAreaIntegralMeasure + typedef REAL IfcSectionalAreaIntegralMeasure; + // C++ wrapper type for IfcModulusOfSubgradeReactionMeasure + typedef REAL IfcModulusOfSubgradeReactionMeasure; + // C++ wrapper type for IfcRotationalFrequencyMeasure + typedef REAL IfcRotationalFrequencyMeasure; + // C++ wrapper type for IfcFillAreaStyleTileShapeSelect + typedef SELECT IfcFillAreaStyleTileShapeSelect; + // C++ wrapper type for IfcLoadGroupTypeEnum + typedef ENUMERATION IfcLoadGroupTypeEnum; + // C++ wrapper type for IfcSolidAngleMeasure + typedef REAL IfcSolidAngleMeasure; + // C++ wrapper type for IfcColourOrFactor + typedef SELECT IfcColourOrFactor; + // C++ wrapper type for IfcHourInDay + typedef INTEGER IfcHourInDay; + // C++ wrapper type for IfcLinearStiffnessMeasure + typedef REAL IfcLinearStiffnessMeasure; + // C++ wrapper type for IfcTimeMeasure + typedef REAL IfcTimeMeasure; + // C++ wrapper type for IfcBoxAlignment + typedef STRING IfcBoxAlignment; + // C++ wrapper type for IfcElectricFlowStorageDeviceTypeEnum + typedef ENUMERATION IfcElectricFlowStorageDeviceTypeEnum; + // C++ wrapper type for IfcOrientationSelect + typedef SELECT IfcOrientationSelect; + // C++ wrapper type for IfcSecondInMinute + typedef REAL IfcSecondInMinute; + // C++ wrapper type for IfcWorkControlTypeEnum + typedef ENUMERATION IfcWorkControlTypeEnum; + // C++ wrapper type for IfcHeatFluxDensityMeasure + typedef REAL IfcHeatFluxDensityMeasure; + // C++ wrapper type for IfcSizeSelect + typedef SELECT IfcSizeSelect; + // C++ wrapper type for IfcDimensionCount + typedef INTEGER IfcDimensionCount; + // C++ wrapper type for IfcValveTypeEnum + typedef ENUMERATION IfcValveTypeEnum; + // C++ wrapper type for IfcTransportElementTypeEnum + typedef ENUMERATION IfcTransportElementTypeEnum; + // C++ wrapper type for IfcInductanceMeasure + typedef REAL IfcInductanceMeasure; + // C++ wrapper type for IfcYearNumber + typedef INTEGER IfcYearNumber; + // C++ wrapper type for IfcDoorStyleConstructionEnum + typedef ENUMERATION IfcDoorStyleConstructionEnum; + // C++ wrapper type for IfcThermalExpansionCoefficientMeasure + typedef REAL IfcThermalExpansionCoefficientMeasure; + // C++ wrapper type for IfcCompressorTypeEnum + typedef ENUMERATION IfcCompressorTypeEnum; + // C++ wrapper type for IfcAxis2Placement + typedef SELECT IfcAxis2Placement; + // C++ wrapper type for IfcSwitchingDeviceTypeEnum + typedef ENUMERATION IfcSwitchingDeviceTypeEnum; + // C++ wrapper type for IfcDocumentConfidentialityEnum + typedef ENUMERATION IfcDocumentConfidentialityEnum; + // C++ wrapper type for IfcGasTerminalTypeEnum + typedef ENUMERATION IfcGasTerminalTypeEnum; + // C++ wrapper type for IfcServiceLifeTypeEnum + typedef ENUMERATION IfcServiceLifeTypeEnum; + // C++ wrapper type for IfcIntegerCountRateMeasure + typedef INTEGER IfcIntegerCountRateMeasure; + // C++ wrapper type for IfcDocumentStatusEnum + typedef ENUMERATION IfcDocumentStatusEnum; + // C++ wrapper type for IfcSpaceHeaterTypeEnum + typedef ENUMERATION IfcSpaceHeaterTypeEnum; + // C++ wrapper type for IfcWasteTerminalTypeEnum + typedef ENUMERATION IfcWasteTerminalTypeEnum; + // C++ wrapper type for IfcAirTerminalTypeEnum + typedef ENUMERATION IfcAirTerminalTypeEnum; + // C++ wrapper type for IfcProjectedOrTrueLengthEnum + typedef ENUMERATION IfcProjectedOrTrueLengthEnum; + // C++ wrapper type for IfcDuctFittingTypeEnum + typedef ENUMERATION IfcDuctFittingTypeEnum; + // C++ wrapper type for IfcLabel + typedef STRING IfcLabel; + // C++ wrapper type for IfcTextFontSelect + typedef SELECT IfcTextFontSelect; + // C++ wrapper type for IfcAnalysisTheoryTypeEnum + typedef ENUMERATION IfcAnalysisTheoryTypeEnum; + // C++ wrapper type for IfcProjectOrderRecordTypeEnum + typedef ENUMERATION IfcProjectOrderRecordTypeEnum; + // C++ wrapper type for IfcUnit + typedef SELECT IfcUnit; // C++ wrapper type for IfcWindowPanelPositionEnum typedef ENUMERATION IfcWindowPanelPositionEnum; - // C++ wrapper type for IfcFlowMeterTypeEnum - typedef ENUMERATION IfcFlowMeterTypeEnum; + // C++ wrapper type for IfcSymbolStyleSelect + typedef SELECT IfcSymbolStyleSelect; + // C++ wrapper type for IfcWallTypeEnum + typedef ENUMERATION IfcWallTypeEnum; + // C++ wrapper type for IfcLightEmissionSourceEnum + typedef ENUMERATION IfcLightEmissionSourceEnum; + // C++ wrapper type for IfcModulusOfLinearSubgradeReactionMeasure + typedef REAL IfcModulusOfLinearSubgradeReactionMeasure; + // C++ wrapper type for IfcSpecularRoughness + typedef REAL IfcSpecularRoughness; + // C++ wrapper type for IfcTendonTypeEnum + typedef ENUMERATION IfcTendonTypeEnum; + // C++ wrapper type for IfcElectricMotorTypeEnum + typedef ENUMERATION IfcElectricMotorTypeEnum; + // C++ wrapper type for IfcCurveStyleFontSelect + typedef SELECT IfcCurveStyleFontSelect; + // C++ wrapper type for IfcPlanarForceMeasure + typedef REAL IfcPlanarForceMeasure; + // C++ wrapper type for IfcCoilTypeEnum + typedef ENUMERATION IfcCoilTypeEnum; + // C++ wrapper type for IfcSimpleValue + typedef SELECT IfcSimpleValue; + // C++ wrapper type for IfcLogicalOperatorEnum + typedef ENUMERATION IfcLogicalOperatorEnum; + // C++ wrapper type for IfcTransformerTypeEnum + typedef ENUMERATION IfcTransformerTypeEnum; + // C++ wrapper type for IfcVaporPermeabilityMeasure + typedef REAL IfcVaporPermeabilityMeasure; + // C++ wrapper type for IfcMassFlowRateMeasure + typedef REAL IfcMassFlowRateMeasure; + // C++ wrapper type for IfcBooleanOperator + typedef ENUMERATION IfcBooleanOperator; + // C++ wrapper type for IfcRadioActivityMeasure + typedef REAL IfcRadioActivityMeasure; + // C++ wrapper type for IfcSurfaceSide + typedef ENUMERATION IfcSurfaceSide; + // C++ wrapper type for IfcRibPlateDirectionEnum + typedef ENUMERATION IfcRibPlateDirectionEnum; + // C++ wrapper type for IfcGeometricSetSelect + typedef SELECT IfcGeometricSetSelect; + // C++ wrapper type for IfcVolumeMeasure + typedef REAL IfcVolumeMeasure; + // C++ wrapper type for IfcDoorPanelOperationEnum + typedef ENUMERATION IfcDoorPanelOperationEnum; + // C++ wrapper type for IfcElectricHeaterTypeEnum + typedef ENUMERATION IfcElectricHeaterTypeEnum; + // C++ wrapper type for IfcMagneticFluxMeasure + typedef REAL IfcMagneticFluxMeasure; + // C++ wrapper type for IfcThermalTransmittanceMeasure + typedef REAL IfcThermalTransmittanceMeasure; + // C++ wrapper type for IfcStructuralCurveTypeEnum + typedef ENUMERATION IfcStructuralCurveTypeEnum; + // C++ wrapper type for IfcMonetaryMeasure + typedef REAL IfcMonetaryMeasure; + // C++ wrapper type for IfcAssemblyPlaceEnum + typedef ENUMERATION IfcAssemblyPlaceEnum; + // C++ wrapper type for IfcReinforcingBarSurfaceEnum + typedef ENUMERATION IfcReinforcingBarSurfaceEnum; + // C++ wrapper type for IfcPointOrVertexPoint + typedef SELECT IfcPointOrVertexPoint; + // C++ wrapper type for IfcSpecificHeatCapacityMeasure + typedef REAL IfcSpecificHeatCapacityMeasure; + // C++ wrapper type for IfcChangeActionEnum + typedef ENUMERATION IfcChangeActionEnum; + // C++ wrapper type for IfcElectricDistributionPointFunctionEnum + typedef ENUMERATION IfcElectricDistributionPointFunctionEnum; + // C++ wrapper type for IfcBuildingElementProxyTypeEnum + typedef ENUMERATION IfcBuildingElementProxyTypeEnum; + // C++ wrapper type for IfcSequenceEnum + typedef ENUMERATION IfcSequenceEnum; + // C++ wrapper type for IfcAheadOrBehind + typedef ENUMERATION IfcAheadOrBehind; + // C++ wrapper type for IfcProjectOrderTypeEnum + typedef ENUMERATION IfcProjectOrderTypeEnum; + // C++ wrapper type for IfcTextStyleSelect + typedef SELECT IfcTextStyleSelect; + // C++ wrapper type for IfcCooledBeamTypeEnum + typedef ENUMERATION IfcCooledBeamTypeEnum; + // C++ wrapper type for IfcConnectionTypeEnum + typedef ENUMERATION IfcConnectionTypeEnum; + // C++ wrapper type for IfcSensorTypeEnum + typedef ENUMERATION IfcSensorTypeEnum; + // C++ wrapper type for IfcTrimmingPreference + typedef ENUMERATION IfcTrimmingPreference; + // C++ wrapper type for IfcStructuralSurfaceTypeEnum + typedef ENUMERATION IfcStructuralSurfaceTypeEnum; + // C++ wrapper type for IfcCostScheduleTypeEnum + typedef ENUMERATION IfcCostScheduleTypeEnum; + // C++ wrapper type for IfcSoundPowerMeasure + typedef REAL IfcSoundPowerMeasure; + // C++ wrapper type for IfcStairFlightTypeEnum + typedef ENUMERATION IfcStairFlightTypeEnum; + // C++ wrapper type for IfcDuctSegmentTypeEnum + typedef ENUMERATION IfcDuctSegmentTypeEnum; + // C++ wrapper type for IfcServiceLifeFactorTypeEnum + typedef ENUMERATION IfcServiceLifeFactorTypeEnum; + // C++ wrapper type for IfcBSplineCurveForm + typedef ENUMERATION IfcBSplineCurveForm; + // C++ wrapper type for IfcLuminousIntensityMeasure + typedef REAL IfcLuminousIntensityMeasure; + // C++ wrapper type for IfcCoolingTowerTypeEnum + typedef ENUMERATION IfcCoolingTowerTypeEnum; + // C++ wrapper type for IfcUnitEnum + typedef ENUMERATION IfcUnitEnum; + // C++ wrapper type for IfcPositivePlaneAngleMeasure + typedef REAL IfcPositivePlaneAngleMeasure; + // C++ wrapper type for IfcLightDistributionDataSourceSelect + typedef SELECT IfcLightDistributionDataSourceSelect; + // C++ wrapper type for IfcKinematicViscosityMeasure + typedef REAL IfcKinematicViscosityMeasure; + // C++ wrapper type for IfcDamperTypeEnum + typedef ENUMERATION IfcDamperTypeEnum; + // C++ wrapper type for IfcVectorOrDirection + typedef SELECT IfcVectorOrDirection; + // C++ wrapper type for IfcJunctionBoxTypeEnum + typedef ENUMERATION IfcJunctionBoxTypeEnum; + // C++ wrapper type for IfcActorSelect + typedef SELECT IfcActorSelect; + // C++ wrapper type for IfcElectricApplianceTypeEnum + typedef ENUMERATION IfcElectricApplianceTypeEnum; + // C++ wrapper type for IfcThermodynamicTemperatureMeasure + typedef REAL IfcThermodynamicTemperatureMeasure; + // C++ wrapper type for IfcMomentOfInertiaMeasure + typedef REAL IfcMomentOfInertiaMeasure; + // C++ wrapper type for IfcMonthInYearNumber + typedef INTEGER IfcMonthInYearNumber; + // C++ wrapper type for IfcStairTypeEnum + typedef ENUMERATION IfcStairTypeEnum; + // C++ wrapper type for IfcProtectiveDeviceTypeEnum + typedef ENUMERATION IfcProtectiveDeviceTypeEnum; + // C++ wrapper type for IfcTextDecoration + typedef STRING IfcTextDecoration; + // C++ wrapper type for IfcUnitaryEquipmentTypeEnum + typedef ENUMERATION IfcUnitaryEquipmentTypeEnum; + // C++ wrapper type for IfcElementCompositionEnum + typedef ENUMERATION IfcElementCompositionEnum; + // C++ wrapper type for IfcCurveFontOrScaledCurveFontSelect + typedef SELECT IfcCurveFontOrScaledCurveFontSelect; + // C++ wrapper type for IfcDescriptiveMeasure + typedef STRING IfcDescriptiveMeasure; + // C++ wrapper type for IfcProfileTypeEnum + typedef ENUMERATION IfcProfileTypeEnum; + // C++ wrapper type for IfcDoorStyleOperationEnum + typedef ENUMERATION IfcDoorStyleOperationEnum; + // C++ wrapper type for IfcTorqueMeasure + typedef REAL IfcTorqueMeasure; + // C++ wrapper type for IfcDaylightSavingHour + typedef INTEGER IfcDaylightSavingHour; + // C++ wrapper type for IfcRotationalMassMeasure + typedef REAL IfcRotationalMassMeasure; + // C++ wrapper type for IfcNullStyle + typedef ENUMERATION IfcNullStyle; + // C++ wrapper type for IfcFireSuppressionTerminalTypeEnum + typedef ENUMERATION IfcFireSuppressionTerminalTypeEnum; + // C++ wrapper type for IfcHeatingValueMeasure + typedef REAL IfcHeatingValueMeasure; // C++ wrapper type for IfcRampFlightTypeEnum typedef ENUMERATION IfcRampFlightTypeEnum; // C++ wrapper type for IfcSpecularHighlightSelect typedef SELECT IfcSpecularHighlightSelect; - // C++ wrapper type for IfcActionTypeEnum - typedef ENUMERATION IfcActionTypeEnum; - // C++ wrapper type for IfcGeometricProjectionEnum - typedef ENUMERATION IfcGeometricProjectionEnum; - // C++ wrapper type for IfcTimeSeriesDataTypeEnum - typedef ENUMERATION IfcTimeSeriesDataTypeEnum; - // C++ wrapper type for IfcMagneticFluxMeasure - typedef REAL IfcMagneticFluxMeasure; - // C++ wrapper type for IfcObjectTypeEnum - typedef ENUMERATION IfcObjectTypeEnum; - // C++ wrapper type for IfcDataOriginEnum - typedef ENUMERATION IfcDataOriginEnum; - // C++ wrapper type for IfcMassDensityMeasure - typedef REAL IfcMassDensityMeasure; - // C++ wrapper type for IfcLightFixtureTypeEnum - typedef ENUMERATION IfcLightFixtureTypeEnum; - // C++ wrapper type for IfcServiceLifeTypeEnum - typedef ENUMERATION IfcServiceLifeTypeEnum; - // C++ wrapper type for IfcElectricVoltageMeasure - typedef REAL IfcElectricVoltageMeasure; - // C++ wrapper type for IfcHeatingValueMeasure - typedef REAL IfcHeatingValueMeasure; - // C++ wrapper type for IfcPresentableText - typedef STRING IfcPresentableText; - // C++ wrapper type for IfcAheadOrBehind - typedef ENUMERATION IfcAheadOrBehind; - // C++ wrapper type for IfcSimpleValue - typedef SELECT IfcSimpleValue; - // C++ wrapper type for IfcSensorTypeEnum - typedef ENUMERATION IfcSensorTypeEnum; - // C++ wrapper type for IfcDerivedUnitEnum - typedef ENUMERATION IfcDerivedUnitEnum; - // C++ wrapper type for IfcSizeSelect - typedef SELECT IfcSizeSelect; - // C++ wrapper type for IfcTransportElementTypeEnum - typedef ENUMERATION IfcTransportElementTypeEnum; - // C++ wrapper type for IfcInventoryTypeEnum - typedef ENUMERATION IfcInventoryTypeEnum; - // C++ wrapper type for IfcTextDecoration - typedef STRING IfcTextDecoration; - // C++ wrapper type for IfcDirectionSenseEnum - typedef ENUMERATION IfcDirectionSenseEnum; - // C++ wrapper type for IfcDuctFittingTypeEnum - typedef ENUMERATION IfcDuctFittingTypeEnum; - // C++ wrapper type for IfcDocumentStatusEnum - typedef ENUMERATION IfcDocumentStatusEnum; - // C++ wrapper type for IfcSlabTypeEnum - typedef ENUMERATION IfcSlabTypeEnum; - // C++ wrapper type for IfcDoorStyleConstructionEnum - typedef ENUMERATION IfcDoorStyleConstructionEnum; - // C++ wrapper type for IfcVolumeMeasure - typedef REAL IfcVolumeMeasure; - // C++ wrapper type for IfcInductanceMeasure - typedef REAL IfcInductanceMeasure; - // C++ wrapper type for IfcCurtainWallTypeEnum - typedef ENUMERATION IfcCurtainWallTypeEnum; - // C++ wrapper type for IfcSIUnitName - typedef ENUMERATION IfcSIUnitName; - // C++ wrapper type for IfcSpecularExponent - typedef REAL IfcSpecularExponent; - // C++ wrapper type for IfcSoundPressureMeasure - typedef REAL IfcSoundPressureMeasure; - // C++ wrapper type for IfcAnalysisTheoryTypeEnum - typedef ENUMERATION IfcAnalysisTheoryTypeEnum; - // C++ wrapper type for IfcGasTerminalTypeEnum - typedef ENUMERATION IfcGasTerminalTypeEnum; - // C++ wrapper type for IfcYearNumber - typedef INTEGER IfcYearNumber; - // C++ wrapper type for IfcModulusOfElasticityMeasure - typedef REAL IfcModulusOfElasticityMeasure; - // C++ wrapper type for IfcChangeActionEnum - typedef ENUMERATION IfcChangeActionEnum; - // C++ wrapper type for IfcDamperTypeEnum - typedef ENUMERATION IfcDamperTypeEnum; - // C++ wrapper type for IfcEvaporatorTypeEnum - typedef ENUMERATION IfcEvaporatorTypeEnum; - // C++ wrapper type for IfcIonConcentrationMeasure - typedef REAL IfcIonConcentrationMeasure; - // C++ wrapper type for IfcDuctSegmentTypeEnum - typedef ENUMERATION IfcDuctSegmentTypeEnum; - // C++ wrapper type for IfcProtectiveDeviceTypeEnum - typedef ENUMERATION IfcProtectiveDeviceTypeEnum; - // C++ wrapper type for IfcAbsorbedDoseMeasure - typedef REAL IfcAbsorbedDoseMeasure; - // C++ wrapper type for IfcMassPerLengthMeasure - typedef REAL IfcMassPerLengthMeasure; - // C++ wrapper type for IfcTextFontName - typedef STRING IfcTextFontName; - // C++ wrapper type for IfcOrientationSelect - typedef SELECT IfcOrientationSelect; - // C++ wrapper type for IfcIlluminanceMeasure - typedef REAL IfcIlluminanceMeasure; - // C++ wrapper type for IfcFireSuppressionTerminalTypeEnum - typedef ENUMERATION IfcFireSuppressionTerminalTypeEnum; - // C++ wrapper type for IfcFontStyle - typedef STRING IfcFontStyle; - // C++ wrapper type for IfcMomentOfInertiaMeasure - typedef REAL IfcMomentOfInertiaMeasure; - // C++ wrapper type for IfcModulusOfSubgradeReactionMeasure - typedef REAL IfcModulusOfSubgradeReactionMeasure; - // C++ wrapper type for IfcHumidifierTypeEnum - typedef ENUMERATION IfcHumidifierTypeEnum; - // C++ wrapper type for IfcPresentationStyleSelect - typedef SELECT IfcPresentationStyleSelect; - // C++ wrapper type for IfcThermalTransmittanceMeasure - typedef REAL IfcThermalTransmittanceMeasure; - // C++ wrapper type for IfcRibPlateDirectionEnum - typedef ENUMERATION IfcRibPlateDirectionEnum; - // C++ wrapper type for IfcClassificationNotationSelect - typedef SELECT IfcClassificationNotationSelect; - // C++ wrapper type for IfcMinuteInHour - typedef INTEGER IfcMinuteInHour; - // C++ wrapper type for IfcInternalOrExternalEnum - typedef ENUMERATION IfcInternalOrExternalEnum; - // C++ wrapper type for IfcRotationalFrequencyMeasure - typedef REAL IfcRotationalFrequencyMeasure; - // C++ wrapper type for IfcSanitaryTerminalTypeEnum - typedef ENUMERATION IfcSanitaryTerminalTypeEnum; - // C++ wrapper type for IfcSymbolStyleSelect - typedef SELECT IfcSymbolStyleSelect; - // C++ wrapper type for IfcElementCompositionEnum - typedef ENUMERATION IfcElementCompositionEnum; - // C++ wrapper type for IfcTextPath - typedef ENUMERATION IfcTextPath; - // C++ wrapper type for IfcPowerMeasure - typedef REAL IfcPowerMeasure; - // C++ wrapper type for IfcSurfaceStyleElementSelect - typedef SELECT IfcSurfaceStyleElementSelect; - // C++ wrapper type for IfcResourceConsumptionEnum - typedef ENUMERATION IfcResourceConsumptionEnum; - // C++ wrapper type for IfcElectricCapacitanceMeasure - typedef REAL IfcElectricCapacitanceMeasure; - // C++ wrapper type for IfcLayerSetDirectionEnum - typedef ENUMERATION IfcLayerSetDirectionEnum; - // C++ wrapper type for IfcRailingTypeEnum - typedef ENUMERATION IfcRailingTypeEnum; - // C++ wrapper type for IfcObjectiveEnum - typedef ENUMERATION IfcObjectiveEnum; - // C++ wrapper type for IfcDocumentSelect - typedef SELECT IfcDocumentSelect; - // C++ wrapper type for IfcModulusOfLinearSubgradeReactionMeasure - typedef REAL IfcModulusOfLinearSubgradeReactionMeasure; - // C++ wrapper type for IfcThermalAdmittanceMeasure - typedef REAL IfcThermalAdmittanceMeasure; - // C++ wrapper type for IfcTransitionCode - typedef ENUMERATION IfcTransitionCode; - // C++ wrapper type for IfcConnectionTypeEnum - typedef ENUMERATION IfcConnectionTypeEnum; - // C++ wrapper type for IfcMonetaryMeasure - typedef REAL IfcMonetaryMeasure; - // C++ wrapper type for IfcStackTerminalTypeEnum - typedef ENUMERATION IfcStackTerminalTypeEnum; - // C++ wrapper type for IfcColour - typedef SELECT IfcColour; - // C++ wrapper type for IfcText - typedef STRING IfcText; - // C++ wrapper type for IfcContextDependentMeasure - typedef REAL IfcContextDependentMeasure; - // C++ wrapper type for IfcThermalConductivityMeasure - typedef REAL IfcThermalConductivityMeasure; - // C++ wrapper type for IfcProjectedOrTrueLengthEnum - typedef ENUMERATION IfcProjectedOrTrueLengthEnum; - // C++ wrapper type for IfcPressureMeasure - typedef REAL IfcPressureMeasure; - // C++ wrapper type for IfcMoistureDiffusivityMeasure - typedef REAL IfcMoistureDiffusivityMeasure; - // C++ wrapper type for IfcBooleanOperator - typedef ENUMERATION IfcBooleanOperator; - // C++ wrapper type for IfcPropertySourceEnum - typedef ENUMERATION IfcPropertySourceEnum; - // C++ wrapper type for IfcTimeStamp - typedef INTEGER IfcTimeStamp; - // C++ wrapper type for IfcMaterialSelect - typedef SELECT IfcMaterialSelect; - // C++ wrapper type for IfcGloballyUniqueId - typedef STRING IfcGloballyUniqueId; - // C++ wrapper type for IfcReflectanceMethodEnum - typedef ENUMERATION IfcReflectanceMethodEnum; - // C++ wrapper type for IfcVaporPermeabilityMeasure - typedef REAL IfcVaporPermeabilityMeasure; - // C++ wrapper type for IfcTimeSeriesScheduleTypeEnum - typedef ENUMERATION IfcTimeSeriesScheduleTypeEnum; - // C++ wrapper type for IfcLinearMomentMeasure - typedef REAL IfcLinearMomentMeasure; - // C++ wrapper type for IfcGeometricSetSelect - typedef SELECT IfcGeometricSetSelect; - // C++ wrapper type for IfcSectionModulusMeasure - typedef REAL IfcSectionModulusMeasure; - // C++ wrapper type for IfcBSplineCurveForm - typedef ENUMERATION IfcBSplineCurveForm; - // C++ wrapper type for IfcDimensionExtentUsage - typedef ENUMERATION IfcDimensionExtentUsage; - // C++ wrapper type for IfcThermalExpansionCoefficientMeasure - typedef REAL IfcThermalExpansionCoefficientMeasure; - // C++ wrapper type for IfcHourInDay - typedef INTEGER IfcHourInDay; - // C++ wrapper type for IfcLinearVelocityMeasure - typedef REAL IfcLinearVelocityMeasure; - // C++ wrapper type for IfcTorqueMeasure - typedef REAL IfcTorqueMeasure; - // C++ wrapper type for IfcTemperatureGradientMeasure - typedef REAL IfcTemperatureGradientMeasure; - // C++ wrapper type for IfcFillStyleSelect - typedef SELECT IfcFillStyleSelect; - // C++ wrapper type for IfcElectricChargeMeasure - typedef REAL IfcElectricChargeMeasure; - // C++ wrapper type for IfcHeatExchangerTypeEnum - typedef ENUMERATION IfcHeatExchangerTypeEnum; - // C++ wrapper type for IfcElectricCurrentEnum - typedef ENUMERATION IfcElectricCurrentEnum; - // C++ wrapper type for IfcDaylightSavingHour - typedef INTEGER IfcDaylightSavingHour; - // C++ wrapper type for IfcShell - typedef SELECT IfcShell; - // C++ wrapper type for IfcDoseEquivalentMeasure - typedef REAL IfcDoseEquivalentMeasure; - // C++ wrapper type for IfcProjectOrderTypeEnum - typedef ENUMERATION IfcProjectOrderTypeEnum; - // C++ wrapper type for IfcDerivedMeasureValue - typedef SELECT IfcDerivedMeasureValue; - // C++ wrapper type for IfcLightDistributionCurveEnum - typedef ENUMERATION IfcLightDistributionCurveEnum; - // C++ wrapper type for IfcWarpingMomentMeasure - typedef REAL IfcWarpingMomentMeasure; - // C++ wrapper type for IfcMemberTypeEnum - typedef ENUMERATION IfcMemberTypeEnum; - // C++ wrapper type for IfcSoundPowerMeasure - typedef REAL IfcSoundPowerMeasure; - // C++ wrapper type for IfcTextAlignment - typedef STRING IfcTextAlignment; - // C++ wrapper type for IfcCurveOrEdgeCurve - typedef SELECT IfcCurveOrEdgeCurve; - // C++ wrapper type for IfcMassFlowRateMeasure - typedef REAL IfcMassFlowRateMeasure; - // C++ wrapper type for IfcIsothermalMoistureCapacityMeasure - typedef REAL IfcIsothermalMoistureCapacityMeasure; - // C++ wrapper type for IfcCsgSelect - typedef SELECT IfcCsgSelect; - // C++ wrapper type for IfcCoolingTowerTypeEnum - typedef ENUMERATION IfcCoolingTowerTypeEnum; - // C++ wrapper type for IfcMassMeasure - typedef REAL IfcMassMeasure; - // C++ wrapper type for IfcPileConstructionEnum - typedef ENUMERATION IfcPileConstructionEnum; - // C++ wrapper type for IfcDoorStyleOperationEnum - typedef ENUMERATION IfcDoorStyleOperationEnum; - // C++ wrapper type for IfcFlowDirectionEnum - typedef ENUMERATION IfcFlowDirectionEnum; - // C++ wrapper type for IfcThermalLoadSourceEnum - typedef ENUMERATION IfcThermalLoadSourceEnum; - // C++ wrapper type for IfcLengthMeasure - typedef REAL IfcLengthMeasure; - // C++ wrapper type for IfcConstraintEnum - typedef ENUMERATION IfcConstraintEnum; - // C++ wrapper type for IfcAxis2Placement - typedef SELECT IfcAxis2Placement; - // C++ wrapper type for IfcLoadGroupTypeEnum - typedef ENUMERATION IfcLoadGroupTypeEnum; - // C++ wrapper type for IfcValue - typedef SELECT IfcValue; - // C++ wrapper type for IfcReinforcingBarSurfaceEnum - typedef ENUMERATION IfcReinforcingBarSurfaceEnum; - // C++ wrapper type for IfcProjectOrderRecordTypeEnum - typedef ENUMERATION IfcProjectOrderRecordTypeEnum; - // C++ wrapper type for IfcDateTimeSelect - typedef SELECT IfcDateTimeSelect; - // C++ wrapper type for IfcStructuralSurfaceTypeEnum - typedef ENUMERATION IfcStructuralSurfaceTypeEnum; - // C++ wrapper type for IfcPermeableCoveringOperationEnum - typedef ENUMERATION IfcPermeableCoveringOperationEnum; - // C++ wrapper type for IfcFontWeight - typedef STRING IfcFontWeight; - // C++ wrapper type for IfcPHMeasure - typedef REAL IfcPHMeasure; - // C++ wrapper type for IfcDescriptiveMeasure - typedef STRING IfcDescriptiveMeasure; - // C++ wrapper type for IfcCurveStyleFontSelect - typedef SELECT IfcCurveStyleFontSelect; - // C++ wrapper type for IfcUnit - typedef SELECT IfcUnit; - // C++ wrapper type for IfcHatchLineDistanceSelect - typedef SELECT IfcHatchLineDistanceSelect; - // C++ wrapper type for IfcTextStyleSelect - typedef SELECT IfcTextStyleSelect; - // C++ wrapper type for IfcMetricValueSelect - typedef SELECT IfcMetricValueSelect; - // C++ wrapper type for IfcVectorOrDirection - typedef SELECT IfcVectorOrDirection; - // C++ wrapper type for IfcAssemblyPlaceEnum - typedef ENUMERATION IfcAssemblyPlaceEnum; - // C++ wrapper type for IfcAirTerminalTypeEnum - typedef ENUMERATION IfcAirTerminalTypeEnum; - // C++ wrapper type for IfcCoveringTypeEnum - typedef ENUMERATION IfcCoveringTypeEnum; - // C++ wrapper type for IfcPlanarForceMeasure - typedef REAL IfcPlanarForceMeasure; - // C++ wrapper type for IfcValveTypeEnum - typedef ENUMERATION IfcValveTypeEnum; - // C++ wrapper type for IfcAlarmTypeEnum - typedef ENUMERATION IfcAlarmTypeEnum; - // C++ wrapper type for IfcDynamicViscosityMeasure - typedef REAL IfcDynamicViscosityMeasure; - // C++ wrapper type for IfcCurrencyEnum - typedef ENUMERATION IfcCurrencyEnum; - // C++ wrapper type for IfcModulusOfRotationalSubgradeReactionMeasure - typedef REAL IfcModulusOfRotationalSubgradeReactionMeasure; - // C++ wrapper type for IfcCableCarrierFittingTypeEnum - typedef ENUMERATION IfcCableCarrierFittingTypeEnum; - // C++ wrapper type for IfcBoolean - typedef BOOLEAN IfcBoolean; - // C++ wrapper type for IfcActionSourceTypeEnum - typedef ENUMERATION IfcActionSourceTypeEnum; - // C++ wrapper type for IfcStructuralActivityAssignmentSelect - typedef SELECT IfcStructuralActivityAssignmentSelect; - // C++ wrapper type for IfcDistributionChamberElementTypeEnum - typedef ENUMERATION IfcDistributionChamberElementTypeEnum; - // C++ wrapper type for IfcEvaporativeCoolerTypeEnum - typedef ENUMERATION IfcEvaporativeCoolerTypeEnum; - // C++ wrapper type for IfcMagneticFluxDensityMeasure - typedef REAL IfcMagneticFluxDensityMeasure; - // C++ wrapper type for IfcLightDistributionDataSourceSelect - typedef SELECT IfcLightDistributionDataSourceSelect; - // C++ wrapper type for IfcTubeBundleTypeEnum - typedef ENUMERATION IfcTubeBundleTypeEnum; - // C++ wrapper type for IfcAccelerationMeasure - typedef REAL IfcAccelerationMeasure; - // C++ wrapper type for IfcBoilerTypeEnum - typedef ENUMERATION IfcBoilerTypeEnum; - // C++ wrapper type for IfcRampTypeEnum - typedef ENUMERATION IfcRampTypeEnum; - // C++ wrapper type for IfcLuminousIntensityDistributionMeasure - typedef REAL IfcLuminousIntensityDistributionMeasure; - // C++ wrapper type for IfcTrimmingPreference - typedef ENUMERATION IfcTrimmingPreference; - // C++ wrapper type for IfcSpecificHeatCapacityMeasure - typedef REAL IfcSpecificHeatCapacityMeasure; - // C++ wrapper type for IfcAmountOfSubstanceMeasure - typedef REAL IfcAmountOfSubstanceMeasure; - // C++ wrapper type for IfcRoleEnum - typedef ENUMERATION IfcRoleEnum; - // C++ wrapper type for IfcDocumentConfidentialityEnum - typedef ENUMERATION IfcDocumentConfidentialityEnum; - // C++ wrapper type for IfcFrequencyMeasure - typedef REAL IfcFrequencyMeasure; - // C++ wrapper type for IfcSectionTypeEnum - typedef ENUMERATION IfcSectionTypeEnum; - // C++ wrapper type for IfcElementAssemblyTypeEnum - typedef ENUMERATION IfcElementAssemblyTypeEnum; - // C++ wrapper type for IfcFootingTypeEnum - typedef ENUMERATION IfcFootingTypeEnum; - // C++ wrapper type for IfcLayeredItem - typedef SELECT IfcLayeredItem; - // C++ wrapper type for IfcCableSegmentTypeEnum - typedef ENUMERATION IfcCableSegmentTypeEnum; - // C++ wrapper type for IfcDefinedSymbolSelect - typedef SELECT IfcDefinedSymbolSelect; - // C++ wrapper type for IfcBuildingElementProxyTypeEnum - typedef ENUMERATION IfcBuildingElementProxyTypeEnum; - // C++ wrapper type for IfcElectricGeneratorTypeEnum - typedef ENUMERATION IfcElectricGeneratorTypeEnum; - // C++ wrapper type for IfcRotationalStiffnessMeasure - typedef REAL IfcRotationalStiffnessMeasure; - // C++ wrapper type for IfcSpaceHeaterTypeEnum - typedef ENUMERATION IfcSpaceHeaterTypeEnum; - // C++ wrapper type for IfcAreaMeasure - typedef REAL IfcAreaMeasure; - // C++ wrapper type for IfcLabel - typedef STRING IfcLabel; - // C++ wrapper type for IfcCostScheduleTypeEnum - typedef ENUMERATION IfcCostScheduleTypeEnum; - // C++ wrapper type for IfcSwitchingDeviceTypeEnum - typedef ENUMERATION IfcSwitchingDeviceTypeEnum; - // C++ wrapper type for IfcElectricTimeControlTypeEnum - typedef ENUMERATION IfcElectricTimeControlTypeEnum; - // C++ wrapper type for IfcFilterTypeEnum - typedef ENUMERATION IfcFilterTypeEnum; - // C++ wrapper type for IfcPositiveLengthMeasure - typedef REAL IfcPositiveLengthMeasure; - // C++ wrapper type for IfcNullStyle - typedef ENUMERATION IfcNullStyle; - // C++ wrapper type for IfcConditionCriterionSelect - typedef SELECT IfcConditionCriterionSelect; - // C++ wrapper type for IfcShearModulusMeasure - typedef REAL IfcShearModulusMeasure; - // C++ wrapper type for IfcNormalisedRatioMeasure - typedef REAL IfcNormalisedRatioMeasure; - // C++ wrapper type for IfcDoorPanelOperationEnum - typedef ENUMERATION IfcDoorPanelOperationEnum; - // C++ wrapper type for IfcPointOrVertexPoint - typedef SELECT IfcPointOrVertexPoint; - // C++ wrapper type for IfcRoofTypeEnum - typedef ENUMERATION IfcRoofTypeEnum; - // C++ wrapper type for IfcCountMeasure - typedef NUMBER IfcCountMeasure; - // C++ wrapper type for IfcElectricConductanceMeasure - typedef REAL IfcElectricConductanceMeasure; - // C++ wrapper type for IfcProcedureTypeEnum - typedef ENUMERATION IfcProcedureTypeEnum; - // C++ wrapper type for IfcFlowInstrumentTypeEnum - typedef ENUMERATION IfcFlowInstrumentTypeEnum; - // C++ wrapper type for IfcElectricMotorTypeEnum - typedef ENUMERATION IfcElectricMotorTypeEnum; - // C++ wrapper type for IfcSurfaceSide - typedef ENUMERATION IfcSurfaceSide; - // C++ wrapper type for IfcStructuralCurveTypeEnum - typedef ENUMERATION IfcStructuralCurveTypeEnum; - // C++ wrapper type for IfcCondenserTypeEnum - typedef ENUMERATION IfcCondenserTypeEnum; - // C++ wrapper type for IfcLinearStiffnessMeasure - typedef REAL IfcLinearStiffnessMeasure; - // C++ wrapper type for IfcUnitEnum - typedef ENUMERATION IfcUnitEnum; - // C++ wrapper type for IfcOccupantTypeEnum - typedef ENUMERATION IfcOccupantTypeEnum; // C++ wrapper type for IfcThermalLoadTypeEnum typedef ENUMERATION IfcThermalLoadTypeEnum; - // C++ wrapper type for IfcReinforcingBarRoleEnum - typedef ENUMERATION IfcReinforcingBarRoleEnum; - // C++ wrapper type for IfcBenchmarkEnum - typedef ENUMERATION IfcBenchmarkEnum; - // C++ wrapper type for IfcPositivePlaneAngleMeasure - typedef REAL IfcPositivePlaneAngleMeasure; - // C++ wrapper type for IfcTextTransformation - typedef STRING IfcTextTransformation; - // C++ wrapper type for IfcDraughtingCalloutElement - typedef SELECT IfcDraughtingCalloutElement; - // C++ wrapper type for IfcRatioMeasure - typedef REAL IfcRatioMeasure; - // C++ wrapper type for IfcSolidAngleMeasure - typedef REAL IfcSolidAngleMeasure; - // C++ wrapper type for IfcPipeSegmentTypeEnum - typedef ENUMERATION IfcPipeSegmentTypeEnum; - // C++ wrapper type for IfcCableCarrierSegmentTypeEnum - typedef ENUMERATION IfcCableCarrierSegmentTypeEnum; - // C++ wrapper type for IfcColourOrFactor - typedef SELECT IfcColourOrFactor; - // C++ wrapper type for IfcIdentifier - typedef STRING IfcIdentifier; - // C++ wrapper type for IfcTendonTypeEnum - typedef ENUMERATION IfcTendonTypeEnum; - // C++ wrapper type for IfcControllerTypeEnum - typedef ENUMERATION IfcControllerTypeEnum; - // C++ wrapper type for IfcRadioActivityMeasure - typedef REAL IfcRadioActivityMeasure; - // C++ wrapper type for IfcTimeMeasure - typedef REAL IfcTimeMeasure; - // C++ wrapper type for IfcPumpTypeEnum - typedef ENUMERATION IfcPumpTypeEnum; - // C++ wrapper type for IfcElectricHeaterTypeEnum - typedef ENUMERATION IfcElectricHeaterTypeEnum; - // C++ wrapper type for IfcBeamTypeEnum - typedef ENUMERATION IfcBeamTypeEnum; - // C++ wrapper type for IfcStateEnum - typedef ENUMERATION IfcStateEnum; - // C++ wrapper type for IfcSIPrefix - typedef ENUMERATION IfcSIPrefix; - // C++ wrapper type for IfcNumericMeasure - typedef NUMBER IfcNumericMeasure; - // C++ wrapper type for IfcOutletTypeEnum - typedef ENUMERATION IfcOutletTypeEnum; - // C++ wrapper type for IfcCompoundPlaneAngleMeasure - typedef ListOf< INTEGER, 3, 3 > IfcCompoundPlaneAngleMeasure; - // C++ wrapper type for IfcServiceLifeFactorTypeEnum - typedef ENUMERATION IfcServiceLifeFactorTypeEnum; - // C++ wrapper type for IfcLogicalOperatorEnum - typedef ENUMERATION IfcLogicalOperatorEnum; - // C++ wrapper type for IfcBooleanOperand - typedef SELECT IfcBooleanOperand; - // C++ wrapper type for IfcObjectReferenceSelect - typedef SELECT IfcObjectReferenceSelect; - // C++ wrapper type for IfcCooledBeamTypeEnum - typedef ENUMERATION IfcCooledBeamTypeEnum; - // C++ wrapper type for IfcDuctSilencerTypeEnum - typedef ENUMERATION IfcDuctSilencerTypeEnum; - // C++ wrapper type for IfcSectionalAreaIntegralMeasure - typedef REAL IfcSectionalAreaIntegralMeasure; - // C++ wrapper type for IfcFontVariant - typedef STRING IfcFontVariant; - // C++ wrapper type for IfcVolumetricFlowRateMeasure - typedef REAL IfcVolumetricFlowRateMeasure; - // C++ wrapper type for IfcPlateTypeEnum - typedef ENUMERATION IfcPlateTypeEnum; - // C++ wrapper type for IfcEnvironmentalImpactCategoryEnum - typedef ENUMERATION IfcEnvironmentalImpactCategoryEnum; // C++ wrapper type for IfcVibrationIsolatorTypeEnum typedef ENUMERATION IfcVibrationIsolatorTypeEnum; - // C++ wrapper type for IfcThermodynamicTemperatureMeasure - typedef REAL IfcThermodynamicTemperatureMeasure; - // C++ wrapper type for IfcRotationalMassMeasure - typedef REAL IfcRotationalMassMeasure; - // C++ wrapper type for IfcSecondInMinute - typedef REAL IfcSecondInMinute; - // C++ wrapper type for IfcDayInMonthNumber - typedef INTEGER IfcDayInMonthNumber; - // C++ wrapper type for IfcDimensionCount - typedef INTEGER IfcDimensionCount; - // C++ wrapper type for IfcWindowStyleOperationEnum - typedef ENUMERATION IfcWindowStyleOperationEnum; - // C++ wrapper type for IfcThermalResistanceMeasure - typedef REAL IfcThermalResistanceMeasure; - // C++ wrapper type for IfcMeasureValue - typedef SELECT IfcMeasureValue; - // C++ wrapper type for IfcWindowPanelOperationEnum - typedef ENUMERATION IfcWindowPanelOperationEnum; - // C++ wrapper type for IfcChillerTypeEnum - typedef ENUMERATION IfcChillerTypeEnum; - // C++ wrapper type for IfcPositiveRatioMeasure - typedef REAL IfcPositiveRatioMeasure; - // C++ wrapper type for IfcInteger - typedef INTEGER IfcInteger; - // C++ wrapper type for IfcLogical - typedef LOGICAL IfcLogical; - // C++ wrapper type for IfcJunctionBoxTypeEnum - typedef ENUMERATION IfcJunctionBoxTypeEnum; - // C++ wrapper type for IfcAddressTypeEnum - typedef ENUMERATION IfcAddressTypeEnum; - // C++ wrapper type for IfcWasteTerminalTypeEnum - typedef ENUMERATION IfcWasteTerminalTypeEnum; - // C++ wrapper type for IfcTrimmingSelect - typedef SELECT IfcTrimmingSelect; - // C++ wrapper type for IfcLightEmissionSourceEnum - typedef ENUMERATION IfcLightEmissionSourceEnum; - // C++ wrapper type for IfcSoundScaleEnum - typedef ENUMERATION IfcSoundScaleEnum; - // C++ wrapper type for IfcLuminousFluxMeasure - typedef REAL IfcLuminousFluxMeasure; - // C++ wrapper type for IfcElectricResistanceMeasure - typedef REAL IfcElectricResistanceMeasure; - // C++ wrapper type for IfcIntegerCountRateMeasure - typedef INTEGER IfcIntegerCountRateMeasure; - // C++ wrapper type for IfcPhysicalOrVirtualEnum - typedef ENUMERATION IfcPhysicalOrVirtualEnum; - // C++ wrapper type for IfcMolecularWeightMeasure - typedef REAL IfcMolecularWeightMeasure; - // C++ wrapper type for IfcProfileTypeEnum - typedef ENUMERATION IfcProfileTypeEnum; - // C++ wrapper type for IfcBoxAlignment - typedef STRING IfcBoxAlignment; - // C++ wrapper type for IfcGlobalOrLocalEnum - typedef ENUMERATION IfcGlobalOrLocalEnum; - // C++ wrapper type for IfcSpecularRoughness - typedef REAL IfcSpecularRoughness; - // C++ wrapper type for IfcLampTypeEnum - typedef ENUMERATION IfcLampTypeEnum; - // C++ wrapper type for IfcPileTypeEnum - typedef ENUMERATION IfcPileTypeEnum; - // C++ wrapper type for IfcElectricCurrentMeasure - typedef REAL IfcElectricCurrentMeasure; - // C++ wrapper type for IfcFanTypeEnum - typedef ENUMERATION IfcFanTypeEnum; - // C++ wrapper type for IfcSurfaceOrFaceSurface - typedef SELECT IfcSurfaceOrFaceSurface; - // C++ wrapper type for IfcPipeFittingTypeEnum - typedef ENUMERATION IfcPipeFittingTypeEnum; - // C++ wrapper type for IfcTankTypeEnum - typedef ENUMERATION IfcTankTypeEnum; - // C++ wrapper type for IfcCurveFontOrScaledCurveFontSelect - typedef SELECT IfcCurveFontOrScaledCurveFontSelect; - // C++ wrapper type for IfcWindowStyleConstructionEnum - typedef ENUMERATION IfcWindowStyleConstructionEnum; - // C++ wrapper type for IfcAirTerminalBoxTypeEnum - typedef ENUMERATION IfcAirTerminalBoxTypeEnum; - // C++ wrapper type for IfcStairFlightTypeEnum - typedef ENUMERATION IfcStairFlightTypeEnum; - // C++ wrapper type for IfcLuminousIntensityMeasure - typedef REAL IfcLuminousIntensityMeasure; - // C++ wrapper type for IfcMotorConnectionTypeEnum - typedef ENUMERATION IfcMotorConnectionTypeEnum; - // C++ wrapper type for IfcPlaneAngleMeasure - typedef REAL IfcPlaneAngleMeasure; - // C++ wrapper type for IfcActuatorTypeEnum - typedef ENUMERATION IfcActuatorTypeEnum; - // C++ wrapper type for IfcColumnTypeEnum - typedef ENUMERATION IfcColumnTypeEnum; - // C++ wrapper type for IfcTextFontSelect - typedef SELECT IfcTextFontSelect; - // C++ wrapper type for IfcDoorPanelPositionEnum - typedef ENUMERATION IfcDoorPanelPositionEnum; - // C++ wrapper type for IfcCoilTypeEnum - typedef ENUMERATION IfcCoilTypeEnum; - // C++ wrapper type for IfcAngularVelocityMeasure - typedef REAL IfcAngularVelocityMeasure; + // C++ wrapper type for IfcFillStyleSelect + typedef SELECT IfcFillStyleSelect; + // C++ wrapper type for IfcObjectTypeEnum + typedef ENUMERATION IfcObjectTypeEnum; + // C++ wrapper type for IfcHatchLineDistanceSelect + typedef SELECT IfcHatchLineDistanceSelect; + // C++ wrapper type for IfcPresentableText + typedef STRING IfcPresentableText; // C++ wrapper type for IfcAnalysisModelTypeEnum typedef ENUMERATION IfcAnalysisModelTypeEnum; - // C++ wrapper type for IfcLibrarySelect - typedef SELECT IfcLibrarySelect; - // C++ wrapper type for IfcForceMeasure - typedef REAL IfcForceMeasure; - // C++ wrapper type for IfcFillAreaStyleTileShapeSelect - typedef SELECT IfcFillAreaStyleTileShapeSelect; - // C++ wrapper type for IfcElectricApplianceTypeEnum - typedef ENUMERATION IfcElectricApplianceTypeEnum; + // C++ wrapper type for IfcAngularVelocityMeasure + typedef REAL IfcAngularVelocityMeasure; + // C++ wrapper type for IfcAccelerationMeasure + typedef REAL IfcAccelerationMeasure; + // C++ wrapper type for IfcThermalLoadSourceEnum + typedef ENUMERATION IfcThermalLoadSourceEnum; + // C++ wrapper type for IfcFlowDirectionEnum + typedef ENUMERATION IfcFlowDirectionEnum; + // C++ wrapper type for IfcTankTypeEnum + typedef ENUMERATION IfcTankTypeEnum; // C++ wrapper type for IfcSurfaceTextureEnum typedef ENUMERATION IfcSurfaceTextureEnum; - // C++ wrapper type for IfcCharacterStyleSelect - typedef SELECT IfcCharacterStyleSelect; - // C++ wrapper type for IfcEnergyMeasure - typedef REAL IfcEnergyMeasure; + // C++ wrapper type for IfcTimeSeriesDataTypeEnum + typedef ENUMERATION IfcTimeSeriesDataTypeEnum; + // C++ wrapper type for IfcPhysicalOrVirtualEnum + typedef ENUMERATION IfcPhysicalOrVirtualEnum; + // C++ wrapper type for IfcDraughtingCalloutElement + typedef SELECT IfcDraughtingCalloutElement; + // C++ wrapper type for IfcDocumentSelect + typedef SELECT IfcDocumentSelect; + // C++ wrapper type for IfcThermalResistanceMeasure + typedef REAL IfcThermalResistanceMeasure; + // C++ wrapper type for IfcTemperatureGradientMeasure + typedef REAL IfcTemperatureGradientMeasure; + // C++ wrapper type for IfcGeometricProjectionEnum + typedef ENUMERATION IfcGeometricProjectionEnum; + // C++ wrapper type for IfcGlobalOrLocalEnum + typedef ENUMERATION IfcGlobalOrLocalEnum; + // C++ wrapper type for IfcAreaMeasure + typedef REAL IfcAreaMeasure; + // C++ wrapper type for IfcCsgSelect + typedef SELECT IfcCsgSelect; + // C++ wrapper type for IfcOccupantTypeEnum + typedef ENUMERATION IfcOccupantTypeEnum; + // C++ wrapper type for IfcEnergySequenceEnum + typedef ENUMERATION IfcEnergySequenceEnum; + // C++ wrapper type for IfcFlowMeterTypeEnum + typedef ENUMERATION IfcFlowMeterTypeEnum; + // C++ wrapper type for IfcSectionModulusMeasure + typedef REAL IfcSectionModulusMeasure; + // C++ wrapper type for IfcAirTerminalBoxTypeEnum + typedef ENUMERATION IfcAirTerminalBoxTypeEnum; + // C++ wrapper type for IfcIdentifier + typedef STRING IfcIdentifier; + // C++ wrapper type for IfcInteger + typedef INTEGER IfcInteger; + // C++ wrapper type for IfcProcedureTypeEnum + typedef ENUMERATION IfcProcedureTypeEnum; + // C++ wrapper type for IfcBenchmarkEnum + typedef ENUMERATION IfcBenchmarkEnum; + // C++ wrapper type for IfcWindowPanelOperationEnum + typedef ENUMERATION IfcWindowPanelOperationEnum; + // C++ wrapper type for IfcTrimmingSelect + typedef SELECT IfcTrimmingSelect; // C++ wrapper type for IfcReal typedef REAL IfcReal; - // C++ wrapper type for IfcCompressorTypeEnum - typedef ENUMERATION IfcCompressorTypeEnum; - // C++ wrapper type for IfcElectricDistributionPointFunctionEnum - typedef ENUMERATION IfcElectricDistributionPointFunctionEnum; + // C++ wrapper type for IfcSurfaceStyleElementSelect + typedef SELECT IfcSurfaceStyleElementSelect; + // C++ wrapper type for IfcAirToAirHeatRecoveryTypeEnum + typedef ENUMERATION IfcAirToAirHeatRecoveryTypeEnum; + // C++ wrapper type for IfcNormalisedRatioMeasure + typedef REAL IfcNormalisedRatioMeasure; + // C++ wrapper type for IfcCableSegmentTypeEnum + typedef ENUMERATION IfcCableSegmentTypeEnum; + // C++ wrapper type for IfcBeamTypeEnum + typedef ENUMERATION IfcBeamTypeEnum; + // C++ wrapper type for IfcBooleanOperand + typedef SELECT IfcBooleanOperand; + // C++ wrapper type for IfcFrequencyMeasure + typedef REAL IfcFrequencyMeasure; + // C++ wrapper type for IfcDataOriginEnum + typedef ENUMERATION IfcDataOriginEnum; + // C++ wrapper type for IfcAlarmTypeEnum + typedef ENUMERATION IfcAlarmTypeEnum; + // C++ wrapper type for IfcMassMeasure + typedef REAL IfcMassMeasure; + // C++ wrapper type for IfcStateEnum + typedef ENUMERATION IfcStateEnum; + // C++ wrapper type for IfcStackTerminalTypeEnum + typedef ENUMERATION IfcStackTerminalTypeEnum; + // C++ wrapper type for IfcReinforcingBarRoleEnum + typedef ENUMERATION IfcReinforcingBarRoleEnum; + // C++ wrapper type for IfcElectricTimeControlTypeEnum + typedef ENUMERATION IfcElectricTimeControlTypeEnum; + // C++ wrapper type for IfcInternalOrExternalEnum + typedef ENUMERATION IfcInternalOrExternalEnum; + // C++ wrapper type for IfcDuctSilencerTypeEnum + typedef ENUMERATION IfcDuctSilencerTypeEnum; + // C++ wrapper type for IfcConditionCriterionSelect + typedef SELECT IfcConditionCriterionSelect; + // C++ wrapper type for IfcHumidifierTypeEnum + typedef ENUMERATION IfcHumidifierTypeEnum; + // C++ wrapper type for IfcForceMeasure + typedef REAL IfcForceMeasure; + // C++ wrapper type for IfcMemberTypeEnum + typedef ENUMERATION IfcMemberTypeEnum; + // C++ wrapper type for IfcIonConcentrationMeasure + typedef REAL IfcIonConcentrationMeasure; + // C++ wrapper type for IfcChillerTypeEnum + typedef ENUMERATION IfcChillerTypeEnum; + // C++ wrapper type for IfcMassPerLengthMeasure + typedef REAL IfcMassPerLengthMeasure; + // C++ wrapper type for IfcTimeSeriesScheduleTypeEnum + typedef ENUMERATION IfcTimeSeriesScheduleTypeEnum; + // C++ wrapper type for IfcFilterTypeEnum + typedef ENUMERATION IfcFilterTypeEnum; + // C++ wrapper type for IfcLogical + typedef LOGICAL IfcLogical; + // C++ wrapper type for IfcInventoryTypeEnum + typedef ENUMERATION IfcInventoryTypeEnum; + // C++ wrapper type for IfcClassificationNotationSelect + typedef SELECT IfcClassificationNotationSelect; + // C++ wrapper type for IfcAddressTypeEnum + typedef ENUMERATION IfcAddressTypeEnum; + // C++ wrapper type for IfcPositiveLengthMeasure + typedef REAL IfcPositiveLengthMeasure; + // C++ wrapper type for IfcRatioMeasure + typedef REAL IfcRatioMeasure; + // C++ wrapper type for IfcRampTypeEnum + typedef ENUMERATION IfcRampTypeEnum; + // C++ wrapper type for IfcMaterialSelect + typedef SELECT IfcMaterialSelect; + // C++ wrapper type for IfcCoveringTypeEnum + typedef ENUMERATION IfcCoveringTypeEnum; + // C++ wrapper type for IfcPileTypeEnum + typedef ENUMERATION IfcPileTypeEnum; + // C++ wrapper type for IfcTransitionCode + typedef ENUMERATION IfcTransitionCode; + // C++ wrapper type for IfcParameterValue + typedef REAL IfcParameterValue; + // C++ wrapper type for IfcCondenserTypeEnum + typedef ENUMERATION IfcCondenserTypeEnum; + // C++ wrapper type for IfcTextPath + typedef ENUMERATION IfcTextPath; + // C++ wrapper type for IfcElectricCurrentEnum + typedef ENUMERATION IfcElectricCurrentEnum; + // C++ wrapper type for IfcColumnTypeEnum + typedef ENUMERATION IfcColumnTypeEnum; + // C++ wrapper type for IfcLuminousFluxMeasure + typedef REAL IfcLuminousFluxMeasure; + // C++ wrapper type for IfcPlateTypeEnum + typedef ENUMERATION IfcPlateTypeEnum; + // C++ wrapper type for IfcPileConstructionEnum + typedef ENUMERATION IfcPileConstructionEnum; + // C++ wrapper type for IfcActionSourceTypeEnum + typedef ENUMERATION IfcActionSourceTypeEnum; + // C++ wrapper type for IfcMagneticFluxDensityMeasure + typedef REAL IfcMagneticFluxDensityMeasure; + // C++ wrapper type for IfcSurfaceOrFaceSurface + typedef SELECT IfcSurfaceOrFaceSurface; + // C++ wrapper type for IfcPresentationStyleSelect + typedef SELECT IfcPresentationStyleSelect; + // C++ wrapper type for IfcGloballyUniqueId + typedef STRING IfcGloballyUniqueId; + // C++ wrapper type for IfcLinearMomentMeasure + typedef REAL IfcLinearMomentMeasure; + // C++ wrapper type for IfcHeatExchangerTypeEnum + typedef ENUMERATION IfcHeatExchangerTypeEnum; + // C++ wrapper type for IfcPumpTypeEnum + typedef ENUMERATION IfcPumpTypeEnum; + // C++ wrapper type for IfcSpecularExponent + typedef REAL IfcSpecularExponent; + // C++ wrapper type for IfcElectricResistanceMeasure + typedef REAL IfcElectricResistanceMeasure; + // C++ wrapper type for IfcThermalConductivityMeasure + typedef REAL IfcThermalConductivityMeasure; + // C++ wrapper type for IfcReflectanceMethodEnum + typedef ENUMERATION IfcReflectanceMethodEnum; + // C++ wrapper type for IfcTubeBundleTypeEnum + typedef ENUMERATION IfcTubeBundleTypeEnum; + // C++ wrapper type for IfcActuatorTypeEnum + typedef ENUMERATION IfcActuatorTypeEnum; + // C++ wrapper type for IfcControllerTypeEnum + typedef ENUMERATION IfcControllerTypeEnum; + // C++ wrapper type for IfcLightDistributionCurveEnum + typedef ENUMERATION IfcLightDistributionCurveEnum; + // C++ wrapper type for IfcPositiveRatioMeasure + typedef REAL IfcPositiveRatioMeasure; + // C++ wrapper type for IfcElectricChargeMeasure + typedef REAL IfcElectricChargeMeasure; + // C++ wrapper type for IfcNumericMeasure + typedef NUMBER IfcNumericMeasure; + // C++ wrapper type for IfcStructuralActivityAssignmentSelect + typedef SELECT IfcStructuralActivityAssignmentSelect; + // C++ wrapper type for IfcLuminousIntensityDistributionMeasure + typedef REAL IfcLuminousIntensityDistributionMeasure; + // C++ wrapper type for IfcMolecularWeightMeasure + typedef REAL IfcMolecularWeightMeasure; + // C++ wrapper type for IfcLayeredItem + typedef SELECT IfcLayeredItem; + // C++ wrapper type for IfcLengthMeasure + typedef REAL IfcLengthMeasure; + // C++ wrapper type for IfcWarpingConstantMeasure + typedef REAL IfcWarpingConstantMeasure; + // C++ wrapper type for IfcBoilerTypeEnum + typedef ENUMERATION IfcBoilerTypeEnum; + // C++ wrapper type for IfcCableCarrierSegmentTypeEnum + typedef ENUMERATION IfcCableCarrierSegmentTypeEnum; + // C++ wrapper type for IfcFontWeight + typedef STRING IfcFontWeight; + // C++ wrapper type for IfcTextFontName + typedef STRING IfcTextFontName; + // C++ wrapper type for IfcEnvironmentalImpactCategoryEnum + typedef ENUMERATION IfcEnvironmentalImpactCategoryEnum; + // C++ wrapper type for IfcActionTypeEnum + typedef ENUMERATION IfcActionTypeEnum; + // C++ wrapper type for IfcDefinedSymbolSelect + typedef SELECT IfcDefinedSymbolSelect; + // C++ wrapper type for IfcTextTransformation + typedef STRING IfcTextTransformation; + // C++ wrapper type for IfcAppliedValueSelect + typedef SELECT IfcAppliedValueSelect; + // C++ wrapper type for IfcEnergyMeasure + typedef REAL IfcEnergyMeasure; + // C++ wrapper type for IfcFlowInstrumentTypeEnum + typedef ENUMERATION IfcFlowInstrumentTypeEnum; + // C++ wrapper type for IfcCountMeasure + typedef NUMBER IfcCountMeasure; + // C++ wrapper type for IfcCurrencyEnum + typedef ENUMERATION IfcCurrencyEnum; + // C++ wrapper type for IfcSectionTypeEnum + typedef ENUMERATION IfcSectionTypeEnum; + // C++ wrapper type for IfcLinearForceMeasure + typedef REAL IfcLinearForceMeasure; + // C++ wrapper type for IfcDerivedMeasureValue + typedef SELECT IfcDerivedMeasureValue; + // C++ wrapper type for IfcRailingTypeEnum + typedef ENUMERATION IfcRailingTypeEnum; + // C++ wrapper type for IfcSIUnitName + typedef ENUMERATION IfcSIUnitName; + // C++ wrapper type for IfcMeasureValue + typedef SELECT IfcMeasureValue; + // C++ wrapper type for IfcRoofTypeEnum + typedef ENUMERATION IfcRoofTypeEnum; + // C++ wrapper type for IfcText + typedef STRING IfcText; + // C++ wrapper type for IfcLinearVelocityMeasure + typedef REAL IfcLinearVelocityMeasure; + // C++ wrapper type for IfcBoolean + typedef BOOLEAN IfcBoolean; // ****************************************************************************** // IFC Entities // ****************************************************************************** + struct IfcRepresentationItem; + struct IfcTopologicalRepresentationItem; + struct IfcEdge; + typedef NotImplemented IfcExternalReference; // (not currently used by Assimp) + typedef NotImplemented IfcDocumentReference; // (not currently used by Assimp) + struct IfcGeometricRepresentationItem; + struct IfcCompositeCurveSegment; struct IfcRoot; struct IfcObjectDefinition; + struct IfcObject; + struct IfcProduct; + struct IfcStructuralItem; + struct IfcStructuralConnection; + struct IfcStructuralSurfaceConnection; + typedef NotImplemented IfcApprovalActorRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcVertexBasedTextureMap; // (not currently used by Assimp) + struct IfcPresentationStyleAssignment; + struct IfcElement; + struct IfcBuildingElement; + struct IfcCurtainWall; + typedef NotImplemented IfcTextureCoordinate; // (not currently used by Assimp) + typedef NotImplemented IfcTextureCoordinateGenerator; // (not currently used by Assimp) + struct IfcProxy; + typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedTextFont; // (not currently used by Assimp) + typedef NotImplemented IfcTextStyleFontModel; // (not currently used by Assimp) + struct IfcStyledItem; + struct IfcAnnotationOccurrence; + struct IfcAnnotationSymbolOccurrence; + struct IfcTerminatorSymbol; + struct IfcDimensionCurveTerminator; struct IfcTypeObject; struct IfcTypeProduct; struct IfcElementType; struct IfcDistributionElementType; - struct IfcDistributionFlowElementType; - struct IfcFlowControllerType; - struct IfcElectricTimeControlType; - struct IfcRepresentation; - struct IfcShapeModel; - struct IfcTopologyRepresentation; - struct IfcRelationship; - struct IfcRelConnects; - typedef NotImplemented IfcRelCoversSpaces; // (not currently used by Assimp) - struct IfcFlowFittingType; - struct IfcCableCarrierFittingType; - typedef NotImplemented IfcStructuralConnectionCondition; // (not currently used by Assimp) - typedef NotImplemented IfcSlippageConnectionCondition; // (not currently used by Assimp) - struct IfcEnergyConversionDeviceType; - struct IfcCoilType; - struct IfcObject; - struct IfcControl; - struct IfcPerformanceHistory; - struct IfcRepresentationItem; - struct IfcGeometricRepresentationItem; - struct IfcTextLiteral; - struct IfcTextLiteralWithExtent; - struct IfcProductRepresentation; - struct IfcProduct; - struct IfcElement; - struct IfcDistributionElement; - struct IfcDistributionFlowElement; - struct IfcCurve; - struct IfcBoundedCurve; - struct IfcCompositeCurve; - struct Ifc2DCompositeCurve; - typedef NotImplemented IfcBoundaryCondition; // (not currently used by Assimp) - typedef NotImplemented IfcBoundaryFaceCondition; // (not currently used by Assimp) - struct IfcCartesianTransformationOperator; - struct IfcCartesianTransformationOperator3D; - struct IfcProperty; - struct IfcSimpleProperty; - struct IfcPropertyEnumeratedValue; - typedef NotImplemented IfcPresentationLayerAssignment; // (not currently used by Assimp) - typedef NotImplemented IfcPresentationLayerWithStyle; // (not currently used by Assimp) - struct IfcBuildingElementType; - struct IfcStairFlightType; - struct IfcSurface; - struct IfcElementarySurface; - struct IfcPlane; - struct IfcBooleanResult; - struct IfcBooleanClippingResult; - struct IfcSolidModel; - struct IfcManifoldSolidBrep; - typedef NotImplemented IfcProfileProperties; // (not currently used by Assimp) - typedef NotImplemented IfcGeneralProfileProperties; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralProfileProperties; // (not currently used by Assimp) - struct IfcFlowTerminalType; - struct IfcStackTerminalType; - struct IfcStructuralItem; - struct IfcStructuralConnection; - struct IfcStructuralCurveConnection; - struct IfcJunctionBoxType; - typedef NotImplemented IfcRelAssociates; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesConstraint; // (not currently used by Assimp) - struct IfcPropertyDefinition; - struct IfcPropertySetDefinition; - typedef NotImplemented IfcDoorPanelProperties; // (not currently used by Assimp) - typedef NotImplemented IfcConstraintRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcSpaceThermalLoadProperties; // (not currently used by Assimp) - typedef NotImplemented IfcLibraryInformation; // (not currently used by Assimp) - struct IfcProcess; - struct IfcTask; - typedef NotImplemented IfcAppliedValue; // (not currently used by Assimp) - typedef NotImplemented IfcEnvironmentalImpactValue; // (not currently used by Assimp) - struct IfcRelFillsElement; - struct IfcProcedure; - typedef NotImplemented IfcStructuralLoad; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadStatic; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadSingleDisplacement; // (not currently used by Assimp) - struct IfcProxy; - typedef NotImplemented IfcCurveStyleFont; // (not currently used by Assimp) - struct IfcResource; - struct IfcConstructionResource; - struct IfcSubContractResource; - typedef NotImplemented IfcCalendarDate; // (not currently used by Assimp) - typedef NotImplemented IfcDocumentElectronicFormat; // (not currently used by Assimp) - struct IfcRelContainedInSpatialStructure; - typedef NotImplemented IfcMaterialProperties; // (not currently used by Assimp) - typedef NotImplemented IfcProductsOfCombustionProperties; // (not currently used by Assimp) - struct IfcTopologicalRepresentationItem; - struct IfcEdge; - struct IfcEdgeCurve; - struct IfcPlateType; - struct IfcObjectPlacement; - struct IfcGridPlacement; - struct IfcFireSuppressionTerminalType; - typedef NotImplemented IfcMechanicalMaterialProperties; // (not currently used by Assimp) - struct IfcFlowStorageDevice; - typedef NotImplemented IfcPerson; // (not currently used by Assimp) - struct IfcSweptSurface; - struct IfcSurfaceOfRevolution; - struct IfcOrientedEdge; - typedef NotImplemented IfcOwnerHistory; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssigns; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssignsToActor; // (not currently used by Assimp) - struct IfcDirection; - typedef NotImplemented IfcReinforcementBarProperties; // (not currently used by Assimp) - struct IfcProfileDef; - struct IfcParameterizedProfileDef; - struct IfcCShapeProfileDef; struct IfcFeatureElement; struct IfcFeatureElementSubtraction; - struct IfcEdgeFeature; - struct IfcChamferEdgeFeature; - struct IfcBuildingElement; - struct IfcColumn; - struct IfcPropertyReferenceValue; - typedef NotImplemented IfcMaterialClassificationRelationship; // (not currently used by Assimp) - struct IfcElectricMotorType; - struct IfcSpatialStructureElementType; - struct IfcSpaceType; - typedef NotImplemented IfcExternalReference; // (not currently used by Assimp) - typedef NotImplemented IfcExternallyDefinedHatchStyle; // (not currently used by Assimp) - struct IfcColumnType; - struct IfcCraneRailAShapeProfileDef; - struct IfcCondenserType; - typedef NotImplemented IfcRelConnectsElements; // (not currently used by Assimp) - typedef NotImplemented IfcRelConnectsWithRealizingElements; // (not currently used by Assimp) - struct IfcCircleProfileDef; - struct IfcCircleHollowProfileDef; - typedef NotImplemented IfcOrganizationRelationship; // (not currently used by Assimp) - struct IfcPlacement; - struct IfcAxis2Placement3D; + struct IfcOpeningElement; struct IfcPresentationStyle; - typedef NotImplemented IfcCurveStyle; // (not currently used by Assimp) - struct IfcEquipmentElement; - struct IfcCompositeCurveSegment; - struct IfcRectangleProfileDef; - typedef NotImplemented IfcPhysicalQuantity; // (not currently used by Assimp) - typedef NotImplemented IfcPhysicalComplexQuantity; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesLibrary; // (not currently used by Assimp) - typedef NotImplemented IfcRelSequence; // (not currently used by Assimp) - struct IfcBuildingElementProxy; - struct IfcDistributionControlElementType; - struct IfcFlowInstrumentType; - struct IfcDraughtingCallout; - struct IfcDimensionCurveDirectedCallout; - struct IfcLinearDimension; - struct IfcElementAssembly; - typedef NotImplemented IfcDraughtingCalloutRelationship; // (not currently used by Assimp) - struct IfcCsgPrimitive3D; - struct IfcRightCircularCone; - typedef NotImplemented IfcExternallyDefinedSurfaceStyle; // (not currently used by Assimp) - struct IfcProjectOrder; - typedef NotImplemented IfcPropertyConstraintRelationship; // (not currently used by Assimp) - struct IfcLShapeProfileDef; - struct IfcAngularDimension; - typedef NotImplemented IfcTextStyleForDefinedFont; // (not currently used by Assimp) - struct IfcLocalPlacement; - struct IfcSweptAreaSolid; - struct IfcRevolvedAreaSolid; - struct IfcStructuralSurfaceConnection; - struct IfcRadiusDimension; - struct IfcSweptDiskSolid; - struct IfcHalfSpaceSolid; - struct IfcPolygonalBoundedHalfSpace; - struct IfcTimeSeriesSchedule; - typedef NotImplemented IfcDimensionCalloutRelationship; // (not currently used by Assimp) - struct IfcCooledBeamType; - struct IfcProject; - typedef NotImplemented IfcApprovalRelationship; // (not currently used by Assimp) - struct IfcEvaporatorType; - struct IfcLaborResource; - typedef NotImplemented IfcStructuralLoadSingleDisplacementDistortion; // (not currently used by Assimp) - struct IfcPropertyBoundedValue; - struct IfcRampFlightType; - struct IfcMember; - typedef NotImplemented IfcStructuralLoadPlanarForce; // (not currently used by Assimp) - struct IfcTubeBundleType; - struct IfcValveType; - typedef NotImplemented IfcExternallyDefinedTextFont; // (not currently used by Assimp) - struct IfcTrimmedCurve; - struct IfcRelDefines; - struct IfcRelDefinesByProperties; - typedef NotImplemented IfcRelAssignsToControl; // (not currently used by Assimp) - struct IfcActor; - struct IfcOccupant; - struct IfcHumidifierType; - struct IfcArbitraryOpenProfileDef; - typedef NotImplemented IfcRelAssignsToProjectOrder; // (not currently used by Assimp) - struct IfcPermit; - struct IfcOffsetCurve3D; - struct IfcLightSource; - struct IfcLightSourcePositional; - typedef NotImplemented IfcSurfaceTexture; // (not currently used by Assimp) - typedef NotImplemented IfcBlobTexture; // (not currently used by Assimp) - struct IfcCompositeProfileDef; - typedef NotImplemented IfcDocumentInformation; // (not currently used by Assimp) - typedef NotImplemented IfcSurfaceStyleLighting; // (not currently used by Assimp) - typedef NotImplemented IfcPhysicalSimpleQuantity; // (not currently used by Assimp) - typedef NotImplemented IfcQuantityArea; // (not currently used by Assimp) - typedef NotImplemented IfcTimeSeries; // (not currently used by Assimp) - typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp) - struct IfcRamp; - typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedCurveFont; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp) - typedef NotImplemented IfcCurrencyRelationship; // (not currently used by Assimp) - struct IfcFlowMovingDevice; - struct IfcSpaceHeaterType; - struct IfcLampType; - struct IfcBuildingElementComponent; - struct IfcReinforcingElement; - struct IfcReinforcingBar; - struct IfcElectricHeaterType; - struct IfcTShapeProfileDef; - typedef NotImplemented IfcConstraint; // (not currently used by Assimp) - typedef NotImplemented IfcObjective; // (not currently used by Assimp) - struct IfcStructuralActivity; - struct IfcStructuralAction; - typedef NotImplemented IfcTextureCoordinate; // (not currently used by Assimp) - typedef NotImplemented IfcTextureMap; // (not currently used by Assimp) - typedef NotImplemented IfcMonetaryUnit; // (not currently used by Assimp) - typedef NotImplemented IfcQuantityTime; // (not currently used by Assimp) - typedef NotImplemented IfcTableRow; // (not currently used by Assimp) - typedef NotImplemented IfcLightDistributionData; // (not currently used by Assimp) - struct IfcDuctFittingType; - struct IfcCartesianTransformationOperator2D; - struct IfcCartesianTransformationOperator2DnonUniform; - typedef NotImplemented IfcClassificationNotationFacet; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesApproval; // (not currently used by Assimp) - typedef NotImplemented IfcDraughtingPreDefinedCurveFont; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadSingleForce; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadSingleForceWarping; // (not currently used by Assimp) - typedef NotImplemented IfcCurveStyleFontAndScaling; // (not currently used by Assimp) - struct IfcVirtualElement; - struct IfcRightCircularCylinder; - struct IfcOutletType; - struct IfcRelDecomposes; - typedef NotImplemented IfcRelNests; // (not currently used by Assimp) - struct IfcCovering; - typedef NotImplemented IfcExternallyDefinedSymbol; // (not currently used by Assimp) - typedef NotImplemented IfcIrregularTimeSeries; // (not currently used by Assimp) - struct IfcPolyline; - struct IfcPath; - struct IfcElementComponent; - struct IfcFastener; - struct IfcMappedItem; - typedef NotImplemented IfcMetric; // (not currently used by Assimp) - typedef NotImplemented IfcDocumentReference; // (not currently used by Assimp) - typedef NotImplemented IfcSectionProperties; // (not currently used by Assimp) - struct IfcRectangularPyramid; - typedef NotImplemented IfcRelReferencedInSpatialStructure; // (not currently used by Assimp) - struct IfcCrewResource; - struct IfcNamedUnit; - struct IfcContextDependentUnit; - struct IfcUnitaryEquipmentType; - struct IfcRoof; - typedef NotImplemented IfcRelAssignsTasks; // (not currently used by Assimp) - struct IfcStructuralMember; - typedef NotImplemented IfcRelConnectsPorts; // (not currently used by Assimp) - struct IfcStyleModel; - struct IfcStyledRepresentation; - struct IfcSpatialStructureElement; - struct IfcBuilding; - struct IfcConnectedFaceSet; - struct IfcOpenShell; - struct IfcFacetedBrep; - typedef NotImplemented IfcLocalTime; // (not currently used by Assimp) - typedef NotImplemented IfcMechanicalConcreteMaterialProperties; // (not currently used by Assimp) - struct IfcConic; - struct IfcCoveringType; - struct IfcRoundedRectangleProfileDef; - struct IfcAirTerminalType; - struct IfcFlowMovingDeviceType; - struct IfcCompressorType; - typedef NotImplemented IfcWindowPanelProperties; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedTerminatorSymbol; // (not currently used by Assimp) - struct IfcIShapeProfileDef; - struct IfcAsymmetricIShapeProfileDef; - struct IfcControllerType; - struct IfcRailing; - struct IfcGroup; - struct IfcAsset; - struct IfcMaterialDefinitionRepresentation; - typedef NotImplemented IfcCurveStyleFontPattern; // (not currently used by Assimp) - typedef NotImplemented IfcApprovalPropertyRelationship; // (not currently used by Assimp) - struct IfcRailingType; - struct IfcWall; - typedef NotImplemented IfcClassificationItem; // (not currently used by Assimp) - struct IfcStructuralPointConnection; - typedef NotImplemented IfcConnectionGeometry; // (not currently used by Assimp) - typedef NotImplemented IfcConnectionPointGeometry; // (not currently used by Assimp) - typedef NotImplemented IfcTimeSeriesValue; // (not currently used by Assimp) - struct IfcPropertyListValue; - struct IfcFurnitureStandard; - typedef NotImplemented IfcRelSchedulesCostItems; // (not currently used by Assimp) - struct IfcElectricGeneratorType; - struct IfcDoor; - struct IfcStyledItem; - struct IfcAnnotationOccurrence; - struct IfcAnnotationSymbolOccurrence; - struct IfcArbitraryClosedProfileDef; - struct IfcArbitraryProfileDefWithVoids; - struct IfcLine; - typedef NotImplemented IfcMaterialLayerSet; // (not currently used by Assimp) - struct IfcFlowSegmentType; - struct IfcAirTerminalBoxType; - typedef NotImplemented IfcRelConnectsStructuralMember; // (not currently used by Assimp) - struct IfcPropertySingleValue; - struct IfcAlarmType; - struct IfcEllipseProfileDef; - struct IfcStair; - typedef NotImplemented IfcPreDefinedTextFont; // (not currently used by Assimp) - typedef NotImplemented IfcTextStyleFontModel; // (not currently used by Assimp) - struct IfcSurfaceStyleShading; - struct IfcPumpType; - struct IfcDefinedSymbol; - typedef NotImplemented IfcClassificationItemRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcGeneralMaterialProperties; // (not currently used by Assimp) - struct IfcElementComponentType; - struct IfcFastenerType; - struct IfcMechanicalFastenerType; - typedef NotImplemented IfcPermeableCoveringProperties; // (not currently used by Assimp) - struct IfcFlowFitting; - typedef NotImplemented IfcApproval; // (not currently used by Assimp) - typedef NotImplemented IfcShapeAspect; // (not currently used by Assimp) - typedef NotImplemented IfcConstraintClassificationRelationship; // (not currently used by Assimp) - struct IfcLightSourceDirectional; struct IfcSurfaceStyle; - typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesProfileProperties; // (not currently used by Assimp) - struct IfcAnnotationSurface; - typedef NotImplemented IfcFuelProperties; // (not currently used by Assimp) - struct IfcFlowController; - typedef NotImplemented IfcFailureConnectionCondition; // (not currently used by Assimp) - struct IfcBuildingStorey; - struct IfcWorkControl; - struct IfcWorkSchedule; - typedef NotImplemented IfcTable; // (not currently used by Assimp) - struct IfcDuctSegmentType; - typedef NotImplemented IfcStructuralSteelProfileProperties; // (not currently used by Assimp) - typedef NotImplemented IfcDraughtingPreDefinedTextFont; // (not currently used by Assimp) - struct IfcFace; + struct IfcFillAreaStyleTileSymbolWithStyle; + typedef NotImplemented IfcApplication; // (not currently used by Assimp) + struct IfcRelationship; + struct IfcRelConnects; + typedef NotImplemented IfcRelConnectsStructuralElement; // (not currently used by Assimp) + struct IfcStructuralMember; struct IfcStructuralSurfaceMember; - struct IfcStructuralSurfaceMemberVarying; - struct IfcFaceSurface; - typedef NotImplemented IfcClassification; // (not currently used by Assimp) typedef NotImplemented IfcMaterialList; // (not currently used by Assimp) - struct IfcCostSchedule; - typedef NotImplemented IfcCoordinatedUniversalTimeOffset; // (not currently used by Assimp) - struct IfcPlanarExtent; - struct IfcPlanarBox; - typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp) - typedef NotImplemented IfcSectionReinforcementProperties; // (not currently used by Assimp) - struct IfcColourSpecification; - struct IfcVector; - struct IfcBeam; - struct IfcColourRgb; - struct IfcStructuralPlanarAction; - struct IfcStructuralPlanarActionVarying; - struct IfcSite; - struct IfcDiscreteAccessoryType; - struct IfcVibrationIsolatorType; - struct IfcEvaporativeCoolerType; - struct IfcDistributionChamberElementType; - struct IfcFeatureElementAddition; - typedef NotImplemented IfcRelAssignsToResource; // (not currently used by Assimp) - struct IfcStructuredDimensionCallout; - struct IfcCoolingTowerType; - struct IfcCenterLineProfileDef; - typedef NotImplemented IfcTextureVertex; // (not currently used by Assimp) - typedef NotImplemented IfcOrganization; // (not currently used by Assimp) - struct IfcWindowStyle; - struct IfcLightSourceGoniometric; - typedef NotImplemented IfcRibPlateProfileProperties; // (not currently used by Assimp) - struct IfcTransformerType; - struct IfcMemberType; - struct IfcSurfaceOfLinearExtrusion; - struct IfcMotorConnectionType; - struct IfcFlowTreatmentDeviceType; - struct IfcDuctSilencerType; - typedef NotImplemented IfcWindowLiningProperties; // (not currently used by Assimp) - struct IfcFurnishingElementType; - struct IfcSystemFurnitureElementType; - typedef NotImplemented IfcConnectionPointEccentricity; // (not currently used by Assimp) - struct IfcWasteTerminalType; - struct IfcBSplineCurve; - struct IfcBezierCurve; - typedef NotImplemented IfcDocumentInformationRelationship; // (not currently used by Assimp) - struct IfcActuatorType; - struct IfcDistributionControlElement; - struct IfcAnnotation; - typedef NotImplemented IfcRelAssociatesDocument; // (not currently used by Assimp) - typedef NotImplemented IfcDoorLiningProperties; // (not currently used by Assimp) - struct IfcShellBasedSurfaceModel; - struct IfcActionRequest; - struct IfcExtrudedAreaSolid; - struct IfcSystem; - struct IfcFillAreaStyleHatching; - struct IfcRelVoidsElement; - typedef NotImplemented IfcRelConnectsPathElements; // (not currently used by Assimp) - typedef NotImplemented IfcRelSpaceBoundary; // (not currently used by Assimp) - struct IfcSurfaceCurveSweptAreaSolid; - struct IfcCartesianTransformationOperator3DnonUniform; - typedef NotImplemented IfcRelInteractionRequirements; // (not currently used by Assimp) - struct IfcCurtainWallType; - typedef NotImplemented IfcQuantityLength; // (not currently used by Assimp) + struct IfcCartesianTransformationOperator; + struct IfcCartesianTransformationOperator3D; + struct IfcDistributionFlowElementType; + struct IfcFlowTerminalType; + struct IfcSanitaryTerminalType; + struct IfcEnergyConversionDeviceType; + struct IfcElectricGeneratorType; + struct IfcResource; + struct IfcConstructionResource; + struct IfcControl; struct IfcEquipmentStandard; - struct IfcFlowStorageDeviceType; - typedef NotImplemented IfcVirtualGridIntersection; // (not currently used by Assimp) - struct IfcDiameterDimension; - struct IfcSwitchingDeviceType; - typedef NotImplemented IfcAddress; // (not currently used by Assimp) - typedef NotImplemented IfcTelecomAddress; // (not currently used by Assimp) - struct IfcWindow; + typedef NotImplemented IfcMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcMechanicalMaterialProperties; // (not currently used by Assimp) typedef NotImplemented IfcMechanicalSteelMaterialProperties; // (not currently used by Assimp) - struct IfcFlowTreatmentDevice; - typedef NotImplemented IfcRelServicesBuildings; // (not currently used by Assimp) - struct IfcChillerType; - typedef NotImplemented IfcRelAssignsToProduct; // (not currently used by Assimp) - struct IfcRectangleHollowProfileDef; - typedef NotImplemented IfcEnergyProperties; // (not currently used by Assimp) - struct IfcBoxedHalfSpace; - struct IfcAxis2Placement2D; - struct IfcSpaceProgram; + struct IfcElectricApplianceType; + typedef NotImplemented IfcHygroscopicMaterialProperties; // (not currently used by Assimp) + struct IfcFurnitureStandard; + typedef NotImplemented IfcIrregularTimeSeriesValue; // (not currently used by Assimp) + struct IfcDefinedSymbol; + struct IfcColourSpecification; + struct IfcCurve; + struct IfcLine; + struct IfcLoop; + typedef NotImplemented IfcRelaxation; // (not currently used by Assimp) + struct IfcProperty; + struct IfcComplexProperty; + struct IfcCovering; + struct IfcBoundedCurve; + struct IfcBSplineCurve; + struct IfcNamedUnit; + struct IfcSubContractResource; + typedef NotImplemented IfcClassificationItem; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralConnectionCondition; // (not currently used by Assimp) + struct IfcObjectPlacement; + struct IfcGridPlacement; + typedef NotImplemented IfcFailureConnectionCondition; // (not currently used by Assimp) + typedef NotImplemented IfcPhysicalQuantity; // (not currently used by Assimp) + typedef NotImplemented IfcPhysicalSimpleQuantity; // (not currently used by Assimp) + struct IfcPropertyDefinition; + struct IfcPropertySetDefinition; + typedef NotImplemented IfcWindowLiningProperties; // (not currently used by Assimp) struct IfcPoint; struct IfcCartesianPoint; - struct IfcBoundedSurface; - struct IfcLoop; - struct IfcPolyLoop; - typedef NotImplemented IfcPreDefinedPointMarkerSymbol; // (not currently used by Assimp) - struct IfcTerminatorSymbol; - struct IfcDimensionCurveTerminator; - typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp) - struct IfcTrapeziumProfileDef; - struct IfcRepresentationContext; - struct IfcGeometricRepresentationContext; - typedef NotImplemented IfcTextStyleWithBoxCharacteristics; // (not currently used by Assimp) - struct IfcCurveBoundedPlane; - typedef NotImplemented IfcQuantityCount; // (not currently used by Assimp) - typedef NotImplemented IfcTimeSeriesReferenceRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadTemperature; // (not currently used by Assimp) - struct IfcSIUnit; + struct IfcFaceBound; + typedef NotImplemented IfcBoundaryCondition; // (not currently used by Assimp) + typedef NotImplemented IfcBoundaryFaceCondition; // (not currently used by Assimp) + struct IfcEdgeCurve; + typedef NotImplemented IfcLibraryInformation; // (not currently used by Assimp) + struct IfcOneDirectionRepeatFactor; + struct IfcTwoDirectionRepeatFactor; + typedef NotImplemented IfcRelConnectsElements; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsPathElements; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssigns; // (not currently used by Assimp) + typedef NotImplemented IfcPropertyConstraintRelationship; // (not currently used by Assimp) + struct IfcLightSource; + struct IfcLightSourceAmbient; + struct IfcPlacement; + struct IfcAxis1Placement; + struct IfcAnnotationSurfaceOccurrence; + struct IfcFlowControllerType; + struct IfcFlowMeterType; + struct IfcAnnotationCurveOccurrence; + typedef NotImplemented IfcLocalTime; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociates; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesApproval; // (not currently used by Assimp) + struct IfcProfileDef; + struct IfcCompositeProfileDef; + struct IfcSubedge; + struct IfcFlowStorageDeviceType; + struct IfcTankType; + typedef NotImplemented IfcRelAssignsToActor; // (not currently used by Assimp) + struct IfcBuildingElementComponent; + struct IfcBuildingElementPart; + struct IfcRepresentation; + struct IfcShapeModel; + struct IfcShapeRepresentation; + struct IfcRailing; + typedef NotImplemented IfcStructuralLoad; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadStatic; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadSingleForce; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadSingleForceWarping; // (not currently used by Assimp) + struct IfcStyleModel; + struct IfcStyledRepresentation; + struct IfcColourRgb; + struct IfcElementComponentType; + struct IfcDiscreteAccessoryType; + struct IfcVibrationIsolatorType; + struct IfcProcess; + struct IfcProcedure; + struct IfcFeatureElementAddition; + struct IfcEdgeFeature; + struct IfcTrimmedCurve; + typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp) + typedef NotImplemented IfcRelCoversBldgElements; // (not currently used by Assimp) + struct IfcTextLiteral; + struct IfcParameterizedProfileDef; + struct IfcCraneRailAShapeProfileDef; + struct IfcElementComponent; + struct IfcCsgPrimitive3D; + struct IfcBlock; + struct IfcBuildingElementType; + struct IfcRailingType; + struct IfcStructuralPointConnection; + struct IfcFlowMovingDeviceType; + struct IfcPumpType; + struct IfcStructuralCurveMember; + struct IfcStructuralCurveMemberVarying; + struct IfcReinforcingElement; + struct IfcReinforcingMesh; + struct IfcPlanarExtent; + struct IfcPlanarBox; + struct IfcCooledBeamType; + typedef NotImplemented IfcQuantityArea; // (not currently used by Assimp) + typedef NotImplemented IfcDraughtingCalloutRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcDimensionCalloutRelationship; // (not currently used by Assimp) + struct IfcProjectOrderRecord; + struct IfcPointOnSurface; + struct IfcPointOnCurve; + struct IfcRelContainedInSpatialStructure; + struct IfcSimpleProperty; + struct IfcPropertyListValue; + struct IfcSpatialStructureElement; + struct IfcBuildingStorey; + struct IfcUnitaryEquipmentType; + struct IfcOutletType; + struct IfcFastenerType; + struct IfcGroup; + struct IfcSystem; + struct IfcStructuralAnalysisModel; + struct IfcSlabType; + typedef NotImplemented IfcRelAssignsToProduct; // (not currently used by Assimp) + typedef NotImplemented IfcClassification; // (not currently used by Assimp) + struct IfcDistributionElement; + struct IfcDistributionFlowElement; + struct IfcTShapeProfileDef; + struct IfcPolyline; + typedef NotImplemented IfcQuantityVolume; // (not currently used by Assimp) + struct IfcDraughtingCallout; + struct IfcFace; + typedef NotImplemented IfcAddress; // (not currently used by Assimp) + struct IfcStructuralSurfaceMemberVarying; + struct IfcMotorConnectionType; + struct IfcAirToAirHeatRecoveryType; + struct IfcPlateType; + struct IfcSolidModel; + struct IfcCsgSolid; + struct IfcMechanicalFastenerType; + struct IfcRelDecomposes; + struct IfcElectricalElement; + struct IfcColumnType; + struct IfcRectangularPyramid; + struct IfcActionRequest; + struct IfcStructuralActivity; struct IfcStructuralReaction; struct IfcStructuralPointReaction; - struct IfcAxis1Placement; - typedef NotImplemented IfcReinforcementDefinitionProperties; // (not currently used by Assimp) - struct IfcElectricApplianceType; - struct IfcSensorType; - struct IfcFurnishingElement; - struct IfcProtectiveDeviceType; - struct IfcZShapeProfileDef; - struct IfcScheduleTimeControl; - struct IfcRepresentationMap; - struct IfcClosedShell; - struct IfcBuildingElementPart; - typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp) - typedef NotImplemented IfcPostalAddress; // (not currently used by Assimp) - struct IfcBlock; - struct IfcLightFixtureType; - struct IfcOpeningElement; - struct IfcLightSourceSpot; - struct IfcTendonAnchor; - typedef NotImplemented IfcSurfaceStyleRefraction; // (not currently used by Assimp) - struct IfcElectricFlowStorageDeviceType; - typedef NotImplemented IfcFluidFlowProperties; // (not currently used by Assimp) - struct IfcSphere; - typedef NotImplemented IfcRelAssociatesAppliedValue; // (not currently used by Assimp) - struct IfcDamperType; - struct IfcProjectOrderRecord; - typedef NotImplemented IfcDimensionalExponents; // (not currently used by Assimp) - typedef NotImplemented IfcRelDefinesByType; // (not currently used by Assimp) - struct IfcDistributionChamberElement; - struct IfcMechanicalFastener; - typedef NotImplemented IfcQuantityVolume; // (not currently used by Assimp) - struct IfcRectangularTrimmedSurface; - typedef NotImplemented IfcDateAndTime; // (not currently used by Assimp) - struct IfcZone; - struct IfcFanType; - struct IfcGeometricSet; - struct IfcFillAreaStyleTiles; - typedef NotImplemented IfcPixelTexture; // (not currently used by Assimp) - struct IfcCableSegmentType; - struct IfcRelOverridesProperties; - struct IfcMeasureWithUnit; - struct IfcSlabType; - struct IfcServiceLife; - struct IfcFurnitureType; - struct IfcCostItem; - struct IfcReinforcingMesh; - typedef NotImplemented IfcExtendedMaterialProperties; // (not currently used by Assimp) - typedef NotImplemented IfcActorRole; // (not currently used by Assimp) - struct IfcFacetedBrepWithVoids; - typedef NotImplemented IfcConstraintAggregationRelationship; // (not currently used by Assimp) - struct IfcGasTerminalType; - typedef NotImplemented IfcRelConnectsWithEccentricity; // (not currently used by Assimp) - struct IfcPile; - struct IfcFillAreaStyleTileSymbolWithStyle; - typedef NotImplemented IfcElectricalBaseProperties; // (not currently used by Assimp) - struct IfcConstructionMaterialResource; - struct IfcAnnotationCurveOccurrence; - struct IfcDimensionCurve; - struct IfcGeometricCurveSet; - struct IfcRelAggregates; - struct IfcFaceBasedSurfaceModel; - struct IfcEnergyConversionDevice; - struct IfcRampFlight; - typedef NotImplemented IfcPropertyEnumeration; // (not currently used by Assimp) - struct IfcVertexLoop; - struct IfcPlate; - struct IfcUShapeProfileDef; - typedef NotImplemented IfcHygroscopicMaterialProperties; // (not currently used by Assimp) - struct IfcFaceBound; - struct IfcFaceOuterBound; - struct IfcOneDirectionRepeatFactor; - struct IfcBoilerType; - struct IfcConstructionEquipmentResource; - struct IfcComplexProperty; - struct IfcFooting; - typedef NotImplemented IfcOpticalMaterialProperties; // (not currently used by Assimp) - struct IfcConstructionProductResource; - typedef NotImplemented IfcBoundaryEdgeCondition; // (not currently used by Assimp) - struct IfcDerivedProfileDef; - struct IfcPropertyTableValue; - typedef NotImplemented IfcRelAssignsToGroup; // (not currently used by Assimp) - struct IfcFlowMeterType; - struct IfcDoorStyle; - typedef NotImplemented IfcRelConnectsPortToElement; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesClassification; // (not currently used by Assimp) - struct IfcUnitAssignment; - struct IfcFlowTerminal; - struct IfcCraneRailFShapeProfileDef; - struct IfcFlowSegment; - struct IfcElementQuantity; - typedef NotImplemented IfcBoundaryNodeCondition; // (not currently used by Assimp) - typedef NotImplemented IfcBoundaryNodeConditionWarping; // (not currently used by Assimp) - struct IfcCurtainWall; - struct IfcDiscreteAccessory; - struct IfcGrid; - struct IfcSanitaryTerminalType; - typedef NotImplemented IfcSoundProperties; // (not currently used by Assimp) - struct IfcSubedge; - typedef NotImplemented IfcTextStyleTextModel; // (not currently used by Assimp) - struct IfcFilterType; - typedef NotImplemented IfcSymbolStyle; // (not currently used by Assimp) - struct IfcTendon; - typedef NotImplemented IfcDimensionPair; // (not currently used by Assimp) - struct IfcStructuralLoadGroup; - struct IfcPresentationStyleAssignment; - typedef NotImplemented IfcRegularTimeSeries; // (not currently used by Assimp) - struct IfcStructuralCurveMember; - struct IfcLightSourceAmbient; - struct IfcCondition; - struct IfcPort; - struct IfcSpace; - struct IfcHeatExchangerType; - struct IfcTankType; - struct IfcInventory; - typedef NotImplemented IfcTextStyle; // (not currently used by Assimp) - typedef NotImplemented IfcAppliedValueRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcSoundValue; // (not currently used by Assimp) - struct IfcTransportElementType; - struct IfcAirToAirHeatRecoveryType; - struct IfcStairFlight; - struct IfcElectricalElement; - typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp) - typedef NotImplemented IfcClassificationReference; // (not currently used by Assimp) - struct IfcSurfaceStyleWithTextures; - struct IfcBoundingBox; - typedef NotImplemented IfcApplication; // (not currently used by Assimp) - struct IfcWallType; - struct IfcMove; - struct IfcCircle; - struct IfcOffsetCurve2D; - typedef NotImplemented IfcMaterialLayerSetUsage; // (not currently used by Assimp) - struct IfcPointOnCurve; - struct IfcStructuralResultGroup; - struct IfcSectionedSpine; - struct IfcSlab; - typedef NotImplemented IfcConnectionPortGeometry; // (not currently used by Assimp) - typedef NotImplemented IfcQuantityWeight; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesMaterial; // (not currently used by Assimp) - struct IfcVertex; - struct IfcVertexPoint; - typedef NotImplemented IfcReferencesValueDocument; // (not currently used by Assimp) - typedef NotImplemented IfcPersonAndOrganization; // (not currently used by Assimp) - typedef NotImplemented IfcRelFlowControlElements; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssignsToProcess; // (not currently used by Assimp) + typedef NotImplemented IfcPropertyDependencyRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedTerminatorSymbol; // (not currently used by Assimp) + struct IfcStructuralAction; struct IfcStructuralLinearAction; struct IfcStructuralLinearActionVarying; - struct IfcBuildingElementProxyType; - struct IfcProjectionElement; - typedef NotImplemented IfcDerivedUnit; // (not currently used by Assimp) - typedef NotImplemented IfcApprovalActorRelationship; // (not currently used by Assimp) - struct IfcConversionBasedUnit; - typedef NotImplemented IfcMaterial; // (not currently used by Assimp) - struct IfcGeometricRepresentationSubContext; - struct IfcAnnotationSurfaceOccurrence; - typedef NotImplemented IfcPreDefinedDimensionSymbol; // (not currently used by Assimp) - struct IfcRoundedEdgeFeature; - typedef NotImplemented IfcRelCoversBldgElements; // (not currently used by Assimp) - struct IfcElectricDistributionPoint; - struct IfcCableCarrierSegmentType; - typedef NotImplemented IfcStructuralLoadLinearForce; // (not currently used by Assimp) - typedef NotImplemented IfcGridAxis; // (not currently used by Assimp) - typedef NotImplemented IfcIrregularTimeSeriesValue; // (not currently used by Assimp) - struct IfcWallStandardCase; - typedef NotImplemented IfcRelOccupiesSpaces; // (not currently used by Assimp) - typedef NotImplemented IfcDerivedUnitElement; // (not currently used by Assimp) - struct IfcCsgSolid; + struct IfcCrewResource; + struct IfcChamferEdgeFeature; + typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp) + typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp) + typedef NotImplemented IfcConstraintRelationship; // (not currently used by Assimp) + struct IfcCompositeCurve; + struct Ifc2DCompositeCurve; + struct IfcGrid; + struct IfcTendon; + struct IfcRectangleProfileDef; + struct IfcRoundedRectangleProfileDef; struct IfcBeamType; - struct IfcAnnotationFillArea; - typedef NotImplemented IfcRelaxation; // (not currently used by Assimp) - struct IfcStructuralCurveMemberVarying; - struct IfcPointOnSurface; - typedef NotImplemented IfcPropertyDependencyRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcVertexBasedTextureMap; // (not currently used by Assimp) - struct IfcOrderAction; - typedef NotImplemented IfcLibraryReference; // (not currently used by Assimp) - struct IfcEdgeLoop; - struct IfcAnnotationFillAreaOccurrence; - typedef NotImplemented IfcRelConnectsStructuralElement; // (not currently used by Assimp) - struct IfcWorkPlan; - struct IfcEllipse; - struct IfcProductDefinitionShape; - struct IfcProjectionCurve; - struct IfcElectricalCircuit; - struct IfcRationalBezierCurve; - struct IfcStructuralPointAction; - typedef NotImplemented IfcServiceLifeFactor; // (not currently used by Assimp) - typedef NotImplemented IfcThermalMaterialProperties; // (not currently used by Assimp) - typedef NotImplemented IfcTextureCoordinateGenerator; // (not currently used by Assimp) - struct IfcPipeSegmentType; - struct IfcTwoDirectionRepeatFactor; - struct IfcShapeRepresentation; - struct IfcPropertySet; - struct IfcSurfaceStyleRendering; - struct IfcDistributionPort; + struct IfcLampType; + typedef NotImplemented IfcTimeSeriesReferenceRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcSurfaceTexture; // (not currently used by Assimp) typedef NotImplemented IfcImageTexture; // (not currently used by Assimp) - struct IfcPipeFittingType; + struct IfcLightSourceGoniometric; + struct IfcProductRepresentation; + struct IfcMaterialDefinitionRepresentation; + struct IfcPermit; + typedef NotImplemented IfcGeneralMaterialProperties; // (not currently used by Assimp) + struct IfcContextDependentUnit; + struct IfcFlowMovingDevice; + struct IfcColumn; + typedef NotImplemented IfcRelAssignsToControl; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToProjectOrder; // (not currently used by Assimp) + struct IfcDistributionControlElement; + struct IfcProtectiveDeviceType; + typedef NotImplemented IfcTextureMap; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToResource; // (not currently used by Assimp) + struct IfcFlowSegment; + struct IfcCompressorType; + typedef NotImplemented IfcProfileProperties; // (not currently used by Assimp) + typedef NotImplemented IfcGeneralProfileProperties; // (not currently used by Assimp) + struct IfcCShapeProfileDef; + typedef NotImplemented IfcAppliedValue; // (not currently used by Assimp) + struct IfcTrapeziumProfileDef; + struct IfcRelDefines; + typedef NotImplemented IfcRelDefinesByType; // (not currently used by Assimp) + struct IfcTask; + struct IfcMove; + typedef NotImplemented IfcBoundaryEdgeCondition; // (not currently used by Assimp) + struct IfcLightSourceDirectional; + struct IfcCondenserType; + typedef NotImplemented IfcTableRow; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesAppliedValue; // (not currently used by Assimp) + struct IfcConic; + struct IfcEllipse; + typedef NotImplemented IfcRelAssociatesClassification; // (not currently used by Assimp) + typedef NotImplemented IfcProductsOfCombustionProperties; // (not currently used by Assimp) + struct IfcDoorStyle; + struct IfcDistributionControlElementType; + struct IfcSensorType; + struct IfcAnnotationFillAreaOccurrence; + struct IfcWall; + typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp) + typedef NotImplemented IfcQuantityWeight; // (not currently used by Assimp) + struct IfcFurnishingElementType; + struct IfcFurnitureType; + struct IfcControllerType; + struct IfcFlowFitting; + typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp) + typedef NotImplemented IfcRelNests; // (not currently used by Assimp) + typedef NotImplemented IfcCalendarDate; // (not currently used by Assimp) + typedef NotImplemented IfcLightDistributionData; // (not currently used by Assimp) + typedef NotImplemented IfcPhysicalComplexQuantity; // (not currently used by Assimp) + typedef NotImplemented IfcDocumentElectronicFormat; // (not currently used by Assimp) + struct IfcRepresentationContext; + typedef NotImplemented IfcDerivedUnitElement; // (not currently used by Assimp) + typedef NotImplemented IfcWindowPanelProperties; // (not currently used by Assimp) + struct IfcRepresentationMap; + typedef NotImplemented IfcRelConnectsStructuralMember; // (not currently used by Assimp) + typedef NotImplemented IfcMaterialClassificationRelationship; // (not currently used by Assimp) + struct IfcDirection; + struct IfcDimensionCurveDirectedCallout; + struct IfcAngularDimension; + struct IfcWorkControl; + struct IfcWorkPlan; + struct IfcSpatialStructureElementType; + struct IfcSpaceType; + typedef NotImplemented IfcSlippageConnectionCondition; // (not currently used by Assimp) + struct IfcPort; + struct IfcDistributionPort; + struct IfcOrderAction; + typedef NotImplemented IfcDoorPanelProperties; // (not currently used by Assimp) + struct IfcBeam; + typedef NotImplemented IfcSectionReinforcementProperties; // (not currently used by Assimp) + struct IfcManifoldSolidBrep; + struct IfcFacetedBrep; + typedef NotImplemented IfcOpticalMaterialProperties; // (not currently used by Assimp) + struct IfcSurfaceStyleWithTextures; + typedef NotImplemented IfcRelConnectsWithEccentricity; // (not currently used by Assimp) + struct IfcArbitraryClosedProfileDef; + struct IfcHumidifierType; + struct IfcPolyLoop; + struct IfcFlowFittingType; + struct IfcFillAreaStyleTiles; + typedef NotImplemented IfcTextureVertex; // (not currently used by Assimp) + struct IfcVertex; + struct IfcAnnotationFillArea; + struct IfcPlate; + struct IfcRightCircularCone; + struct IfcSurface; + struct IfcBoundedSurface; + typedef NotImplemented IfcLibraryReference; // (not currently used by Assimp) + typedef NotImplemented IfcConstraintClassificationRelationship; // (not currently used by Assimp) + struct IfcStructuralLoadGroup; + struct IfcGeometricRepresentationContext; + struct IfcTubeBundleType; + struct IfcStructuralPlanarAction; + typedef NotImplemented IfcBoundaryNodeCondition; // (not currently used by Assimp) + struct IfcHeatExchangerType; + typedef NotImplemented IfcRelSchedulesCostItems; // (not currently used by Assimp) + struct IfcFaceOuterBound; + struct IfcSphere; + struct IfcLightSourcePositional; + struct IfcStructuralPointAction; + struct IfcFlowSegmentType; + struct IfcFireSuppressionTerminalType; + struct IfcPropertySingleValue; + typedef NotImplemented IfcSpaceThermalLoadProperties; // (not currently used by Assimp) + typedef NotImplemented IfcPerson; // (not currently used by Assimp) + typedef NotImplemented IfcTextStyleForDefinedFont; // (not currently used by Assimp) + struct IfcFaceBasedSurfaceModel; + struct IfcAxis2Placement3D; + struct IfcStructuralResultGroup; + typedef NotImplemented IfcCurveStyleFont; // (not currently used by Assimp) + struct IfcHalfSpaceSolid; + struct IfcGasTerminalType; + typedef NotImplemented IfcSoundValue; // (not currently used by Assimp) + typedef NotImplemented IfcDocumentInformation; // (not currently used by Assimp) + struct IfcMember; + typedef NotImplemented IfcMaterialLayerSetUsage; // (not currently used by Assimp) + struct IfcPropertySet; + struct IfcCondition; + struct IfcPropertyEnumeratedValue; + typedef NotImplemented IfcTextStyle; // (not currently used by Assimp) + typedef NotImplemented IfcPermeableCoveringProperties; // (not currently used by Assimp) + typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp) + struct IfcDistributionChamberElementType; + struct IfcTextLiteralWithExtent; + struct IfcFlowController; + struct IfcElectricDistributionPoint; struct IfcTransportElement; - struct IfcAnnotationTextOccurrence; - typedef NotImplemented IfcConnectionSurfaceGeometry; // (not currently used by Assimp) - struct IfcStructuralAnalysisModel; - typedef NotImplemented IfcConnectionCurveGeometry; // (not currently used by Assimp) + struct IfcAsset; + typedef NotImplemented IfcPersonAndOrganization; // (not currently used by Assimp) + struct IfcSweptAreaSolid; + struct IfcRevolvedAreaSolid; + struct IfcFlowInstrumentType; + struct IfcEnergyConversionDevice; + typedef NotImplemented IfcSoundProperties; // (not currently used by Assimp) + struct IfcSurfaceStyleShading; + struct IfcSurfaceStyleRendering; + struct IfcBoilerType; + struct IfcBuildingElementProxy; + struct IfcLocalPlacement; + struct IfcZone; + struct IfcStair; + struct IfcWallStandardCase; + struct IfcDiameterDimension; + struct IfcDuctSegmentType; + typedef NotImplemented IfcTimeSeries; // (not currently used by Assimp) + typedef NotImplemented IfcIrregularTimeSeries; // (not currently used by Assimp) + struct IfcJunctionBoxType; + struct IfcCartesianTransformationOperator3DnonUniform; + typedef NotImplemented IfcApproval; // (not currently used by Assimp) + typedef NotImplemented IfcCurveStyleFontAndScaling; // (not currently used by Assimp) + struct IfcInventory; + typedef NotImplemented IfcQuantityLength; // (not currently used by Assimp) struct IfcConditionCriterion; - typedef NotImplemented IfcWaterProperties; // (not currently used by Assimp) - typedef NotImplemented IfcMaterialLayer; // (not currently used by Assimp) + struct IfcConnectedFaceSet; + struct IfcOpenShell; + typedef NotImplemented IfcStructuralProfileProperties; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralSteelProfileProperties; // (not currently used by Assimp) + struct IfcDoor; + struct IfcBezierCurve; + struct IfcRationalBezierCurve; + struct IfcArbitraryProfileDefWithVoids; + typedef NotImplemented IfcMaterial; // (not currently used by Assimp) + struct IfcBooleanResult; + struct IfcStackTerminalType; + typedef NotImplemented IfcPreDefinedDimensionSymbol; // (not currently used by Assimp) + struct IfcIShapeProfileDef; + struct IfcAsymmetricIShapeProfileDef; + struct IfcEquipmentElement; + typedef NotImplemented IfcClassificationReference; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedCurveFont; // (not currently used by Assimp) + typedef NotImplemented IfcShapeAspect; // (not currently used by Assimp) + typedef NotImplemented IfcClassificationNotationFacet; // (not currently used by Assimp) + typedef NotImplemented IfcDoorLiningProperties; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadSingleDisplacement; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesMaterial; // (not currently used by Assimp) + typedef NotImplemented IfcBoundaryNodeConditionWarping; // (not currently used by Assimp) + typedef NotImplemented IfcCoordinatedUniversalTimeOffset; // (not currently used by Assimp) + struct IfcClosedShell; + typedef NotImplemented IfcMechanicalConcreteMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcMaterialLayerSet; // (not currently used by Assimp) + struct IfcEllipseProfileDef; + struct IfcPropertyBoundedValue; + struct IfcCoveringType; + typedef NotImplemented IfcRelCoversSpaces; // (not currently used by Assimp) + typedef NotImplemented IfcClassificationItemRelationship; // (not currently used by Assimp) + struct IfcActuatorType; + struct IfcOffsetCurve2D; + typedef NotImplemented IfcConnectionGeometry; // (not currently used by Assimp) + typedef NotImplemented IfcConnectionSurfaceGeometry; // (not currently used by Assimp) + struct IfcAnnotation; + struct IfcDistributionChamberElement; + typedef NotImplemented IfcCurveStyleFontPattern; // (not currently used by Assimp) + struct IfcOffsetCurve3D; + struct IfcFooting; + struct IfcMappedItem; + typedef NotImplemented IfcPostalAddress; // (not currently used by Assimp) + typedef NotImplemented IfcRelSpaceBoundary; // (not currently used by Assimp) + struct IfcTransformerType; + struct IfcRightCircularCylinder; + struct IfcSpaceProgram; + typedef NotImplemented IfcThermalMaterialProperties; // (not currently used by Assimp) + struct IfcAnnotationSurface; + struct IfcZShapeProfileDef; + struct IfcRectangleHollowProfileDef; + struct IfcGeometricSet; + struct IfcGeometricCurveSet; + struct IfcArbitraryOpenProfileDef; + typedef NotImplemented IfcDocumentInformationRelationship; // (not currently used by Assimp) + struct IfcFacetedBrepWithVoids; + struct IfcVector; + typedef NotImplemented IfcExternallyDefinedSurfaceStyle; // (not currently used by Assimp) + struct IfcServiceLife; + struct IfcCurveBoundedPlane; + struct IfcCircle; + typedef NotImplemented IfcFuelProperties; // (not currently used by Assimp) + struct IfcVertexLoop; + typedef NotImplemented IfcServiceLifeFactor; // (not currently used by Assimp) + typedef NotImplemented IfcPropertyEnumeration; // (not currently used by Assimp) + struct IfcSurfaceCurveSweptAreaSolid; + struct IfcConstructionEquipmentResource; + struct IfcSectionedSpine; + typedef NotImplemented IfcReferencesValueDocument; // (not currently used by Assimp) + struct IfcPropertyReferenceValue; + typedef NotImplemented IfcRelServicesBuildings; // (not currently used by Assimp) + struct IfcSite; + struct IfcPerformanceHistory; + typedef NotImplemented IfcExternallyDefinedTextFont; // (not currently used by Assimp) + struct IfcPropertyTableValue; + typedef NotImplemented IfcEnvironmentalImpactValue; // (not currently used by Assimp) + typedef NotImplemented IfcCurveStyle; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesProfileProperties; // (not currently used by Assimp) + struct IfcTransportElementType; + struct IfcPolygonalBoundedHalfSpace; + typedef NotImplemented IfcConnectionPortGeometry; // (not currently used by Assimp) + typedef NotImplemented IfcRelFlowControlElements; // (not currently used by Assimp) + typedef NotImplemented IfcApprovalPropertyRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcRelReferencedInSpatialStructure; // (not currently used by Assimp) + struct IfcAxis2Placement2D; + struct IfcFillAreaStyleHatching; + struct IfcFastener; + struct IfcScheduleTimeControl; + struct IfcElectricMotorType; + struct IfcTimeSeriesSchedule; + typedef NotImplemented IfcTable; // (not currently used by Assimp) + struct IfcPipeSegmentType; + struct IfcFlowTerminal; + typedef NotImplemented IfcReinforcementDefinitionProperties; // (not currently used by Assimp) + struct IfcWallType; + struct IfcCoilType; + typedef NotImplemented IfcStructuralLoadSingleDisplacementDistortion; // (not currently used by Assimp) + struct IfcFurnishingElement; + typedef NotImplemented IfcTextStyleWithBoxCharacteristics; // (not currently used by Assimp) + struct IfcWasteTerminalType; + struct IfcWindow; + typedef NotImplemented IfcActorRole; // (not currently used by Assimp) + struct IfcElectricFlowStorageDeviceType; + struct IfcRelAggregates; + typedef NotImplemented IfcDerivedUnit; // (not currently used by Assimp) + struct IfcRamp; + typedef NotImplemented IfcDraughtingPreDefinedCurveFont; // (not currently used by Assimp) + struct IfcLinearDimension; + struct IfcElementarySurface; + struct IfcConstructionProductResource; + struct IfcCableSegmentType; + typedef NotImplemented IfcDraughtingPreDefinedTextFont; // (not currently used by Assimp) + struct IfcPath; + typedef NotImplemented IfcTextStyleTextModel; // (not currently used by Assimp) + typedef NotImplemented IfcOrganizationRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcMonetaryUnit; // (not currently used by Assimp) + struct IfcActor; + struct IfcOccupant; + struct IfcSwitchingDeviceType; + struct IfcSweptSurface; + struct IfcSurfaceOfLinearExtrusion; + struct IfcShellBasedSurfaceModel; + typedef NotImplemented IfcSymbolStyle; // (not currently used by Assimp) + struct IfcBuilding; + struct IfcSIUnit; + struct IfcDiscreteAccessory; + typedef NotImplemented IfcPreDefinedPointMarkerSymbol; // (not currently used by Assimp) typedef NotImplemented IfcCostValue; // (not currently used by Assimp) + typedef NotImplemented IfcOwnerHistory; // (not currently used by Assimp) + struct IfcSystemFurnitureElementType; + struct IfcElementAssembly; + struct IfcCoolingTowerType; + typedef NotImplemented IfcStructuralLoadLinearForce; // (not currently used by Assimp) + typedef NotImplemented IfcPresentationLayerAssignment; // (not currently used by Assimp) + typedef NotImplemented IfcPresentationLayerWithStyle; // (not currently used by Assimp) + struct IfcLightSourceSpot; + typedef NotImplemented IfcExtendedMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcPixelTexture; // (not currently used by Assimp) + typedef NotImplemented IfcDimensionalExponents; // (not currently used by Assimp) + struct IfcEvaporatorType; + typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadPlanarForce; // (not currently used by Assimp) + struct IfcSpaceHeaterType; + struct IfcElementQuantity; + typedef NotImplemented IfcCurrencyRelationship; // (not currently used by Assimp) + struct IfcRampFlight; + struct IfcConversionBasedUnit; + struct IfcExtrudedAreaSolid; + struct IfcProjectOrder; + typedef NotImplemented IfcConnectionPointGeometry; // (not currently used by Assimp) + typedef NotImplemented IfcConnectionPointEccentricity; // (not currently used by Assimp) + typedef NotImplemented IfcConstraintAggregationRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcDimensionPair; // (not currently used by Assimp) + struct IfcBooleanClippingResult; + typedef NotImplemented IfcConstraint; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadTemperature; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesConstraint; // (not currently used by Assimp) + struct IfcReinforcingBar; + struct IfcCenterLineProfileDef; + struct IfcUShapeProfileDef; + struct IfcBoundingBox; + struct IfcWindowStyle; + typedef NotImplemented IfcBlobTexture; // (not currently used by Assimp) + struct IfcMemberType; + struct IfcLightFixtureType; + struct IfcFlowStorageDevice; + struct IfcTopologyRepresentation; + struct IfcRelDefinesByProperties; + struct IfcRelOverridesProperties; + struct IfcStairFlightType; + struct IfcCircleProfileDef; + struct IfcSweptDiskSolid; + typedef NotImplemented IfcExternallyDefinedSymbol; // (not currently used by Assimp) + typedef NotImplemented IfcRegularTimeSeries; // (not currently used by Assimp) + struct IfcStructuralPlanarActionVarying; + struct IfcValveType; + struct IfcUnitAssignment; + typedef NotImplemented IfcConnectionCurveGeometry; // (not currently used by Assimp) + typedef NotImplemented IfcOrganization; // (not currently used by Assimp) + struct IfcVirtualElement; + typedef NotImplemented IfcQuantityCount; // (not currently used by Assimp) + struct IfcStructuralCurveConnection; + struct IfcAirTerminalType; + struct IfcFlowTreatmentDeviceType; + struct IfcRoof; + typedef NotImplemented IfcSectionProperties; // (not currently used by Assimp) + typedef NotImplemented IfcTimeSeriesValue; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToGroup; // (not currently used by Assimp) + struct IfcElectricTimeControlType; + struct IfcPile; + struct IfcCostSchedule; + struct IfcRampFlightType; + struct IfcDerivedProfileDef; + struct IfcCostItem; + struct IfcEvaporativeCoolerType; + struct IfcChillerType; + typedef NotImplemented IfcMaterialLayer; // (not currently used by Assimp) + struct IfcBoxedHalfSpace; + struct IfcCurtainWallType; + struct IfcGeometricRepresentationSubContext; + struct IfcDimensionCurve; + struct IfcPlane; + struct IfcProjectionCurve; + struct IfcDamperType; + typedef NotImplemented IfcSurfaceStyleRefraction; // (not currently used by Assimp) + typedef NotImplemented IfcRibPlateProfileProperties; // (not currently used by Assimp) + typedef NotImplemented IfcWaterProperties; // (not currently used by Assimp) + struct IfcMechanicalFastener; + struct IfcDuctSilencerType; + typedef NotImplemented IfcRelAssociatesDocument; // (not currently used by Assimp) + typedef NotImplemented IfcReinforcementBarProperties; // (not currently used by Assimp) + struct IfcLaborResource; + struct IfcFanType; + typedef NotImplemented IfcEnergyProperties; // (not currently used by Assimp) + struct IfcProjectionElement; + typedef NotImplemented IfcRelInteractionRequirements; // (not currently used by Assimp) + struct IfcCraneRailFShapeProfileDef; + typedef NotImplemented IfcApprovalRelationship; // (not currently used by Assimp) + struct IfcProject; + struct IfcRelVoidsElement; + typedef NotImplemented IfcMetric; // (not currently used by Assimp) + struct IfcElectricalCircuit; + struct IfcLShapeProfileDef; + typedef NotImplemented IfcRelSequence; // (not currently used by Assimp) + struct IfcFlowTreatmentDevice; + struct IfcVertexPoint; + struct IfcAnnotationTextOccurrence; + struct IfcFilterType; + typedef NotImplemented IfcQuantityTime; // (not currently used by Assimp) + struct IfcEdgeLoop; + struct IfcCircleHollowProfileDef; + struct IfcAirTerminalBoxType; + struct IfcStructuredDimensionCallout; + typedef NotImplemented IfcElectricalBaseProperties; // (not currently used by Assimp) + struct IfcCableCarrierSegmentType; + typedef NotImplemented IfcAppliedValueRelationship; // (not currently used by Assimp) + struct IfcDuctFittingType; + typedef NotImplemented IfcExternallyDefinedHatchStyle; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesLibrary; // (not currently used by Assimp) + struct IfcRectangularTrimmedSurface; + struct IfcProductDefinitionShape; + struct IfcStairFlight; + struct IfcSlab; + struct IfcPipeFittingType; + struct IfcSpace; + typedef NotImplemented IfcDateAndTime; // (not currently used by Assimp) + typedef NotImplemented IfcObjective; // (not currently used by Assimp) + typedef NotImplemented IfcVirtualGridIntersection; // (not currently used by Assimp) + struct IfcBuildingElementProxyType; + typedef NotImplemented IfcRelAssignsToProcess; // (not currently used by Assimp) + struct IfcAlarmType; + struct IfcCableCarrierFittingType; + struct IfcRoundedEdgeFeature; + typedef NotImplemented IfcTelecomAddress; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsPortToElement; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsTasks; // (not currently used by Assimp) + struct IfcFaceSurface; + typedef NotImplemented IfcRelOccupiesSpaces; // (not currently used by Assimp) + struct IfcCartesianTransformationOperator2D; + typedef NotImplemented IfcGridAxis; // (not currently used by Assimp) + struct IfcTendonAnchor; + typedef NotImplemented IfcFluidFlowProperties; // (not currently used by Assimp) + struct IfcWorkSchedule; + struct IfcSurfaceOfRevolution; + typedef NotImplemented IfcSurfaceStyleLighting; // (not currently used by Assimp) + struct IfcElectricHeaterType; + struct IfcMeasureWithUnit; + struct IfcOrientedEdge; + struct IfcCartesianTransformationOperator2DnonUniform; + typedef NotImplemented IfcRelConnectsWithRealizingElements; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsPorts; // (not currently used by Assimp) + struct IfcRelFillsElement; + struct IfcConstructionMaterialResource; + struct IfcRadiusDimension; + // C++ wrapper for IfcRepresentationItem + struct IfcRepresentationItem : ObjectHelper { IfcRepresentationItem() : Object("IfcRepresentationItem") {} + + }; + + // C++ wrapper for IfcTopologicalRepresentationItem + struct IfcTopologicalRepresentationItem : IfcRepresentationItem, ObjectHelper { IfcTopologicalRepresentationItem() : Object("IfcTopologicalRepresentationItem") {} + + }; + + // C++ wrapper for IfcEdge + struct IfcEdge : IfcTopologicalRepresentationItem, ObjectHelper { IfcEdge() : Object("IfcEdge") {} + Lazy< IfcVertex > EdgeStart; + Lazy< IfcVertex > EdgeEnd; + }; + + // C++ wrapper for IfcGeometricRepresentationItem + struct IfcGeometricRepresentationItem : IfcRepresentationItem, ObjectHelper { IfcGeometricRepresentationItem() : Object("IfcGeometricRepresentationItem") {} + + }; + + // C++ wrapper for IfcCompositeCurveSegment + struct IfcCompositeCurveSegment : IfcGeometricRepresentationItem, ObjectHelper { IfcCompositeCurveSegment() : Object("IfcCompositeCurveSegment") {} + IfcTransitionCode::Out Transition; + BOOLEAN::Out SameSense; + Lazy< IfcCurve > ParentCurve; + }; + // C++ wrapper for IfcRoot struct IfcRoot : ObjectHelper { IfcRoot() : Object("IfcRoot") {} IfcGloballyUniqueId::Out GlobalId; @@ -1388,6 +1416,85 @@ namespace IFC { }; + // C++ wrapper for IfcObject + struct IfcObject : IfcObjectDefinition, ObjectHelper { IfcObject() : Object("IfcObject") {} + Maybe< IfcLabel::Out > ObjectType; + }; + + // C++ wrapper for IfcProduct + struct IfcProduct : IfcObject, ObjectHelper { IfcProduct() : Object("IfcProduct") {} + Maybe< Lazy< IfcObjectPlacement > > ObjectPlacement; + Maybe< Lazy< IfcProductRepresentation > > Representation; + }; + + // C++ wrapper for IfcStructuralItem + struct IfcStructuralItem : IfcProduct, ObjectHelper { IfcStructuralItem() : Object("IfcStructuralItem") {} + + }; + + // C++ wrapper for IfcStructuralConnection + struct IfcStructuralConnection : IfcStructuralItem, ObjectHelper { IfcStructuralConnection() : Object("IfcStructuralConnection") {} + Maybe< Lazy< NotImplemented > > AppliedCondition; + }; + + // C++ wrapper for IfcStructuralSurfaceConnection + struct IfcStructuralSurfaceConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralSurfaceConnection() : Object("IfcStructuralSurfaceConnection") {} + + }; + + // C++ wrapper for IfcPresentationStyleAssignment + struct IfcPresentationStyleAssignment : ObjectHelper { IfcPresentationStyleAssignment() : Object("IfcPresentationStyleAssignment") {} + ListOf< IfcPresentationStyleSelect, 1, 0 >::Out Styles; + }; + + // C++ wrapper for IfcElement + struct IfcElement : IfcProduct, ObjectHelper { IfcElement() : Object("IfcElement") {} + Maybe< IfcIdentifier::Out > Tag; + }; + + // C++ wrapper for IfcBuildingElement + struct IfcBuildingElement : IfcElement, ObjectHelper { IfcBuildingElement() : Object("IfcBuildingElement") {} + + }; + + // C++ wrapper for IfcCurtainWall + struct IfcCurtainWall : IfcBuildingElement, ObjectHelper { IfcCurtainWall() : Object("IfcCurtainWall") {} + + }; + + // C++ wrapper for IfcProxy + struct IfcProxy : IfcProduct, ObjectHelper { IfcProxy() : Object("IfcProxy") {} + IfcObjectTypeEnum::Out ProxyType; + Maybe< IfcLabel::Out > Tag; + }; + + // C++ wrapper for IfcStyledItem + struct IfcStyledItem : IfcRepresentationItem, ObjectHelper { IfcStyledItem() : Object("IfcStyledItem") {} + Maybe< Lazy< IfcRepresentationItem > > Item; + ListOf< Lazy< IfcPresentationStyleAssignment >, 1, 0 > Styles; + Maybe< IfcLabel::Out > Name; + }; + + // C++ wrapper for IfcAnnotationOccurrence + struct IfcAnnotationOccurrence : IfcStyledItem, ObjectHelper { IfcAnnotationOccurrence() : Object("IfcAnnotationOccurrence") {} + + }; + + // C++ wrapper for IfcAnnotationSymbolOccurrence + struct IfcAnnotationSymbolOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSymbolOccurrence() : Object("IfcAnnotationSymbolOccurrence") {} + + }; + + // C++ wrapper for IfcTerminatorSymbol + struct IfcTerminatorSymbol : IfcAnnotationSymbolOccurrence, ObjectHelper { IfcTerminatorSymbol() : Object("IfcTerminatorSymbol") {} + Lazy< IfcAnnotationCurveOccurrence > AnnotatedCurve; + }; + + // C++ wrapper for IfcDimensionCurveTerminator + struct IfcDimensionCurveTerminator : IfcTerminatorSymbol, ObjectHelper { IfcDimensionCurveTerminator() : Object("IfcDimensionCurveTerminator") {} + IfcDimensionExtentUsage::Out Role; + }; + // C++ wrapper for IfcTypeObject struct IfcTypeObject : IfcObjectDefinition, ObjectHelper { IfcTypeObject() : Object("IfcTypeObject") {} Maybe< IfcLabel::Out > ApplicableOccurrence; @@ -1410,37 +1517,35 @@ namespace IFC { }; - // C++ wrapper for IfcDistributionFlowElementType - struct IfcDistributionFlowElementType : IfcDistributionElementType, ObjectHelper { IfcDistributionFlowElementType() : Object("IfcDistributionFlowElementType") {} + // C++ wrapper for IfcFeatureElement + struct IfcFeatureElement : IfcElement, ObjectHelper { IfcFeatureElement() : Object("IfcFeatureElement") {} }; - // C++ wrapper for IfcFlowControllerType - struct IfcFlowControllerType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowControllerType() : Object("IfcFlowControllerType") {} + // C++ wrapper for IfcFeatureElementSubtraction + struct IfcFeatureElementSubtraction : IfcFeatureElement, ObjectHelper { IfcFeatureElementSubtraction() : Object("IfcFeatureElementSubtraction") {} }; - // C++ wrapper for IfcElectricTimeControlType - struct IfcElectricTimeControlType : IfcFlowControllerType, ObjectHelper { IfcElectricTimeControlType() : Object("IfcElectricTimeControlType") {} - IfcElectricTimeControlTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRepresentation - struct IfcRepresentation : ObjectHelper { IfcRepresentation() : Object("IfcRepresentation") {} - Lazy< IfcRepresentationContext > ContextOfItems; - Maybe< IfcLabel::Out > RepresentationIdentifier; - Maybe< IfcLabel::Out > RepresentationType; - ListOf< Lazy< IfcRepresentationItem >, 1, 0 > Items; - }; - - // C++ wrapper for IfcShapeModel - struct IfcShapeModel : IfcRepresentation, ObjectHelper { IfcShapeModel() : Object("IfcShapeModel") {} + // C++ wrapper for IfcOpeningElement + struct IfcOpeningElement : IfcFeatureElementSubtraction, ObjectHelper { IfcOpeningElement() : Object("IfcOpeningElement") {} }; - // C++ wrapper for IfcTopologyRepresentation - struct IfcTopologyRepresentation : IfcShapeModel, ObjectHelper { IfcTopologyRepresentation() : Object("IfcTopologyRepresentation") {} + // C++ wrapper for IfcPresentationStyle + struct IfcPresentationStyle : ObjectHelper { IfcPresentationStyle() : Object("IfcPresentationStyle") {} + Maybe< IfcLabel::Out > Name; + }; + // C++ wrapper for IfcSurfaceStyle + struct IfcSurfaceStyle : IfcPresentationStyle, ObjectHelper { IfcSurfaceStyle() : Object("IfcSurfaceStyle") {} + IfcSurfaceSide::Out Side; + ListOf< IfcSurfaceStyleElementSelect, 1, 5 >::Out Styles; + }; + + // C++ wrapper for IfcFillAreaStyleTileSymbolWithStyle + struct IfcFillAreaStyleTileSymbolWithStyle : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTileSymbolWithStyle() : Object("IfcFillAreaStyleTileSymbolWithStyle") {} + Lazy< IfcAnnotationSymbolOccurrence > Symbol; }; // C++ wrapper for IfcRelationship @@ -1453,111 +1558,15 @@ namespace IFC { }; - // C++ wrapper for IfcFlowFittingType - struct IfcFlowFittingType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowFittingType() : Object("IfcFlowFittingType") {} + // C++ wrapper for IfcStructuralMember + struct IfcStructuralMember : IfcStructuralItem, ObjectHelper { IfcStructuralMember() : Object("IfcStructuralMember") {} }; - // C++ wrapper for IfcCableCarrierFittingType - struct IfcCableCarrierFittingType : IfcFlowFittingType, ObjectHelper { IfcCableCarrierFittingType() : Object("IfcCableCarrierFittingType") {} - IfcCableCarrierFittingTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcEnergyConversionDeviceType - struct IfcEnergyConversionDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcEnergyConversionDeviceType() : Object("IfcEnergyConversionDeviceType") {} - - }; - - // C++ wrapper for IfcCoilType - struct IfcCoilType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoilType() : Object("IfcCoilType") {} - IfcCoilTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcObject - struct IfcObject : IfcObjectDefinition, ObjectHelper { IfcObject() : Object("IfcObject") {} - Maybe< IfcLabel::Out > ObjectType; - }; - - // C++ wrapper for IfcControl - struct IfcControl : IfcObject, ObjectHelper { IfcControl() : Object("IfcControl") {} - - }; - - // C++ wrapper for IfcPerformanceHistory - struct IfcPerformanceHistory : IfcControl, ObjectHelper { IfcPerformanceHistory() : Object("IfcPerformanceHistory") {} - IfcLabel::Out LifeCyclePhase; - }; - - // C++ wrapper for IfcRepresentationItem - struct IfcRepresentationItem : ObjectHelper { IfcRepresentationItem() : Object("IfcRepresentationItem") {} - - }; - - // C++ wrapper for IfcGeometricRepresentationItem - struct IfcGeometricRepresentationItem : IfcRepresentationItem, ObjectHelper { IfcGeometricRepresentationItem() : Object("IfcGeometricRepresentationItem") {} - - }; - - // C++ wrapper for IfcTextLiteral - struct IfcTextLiteral : IfcGeometricRepresentationItem, ObjectHelper { IfcTextLiteral() : Object("IfcTextLiteral") {} - IfcPresentableText::Out Literal; - IfcAxis2Placement::Out Placement; - IfcTextPath::Out Path; - }; - - // C++ wrapper for IfcTextLiteralWithExtent - struct IfcTextLiteralWithExtent : IfcTextLiteral, ObjectHelper { IfcTextLiteralWithExtent() : Object("IfcTextLiteralWithExtent") {} - Lazy< IfcPlanarExtent > Extent; - IfcBoxAlignment::Out BoxAlignment; - }; - - // C++ wrapper for IfcProductRepresentation - struct IfcProductRepresentation : ObjectHelper { IfcProductRepresentation() : Object("IfcProductRepresentation") {} - Maybe< IfcLabel::Out > Name; - Maybe< IfcText::Out > Description; - ListOf< Lazy< IfcRepresentation >, 1, 0 > Representations; - }; - - // C++ wrapper for IfcProduct - struct IfcProduct : IfcObject, ObjectHelper { IfcProduct() : Object("IfcProduct") {} - Maybe< Lazy< IfcObjectPlacement > > ObjectPlacement; - Maybe< Lazy< IfcProductRepresentation > > Representation; - }; - - // C++ wrapper for IfcElement - struct IfcElement : IfcProduct, ObjectHelper { IfcElement() : Object("IfcElement") {} - Maybe< IfcIdentifier::Out > Tag; - }; - - // C++ wrapper for IfcDistributionElement - struct IfcDistributionElement : IfcElement, ObjectHelper { IfcDistributionElement() : Object("IfcDistributionElement") {} - - }; - - // C++ wrapper for IfcDistributionFlowElement - struct IfcDistributionFlowElement : IfcDistributionElement, ObjectHelper { IfcDistributionFlowElement() : Object("IfcDistributionFlowElement") {} - - }; - - // C++ wrapper for IfcCurve - struct IfcCurve : IfcGeometricRepresentationItem, ObjectHelper { IfcCurve() : Object("IfcCurve") {} - - }; - - // C++ wrapper for IfcBoundedCurve - struct IfcBoundedCurve : IfcCurve, ObjectHelper { IfcBoundedCurve() : Object("IfcBoundedCurve") {} - - }; - - // C++ wrapper for IfcCompositeCurve - struct IfcCompositeCurve : IfcBoundedCurve, ObjectHelper { IfcCompositeCurve() : Object("IfcCompositeCurve") {} - ListOf< Lazy< IfcCompositeCurveSegment >, 1, 0 > Segments; - LOGICAL::Out SelfIntersect; - }; - - // C++ wrapper for Ifc2DCompositeCurve - struct Ifc2DCompositeCurve : IfcCompositeCurve, ObjectHelper { Ifc2DCompositeCurve() : Object("Ifc2DCompositeCurve") {} - + // C++ wrapper for IfcStructuralSurfaceMember + struct IfcStructuralSurfaceMember : IfcStructuralMember, ObjectHelper { IfcStructuralSurfaceMember() : Object("IfcStructuralSurfaceMember") {} + IfcStructuralSurfaceTypeEnum::Out PredefinedType; + Maybe< IfcPositiveLengthMeasure::Out > Thickness; }; // C++ wrapper for IfcCartesianTransformationOperator @@ -1573,68 +1582,9 @@ namespace IFC { Maybe< Lazy< IfcDirection > > Axis3; }; - // C++ wrapper for IfcProperty - struct IfcProperty : ObjectHelper { IfcProperty() : Object("IfcProperty") {} - IfcIdentifier::Out Name; - Maybe< IfcText::Out > Description; - }; + // C++ wrapper for IfcDistributionFlowElementType + struct IfcDistributionFlowElementType : IfcDistributionElementType, ObjectHelper { IfcDistributionFlowElementType() : Object("IfcDistributionFlowElementType") {} - // C++ wrapper for IfcSimpleProperty - struct IfcSimpleProperty : IfcProperty, ObjectHelper { IfcSimpleProperty() : Object("IfcSimpleProperty") {} - - }; - - // C++ wrapper for IfcPropertyEnumeratedValue - struct IfcPropertyEnumeratedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyEnumeratedValue() : Object("IfcPropertyEnumeratedValue") {} - ListOf< IfcValue, 1, 0 >::Out EnumerationValues; - Maybe< Lazy< NotImplemented > > EnumerationReference; - }; - - // C++ wrapper for IfcBuildingElementType - struct IfcBuildingElementType : IfcElementType, ObjectHelper { IfcBuildingElementType() : Object("IfcBuildingElementType") {} - - }; - - // C++ wrapper for IfcStairFlightType - struct IfcStairFlightType : IfcBuildingElementType, ObjectHelper { IfcStairFlightType() : Object("IfcStairFlightType") {} - IfcStairFlightTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcSurface - struct IfcSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcSurface() : Object("IfcSurface") {} - - }; - - // C++ wrapper for IfcElementarySurface - struct IfcElementarySurface : IfcSurface, ObjectHelper { IfcElementarySurface() : Object("IfcElementarySurface") {} - Lazy< IfcAxis2Placement3D > Position; - }; - - // C++ wrapper for IfcPlane - struct IfcPlane : IfcElementarySurface, ObjectHelper { IfcPlane() : Object("IfcPlane") {} - - }; - - // C++ wrapper for IfcBooleanResult - struct IfcBooleanResult : IfcGeometricRepresentationItem, ObjectHelper { IfcBooleanResult() : Object("IfcBooleanResult") {} - IfcBooleanOperator::Out Operator; - IfcBooleanOperand::Out FirstOperand; - IfcBooleanOperand::Out SecondOperand; - }; - - // C++ wrapper for IfcBooleanClippingResult - struct IfcBooleanClippingResult : IfcBooleanResult, ObjectHelper { IfcBooleanClippingResult() : Object("IfcBooleanClippingResult") {} - - }; - - // C++ wrapper for IfcSolidModel - struct IfcSolidModel : IfcGeometricRepresentationItem, ObjectHelper { IfcSolidModel() : Object("IfcSolidModel") {} - - }; - - // C++ wrapper for IfcManifoldSolidBrep - struct IfcManifoldSolidBrep : IfcSolidModel, ObjectHelper { IfcManifoldSolidBrep() : Object("IfcManifoldSolidBrep") {} - Lazy< IfcClosedShell > Outer; }; // C++ wrapper for IfcFlowTerminalType @@ -1642,72 +1592,19 @@ namespace IFC { }; - // C++ wrapper for IfcStackTerminalType - struct IfcStackTerminalType : IfcFlowTerminalType, ObjectHelper { IfcStackTerminalType() : Object("IfcStackTerminalType") {} - IfcStackTerminalTypeEnum::Out PredefinedType; + // C++ wrapper for IfcSanitaryTerminalType + struct IfcSanitaryTerminalType : IfcFlowTerminalType, ObjectHelper { IfcSanitaryTerminalType() : Object("IfcSanitaryTerminalType") {} + IfcSanitaryTerminalTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcStructuralItem - struct IfcStructuralItem : IfcProduct, ObjectHelper { IfcStructuralItem() : Object("IfcStructuralItem") {} + // C++ wrapper for IfcEnergyConversionDeviceType + struct IfcEnergyConversionDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcEnergyConversionDeviceType() : Object("IfcEnergyConversionDeviceType") {} }; - // C++ wrapper for IfcStructuralConnection - struct IfcStructuralConnection : IfcStructuralItem, ObjectHelper { IfcStructuralConnection() : Object("IfcStructuralConnection") {} - Maybe< Lazy< NotImplemented > > AppliedCondition; - }; - - // C++ wrapper for IfcStructuralCurveConnection - struct IfcStructuralCurveConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralCurveConnection() : Object("IfcStructuralCurveConnection") {} - - }; - - // C++ wrapper for IfcJunctionBoxType - struct IfcJunctionBoxType : IfcFlowFittingType, ObjectHelper { IfcJunctionBoxType() : Object("IfcJunctionBoxType") {} - IfcJunctionBoxTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPropertyDefinition - struct IfcPropertyDefinition : IfcRoot, ObjectHelper { IfcPropertyDefinition() : Object("IfcPropertyDefinition") {} - - }; - - // C++ wrapper for IfcPropertySetDefinition - struct IfcPropertySetDefinition : IfcPropertyDefinition, ObjectHelper { IfcPropertySetDefinition() : Object("IfcPropertySetDefinition") {} - - }; - - // C++ wrapper for IfcProcess - struct IfcProcess : IfcObject, ObjectHelper { IfcProcess() : Object("IfcProcess") {} - - }; - - // C++ wrapper for IfcTask - struct IfcTask : IfcProcess, ObjectHelper { IfcTask() : Object("IfcTask") {} - IfcIdentifier::Out TaskId; - Maybe< IfcLabel::Out > Status; - Maybe< IfcLabel::Out > WorkMethod; - BOOLEAN::Out IsMilestone; - Maybe< INTEGER::Out > Priority; - }; - - // C++ wrapper for IfcRelFillsElement - struct IfcRelFillsElement : IfcRelConnects, ObjectHelper { IfcRelFillsElement() : Object("IfcRelFillsElement") {} - Lazy< IfcOpeningElement > RelatingOpeningElement; - Lazy< IfcElement > RelatedBuildingElement; - }; - - // C++ wrapper for IfcProcedure - struct IfcProcedure : IfcProcess, ObjectHelper { IfcProcedure() : Object("IfcProcedure") {} - IfcIdentifier::Out ProcedureID; - IfcProcedureTypeEnum::Out ProcedureType; - Maybe< IfcLabel::Out > UserDefinedProcedureType; - }; - - // C++ wrapper for IfcProxy - struct IfcProxy : IfcProduct, ObjectHelper { IfcProxy() : Object("IfcProxy") {} - IfcObjectTypeEnum::Out ProxyType; - Maybe< IfcLabel::Out > Tag; + // C++ wrapper for IfcElectricGeneratorType + struct IfcElectricGeneratorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricGeneratorType() : Object("IfcElectricGeneratorType") {} + IfcElectricGeneratorTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcResource @@ -1723,40 +1620,96 @@ namespace IFC { Maybe< Lazy< IfcMeasureWithUnit > > BaseQuantity; }; + // C++ wrapper for IfcControl + struct IfcControl : IfcObject, ObjectHelper { IfcControl() : Object("IfcControl") {} + + }; + + // C++ wrapper for IfcEquipmentStandard + struct IfcEquipmentStandard : IfcControl, ObjectHelper { IfcEquipmentStandard() : Object("IfcEquipmentStandard") {} + + }; + + // C++ wrapper for IfcElectricApplianceType + struct IfcElectricApplianceType : IfcFlowTerminalType, ObjectHelper { IfcElectricApplianceType() : Object("IfcElectricApplianceType") {} + IfcElectricApplianceTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFurnitureStandard + struct IfcFurnitureStandard : IfcControl, ObjectHelper { IfcFurnitureStandard() : Object("IfcFurnitureStandard") {} + + }; + + // C++ wrapper for IfcDefinedSymbol + struct IfcDefinedSymbol : IfcGeometricRepresentationItem, ObjectHelper { IfcDefinedSymbol() : Object("IfcDefinedSymbol") {} + IfcDefinedSymbolSelect::Out Definition; + Lazy< IfcCartesianTransformationOperator2D > Target; + }; + + // C++ wrapper for IfcColourSpecification + struct IfcColourSpecification : ObjectHelper { IfcColourSpecification() : Object("IfcColourSpecification") {} + Maybe< IfcLabel::Out > Name; + }; + + // C++ wrapper for IfcCurve + struct IfcCurve : IfcGeometricRepresentationItem, ObjectHelper { IfcCurve() : Object("IfcCurve") {} + + }; + + // C++ wrapper for IfcLine + struct IfcLine : IfcCurve, ObjectHelper { IfcLine() : Object("IfcLine") {} + Lazy< IfcCartesianPoint > Pnt; + Lazy< IfcVector > Dir; + }; + + // C++ wrapper for IfcLoop + struct IfcLoop : IfcTopologicalRepresentationItem, ObjectHelper { IfcLoop() : Object("IfcLoop") {} + + }; + + // C++ wrapper for IfcProperty + struct IfcProperty : ObjectHelper { IfcProperty() : Object("IfcProperty") {} + IfcIdentifier::Out Name; + Maybe< IfcText::Out > Description; + }; + + // C++ wrapper for IfcComplexProperty + struct IfcComplexProperty : IfcProperty, ObjectHelper { IfcComplexProperty() : Object("IfcComplexProperty") {} + IfcIdentifier::Out UsageName; + ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; + }; + + // C++ wrapper for IfcCovering + struct IfcCovering : IfcBuildingElement, ObjectHelper { IfcCovering() : Object("IfcCovering") {} + Maybe< IfcCoveringTypeEnum::Out > PredefinedType; + }; + + // C++ wrapper for IfcBoundedCurve + struct IfcBoundedCurve : IfcCurve, ObjectHelper { IfcBoundedCurve() : Object("IfcBoundedCurve") {} + + }; + + // C++ wrapper for IfcBSplineCurve + struct IfcBSplineCurve : IfcBoundedCurve, ObjectHelper { IfcBSplineCurve() : Object("IfcBSplineCurve") {} + INTEGER::Out Degree; + ListOf< Lazy< IfcCartesianPoint >, 2, 0 > ControlPointsList; + IfcBSplineCurveForm::Out CurveForm; + LOGICAL::Out ClosedCurve; + LOGICAL::Out SelfIntersect; + }; + + // C++ wrapper for IfcNamedUnit + struct IfcNamedUnit : ObjectHelper { IfcNamedUnit() : Object("IfcNamedUnit") {} + Lazy< NotImplemented > Dimensions; + IfcUnitEnum::Out UnitType; + }; + // C++ wrapper for IfcSubContractResource struct IfcSubContractResource : IfcConstructionResource, ObjectHelper { IfcSubContractResource() : Object("IfcSubContractResource") {} Maybe< IfcActorSelect::Out > SubContractor; Maybe< IfcText::Out > JobDescription; }; - // C++ wrapper for IfcRelContainedInSpatialStructure - struct IfcRelContainedInSpatialStructure : IfcRelConnects, ObjectHelper { IfcRelContainedInSpatialStructure() : Object("IfcRelContainedInSpatialStructure") {} - ListOf< Lazy< IfcProduct >, 1, 0 > RelatedElements; - Lazy< IfcSpatialStructureElement > RelatingStructure; - }; - - // C++ wrapper for IfcTopologicalRepresentationItem - struct IfcTopologicalRepresentationItem : IfcRepresentationItem, ObjectHelper { IfcTopologicalRepresentationItem() : Object("IfcTopologicalRepresentationItem") {} - - }; - - // C++ wrapper for IfcEdge - struct IfcEdge : IfcTopologicalRepresentationItem, ObjectHelper { IfcEdge() : Object("IfcEdge") {} - Lazy< IfcVertex > EdgeStart; - Lazy< IfcVertex > EdgeEnd; - }; - - // C++ wrapper for IfcEdgeCurve - struct IfcEdgeCurve : IfcEdge, ObjectHelper { IfcEdgeCurve() : Object("IfcEdgeCurve") {} - Lazy< IfcCurve > EdgeGeometry; - BOOLEAN::Out SameSense; - }; - - // C++ wrapper for IfcPlateType - struct IfcPlateType : IfcBuildingElementType, ObjectHelper { IfcPlateType() : Object("IfcPlateType") {} - IfcPlateTypeEnum::Out PredefinedType; - }; - // C++ wrapper for IfcObjectPlacement struct IfcObjectPlacement : ObjectHelper { IfcObjectPlacement() : Object("IfcObjectPlacement") {} @@ -1768,36 +1721,89 @@ namespace IFC { Maybe< Lazy< NotImplemented > > PlacementRefDirection; }; - // C++ wrapper for IfcFireSuppressionTerminalType - struct IfcFireSuppressionTerminalType : IfcFlowTerminalType, ObjectHelper { IfcFireSuppressionTerminalType() : Object("IfcFireSuppressionTerminalType") {} - IfcFireSuppressionTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFlowStorageDevice - struct IfcFlowStorageDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowStorageDevice() : Object("IfcFlowStorageDevice") {} + // C++ wrapper for IfcPropertyDefinition + struct IfcPropertyDefinition : IfcRoot, ObjectHelper { IfcPropertyDefinition() : Object("IfcPropertyDefinition") {} }; - // C++ wrapper for IfcSweptSurface - struct IfcSweptSurface : IfcSurface, ObjectHelper { IfcSweptSurface() : Object("IfcSweptSurface") {} - Lazy< IfcProfileDef > SweptCurve; - Lazy< IfcAxis2Placement3D > Position; + // C++ wrapper for IfcPropertySetDefinition + struct IfcPropertySetDefinition : IfcPropertyDefinition, ObjectHelper { IfcPropertySetDefinition() : Object("IfcPropertySetDefinition") {} + }; - // C++ wrapper for IfcSurfaceOfRevolution - struct IfcSurfaceOfRevolution : IfcSweptSurface, ObjectHelper { IfcSurfaceOfRevolution() : Object("IfcSurfaceOfRevolution") {} - Lazy< IfcAxis1Placement > AxisPosition; + // C++ wrapper for IfcPoint + struct IfcPoint : IfcGeometricRepresentationItem, ObjectHelper { IfcPoint() : Object("IfcPoint") {} + }; - // C++ wrapper for IfcOrientedEdge - struct IfcOrientedEdge : IfcEdge, ObjectHelper { IfcOrientedEdge() : Object("IfcOrientedEdge") {} - Lazy< IfcEdge > EdgeElement; + // C++ wrapper for IfcCartesianPoint + struct IfcCartesianPoint : IfcPoint, ObjectHelper { IfcCartesianPoint() : Object("IfcCartesianPoint") {} + ListOf< IfcLengthMeasure, 1, 3 >::Out Coordinates; + }; + + // C++ wrapper for IfcFaceBound + struct IfcFaceBound : IfcTopologicalRepresentationItem, ObjectHelper { IfcFaceBound() : Object("IfcFaceBound") {} + Lazy< IfcLoop > Bound; BOOLEAN::Out Orientation; }; - // C++ wrapper for IfcDirection - struct IfcDirection : IfcGeometricRepresentationItem, ObjectHelper { IfcDirection() : Object("IfcDirection") {} - ListOf< REAL, 2, 3 >::Out DirectionRatios; + // C++ wrapper for IfcEdgeCurve + struct IfcEdgeCurve : IfcEdge, ObjectHelper { IfcEdgeCurve() : Object("IfcEdgeCurve") {} + Lazy< IfcCurve > EdgeGeometry; + BOOLEAN::Out SameSense; + }; + + // C++ wrapper for IfcOneDirectionRepeatFactor + struct IfcOneDirectionRepeatFactor : IfcGeometricRepresentationItem, ObjectHelper { IfcOneDirectionRepeatFactor() : Object("IfcOneDirectionRepeatFactor") {} + Lazy< IfcVector > RepeatFactor; + }; + + // C++ wrapper for IfcTwoDirectionRepeatFactor + struct IfcTwoDirectionRepeatFactor : IfcOneDirectionRepeatFactor, ObjectHelper { IfcTwoDirectionRepeatFactor() : Object("IfcTwoDirectionRepeatFactor") {} + Lazy< IfcVector > SecondRepeatFactor; + }; + + // C++ wrapper for IfcLightSource + struct IfcLightSource : IfcGeometricRepresentationItem, ObjectHelper { IfcLightSource() : Object("IfcLightSource") {} + Maybe< IfcLabel::Out > Name; + Lazy< IfcColourRgb > LightColour; + Maybe< IfcNormalisedRatioMeasure::Out > AmbientIntensity; + Maybe< IfcNormalisedRatioMeasure::Out > Intensity; + }; + + // C++ wrapper for IfcLightSourceAmbient + struct IfcLightSourceAmbient : IfcLightSource, ObjectHelper { IfcLightSourceAmbient() : Object("IfcLightSourceAmbient") {} + + }; + + // C++ wrapper for IfcPlacement + struct IfcPlacement : IfcGeometricRepresentationItem, ObjectHelper { IfcPlacement() : Object("IfcPlacement") {} + Lazy< IfcCartesianPoint > Location; + }; + + // C++ wrapper for IfcAxis1Placement + struct IfcAxis1Placement : IfcPlacement, ObjectHelper { IfcAxis1Placement() : Object("IfcAxis1Placement") {} + Maybe< Lazy< IfcDirection > > Axis; + }; + + // C++ wrapper for IfcAnnotationSurfaceOccurrence + struct IfcAnnotationSurfaceOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSurfaceOccurrence() : Object("IfcAnnotationSurfaceOccurrence") {} + + }; + + // C++ wrapper for IfcFlowControllerType + struct IfcFlowControllerType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowControllerType() : Object("IfcFlowControllerType") {} + + }; + + // C++ wrapper for IfcFlowMeterType + struct IfcFlowMeterType : IfcFlowControllerType, ObjectHelper { IfcFlowMeterType() : Object("IfcFlowMeterType") {} + IfcFlowMeterTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcAnnotationCurveOccurrence + struct IfcAnnotationCurveOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationCurveOccurrence() : Object("IfcAnnotationCurveOccurrence") {} + }; // C++ wrapper for IfcProfileDef @@ -1806,28 +1812,106 @@ namespace IFC { Maybe< IfcLabel::Out > ProfileName; }; - // C++ wrapper for IfcParameterizedProfileDef - struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {} - Lazy< IfcAxis2Placement2D > Position; + // C++ wrapper for IfcCompositeProfileDef + struct IfcCompositeProfileDef : IfcProfileDef, ObjectHelper { IfcCompositeProfileDef() : Object("IfcCompositeProfileDef") {} + ListOf< Lazy< IfcProfileDef >, 2, 0 > Profiles; + Maybe< IfcLabel::Out > Label; }; - // C++ wrapper for IfcCShapeProfileDef - struct IfcCShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCShapeProfileDef() : Object("IfcCShapeProfileDef") {} - IfcPositiveLengthMeasure::Out Depth; - IfcPositiveLengthMeasure::Out Width; - IfcPositiveLengthMeasure::Out WallThickness; - IfcPositiveLengthMeasure::Out Girth; - Maybe< IfcPositiveLengthMeasure::Out > InternalFilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; + // C++ wrapper for IfcSubedge + struct IfcSubedge : IfcEdge, ObjectHelper { IfcSubedge() : Object("IfcSubedge") {} + Lazy< IfcEdge > ParentEdge; }; - // C++ wrapper for IfcFeatureElement - struct IfcFeatureElement : IfcElement, ObjectHelper { IfcFeatureElement() : Object("IfcFeatureElement") {} + // C++ wrapper for IfcFlowStorageDeviceType + struct IfcFlowStorageDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowStorageDeviceType() : Object("IfcFlowStorageDeviceType") {} }; - // C++ wrapper for IfcFeatureElementSubtraction - struct IfcFeatureElementSubtraction : IfcFeatureElement, ObjectHelper { IfcFeatureElementSubtraction() : Object("IfcFeatureElementSubtraction") {} + // C++ wrapper for IfcTankType + struct IfcTankType : IfcFlowStorageDeviceType, ObjectHelper { IfcTankType() : Object("IfcTankType") {} + IfcTankTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcBuildingElementComponent + struct IfcBuildingElementComponent : IfcBuildingElement, ObjectHelper { IfcBuildingElementComponent() : Object("IfcBuildingElementComponent") {} + + }; + + // C++ wrapper for IfcBuildingElementPart + struct IfcBuildingElementPart : IfcBuildingElementComponent, ObjectHelper { IfcBuildingElementPart() : Object("IfcBuildingElementPart") {} + + }; + + // C++ wrapper for IfcRepresentation + struct IfcRepresentation : ObjectHelper { IfcRepresentation() : Object("IfcRepresentation") {} + Lazy< IfcRepresentationContext > ContextOfItems; + Maybe< IfcLabel::Out > RepresentationIdentifier; + Maybe< IfcLabel::Out > RepresentationType; + ListOf< Lazy< IfcRepresentationItem >, 1, 0 > Items; + }; + + // C++ wrapper for IfcShapeModel + struct IfcShapeModel : IfcRepresentation, ObjectHelper { IfcShapeModel() : Object("IfcShapeModel") {} + + }; + + // C++ wrapper for IfcShapeRepresentation + struct IfcShapeRepresentation : IfcShapeModel, ObjectHelper { IfcShapeRepresentation() : Object("IfcShapeRepresentation") {} + + }; + + // C++ wrapper for IfcRailing + struct IfcRailing : IfcBuildingElement, ObjectHelper { IfcRailing() : Object("IfcRailing") {} + Maybe< IfcRailingTypeEnum::Out > PredefinedType; + }; + + // C++ wrapper for IfcStyleModel + struct IfcStyleModel : IfcRepresentation, ObjectHelper { IfcStyleModel() : Object("IfcStyleModel") {} + + }; + + // C++ wrapper for IfcStyledRepresentation + struct IfcStyledRepresentation : IfcStyleModel, ObjectHelper { IfcStyledRepresentation() : Object("IfcStyledRepresentation") {} + + }; + + // C++ wrapper for IfcColourRgb + struct IfcColourRgb : IfcColourSpecification, ObjectHelper { IfcColourRgb() : Object("IfcColourRgb") {} + IfcNormalisedRatioMeasure::Out Red; + IfcNormalisedRatioMeasure::Out Green; + IfcNormalisedRatioMeasure::Out Blue; + }; + + // C++ wrapper for IfcElementComponentType + struct IfcElementComponentType : IfcElementType, ObjectHelper { IfcElementComponentType() : Object("IfcElementComponentType") {} + + }; + + // C++ wrapper for IfcDiscreteAccessoryType + struct IfcDiscreteAccessoryType : IfcElementComponentType, ObjectHelper { IfcDiscreteAccessoryType() : Object("IfcDiscreteAccessoryType") {} + + }; + + // C++ wrapper for IfcVibrationIsolatorType + struct IfcVibrationIsolatorType : IfcDiscreteAccessoryType, ObjectHelper { IfcVibrationIsolatorType() : Object("IfcVibrationIsolatorType") {} + IfcVibrationIsolatorTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcProcess + struct IfcProcess : IfcObject, ObjectHelper { IfcProcess() : Object("IfcProcess") {} + + }; + + // C++ wrapper for IfcProcedure + struct IfcProcedure : IfcProcess, ObjectHelper { IfcProcedure() : Object("IfcProcedure") {} + IfcIdentifier::Out ProcedureID; + IfcProcedureTypeEnum::Out ProcedureType; + Maybe< IfcLabel::Out > UserDefinedProcedureType; + }; + + // C++ wrapper for IfcFeatureElementAddition + struct IfcFeatureElementAddition : IfcFeatureElement, ObjectHelper { IfcFeatureElementAddition() : Object("IfcFeatureElementAddition") {} }; @@ -1836,46 +1920,25 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > FeatureLength; }; - // C++ wrapper for IfcChamferEdgeFeature - struct IfcChamferEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcChamferEdgeFeature() : Object("IfcChamferEdgeFeature") {} - Maybe< IfcPositiveLengthMeasure::Out > Width; - Maybe< IfcPositiveLengthMeasure::Out > Height; + // C++ wrapper for IfcTrimmedCurve + struct IfcTrimmedCurve : IfcBoundedCurve, ObjectHelper { IfcTrimmedCurve() : Object("IfcTrimmedCurve") {} + Lazy< IfcCurve > BasisCurve; + ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim1; + ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim2; + BOOLEAN::Out SenseAgreement; + IfcTrimmingPreference::Out MasterRepresentation; }; - // C++ wrapper for IfcBuildingElement - struct IfcBuildingElement : IfcElement, ObjectHelper { IfcBuildingElement() : Object("IfcBuildingElement") {} - + // C++ wrapper for IfcTextLiteral + struct IfcTextLiteral : IfcGeometricRepresentationItem, ObjectHelper { IfcTextLiteral() : Object("IfcTextLiteral") {} + IfcPresentableText::Out Literal; + IfcAxis2Placement::Out Placement; + IfcTextPath::Out Path; }; - // C++ wrapper for IfcColumn - struct IfcColumn : IfcBuildingElement, ObjectHelper { IfcColumn() : Object("IfcColumn") {} - - }; - - // C++ wrapper for IfcPropertyReferenceValue - struct IfcPropertyReferenceValue : IfcSimpleProperty, ObjectHelper { IfcPropertyReferenceValue() : Object("IfcPropertyReferenceValue") {} - Maybe< IfcLabel::Out > UsageName; - IfcObjectReferenceSelect::Out PropertyReference; - }; - - // C++ wrapper for IfcElectricMotorType - struct IfcElectricMotorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricMotorType() : Object("IfcElectricMotorType") {} - IfcElectricMotorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcSpatialStructureElementType - struct IfcSpatialStructureElementType : IfcElementType, ObjectHelper { IfcSpatialStructureElementType() : Object("IfcSpatialStructureElementType") {} - - }; - - // C++ wrapper for IfcSpaceType - struct IfcSpaceType : IfcSpatialStructureElementType, ObjectHelper { IfcSpaceType() : Object("IfcSpaceType") {} - IfcSpaceTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcColumnType - struct IfcColumnType : IfcBuildingElementType, ObjectHelper { IfcColumnType() : Object("IfcColumnType") {} - IfcColumnTypeEnum::Out PredefinedType; + // C++ wrapper for IfcParameterizedProfileDef + struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {} + Lazy< IfcAxis2Placement2D > Position; }; // C++ wrapper for IfcCraneRailAShapeProfileDef @@ -1894,89 +1957,9 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcCondenserType - struct IfcCondenserType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCondenserType() : Object("IfcCondenserType") {} - IfcCondenserTypeEnum::Out PredefinedType; - }; + // C++ wrapper for IfcElementComponent + struct IfcElementComponent : IfcElement, ObjectHelper { IfcElementComponent() : Object("IfcElementComponent") {} - // C++ wrapper for IfcCircleProfileDef - struct IfcCircleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCircleProfileDef() : Object("IfcCircleProfileDef") {} - IfcPositiveLengthMeasure::Out Radius; - }; - - // C++ wrapper for IfcCircleHollowProfileDef - struct IfcCircleHollowProfileDef : IfcCircleProfileDef, ObjectHelper { IfcCircleHollowProfileDef() : Object("IfcCircleHollowProfileDef") {} - IfcPositiveLengthMeasure::Out WallThickness; - }; - - // C++ wrapper for IfcPlacement - struct IfcPlacement : IfcGeometricRepresentationItem, ObjectHelper { IfcPlacement() : Object("IfcPlacement") {} - Lazy< IfcCartesianPoint > Location; - }; - - // C++ wrapper for IfcAxis2Placement3D - struct IfcAxis2Placement3D : IfcPlacement, ObjectHelper { IfcAxis2Placement3D() : Object("IfcAxis2Placement3D") {} - Maybe< Lazy< IfcDirection > > Axis; - Maybe< Lazy< IfcDirection > > RefDirection; - }; - - // C++ wrapper for IfcPresentationStyle - struct IfcPresentationStyle : ObjectHelper { IfcPresentationStyle() : Object("IfcPresentationStyle") {} - Maybe< IfcLabel::Out > Name; - }; - - // C++ wrapper for IfcEquipmentElement - struct IfcEquipmentElement : IfcElement, ObjectHelper { IfcEquipmentElement() : Object("IfcEquipmentElement") {} - - }; - - // C++ wrapper for IfcCompositeCurveSegment - struct IfcCompositeCurveSegment : IfcGeometricRepresentationItem, ObjectHelper { IfcCompositeCurveSegment() : Object("IfcCompositeCurveSegment") {} - IfcTransitionCode::Out Transition; - BOOLEAN::Out SameSense; - Lazy< IfcCurve > ParentCurve; - }; - - // C++ wrapper for IfcRectangleProfileDef - struct IfcRectangleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcRectangleProfileDef() : Object("IfcRectangleProfileDef") {} - IfcPositiveLengthMeasure::Out XDim; - IfcPositiveLengthMeasure::Out YDim; - }; - - // C++ wrapper for IfcBuildingElementProxy - struct IfcBuildingElementProxy : IfcBuildingElement, ObjectHelper { IfcBuildingElementProxy() : Object("IfcBuildingElementProxy") {} - Maybe< IfcElementCompositionEnum::Out > CompositionType; - }; - - // C++ wrapper for IfcDistributionControlElementType - struct IfcDistributionControlElementType : IfcDistributionElementType, ObjectHelper { IfcDistributionControlElementType() : Object("IfcDistributionControlElementType") {} - - }; - - // C++ wrapper for IfcFlowInstrumentType - struct IfcFlowInstrumentType : IfcDistributionControlElementType, ObjectHelper { IfcFlowInstrumentType() : Object("IfcFlowInstrumentType") {} - IfcFlowInstrumentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDraughtingCallout - struct IfcDraughtingCallout : IfcGeometricRepresentationItem, ObjectHelper { IfcDraughtingCallout() : Object("IfcDraughtingCallout") {} - ListOf< IfcDraughtingCalloutElement, 1, 0 >::Out Contents; - }; - - // C++ wrapper for IfcDimensionCurveDirectedCallout - struct IfcDimensionCurveDirectedCallout : IfcDraughtingCallout, ObjectHelper { IfcDimensionCurveDirectedCallout() : Object("IfcDimensionCurveDirectedCallout") {} - - }; - - // C++ wrapper for IfcLinearDimension - struct IfcLinearDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcLinearDimension() : Object("IfcLinearDimension") {} - - }; - - // C++ wrapper for IfcElementAssembly - struct IfcElementAssembly : IfcElement, ObjectHelper { IfcElementAssembly() : Object("IfcElementAssembly") {} - Maybe< IfcAssemblyPlaceEnum::Out > AssemblyPlace; - IfcElementAssemblyTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcCsgPrimitive3D @@ -1984,239 +1967,45 @@ namespace IFC { Lazy< IfcAxis2Placement3D > Position; }; - // C++ wrapper for IfcRightCircularCone - struct IfcRightCircularCone : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCone() : Object("IfcRightCircularCone") {} - IfcPositiveLengthMeasure::Out Height; - IfcPositiveLengthMeasure::Out BottomRadius; + // C++ wrapper for IfcBlock + struct IfcBlock : IfcCsgPrimitive3D, ObjectHelper { IfcBlock() : Object("IfcBlock") {} + IfcPositiveLengthMeasure::Out XLength; + IfcPositiveLengthMeasure::Out YLength; + IfcPositiveLengthMeasure::Out ZLength; }; - // C++ wrapper for IfcProjectOrder - struct IfcProjectOrder : IfcControl, ObjectHelper { IfcProjectOrder() : Object("IfcProjectOrder") {} - IfcIdentifier::Out ID; - IfcProjectOrderTypeEnum::Out PredefinedType; - Maybe< IfcLabel::Out > Status; - }; - - // C++ wrapper for IfcLShapeProfileDef - struct IfcLShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcLShapeProfileDef() : Object("IfcLShapeProfileDef") {} - IfcPositiveLengthMeasure::Out Depth; - Maybe< IfcPositiveLengthMeasure::Out > Width; - IfcPositiveLengthMeasure::Out Thickness; - Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius; - Maybe< IfcPlaneAngleMeasure::Out > LegSlope; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; - }; - - // C++ wrapper for IfcAngularDimension - struct IfcAngularDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcAngularDimension() : Object("IfcAngularDimension") {} + // C++ wrapper for IfcBuildingElementType + struct IfcBuildingElementType : IfcElementType, ObjectHelper { IfcBuildingElementType() : Object("IfcBuildingElementType") {} }; - // C++ wrapper for IfcLocalPlacement - struct IfcLocalPlacement : IfcObjectPlacement, ObjectHelper { IfcLocalPlacement() : Object("IfcLocalPlacement") {} - Maybe< Lazy< IfcObjectPlacement > > PlacementRelTo; - IfcAxis2Placement::Out RelativePlacement; + // C++ wrapper for IfcRailingType + struct IfcRailingType : IfcBuildingElementType, ObjectHelper { IfcRailingType() : Object("IfcRailingType") {} + IfcRailingTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcSweptAreaSolid - struct IfcSweptAreaSolid : IfcSolidModel, ObjectHelper { IfcSweptAreaSolid() : Object("IfcSweptAreaSolid") {} - Lazy< IfcProfileDef > SweptArea; - Lazy< IfcAxis2Placement3D > Position; - }; - - // C++ wrapper for IfcRevolvedAreaSolid - struct IfcRevolvedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcRevolvedAreaSolid() : Object("IfcRevolvedAreaSolid") {} - Lazy< IfcAxis1Placement > Axis; - IfcPlaneAngleMeasure::Out Angle; - }; - - // C++ wrapper for IfcStructuralSurfaceConnection - struct IfcStructuralSurfaceConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralSurfaceConnection() : Object("IfcStructuralSurfaceConnection") {} + // C++ wrapper for IfcStructuralPointConnection + struct IfcStructuralPointConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralPointConnection() : Object("IfcStructuralPointConnection") {} }; - // C++ wrapper for IfcRadiusDimension - struct IfcRadiusDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcRadiusDimension() : Object("IfcRadiusDimension") {} + // C++ wrapper for IfcFlowMovingDeviceType + struct IfcFlowMovingDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowMovingDeviceType() : Object("IfcFlowMovingDeviceType") {} }; - // C++ wrapper for IfcSweptDiskSolid - struct IfcSweptDiskSolid : IfcSolidModel, ObjectHelper { IfcSweptDiskSolid() : Object("IfcSweptDiskSolid") {} - Lazy< IfcCurve > Directrix; - IfcPositiveLengthMeasure::Out Radius; - Maybe< IfcPositiveLengthMeasure::Out > InnerRadius; - IfcParameterValue::Out StartParam; - IfcParameterValue::Out EndParam; + // C++ wrapper for IfcPumpType + struct IfcPumpType : IfcFlowMovingDeviceType, ObjectHelper { IfcPumpType() : Object("IfcPumpType") {} + IfcPumpTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcHalfSpaceSolid - struct IfcHalfSpaceSolid : IfcGeometricRepresentationItem, ObjectHelper { IfcHalfSpaceSolid() : Object("IfcHalfSpaceSolid") {} - Lazy< IfcSurface > BaseSurface; - BOOLEAN::Out AgreementFlag; + // C++ wrapper for IfcStructuralCurveMember + struct IfcStructuralCurveMember : IfcStructuralMember, ObjectHelper { IfcStructuralCurveMember() : Object("IfcStructuralCurveMember") {} + IfcStructuralCurveTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcPolygonalBoundedHalfSpace - struct IfcPolygonalBoundedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcPolygonalBoundedHalfSpace() : Object("IfcPolygonalBoundedHalfSpace") {} - Lazy< IfcAxis2Placement3D > Position; - Lazy< IfcBoundedCurve > PolygonalBoundary; - }; - - // C++ wrapper for IfcTimeSeriesSchedule - struct IfcTimeSeriesSchedule : IfcControl, ObjectHelper { IfcTimeSeriesSchedule() : Object("IfcTimeSeriesSchedule") {} - Maybe< ListOf< IfcDateTimeSelect, 1, 0 >::Out > ApplicableDates; - IfcTimeSeriesScheduleTypeEnum::Out TimeSeriesScheduleType; - Lazy< NotImplemented > TimeSeries; - }; - - // C++ wrapper for IfcCooledBeamType - struct IfcCooledBeamType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCooledBeamType() : Object("IfcCooledBeamType") {} - IfcCooledBeamTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcProject - struct IfcProject : IfcObject, ObjectHelper { IfcProject() : Object("IfcProject") {} - Maybe< IfcLabel::Out > LongName; - Maybe< IfcLabel::Out > Phase; - ListOf< Lazy< IfcRepresentationContext >, 1, 0 > RepresentationContexts; - Lazy< IfcUnitAssignment > UnitsInContext; - }; - - // C++ wrapper for IfcEvaporatorType - struct IfcEvaporatorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporatorType() : Object("IfcEvaporatorType") {} - IfcEvaporatorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcLaborResource - struct IfcLaborResource : IfcConstructionResource, ObjectHelper { IfcLaborResource() : Object("IfcLaborResource") {} - Maybe< IfcText::Out > SkillSet; - }; - - // C++ wrapper for IfcPropertyBoundedValue - struct IfcPropertyBoundedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyBoundedValue() : Object("IfcPropertyBoundedValue") {} - Maybe< IfcValue::Out > UpperBoundValue; - Maybe< IfcValue::Out > LowerBoundValue; - Maybe< IfcUnit::Out > Unit; - }; - - // C++ wrapper for IfcRampFlightType - struct IfcRampFlightType : IfcBuildingElementType, ObjectHelper { IfcRampFlightType() : Object("IfcRampFlightType") {} - IfcRampFlightTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcMember - struct IfcMember : IfcBuildingElement, ObjectHelper { IfcMember() : Object("IfcMember") {} - - }; - - // C++ wrapper for IfcTubeBundleType - struct IfcTubeBundleType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTubeBundleType() : Object("IfcTubeBundleType") {} - IfcTubeBundleTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcValveType - struct IfcValveType : IfcFlowControllerType, ObjectHelper { IfcValveType() : Object("IfcValveType") {} - IfcValveTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcTrimmedCurve - struct IfcTrimmedCurve : IfcBoundedCurve, ObjectHelper { IfcTrimmedCurve() : Object("IfcTrimmedCurve") {} - Lazy< IfcCurve > BasisCurve; - ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim1; - ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim2; - BOOLEAN::Out SenseAgreement; - IfcTrimmingPreference::Out MasterRepresentation; - }; - - // C++ wrapper for IfcRelDefines - struct IfcRelDefines : IfcRelationship, ObjectHelper { IfcRelDefines() : Object("IfcRelDefines") {} - ListOf< Lazy< IfcObject >, 1, 0 > RelatedObjects; - }; - - // C++ wrapper for IfcRelDefinesByProperties - struct IfcRelDefinesByProperties : IfcRelDefines, ObjectHelper { IfcRelDefinesByProperties() : Object("IfcRelDefinesByProperties") {} - Lazy< IfcPropertySetDefinition > RelatingPropertyDefinition; - }; - - // C++ wrapper for IfcActor - struct IfcActor : IfcObject, ObjectHelper { IfcActor() : Object("IfcActor") {} - IfcActorSelect::Out TheActor; - }; - - // C++ wrapper for IfcOccupant - struct IfcOccupant : IfcActor, ObjectHelper { IfcOccupant() : Object("IfcOccupant") {} - IfcOccupantTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcHumidifierType - struct IfcHumidifierType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHumidifierType() : Object("IfcHumidifierType") {} - IfcHumidifierTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcArbitraryOpenProfileDef - struct IfcArbitraryOpenProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryOpenProfileDef() : Object("IfcArbitraryOpenProfileDef") {} - Lazy< IfcBoundedCurve > Curve; - }; - - // C++ wrapper for IfcPermit - struct IfcPermit : IfcControl, ObjectHelper { IfcPermit() : Object("IfcPermit") {} - IfcIdentifier::Out PermitID; - }; - - // C++ wrapper for IfcOffsetCurve3D - struct IfcOffsetCurve3D : IfcCurve, ObjectHelper { IfcOffsetCurve3D() : Object("IfcOffsetCurve3D") {} - Lazy< IfcCurve > BasisCurve; - IfcLengthMeasure::Out Distance; - LOGICAL::Out SelfIntersect; - Lazy< IfcDirection > RefDirection; - }; - - // C++ wrapper for IfcLightSource - struct IfcLightSource : IfcGeometricRepresentationItem, ObjectHelper { IfcLightSource() : Object("IfcLightSource") {} - Maybe< IfcLabel::Out > Name; - Lazy< IfcColourRgb > LightColour; - Maybe< IfcNormalisedRatioMeasure::Out > AmbientIntensity; - Maybe< IfcNormalisedRatioMeasure::Out > Intensity; - }; - - // C++ wrapper for IfcLightSourcePositional - struct IfcLightSourcePositional : IfcLightSource, ObjectHelper { IfcLightSourcePositional() : Object("IfcLightSourcePositional") {} - Lazy< IfcCartesianPoint > Position; - IfcPositiveLengthMeasure::Out Radius; - IfcReal::Out ConstantAttenuation; - IfcReal::Out DistanceAttenuation; - IfcReal::Out QuadricAttenuation; - }; - - // C++ wrapper for IfcCompositeProfileDef - struct IfcCompositeProfileDef : IfcProfileDef, ObjectHelper { IfcCompositeProfileDef() : Object("IfcCompositeProfileDef") {} - ListOf< Lazy< IfcProfileDef >, 2, 0 > Profiles; - Maybe< IfcLabel::Out > Label; - }; - - // C++ wrapper for IfcRamp - struct IfcRamp : IfcBuildingElement, ObjectHelper { IfcRamp() : Object("IfcRamp") {} - IfcRampTypeEnum::Out ShapeType; - }; - - // C++ wrapper for IfcFlowMovingDevice - struct IfcFlowMovingDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowMovingDevice() : Object("IfcFlowMovingDevice") {} - - }; - - // C++ wrapper for IfcSpaceHeaterType - struct IfcSpaceHeaterType : IfcEnergyConversionDeviceType, ObjectHelper { IfcSpaceHeaterType() : Object("IfcSpaceHeaterType") {} - IfcSpaceHeaterTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcLampType - struct IfcLampType : IfcFlowTerminalType, ObjectHelper { IfcLampType() : Object("IfcLampType") {} - IfcLampTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcBuildingElementComponent - struct IfcBuildingElementComponent : IfcBuildingElement, ObjectHelper { IfcBuildingElementComponent() : Object("IfcBuildingElementComponent") {} + // C++ wrapper for IfcStructuralCurveMemberVarying + struct IfcStructuralCurveMemberVarying : IfcStructuralCurveMember, ObjectHelper { IfcStructuralCurveMemberVarying() : Object("IfcStructuralCurveMemberVarying") {} }; @@ -2225,18 +2014,127 @@ namespace IFC { Maybe< IfcLabel::Out > SteelGrade; }; - // C++ wrapper for IfcReinforcingBar - struct IfcReinforcingBar : IfcReinforcingElement, ObjectHelper { IfcReinforcingBar() : Object("IfcReinforcingBar") {} - IfcPositiveLengthMeasure::Out NominalDiameter; - IfcAreaMeasure::Out CrossSectionArea; - Maybe< IfcPositiveLengthMeasure::Out > BarLength; - IfcReinforcingBarRoleEnum::Out BarRole; - Maybe< IfcReinforcingBarSurfaceEnum::Out > BarSurface; + // C++ wrapper for IfcReinforcingMesh + struct IfcReinforcingMesh : IfcReinforcingElement, ObjectHelper { IfcReinforcingMesh() : Object("IfcReinforcingMesh") {} + Maybe< IfcPositiveLengthMeasure::Out > MeshLength; + Maybe< IfcPositiveLengthMeasure::Out > MeshWidth; + IfcPositiveLengthMeasure::Out LongitudinalBarNominalDiameter; + IfcPositiveLengthMeasure::Out TransverseBarNominalDiameter; + IfcAreaMeasure::Out LongitudinalBarCrossSectionArea; + IfcAreaMeasure::Out TransverseBarCrossSectionArea; + IfcPositiveLengthMeasure::Out LongitudinalBarSpacing; + IfcPositiveLengthMeasure::Out TransverseBarSpacing; }; - // C++ wrapper for IfcElectricHeaterType - struct IfcElectricHeaterType : IfcFlowTerminalType, ObjectHelper { IfcElectricHeaterType() : Object("IfcElectricHeaterType") {} - IfcElectricHeaterTypeEnum::Out PredefinedType; + // C++ wrapper for IfcPlanarExtent + struct IfcPlanarExtent : IfcGeometricRepresentationItem, ObjectHelper { IfcPlanarExtent() : Object("IfcPlanarExtent") {} + IfcLengthMeasure::Out SizeInX; + IfcLengthMeasure::Out SizeInY; + }; + + // C++ wrapper for IfcPlanarBox + struct IfcPlanarBox : IfcPlanarExtent, ObjectHelper { IfcPlanarBox() : Object("IfcPlanarBox") {} + IfcAxis2Placement::Out Placement; + }; + + // C++ wrapper for IfcCooledBeamType + struct IfcCooledBeamType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCooledBeamType() : Object("IfcCooledBeamType") {} + IfcCooledBeamTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcProjectOrderRecord + struct IfcProjectOrderRecord : IfcControl, ObjectHelper { IfcProjectOrderRecord() : Object("IfcProjectOrderRecord") {} + ListOf< Lazy< NotImplemented >, 1, 0 > Records; + IfcProjectOrderRecordTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPointOnSurface + struct IfcPointOnSurface : IfcPoint, ObjectHelper { IfcPointOnSurface() : Object("IfcPointOnSurface") {} + Lazy< IfcSurface > BasisSurface; + IfcParameterValue::Out PointParameterU; + IfcParameterValue::Out PointParameterV; + }; + + // C++ wrapper for IfcPointOnCurve + struct IfcPointOnCurve : IfcPoint, ObjectHelper { IfcPointOnCurve() : Object("IfcPointOnCurve") {} + Lazy< IfcCurve > BasisCurve; + IfcParameterValue::Out PointParameter; + }; + + // C++ wrapper for IfcRelContainedInSpatialStructure + struct IfcRelContainedInSpatialStructure : IfcRelConnects, ObjectHelper { IfcRelContainedInSpatialStructure() : Object("IfcRelContainedInSpatialStructure") {} + ListOf< Lazy< IfcProduct >, 1, 0 > RelatedElements; + Lazy< IfcSpatialStructureElement > RelatingStructure; + }; + + // C++ wrapper for IfcSimpleProperty + struct IfcSimpleProperty : IfcProperty, ObjectHelper { IfcSimpleProperty() : Object("IfcSimpleProperty") {} + + }; + + // C++ wrapper for IfcPropertyListValue + struct IfcPropertyListValue : IfcSimpleProperty, ObjectHelper { IfcPropertyListValue() : Object("IfcPropertyListValue") {} + ListOf< IfcValue, 1, 0 >::Out ListValues; + Maybe< IfcUnit::Out > Unit; + }; + + // C++ wrapper for IfcSpatialStructureElement + struct IfcSpatialStructureElement : IfcProduct, ObjectHelper { IfcSpatialStructureElement() : Object("IfcSpatialStructureElement") {} + Maybe< IfcLabel::Out > LongName; + IfcElementCompositionEnum::Out CompositionType; + }; + + // C++ wrapper for IfcBuildingStorey + struct IfcBuildingStorey : IfcSpatialStructureElement, ObjectHelper { IfcBuildingStorey() : Object("IfcBuildingStorey") {} + Maybe< IfcLengthMeasure::Out > Elevation; + }; + + // C++ wrapper for IfcUnitaryEquipmentType + struct IfcUnitaryEquipmentType : IfcEnergyConversionDeviceType, ObjectHelper { IfcUnitaryEquipmentType() : Object("IfcUnitaryEquipmentType") {} + IfcUnitaryEquipmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcOutletType + struct IfcOutletType : IfcFlowTerminalType, ObjectHelper { IfcOutletType() : Object("IfcOutletType") {} + IfcOutletTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFastenerType + struct IfcFastenerType : IfcElementComponentType, ObjectHelper { IfcFastenerType() : Object("IfcFastenerType") {} + + }; + + // C++ wrapper for IfcGroup + struct IfcGroup : IfcObject, ObjectHelper { IfcGroup() : Object("IfcGroup") {} + + }; + + // C++ wrapper for IfcSystem + struct IfcSystem : IfcGroup, ObjectHelper { IfcSystem() : Object("IfcSystem") {} + + }; + + // C++ wrapper for IfcStructuralAnalysisModel + struct IfcStructuralAnalysisModel : IfcSystem, ObjectHelper { IfcStructuralAnalysisModel() : Object("IfcStructuralAnalysisModel") {} + IfcAnalysisModelTypeEnum::Out PredefinedType; + Maybe< Lazy< IfcAxis2Placement3D > > OrientationOf2DPlane; + Maybe< ListOf< Lazy< IfcStructuralLoadGroup >, 1, 0 > > LoadedBy; + Maybe< ListOf< Lazy< IfcStructuralResultGroup >, 1, 0 > > HasResults; + }; + + // C++ wrapper for IfcSlabType + struct IfcSlabType : IfcBuildingElementType, ObjectHelper { IfcSlabType() : Object("IfcSlabType") {} + IfcSlabTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcDistributionElement + struct IfcDistributionElement : IfcElement, ObjectHelper { IfcDistributionElement() : Object("IfcDistributionElement") {} + + }; + + // C++ wrapper for IfcDistributionFlowElement + struct IfcDistributionFlowElement : IfcDistributionElement, ObjectHelper { IfcDistributionFlowElement() : Object("IfcDistributionFlowElement") {} + }; // C++ wrapper for IfcTShapeProfileDef @@ -2253,84 +2151,71 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcStructuralActivity - struct IfcStructuralActivity : IfcProduct, ObjectHelper { IfcStructuralActivity() : Object("IfcStructuralActivity") {} - Lazy< NotImplemented > AppliedLoad; - IfcGlobalOrLocalEnum::Out GlobalOrLocal; + // C++ wrapper for IfcPolyline + struct IfcPolyline : IfcBoundedCurve, ObjectHelper { IfcPolyline() : Object("IfcPolyline") {} + ListOf< Lazy< IfcCartesianPoint >, 2, 0 > Points; }; - // C++ wrapper for IfcStructuralAction - struct IfcStructuralAction : IfcStructuralActivity, ObjectHelper { IfcStructuralAction() : Object("IfcStructuralAction") {} - BOOLEAN::Out DestabilizingLoad; - Maybe< Lazy< IfcStructuralReaction > > CausedBy; + // C++ wrapper for IfcDraughtingCallout + struct IfcDraughtingCallout : IfcGeometricRepresentationItem, ObjectHelper { IfcDraughtingCallout() : Object("IfcDraughtingCallout") {} + ListOf< IfcDraughtingCalloutElement, 1, 0 >::Out Contents; }; - // C++ wrapper for IfcDuctFittingType - struct IfcDuctFittingType : IfcFlowFittingType, ObjectHelper { IfcDuctFittingType() : Object("IfcDuctFittingType") {} - IfcDuctFittingTypeEnum::Out PredefinedType; + // C++ wrapper for IfcFace + struct IfcFace : IfcTopologicalRepresentationItem, ObjectHelper { IfcFace() : Object("IfcFace") {} + ListOf< Lazy< IfcFaceBound >, 1, 0 > Bounds; }; - // C++ wrapper for IfcCartesianTransformationOperator2D - struct IfcCartesianTransformationOperator2D : IfcCartesianTransformationOperator, ObjectHelper { IfcCartesianTransformationOperator2D() : Object("IfcCartesianTransformationOperator2D") {} + // C++ wrapper for IfcStructuralSurfaceMemberVarying + struct IfcStructuralSurfaceMemberVarying : IfcStructuralSurfaceMember, ObjectHelper { IfcStructuralSurfaceMemberVarying() : Object("IfcStructuralSurfaceMemberVarying") {} + ListOf< IfcPositiveLengthMeasure, 2, 0 >::Out SubsequentThickness; + Lazy< NotImplemented > VaryingThicknessLocation; + }; + + // C++ wrapper for IfcMotorConnectionType + struct IfcMotorConnectionType : IfcEnergyConversionDeviceType, ObjectHelper { IfcMotorConnectionType() : Object("IfcMotorConnectionType") {} + IfcMotorConnectionTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcAirToAirHeatRecoveryType + struct IfcAirToAirHeatRecoveryType : IfcEnergyConversionDeviceType, ObjectHelper { IfcAirToAirHeatRecoveryType() : Object("IfcAirToAirHeatRecoveryType") {} + IfcAirToAirHeatRecoveryTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPlateType + struct IfcPlateType : IfcBuildingElementType, ObjectHelper { IfcPlateType() : Object("IfcPlateType") {} + IfcPlateTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcSolidModel + struct IfcSolidModel : IfcGeometricRepresentationItem, ObjectHelper { IfcSolidModel() : Object("IfcSolidModel") {} }; - // C++ wrapper for IfcCartesianTransformationOperator2DnonUniform - struct IfcCartesianTransformationOperator2DnonUniform : IfcCartesianTransformationOperator2D, ObjectHelper { IfcCartesianTransformationOperator2DnonUniform() : Object("IfcCartesianTransformationOperator2DnonUniform") {} - Maybe< REAL::Out > Scale2; + // C++ wrapper for IfcCsgSolid + struct IfcCsgSolid : IfcSolidModel, ObjectHelper { IfcCsgSolid() : Object("IfcCsgSolid") {} + IfcCsgSelect::Out TreeRootExpression; }; - // C++ wrapper for IfcVirtualElement - struct IfcVirtualElement : IfcElement, ObjectHelper { IfcVirtualElement() : Object("IfcVirtualElement") {} + // C++ wrapper for IfcMechanicalFastenerType + struct IfcMechanicalFastenerType : IfcFastenerType, ObjectHelper { IfcMechanicalFastenerType() : Object("IfcMechanicalFastenerType") {} }; - // C++ wrapper for IfcRightCircularCylinder - struct IfcRightCircularCylinder : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCylinder() : Object("IfcRightCircularCylinder") {} - IfcPositiveLengthMeasure::Out Height; - IfcPositiveLengthMeasure::Out Radius; - }; - - // C++ wrapper for IfcOutletType - struct IfcOutletType : IfcFlowTerminalType, ObjectHelper { IfcOutletType() : Object("IfcOutletType") {} - IfcOutletTypeEnum::Out PredefinedType; - }; - // C++ wrapper for IfcRelDecomposes struct IfcRelDecomposes : IfcRelationship, ObjectHelper { IfcRelDecomposes() : Object("IfcRelDecomposes") {} Lazy< IfcObjectDefinition > RelatingObject; ListOf< Lazy< IfcObjectDefinition >, 1, 0 > RelatedObjects; }; - // C++ wrapper for IfcCovering - struct IfcCovering : IfcBuildingElement, ObjectHelper { IfcCovering() : Object("IfcCovering") {} - Maybe< IfcCoveringTypeEnum::Out > PredefinedType; - }; - - // C++ wrapper for IfcPolyline - struct IfcPolyline : IfcBoundedCurve, ObjectHelper { IfcPolyline() : Object("IfcPolyline") {} - ListOf< Lazy< IfcCartesianPoint >, 2, 0 > Points; - }; - - // C++ wrapper for IfcPath - struct IfcPath : IfcTopologicalRepresentationItem, ObjectHelper { IfcPath() : Object("IfcPath") {} - ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; - }; - - // C++ wrapper for IfcElementComponent - struct IfcElementComponent : IfcElement, ObjectHelper { IfcElementComponent() : Object("IfcElementComponent") {} + // C++ wrapper for IfcElectricalElement + struct IfcElectricalElement : IfcElement, ObjectHelper { IfcElectricalElement() : Object("IfcElectricalElement") {} }; - // C++ wrapper for IfcFastener - struct IfcFastener : IfcElementComponent, ObjectHelper { IfcFastener() : Object("IfcFastener") {} - - }; - - // C++ wrapper for IfcMappedItem - struct IfcMappedItem : IfcRepresentationItem, ObjectHelper { IfcMappedItem() : Object("IfcMappedItem") {} - Lazy< IfcRepresentationMap > MappingSource; - Lazy< IfcCartesianTransformationOperator > MappingTarget; + // C++ wrapper for IfcColumnType + struct IfcColumnType : IfcBuildingElementType, ObjectHelper { IfcColumnType() : Object("IfcColumnType") {} + IfcColumnTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcRectangularPyramid @@ -2340,15 +2225,131 @@ namespace IFC { IfcPositiveLengthMeasure::Out Height; }; + // C++ wrapper for IfcActionRequest + struct IfcActionRequest : IfcControl, ObjectHelper { IfcActionRequest() : Object("IfcActionRequest") {} + IfcIdentifier::Out RequestID; + }; + + // C++ wrapper for IfcStructuralActivity + struct IfcStructuralActivity : IfcProduct, ObjectHelper { IfcStructuralActivity() : Object("IfcStructuralActivity") {} + Lazy< NotImplemented > AppliedLoad; + IfcGlobalOrLocalEnum::Out GlobalOrLocal; + }; + + // C++ wrapper for IfcStructuralReaction + struct IfcStructuralReaction : IfcStructuralActivity, ObjectHelper { IfcStructuralReaction() : Object("IfcStructuralReaction") {} + + }; + + // C++ wrapper for IfcStructuralPointReaction + struct IfcStructuralPointReaction : IfcStructuralReaction, ObjectHelper { IfcStructuralPointReaction() : Object("IfcStructuralPointReaction") {} + + }; + + // C++ wrapper for IfcStructuralAction + struct IfcStructuralAction : IfcStructuralActivity, ObjectHelper { IfcStructuralAction() : Object("IfcStructuralAction") {} + BOOLEAN::Out DestabilizingLoad; + Maybe< Lazy< IfcStructuralReaction > > CausedBy; + }; + + // C++ wrapper for IfcStructuralLinearAction + struct IfcStructuralLinearAction : IfcStructuralAction, ObjectHelper { IfcStructuralLinearAction() : Object("IfcStructuralLinearAction") {} + IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; + }; + + // C++ wrapper for IfcStructuralLinearActionVarying + struct IfcStructuralLinearActionVarying : IfcStructuralLinearAction, ObjectHelper { IfcStructuralLinearActionVarying() : Object("IfcStructuralLinearActionVarying") {} + Lazy< NotImplemented > VaryingAppliedLoadLocation; + ListOf< Lazy< NotImplemented >, 1, 0 > SubsequentAppliedLoads; + }; + // C++ wrapper for IfcCrewResource struct IfcCrewResource : IfcConstructionResource, ObjectHelper { IfcCrewResource() : Object("IfcCrewResource") {} }; - // C++ wrapper for IfcNamedUnit - struct IfcNamedUnit : ObjectHelper { IfcNamedUnit() : Object("IfcNamedUnit") {} - Lazy< NotImplemented > Dimensions; - IfcUnitEnum::Out UnitType; + // C++ wrapper for IfcChamferEdgeFeature + struct IfcChamferEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcChamferEdgeFeature() : Object("IfcChamferEdgeFeature") {} + Maybe< IfcPositiveLengthMeasure::Out > Width; + Maybe< IfcPositiveLengthMeasure::Out > Height; + }; + + // C++ wrapper for IfcCompositeCurve + struct IfcCompositeCurve : IfcBoundedCurve, ObjectHelper { IfcCompositeCurve() : Object("IfcCompositeCurve") {} + ListOf< Lazy< IfcCompositeCurveSegment >, 1, 0 > Segments; + LOGICAL::Out SelfIntersect; + }; + + // C++ wrapper for Ifc2DCompositeCurve + struct Ifc2DCompositeCurve : IfcCompositeCurve, ObjectHelper { Ifc2DCompositeCurve() : Object("Ifc2DCompositeCurve") {} + + }; + + // C++ wrapper for IfcGrid + struct IfcGrid : IfcProduct, ObjectHelper { IfcGrid() : Object("IfcGrid") {} + ListOf< Lazy< NotImplemented >, 1, 0 > UAxes; + ListOf< Lazy< NotImplemented >, 1, 0 > VAxes; + Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > WAxes; + }; + + // C++ wrapper for IfcTendon + struct IfcTendon : IfcReinforcingElement, ObjectHelper { IfcTendon() : Object("IfcTendon") {} + IfcTendonTypeEnum::Out PredefinedType; + IfcPositiveLengthMeasure::Out NominalDiameter; + IfcAreaMeasure::Out CrossSectionArea; + Maybe< IfcForceMeasure::Out > TensionForce; + Maybe< IfcPressureMeasure::Out > PreStress; + Maybe< IfcNormalisedRatioMeasure::Out > FrictionCoefficient; + Maybe< IfcPositiveLengthMeasure::Out > AnchorageSlip; + Maybe< IfcPositiveLengthMeasure::Out > MinCurvatureRadius; + }; + + // C++ wrapper for IfcRectangleProfileDef + struct IfcRectangleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcRectangleProfileDef() : Object("IfcRectangleProfileDef") {} + IfcPositiveLengthMeasure::Out XDim; + IfcPositiveLengthMeasure::Out YDim; + }; + + // C++ wrapper for IfcRoundedRectangleProfileDef + struct IfcRoundedRectangleProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRoundedRectangleProfileDef() : Object("IfcRoundedRectangleProfileDef") {} + IfcPositiveLengthMeasure::Out RoundingRadius; + }; + + // C++ wrapper for IfcBeamType + struct IfcBeamType : IfcBuildingElementType, ObjectHelper { IfcBeamType() : Object("IfcBeamType") {} + IfcBeamTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcLampType + struct IfcLampType : IfcFlowTerminalType, ObjectHelper { IfcLampType() : Object("IfcLampType") {} + IfcLampTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcLightSourceGoniometric + struct IfcLightSourceGoniometric : IfcLightSource, ObjectHelper { IfcLightSourceGoniometric() : Object("IfcLightSourceGoniometric") {} + Lazy< IfcAxis2Placement3D > Position; + Maybe< Lazy< IfcColourRgb > > ColourAppearance; + IfcThermodynamicTemperatureMeasure::Out ColourTemperature; + IfcLuminousFluxMeasure::Out LuminousFlux; + IfcLightEmissionSourceEnum::Out LightEmissionSource; + IfcLightDistributionDataSourceSelect::Out LightDistributionDataSource; + }; + + // C++ wrapper for IfcProductRepresentation + struct IfcProductRepresentation : ObjectHelper { IfcProductRepresentation() : Object("IfcProductRepresentation") {} + Maybe< IfcLabel::Out > Name; + Maybe< IfcText::Out > Description; + ListOf< Lazy< IfcRepresentation >, 1, 0 > Representations; + }; + + // C++ wrapper for IfcMaterialDefinitionRepresentation + struct IfcMaterialDefinitionRepresentation : IfcProductRepresentation, ObjectHelper { IfcMaterialDefinitionRepresentation() : Object("IfcMaterialDefinitionRepresentation") {} + Lazy< NotImplemented > RepresentedMaterial; + }; + + // C++ wrapper for IfcPermit + struct IfcPermit : IfcControl, ObjectHelper { IfcPermit() : Object("IfcPermit") {} + IfcIdentifier::Out PermitID; }; // C++ wrapper for IfcContextDependentUnit @@ -2356,42 +2357,564 @@ namespace IFC { IfcLabel::Out Name; }; - // C++ wrapper for IfcUnitaryEquipmentType - struct IfcUnitaryEquipmentType : IfcEnergyConversionDeviceType, ObjectHelper { IfcUnitaryEquipmentType() : Object("IfcUnitaryEquipmentType") {} - IfcUnitaryEquipmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRoof - struct IfcRoof : IfcBuildingElement, ObjectHelper { IfcRoof() : Object("IfcRoof") {} - IfcRoofTypeEnum::Out ShapeType; - }; - - // C++ wrapper for IfcStructuralMember - struct IfcStructuralMember : IfcStructuralItem, ObjectHelper { IfcStructuralMember() : Object("IfcStructuralMember") {} + // C++ wrapper for IfcFlowMovingDevice + struct IfcFlowMovingDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowMovingDevice() : Object("IfcFlowMovingDevice") {} }; - // C++ wrapper for IfcStyleModel - struct IfcStyleModel : IfcRepresentation, ObjectHelper { IfcStyleModel() : Object("IfcStyleModel") {} + // C++ wrapper for IfcColumn + struct IfcColumn : IfcBuildingElement, ObjectHelper { IfcColumn() : Object("IfcColumn") {} }; - // C++ wrapper for IfcStyledRepresentation - struct IfcStyledRepresentation : IfcStyleModel, ObjectHelper { IfcStyledRepresentation() : Object("IfcStyledRepresentation") {} + // C++ wrapper for IfcDistributionControlElement + struct IfcDistributionControlElement : IfcDistributionElement, ObjectHelper { IfcDistributionControlElement() : Object("IfcDistributionControlElement") {} + Maybe< IfcIdentifier::Out > ControlElementId; + }; + + // C++ wrapper for IfcProtectiveDeviceType + struct IfcProtectiveDeviceType : IfcFlowControllerType, ObjectHelper { IfcProtectiveDeviceType() : Object("IfcProtectiveDeviceType") {} + IfcProtectiveDeviceTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowSegment + struct IfcFlowSegment : IfcDistributionFlowElement, ObjectHelper { IfcFlowSegment() : Object("IfcFlowSegment") {} }; - // C++ wrapper for IfcSpatialStructureElement - struct IfcSpatialStructureElement : IfcProduct, ObjectHelper { IfcSpatialStructureElement() : Object("IfcSpatialStructureElement") {} - Maybe< IfcLabel::Out > LongName; - IfcElementCompositionEnum::Out CompositionType; + // C++ wrapper for IfcCompressorType + struct IfcCompressorType : IfcFlowMovingDeviceType, ObjectHelper { IfcCompressorType() : Object("IfcCompressorType") {} + IfcCompressorTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcBuilding - struct IfcBuilding : IfcSpatialStructureElement, ObjectHelper { IfcBuilding() : Object("IfcBuilding") {} - Maybe< IfcLengthMeasure::Out > ElevationOfRefHeight; - Maybe< IfcLengthMeasure::Out > ElevationOfTerrain; - Maybe< Lazy< NotImplemented > > BuildingAddress; + // C++ wrapper for IfcCShapeProfileDef + struct IfcCShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCShapeProfileDef() : Object("IfcCShapeProfileDef") {} + IfcPositiveLengthMeasure::Out Depth; + IfcPositiveLengthMeasure::Out Width; + IfcPositiveLengthMeasure::Out WallThickness; + IfcPositiveLengthMeasure::Out Girth; + Maybe< IfcPositiveLengthMeasure::Out > InternalFilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; + }; + + // C++ wrapper for IfcTrapeziumProfileDef + struct IfcTrapeziumProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcTrapeziumProfileDef() : Object("IfcTrapeziumProfileDef") {} + IfcPositiveLengthMeasure::Out BottomXDim; + IfcPositiveLengthMeasure::Out TopXDim; + IfcPositiveLengthMeasure::Out YDim; + IfcLengthMeasure::Out TopXOffset; + }; + + // C++ wrapper for IfcRelDefines + struct IfcRelDefines : IfcRelationship, ObjectHelper { IfcRelDefines() : Object("IfcRelDefines") {} + ListOf< Lazy< IfcObject >, 1, 0 > RelatedObjects; + }; + + // C++ wrapper for IfcTask + struct IfcTask : IfcProcess, ObjectHelper { IfcTask() : Object("IfcTask") {} + IfcIdentifier::Out TaskId; + Maybe< IfcLabel::Out > Status; + Maybe< IfcLabel::Out > WorkMethod; + BOOLEAN::Out IsMilestone; + Maybe< INTEGER::Out > Priority; + }; + + // C++ wrapper for IfcMove + struct IfcMove : IfcTask, ObjectHelper { IfcMove() : Object("IfcMove") {} + Lazy< IfcSpatialStructureElement > MoveFrom; + Lazy< IfcSpatialStructureElement > MoveTo; + Maybe< ListOf< IfcText, 1, 0 >::Out > PunchList; + }; + + // C++ wrapper for IfcLightSourceDirectional + struct IfcLightSourceDirectional : IfcLightSource, ObjectHelper { IfcLightSourceDirectional() : Object("IfcLightSourceDirectional") {} + Lazy< IfcDirection > Orientation; + }; + + // C++ wrapper for IfcCondenserType + struct IfcCondenserType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCondenserType() : Object("IfcCondenserType") {} + IfcCondenserTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcConic + struct IfcConic : IfcCurve, ObjectHelper { IfcConic() : Object("IfcConic") {} + IfcAxis2Placement::Out Position; + }; + + // C++ wrapper for IfcEllipse + struct IfcEllipse : IfcConic, ObjectHelper { IfcEllipse() : Object("IfcEllipse") {} + IfcPositiveLengthMeasure::Out SemiAxis1; + IfcPositiveLengthMeasure::Out SemiAxis2; + }; + + // C++ wrapper for IfcDoorStyle + struct IfcDoorStyle : IfcTypeProduct, ObjectHelper { IfcDoorStyle() : Object("IfcDoorStyle") {} + IfcDoorStyleOperationEnum::Out OperationType; + IfcDoorStyleConstructionEnum::Out ConstructionType; + BOOLEAN::Out ParameterTakesPrecedence; + BOOLEAN::Out Sizeable; + }; + + // C++ wrapper for IfcDistributionControlElementType + struct IfcDistributionControlElementType : IfcDistributionElementType, ObjectHelper { IfcDistributionControlElementType() : Object("IfcDistributionControlElementType") {} + + }; + + // C++ wrapper for IfcSensorType + struct IfcSensorType : IfcDistributionControlElementType, ObjectHelper { IfcSensorType() : Object("IfcSensorType") {} + IfcSensorTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcAnnotationFillAreaOccurrence + struct IfcAnnotationFillAreaOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationFillAreaOccurrence() : Object("IfcAnnotationFillAreaOccurrence") {} + Maybe< Lazy< IfcPoint > > FillStyleTarget; + Maybe< IfcGlobalOrLocalEnum::Out > GlobalOrLocal; + }; + + // C++ wrapper for IfcWall + struct IfcWall : IfcBuildingElement, ObjectHelper { IfcWall() : Object("IfcWall") {} + + }; + + // C++ wrapper for IfcFurnishingElementType + struct IfcFurnishingElementType : IfcElementType, ObjectHelper { IfcFurnishingElementType() : Object("IfcFurnishingElementType") {} + + }; + + // C++ wrapper for IfcFurnitureType + struct IfcFurnitureType : IfcFurnishingElementType, ObjectHelper { IfcFurnitureType() : Object("IfcFurnitureType") {} + IfcAssemblyPlaceEnum::Out AssemblyPlace; + }; + + // C++ wrapper for IfcControllerType + struct IfcControllerType : IfcDistributionControlElementType, ObjectHelper { IfcControllerType() : Object("IfcControllerType") {} + IfcControllerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowFitting + struct IfcFlowFitting : IfcDistributionFlowElement, ObjectHelper { IfcFlowFitting() : Object("IfcFlowFitting") {} + + }; + + // C++ wrapper for IfcRepresentationContext + struct IfcRepresentationContext : ObjectHelper { IfcRepresentationContext() : Object("IfcRepresentationContext") {} + Maybe< IfcLabel::Out > ContextIdentifier; + Maybe< IfcLabel::Out > ContextType; + }; + + // C++ wrapper for IfcRepresentationMap + struct IfcRepresentationMap : ObjectHelper { IfcRepresentationMap() : Object("IfcRepresentationMap") {} + IfcAxis2Placement::Out MappingOrigin; + Lazy< IfcRepresentation > MappedRepresentation; + }; + + // C++ wrapper for IfcDirection + struct IfcDirection : IfcGeometricRepresentationItem, ObjectHelper { IfcDirection() : Object("IfcDirection") {} + ListOf< REAL, 2, 3 >::Out DirectionRatios; + }; + + // C++ wrapper for IfcDimensionCurveDirectedCallout + struct IfcDimensionCurveDirectedCallout : IfcDraughtingCallout, ObjectHelper { IfcDimensionCurveDirectedCallout() : Object("IfcDimensionCurveDirectedCallout") {} + + }; + + // C++ wrapper for IfcAngularDimension + struct IfcAngularDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcAngularDimension() : Object("IfcAngularDimension") {} + + }; + + // C++ wrapper for IfcWorkControl + struct IfcWorkControl : IfcControl, ObjectHelper { IfcWorkControl() : Object("IfcWorkControl") {} + IfcIdentifier::Out Identifier; + IfcDateTimeSelect::Out CreationDate; + Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > Creators; + Maybe< IfcLabel::Out > Purpose; + Maybe< IfcTimeMeasure::Out > Duration; + Maybe< IfcTimeMeasure::Out > TotalFloat; + IfcDateTimeSelect::Out StartTime; + Maybe< IfcDateTimeSelect::Out > FinishTime; + Maybe< IfcWorkControlTypeEnum::Out > WorkControlType; + Maybe< IfcLabel::Out > UserDefinedControlType; + }; + + // C++ wrapper for IfcWorkPlan + struct IfcWorkPlan : IfcWorkControl, ObjectHelper { IfcWorkPlan() : Object("IfcWorkPlan") {} + + }; + + // C++ wrapper for IfcSpatialStructureElementType + struct IfcSpatialStructureElementType : IfcElementType, ObjectHelper { IfcSpatialStructureElementType() : Object("IfcSpatialStructureElementType") {} + + }; + + // C++ wrapper for IfcSpaceType + struct IfcSpaceType : IfcSpatialStructureElementType, ObjectHelper { IfcSpaceType() : Object("IfcSpaceType") {} + IfcSpaceTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPort + struct IfcPort : IfcProduct, ObjectHelper { IfcPort() : Object("IfcPort") {} + + }; + + // C++ wrapper for IfcDistributionPort + struct IfcDistributionPort : IfcPort, ObjectHelper { IfcDistributionPort() : Object("IfcDistributionPort") {} + Maybe< IfcFlowDirectionEnum::Out > FlowDirection; + }; + + // C++ wrapper for IfcOrderAction + struct IfcOrderAction : IfcTask, ObjectHelper { IfcOrderAction() : Object("IfcOrderAction") {} + IfcIdentifier::Out ActionID; + }; + + // C++ wrapper for IfcBeam + struct IfcBeam : IfcBuildingElement, ObjectHelper { IfcBeam() : Object("IfcBeam") {} + + }; + + // C++ wrapper for IfcManifoldSolidBrep + struct IfcManifoldSolidBrep : IfcSolidModel, ObjectHelper { IfcManifoldSolidBrep() : Object("IfcManifoldSolidBrep") {} + Lazy< IfcClosedShell > Outer; + }; + + // C++ wrapper for IfcFacetedBrep + struct IfcFacetedBrep : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrep() : Object("IfcFacetedBrep") {} + + }; + + // C++ wrapper for IfcSurfaceStyleWithTextures + struct IfcSurfaceStyleWithTextures : ObjectHelper { IfcSurfaceStyleWithTextures() : Object("IfcSurfaceStyleWithTextures") {} + ListOf< Lazy< NotImplemented >, 1, 0 > Textures; + }; + + // C++ wrapper for IfcArbitraryClosedProfileDef + struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {} + Lazy< IfcCurve > OuterCurve; + }; + + // C++ wrapper for IfcHumidifierType + struct IfcHumidifierType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHumidifierType() : Object("IfcHumidifierType") {} + IfcHumidifierTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPolyLoop + struct IfcPolyLoop : IfcLoop, ObjectHelper { IfcPolyLoop() : Object("IfcPolyLoop") {} + ListOf< Lazy< IfcCartesianPoint >, 3, 0 > Polygon; + }; + + // C++ wrapper for IfcFlowFittingType + struct IfcFlowFittingType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowFittingType() : Object("IfcFlowFittingType") {} + + }; + + // C++ wrapper for IfcFillAreaStyleTiles + struct IfcFillAreaStyleTiles : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTiles() : Object("IfcFillAreaStyleTiles") {} + Lazy< IfcOneDirectionRepeatFactor > TilingPattern; + ListOf< IfcFillAreaStyleTileShapeSelect, 1, 0 >::Out Tiles; + IfcPositiveRatioMeasure::Out TilingScale; + }; + + // C++ wrapper for IfcVertex + struct IfcVertex : IfcTopologicalRepresentationItem, ObjectHelper { IfcVertex() : Object("IfcVertex") {} + + }; + + // C++ wrapper for IfcAnnotationFillArea + struct IfcAnnotationFillArea : IfcGeometricRepresentationItem, ObjectHelper { IfcAnnotationFillArea() : Object("IfcAnnotationFillArea") {} + Lazy< IfcCurve > OuterBoundary; + Maybe< ListOf< Lazy< IfcCurve >, 1, 0 > > InnerBoundaries; + }; + + // C++ wrapper for IfcPlate + struct IfcPlate : IfcBuildingElement, ObjectHelper { IfcPlate() : Object("IfcPlate") {} + + }; + + // C++ wrapper for IfcRightCircularCone + struct IfcRightCircularCone : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCone() : Object("IfcRightCircularCone") {} + IfcPositiveLengthMeasure::Out Height; + IfcPositiveLengthMeasure::Out BottomRadius; + }; + + // C++ wrapper for IfcSurface + struct IfcSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcSurface() : Object("IfcSurface") {} + + }; + + // C++ wrapper for IfcBoundedSurface + struct IfcBoundedSurface : IfcSurface, ObjectHelper { IfcBoundedSurface() : Object("IfcBoundedSurface") {} + + }; + + // C++ wrapper for IfcStructuralLoadGroup + struct IfcStructuralLoadGroup : IfcGroup, ObjectHelper { IfcStructuralLoadGroup() : Object("IfcStructuralLoadGroup") {} + IfcLoadGroupTypeEnum::Out PredefinedType; + IfcActionTypeEnum::Out ActionType; + IfcActionSourceTypeEnum::Out ActionSource; + Maybe< IfcPositiveRatioMeasure::Out > Coefficient; + Maybe< IfcLabel::Out > Purpose; + }; + + // C++ wrapper for IfcGeometricRepresentationContext + struct IfcGeometricRepresentationContext : IfcRepresentationContext, ObjectHelper { IfcGeometricRepresentationContext() : Object("IfcGeometricRepresentationContext") {} + IfcDimensionCount::Out CoordinateSpaceDimension; + Maybe< REAL::Out > Precision; + IfcAxis2Placement::Out WorldCoordinateSystem; + Maybe< Lazy< IfcDirection > > TrueNorth; + }; + + // C++ wrapper for IfcTubeBundleType + struct IfcTubeBundleType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTubeBundleType() : Object("IfcTubeBundleType") {} + IfcTubeBundleTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcStructuralPlanarAction + struct IfcStructuralPlanarAction : IfcStructuralAction, ObjectHelper { IfcStructuralPlanarAction() : Object("IfcStructuralPlanarAction") {} + IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; + }; + + // C++ wrapper for IfcHeatExchangerType + struct IfcHeatExchangerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHeatExchangerType() : Object("IfcHeatExchangerType") {} + IfcHeatExchangerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFaceOuterBound + struct IfcFaceOuterBound : IfcFaceBound, ObjectHelper { IfcFaceOuterBound() : Object("IfcFaceOuterBound") {} + + }; + + // C++ wrapper for IfcSphere + struct IfcSphere : IfcCsgPrimitive3D, ObjectHelper { IfcSphere() : Object("IfcSphere") {} + IfcPositiveLengthMeasure::Out Radius; + }; + + // C++ wrapper for IfcLightSourcePositional + struct IfcLightSourcePositional : IfcLightSource, ObjectHelper { IfcLightSourcePositional() : Object("IfcLightSourcePositional") {} + Lazy< IfcCartesianPoint > Position; + IfcPositiveLengthMeasure::Out Radius; + IfcReal::Out ConstantAttenuation; + IfcReal::Out DistanceAttenuation; + IfcReal::Out QuadricAttenuation; + }; + + // C++ wrapper for IfcStructuralPointAction + struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {} + + }; + + // C++ wrapper for IfcFlowSegmentType + struct IfcFlowSegmentType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowSegmentType() : Object("IfcFlowSegmentType") {} + + }; + + // C++ wrapper for IfcFireSuppressionTerminalType + struct IfcFireSuppressionTerminalType : IfcFlowTerminalType, ObjectHelper { IfcFireSuppressionTerminalType() : Object("IfcFireSuppressionTerminalType") {} + IfcFireSuppressionTerminalTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPropertySingleValue + struct IfcPropertySingleValue : IfcSimpleProperty, ObjectHelper { IfcPropertySingleValue() : Object("IfcPropertySingleValue") {} + Maybe< IfcValue::Out > NominalValue; + Maybe< IfcUnit::Out > Unit; + }; + + // C++ wrapper for IfcFaceBasedSurfaceModel + struct IfcFaceBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcFaceBasedSurfaceModel() : Object("IfcFaceBasedSurfaceModel") {} + ListOf< Lazy< IfcConnectedFaceSet >, 1, 0 > FbsmFaces; + }; + + // C++ wrapper for IfcAxis2Placement3D + struct IfcAxis2Placement3D : IfcPlacement, ObjectHelper { IfcAxis2Placement3D() : Object("IfcAxis2Placement3D") {} + Maybe< Lazy< IfcDirection > > Axis; + Maybe< Lazy< IfcDirection > > RefDirection; + }; + + // C++ wrapper for IfcStructuralResultGroup + struct IfcStructuralResultGroup : IfcGroup, ObjectHelper { IfcStructuralResultGroup() : Object("IfcStructuralResultGroup") {} + IfcAnalysisTheoryTypeEnum::Out TheoryType; + Maybe< Lazy< IfcStructuralLoadGroup > > ResultForLoadGroup; + BOOLEAN::Out IsLinear; + }; + + // C++ wrapper for IfcHalfSpaceSolid + struct IfcHalfSpaceSolid : IfcGeometricRepresentationItem, ObjectHelper { IfcHalfSpaceSolid() : Object("IfcHalfSpaceSolid") {} + Lazy< IfcSurface > BaseSurface; + BOOLEAN::Out AgreementFlag; + }; + + // C++ wrapper for IfcGasTerminalType + struct IfcGasTerminalType : IfcFlowTerminalType, ObjectHelper { IfcGasTerminalType() : Object("IfcGasTerminalType") {} + IfcGasTerminalTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcMember + struct IfcMember : IfcBuildingElement, ObjectHelper { IfcMember() : Object("IfcMember") {} + + }; + + // C++ wrapper for IfcPropertySet + struct IfcPropertySet : IfcPropertySetDefinition, ObjectHelper { IfcPropertySet() : Object("IfcPropertySet") {} + ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; + }; + + // C++ wrapper for IfcCondition + struct IfcCondition : IfcGroup, ObjectHelper { IfcCondition() : Object("IfcCondition") {} + + }; + + // C++ wrapper for IfcPropertyEnumeratedValue + struct IfcPropertyEnumeratedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyEnumeratedValue() : Object("IfcPropertyEnumeratedValue") {} + ListOf< IfcValue, 1, 0 >::Out EnumerationValues; + Maybe< Lazy< NotImplemented > > EnumerationReference; + }; + + // C++ wrapper for IfcDistributionChamberElementType + struct IfcDistributionChamberElementType : IfcDistributionFlowElementType, ObjectHelper { IfcDistributionChamberElementType() : Object("IfcDistributionChamberElementType") {} + IfcDistributionChamberElementTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcTextLiteralWithExtent + struct IfcTextLiteralWithExtent : IfcTextLiteral, ObjectHelper { IfcTextLiteralWithExtent() : Object("IfcTextLiteralWithExtent") {} + Lazy< IfcPlanarExtent > Extent; + IfcBoxAlignment::Out BoxAlignment; + }; + + // C++ wrapper for IfcFlowController + struct IfcFlowController : IfcDistributionFlowElement, ObjectHelper { IfcFlowController() : Object("IfcFlowController") {} + + }; + + // C++ wrapper for IfcElectricDistributionPoint + struct IfcElectricDistributionPoint : IfcFlowController, ObjectHelper { IfcElectricDistributionPoint() : Object("IfcElectricDistributionPoint") {} + IfcElectricDistributionPointFunctionEnum::Out DistributionPointFunction; + Maybe< IfcLabel::Out > UserDefinedFunction; + }; + + // C++ wrapper for IfcTransportElement + struct IfcTransportElement : IfcElement, ObjectHelper { IfcTransportElement() : Object("IfcTransportElement") {} + Maybe< IfcTransportElementTypeEnum::Out > OperationType; + Maybe< IfcMassMeasure::Out > CapacityByWeight; + Maybe< IfcCountMeasure::Out > CapacityByNumber; + }; + + // C++ wrapper for IfcAsset + struct IfcAsset : IfcGroup, ObjectHelper { IfcAsset() : Object("IfcAsset") {} + IfcIdentifier::Out AssetID; + Lazy< NotImplemented > OriginalValue; + Lazy< NotImplemented > CurrentValue; + Lazy< NotImplemented > TotalReplacementCost; + IfcActorSelect::Out Owner; + IfcActorSelect::Out User; + Lazy< NotImplemented > ResponsiblePerson; + Lazy< NotImplemented > IncorporationDate; + Lazy< NotImplemented > DepreciatedValue; + }; + + // C++ wrapper for IfcSweptAreaSolid + struct IfcSweptAreaSolid : IfcSolidModel, ObjectHelper { IfcSweptAreaSolid() : Object("IfcSweptAreaSolid") {} + Lazy< IfcProfileDef > SweptArea; + Lazy< IfcAxis2Placement3D > Position; + }; + + // C++ wrapper for IfcRevolvedAreaSolid + struct IfcRevolvedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcRevolvedAreaSolid() : Object("IfcRevolvedAreaSolid") {} + Lazy< IfcAxis1Placement > Axis; + IfcPlaneAngleMeasure::Out Angle; + }; + + // C++ wrapper for IfcFlowInstrumentType + struct IfcFlowInstrumentType : IfcDistributionControlElementType, ObjectHelper { IfcFlowInstrumentType() : Object("IfcFlowInstrumentType") {} + IfcFlowInstrumentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcEnergyConversionDevice + struct IfcEnergyConversionDevice : IfcDistributionFlowElement, ObjectHelper { IfcEnergyConversionDevice() : Object("IfcEnergyConversionDevice") {} + + }; + + // C++ wrapper for IfcSurfaceStyleShading + struct IfcSurfaceStyleShading : ObjectHelper { IfcSurfaceStyleShading() : Object("IfcSurfaceStyleShading") {} + Lazy< IfcColourRgb > SurfaceColour; + }; + + // C++ wrapper for IfcSurfaceStyleRendering + struct IfcSurfaceStyleRendering : IfcSurfaceStyleShading, ObjectHelper { IfcSurfaceStyleRendering() : Object("IfcSurfaceStyleRendering") {} + Maybe< IfcNormalisedRatioMeasure::Out > Transparency; + Maybe< IfcColourOrFactor::Out > DiffuseColour; + Maybe< IfcColourOrFactor::Out > TransmissionColour; + Maybe< IfcColourOrFactor::Out > DiffuseTransmissionColour; + Maybe< IfcColourOrFactor::Out > ReflectionColour; + Maybe< IfcColourOrFactor::Out > SpecularColour; + Maybe< IfcSpecularHighlightSelect::Out > SpecularHighlight; + IfcReflectanceMethodEnum::Out ReflectanceMethod; + }; + + // C++ wrapper for IfcBoilerType + struct IfcBoilerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcBoilerType() : Object("IfcBoilerType") {} + IfcBoilerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcBuildingElementProxy + struct IfcBuildingElementProxy : IfcBuildingElement, ObjectHelper { IfcBuildingElementProxy() : Object("IfcBuildingElementProxy") {} + Maybe< IfcElementCompositionEnum::Out > CompositionType; + }; + + // C++ wrapper for IfcLocalPlacement + struct IfcLocalPlacement : IfcObjectPlacement, ObjectHelper { IfcLocalPlacement() : Object("IfcLocalPlacement") {} + Maybe< Lazy< IfcObjectPlacement > > PlacementRelTo; + IfcAxis2Placement::Out RelativePlacement; + }; + + // C++ wrapper for IfcZone + struct IfcZone : IfcGroup, ObjectHelper { IfcZone() : Object("IfcZone") {} + + }; + + // C++ wrapper for IfcStair + struct IfcStair : IfcBuildingElement, ObjectHelper { IfcStair() : Object("IfcStair") {} + IfcStairTypeEnum::Out ShapeType; + }; + + // C++ wrapper for IfcWallStandardCase + struct IfcWallStandardCase : IfcWall, ObjectHelper { IfcWallStandardCase() : Object("IfcWallStandardCase") {} + + }; + + // C++ wrapper for IfcDiameterDimension + struct IfcDiameterDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcDiameterDimension() : Object("IfcDiameterDimension") {} + + }; + + // C++ wrapper for IfcDuctSegmentType + struct IfcDuctSegmentType : IfcFlowSegmentType, ObjectHelper { IfcDuctSegmentType() : Object("IfcDuctSegmentType") {} + IfcDuctSegmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcJunctionBoxType + struct IfcJunctionBoxType : IfcFlowFittingType, ObjectHelper { IfcJunctionBoxType() : Object("IfcJunctionBoxType") {} + IfcJunctionBoxTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCartesianTransformationOperator3DnonUniform + struct IfcCartesianTransformationOperator3DnonUniform : IfcCartesianTransformationOperator3D, ObjectHelper { IfcCartesianTransformationOperator3DnonUniform() : Object("IfcCartesianTransformationOperator3DnonUniform") {} + Maybe< REAL::Out > Scale2; + Maybe< REAL::Out > Scale3; + }; + + // C++ wrapper for IfcInventory + struct IfcInventory : IfcGroup, ObjectHelper { IfcInventory() : Object("IfcInventory") {} + IfcInventoryTypeEnum::Out InventoryType; + IfcActorSelect::Out Jurisdiction; + ListOf< Lazy< NotImplemented >, 1, 0 > ResponsiblePersons; + Lazy< NotImplemented > LastUpdateDate; + Maybe< Lazy< NotImplemented > > CurrentValue; + Maybe< Lazy< NotImplemented > > OriginalValue; + }; + + // C++ wrapper for IfcConditionCriterion + struct IfcConditionCriterion : IfcControl, ObjectHelper { IfcConditionCriterion() : Object("IfcConditionCriterion") {} + IfcConditionCriterionSelect::Out Criterion; + IfcDateTimeSelect::Out CriterionDateTime; }; // C++ wrapper for IfcConnectedFaceSet @@ -2404,39 +2927,37 @@ namespace IFC { }; - // C++ wrapper for IfcFacetedBrep - struct IfcFacetedBrep : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrep() : Object("IfcFacetedBrep") {} + // C++ wrapper for IfcDoor + struct IfcDoor : IfcBuildingElement, ObjectHelper { IfcDoor() : Object("IfcDoor") {} + Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; + Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; + }; + + // C++ wrapper for IfcBezierCurve + struct IfcBezierCurve : IfcBSplineCurve, ObjectHelper { IfcBezierCurve() : Object("IfcBezierCurve") {} }; - // C++ wrapper for IfcConic - struct IfcConic : IfcCurve, ObjectHelper { IfcConic() : Object("IfcConic") {} - IfcAxis2Placement::Out Position; + // C++ wrapper for IfcRationalBezierCurve + struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {} + ListOf< REAL, 2, 0 >::Out WeightsData; }; - // C++ wrapper for IfcCoveringType - struct IfcCoveringType : IfcBuildingElementType, ObjectHelper { IfcCoveringType() : Object("IfcCoveringType") {} - IfcCoveringTypeEnum::Out PredefinedType; + // C++ wrapper for IfcArbitraryProfileDefWithVoids + struct IfcArbitraryProfileDefWithVoids : IfcArbitraryClosedProfileDef, ObjectHelper { IfcArbitraryProfileDefWithVoids() : Object("IfcArbitraryProfileDefWithVoids") {} + ListOf< Lazy< IfcCurve >, 1, 0 > InnerCurves; }; - // C++ wrapper for IfcRoundedRectangleProfileDef - struct IfcRoundedRectangleProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRoundedRectangleProfileDef() : Object("IfcRoundedRectangleProfileDef") {} - IfcPositiveLengthMeasure::Out RoundingRadius; + // C++ wrapper for IfcBooleanResult + struct IfcBooleanResult : IfcGeometricRepresentationItem, ObjectHelper { IfcBooleanResult() : Object("IfcBooleanResult") {} + IfcBooleanOperator::Out Operator; + IfcBooleanOperand::Out FirstOperand; + IfcBooleanOperand::Out SecondOperand; }; - // C++ wrapper for IfcAirTerminalType - struct IfcAirTerminalType : IfcFlowTerminalType, ObjectHelper { IfcAirTerminalType() : Object("IfcAirTerminalType") {} - IfcAirTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFlowMovingDeviceType - struct IfcFlowMovingDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowMovingDeviceType() : Object("IfcFlowMovingDeviceType") {} - - }; - - // C++ wrapper for IfcCompressorType - struct IfcCompressorType : IfcFlowMovingDeviceType, ObjectHelper { IfcCompressorType() : Object("IfcCompressorType") {} - IfcCompressorTypeEnum::Out PredefinedType; + // C++ wrapper for IfcStackTerminalType + struct IfcStackTerminalType : IfcFlowTerminalType, ObjectHelper { IfcStackTerminalType() : Object("IfcStackTerminalType") {} + IfcStackTerminalTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcIShapeProfileDef @@ -2456,128 +2977,14 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcControllerType - struct IfcControllerType : IfcDistributionControlElementType, ObjectHelper { IfcControllerType() : Object("IfcControllerType") {} - IfcControllerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRailing - struct IfcRailing : IfcBuildingElement, ObjectHelper { IfcRailing() : Object("IfcRailing") {} - Maybe< IfcRailingTypeEnum::Out > PredefinedType; - }; - - // C++ wrapper for IfcGroup - struct IfcGroup : IfcObject, ObjectHelper { IfcGroup() : Object("IfcGroup") {} + // C++ wrapper for IfcEquipmentElement + struct IfcEquipmentElement : IfcElement, ObjectHelper { IfcEquipmentElement() : Object("IfcEquipmentElement") {} }; - // C++ wrapper for IfcAsset - struct IfcAsset : IfcGroup, ObjectHelper { IfcAsset() : Object("IfcAsset") {} - IfcIdentifier::Out AssetID; - Lazy< NotImplemented > OriginalValue; - Lazy< NotImplemented > CurrentValue; - Lazy< NotImplemented > TotalReplacementCost; - IfcActorSelect::Out Owner; - IfcActorSelect::Out User; - Lazy< NotImplemented > ResponsiblePerson; - Lazy< NotImplemented > IncorporationDate; - Lazy< NotImplemented > DepreciatedValue; - }; + // C++ wrapper for IfcClosedShell + struct IfcClosedShell : IfcConnectedFaceSet, ObjectHelper { IfcClosedShell() : Object("IfcClosedShell") {} - // C++ wrapper for IfcMaterialDefinitionRepresentation - struct IfcMaterialDefinitionRepresentation : IfcProductRepresentation, ObjectHelper { IfcMaterialDefinitionRepresentation() : Object("IfcMaterialDefinitionRepresentation") {} - Lazy< NotImplemented > RepresentedMaterial; - }; - - // C++ wrapper for IfcRailingType - struct IfcRailingType : IfcBuildingElementType, ObjectHelper { IfcRailingType() : Object("IfcRailingType") {} - IfcRailingTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcWall - struct IfcWall : IfcBuildingElement, ObjectHelper { IfcWall() : Object("IfcWall") {} - - }; - - // C++ wrapper for IfcStructuralPointConnection - struct IfcStructuralPointConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralPointConnection() : Object("IfcStructuralPointConnection") {} - - }; - - // C++ wrapper for IfcPropertyListValue - struct IfcPropertyListValue : IfcSimpleProperty, ObjectHelper { IfcPropertyListValue() : Object("IfcPropertyListValue") {} - ListOf< IfcValue, 1, 0 >::Out ListValues; - Maybe< IfcUnit::Out > Unit; - }; - - // C++ wrapper for IfcFurnitureStandard - struct IfcFurnitureStandard : IfcControl, ObjectHelper { IfcFurnitureStandard() : Object("IfcFurnitureStandard") {} - - }; - - // C++ wrapper for IfcElectricGeneratorType - struct IfcElectricGeneratorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricGeneratorType() : Object("IfcElectricGeneratorType") {} - IfcElectricGeneratorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDoor - struct IfcDoor : IfcBuildingElement, ObjectHelper { IfcDoor() : Object("IfcDoor") {} - Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; - Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; - }; - - // C++ wrapper for IfcStyledItem - struct IfcStyledItem : IfcRepresentationItem, ObjectHelper { IfcStyledItem() : Object("IfcStyledItem") {} - Maybe< Lazy< IfcRepresentationItem > > Item; - ListOf< Lazy< IfcPresentationStyleAssignment >, 1, 0 > Styles; - Maybe< IfcLabel::Out > Name; - }; - - // C++ wrapper for IfcAnnotationOccurrence - struct IfcAnnotationOccurrence : IfcStyledItem, ObjectHelper { IfcAnnotationOccurrence() : Object("IfcAnnotationOccurrence") {} - - }; - - // C++ wrapper for IfcAnnotationSymbolOccurrence - struct IfcAnnotationSymbolOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSymbolOccurrence() : Object("IfcAnnotationSymbolOccurrence") {} - - }; - - // C++ wrapper for IfcArbitraryClosedProfileDef - struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {} - Lazy< IfcCurve > OuterCurve; - }; - - // C++ wrapper for IfcArbitraryProfileDefWithVoids - struct IfcArbitraryProfileDefWithVoids : IfcArbitraryClosedProfileDef, ObjectHelper { IfcArbitraryProfileDefWithVoids() : Object("IfcArbitraryProfileDefWithVoids") {} - ListOf< Lazy< IfcCurve >, 1, 0 > InnerCurves; - }; - - // C++ wrapper for IfcLine - struct IfcLine : IfcCurve, ObjectHelper { IfcLine() : Object("IfcLine") {} - Lazy< IfcCartesianPoint > Pnt; - Lazy< IfcVector > Dir; - }; - - // C++ wrapper for IfcFlowSegmentType - struct IfcFlowSegmentType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowSegmentType() : Object("IfcFlowSegmentType") {} - - }; - - // C++ wrapper for IfcAirTerminalBoxType - struct IfcAirTerminalBoxType : IfcFlowControllerType, ObjectHelper { IfcAirTerminalBoxType() : Object("IfcAirTerminalBoxType") {} - IfcAirTerminalBoxTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPropertySingleValue - struct IfcPropertySingleValue : IfcSimpleProperty, ObjectHelper { IfcPropertySingleValue() : Object("IfcPropertySingleValue") {} - Maybe< IfcValue::Out > NominalValue; - Maybe< IfcUnit::Out > Unit; - }; - - // C++ wrapper for IfcAlarmType - struct IfcAlarmType : IfcDistributionControlElementType, ObjectHelper { IfcAlarmType() : Object("IfcAlarmType") {} - IfcAlarmTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcEllipseProfileDef @@ -2586,303 +2993,16 @@ namespace IFC { IfcPositiveLengthMeasure::Out SemiAxis2; }; - // C++ wrapper for IfcStair - struct IfcStair : IfcBuildingElement, ObjectHelper { IfcStair() : Object("IfcStair") {} - IfcStairTypeEnum::Out ShapeType; + // C++ wrapper for IfcPropertyBoundedValue + struct IfcPropertyBoundedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyBoundedValue() : Object("IfcPropertyBoundedValue") {} + Maybe< IfcValue::Out > UpperBoundValue; + Maybe< IfcValue::Out > LowerBoundValue; + Maybe< IfcUnit::Out > Unit; }; - // C++ wrapper for IfcSurfaceStyleShading - struct IfcSurfaceStyleShading : ObjectHelper { IfcSurfaceStyleShading() : Object("IfcSurfaceStyleShading") {} - Lazy< IfcColourRgb > SurfaceColour; - }; - - // C++ wrapper for IfcPumpType - struct IfcPumpType : IfcFlowMovingDeviceType, ObjectHelper { IfcPumpType() : Object("IfcPumpType") {} - IfcPumpTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDefinedSymbol - struct IfcDefinedSymbol : IfcGeometricRepresentationItem, ObjectHelper { IfcDefinedSymbol() : Object("IfcDefinedSymbol") {} - IfcDefinedSymbolSelect::Out Definition; - Lazy< IfcCartesianTransformationOperator2D > Target; - }; - - // C++ wrapper for IfcElementComponentType - struct IfcElementComponentType : IfcElementType, ObjectHelper { IfcElementComponentType() : Object("IfcElementComponentType") {} - - }; - - // C++ wrapper for IfcFastenerType - struct IfcFastenerType : IfcElementComponentType, ObjectHelper { IfcFastenerType() : Object("IfcFastenerType") {} - - }; - - // C++ wrapper for IfcMechanicalFastenerType - struct IfcMechanicalFastenerType : IfcFastenerType, ObjectHelper { IfcMechanicalFastenerType() : Object("IfcMechanicalFastenerType") {} - - }; - - // C++ wrapper for IfcFlowFitting - struct IfcFlowFitting : IfcDistributionFlowElement, ObjectHelper { IfcFlowFitting() : Object("IfcFlowFitting") {} - - }; - - // C++ wrapper for IfcLightSourceDirectional - struct IfcLightSourceDirectional : IfcLightSource, ObjectHelper { IfcLightSourceDirectional() : Object("IfcLightSourceDirectional") {} - Lazy< IfcDirection > Orientation; - }; - - // C++ wrapper for IfcSurfaceStyle - struct IfcSurfaceStyle : IfcPresentationStyle, ObjectHelper { IfcSurfaceStyle() : Object("IfcSurfaceStyle") {} - IfcSurfaceSide::Out Side; - ListOf< IfcSurfaceStyleElementSelect, 1, 5 >::Out Styles; - }; - - // C++ wrapper for IfcAnnotationSurface - struct IfcAnnotationSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcAnnotationSurface() : Object("IfcAnnotationSurface") {} - Lazy< IfcGeometricRepresentationItem > Item; - Maybe< Lazy< NotImplemented > > TextureCoordinates; - }; - - // C++ wrapper for IfcFlowController - struct IfcFlowController : IfcDistributionFlowElement, ObjectHelper { IfcFlowController() : Object("IfcFlowController") {} - - }; - - // C++ wrapper for IfcBuildingStorey - struct IfcBuildingStorey : IfcSpatialStructureElement, ObjectHelper { IfcBuildingStorey() : Object("IfcBuildingStorey") {} - Maybe< IfcLengthMeasure::Out > Elevation; - }; - - // C++ wrapper for IfcWorkControl - struct IfcWorkControl : IfcControl, ObjectHelper { IfcWorkControl() : Object("IfcWorkControl") {} - IfcIdentifier::Out Identifier; - IfcDateTimeSelect::Out CreationDate; - Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > Creators; - Maybe< IfcLabel::Out > Purpose; - Maybe< IfcTimeMeasure::Out > Duration; - Maybe< IfcTimeMeasure::Out > TotalFloat; - IfcDateTimeSelect::Out StartTime; - Maybe< IfcDateTimeSelect::Out > FinishTime; - Maybe< IfcWorkControlTypeEnum::Out > WorkControlType; - Maybe< IfcLabel::Out > UserDefinedControlType; - }; - - // C++ wrapper for IfcWorkSchedule - struct IfcWorkSchedule : IfcWorkControl, ObjectHelper { IfcWorkSchedule() : Object("IfcWorkSchedule") {} - - }; - - // C++ wrapper for IfcDuctSegmentType - struct IfcDuctSegmentType : IfcFlowSegmentType, ObjectHelper { IfcDuctSegmentType() : Object("IfcDuctSegmentType") {} - IfcDuctSegmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFace - struct IfcFace : IfcTopologicalRepresentationItem, ObjectHelper { IfcFace() : Object("IfcFace") {} - ListOf< Lazy< IfcFaceBound >, 1, 0 > Bounds; - }; - - // C++ wrapper for IfcStructuralSurfaceMember - struct IfcStructuralSurfaceMember : IfcStructuralMember, ObjectHelper { IfcStructuralSurfaceMember() : Object("IfcStructuralSurfaceMember") {} - IfcStructuralSurfaceTypeEnum::Out PredefinedType; - Maybe< IfcPositiveLengthMeasure::Out > Thickness; - }; - - // C++ wrapper for IfcStructuralSurfaceMemberVarying - struct IfcStructuralSurfaceMemberVarying : IfcStructuralSurfaceMember, ObjectHelper { IfcStructuralSurfaceMemberVarying() : Object("IfcStructuralSurfaceMemberVarying") {} - ListOf< IfcPositiveLengthMeasure, 2, 0 >::Out SubsequentThickness; - Lazy< NotImplemented > VaryingThicknessLocation; - }; - - // C++ wrapper for IfcFaceSurface - struct IfcFaceSurface : IfcFace, ObjectHelper { IfcFaceSurface() : Object("IfcFaceSurface") {} - Lazy< IfcSurface > FaceSurface; - BOOLEAN::Out SameSense; - }; - - // C++ wrapper for IfcCostSchedule - struct IfcCostSchedule : IfcControl, ObjectHelper { IfcCostSchedule() : Object("IfcCostSchedule") {} - Maybe< IfcActorSelect::Out > SubmittedBy; - Maybe< IfcActorSelect::Out > PreparedBy; - Maybe< IfcDateTimeSelect::Out > SubmittedOn; - Maybe< IfcLabel::Out > Status; - Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > TargetUsers; - Maybe< IfcDateTimeSelect::Out > UpdateDate; - IfcIdentifier::Out ID; - IfcCostScheduleTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPlanarExtent - struct IfcPlanarExtent : IfcGeometricRepresentationItem, ObjectHelper { IfcPlanarExtent() : Object("IfcPlanarExtent") {} - IfcLengthMeasure::Out SizeInX; - IfcLengthMeasure::Out SizeInY; - }; - - // C++ wrapper for IfcPlanarBox - struct IfcPlanarBox : IfcPlanarExtent, ObjectHelper { IfcPlanarBox() : Object("IfcPlanarBox") {} - IfcAxis2Placement::Out Placement; - }; - - // C++ wrapper for IfcColourSpecification - struct IfcColourSpecification : ObjectHelper { IfcColourSpecification() : Object("IfcColourSpecification") {} - Maybe< IfcLabel::Out > Name; - }; - - // C++ wrapper for IfcVector - struct IfcVector : IfcGeometricRepresentationItem, ObjectHelper { IfcVector() : Object("IfcVector") {} - Lazy< IfcDirection > Orientation; - IfcLengthMeasure::Out Magnitude; - }; - - // C++ wrapper for IfcBeam - struct IfcBeam : IfcBuildingElement, ObjectHelper { IfcBeam() : Object("IfcBeam") {} - - }; - - // C++ wrapper for IfcColourRgb - struct IfcColourRgb : IfcColourSpecification, ObjectHelper { IfcColourRgb() : Object("IfcColourRgb") {} - IfcNormalisedRatioMeasure::Out Red; - IfcNormalisedRatioMeasure::Out Green; - IfcNormalisedRatioMeasure::Out Blue; - }; - - // C++ wrapper for IfcStructuralPlanarAction - struct IfcStructuralPlanarAction : IfcStructuralAction, ObjectHelper { IfcStructuralPlanarAction() : Object("IfcStructuralPlanarAction") {} - IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; - }; - - // C++ wrapper for IfcStructuralPlanarActionVarying - struct IfcStructuralPlanarActionVarying : IfcStructuralPlanarAction, ObjectHelper { IfcStructuralPlanarActionVarying() : Object("IfcStructuralPlanarActionVarying") {} - Lazy< NotImplemented > VaryingAppliedLoadLocation; - ListOf< Lazy< NotImplemented >, 2, 0 > SubsequentAppliedLoads; - }; - - // C++ wrapper for IfcSite - struct IfcSite : IfcSpatialStructureElement, ObjectHelper { IfcSite() : Object("IfcSite") {} - Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLatitude; - Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLongitude; - Maybe< IfcLengthMeasure::Out > RefElevation; - Maybe< IfcLabel::Out > LandTitleNumber; - Maybe< Lazy< NotImplemented > > SiteAddress; - }; - - // C++ wrapper for IfcDiscreteAccessoryType - struct IfcDiscreteAccessoryType : IfcElementComponentType, ObjectHelper { IfcDiscreteAccessoryType() : Object("IfcDiscreteAccessoryType") {} - - }; - - // C++ wrapper for IfcVibrationIsolatorType - struct IfcVibrationIsolatorType : IfcDiscreteAccessoryType, ObjectHelper { IfcVibrationIsolatorType() : Object("IfcVibrationIsolatorType") {} - IfcVibrationIsolatorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcEvaporativeCoolerType - struct IfcEvaporativeCoolerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporativeCoolerType() : Object("IfcEvaporativeCoolerType") {} - IfcEvaporativeCoolerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDistributionChamberElementType - struct IfcDistributionChamberElementType : IfcDistributionFlowElementType, ObjectHelper { IfcDistributionChamberElementType() : Object("IfcDistributionChamberElementType") {} - IfcDistributionChamberElementTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFeatureElementAddition - struct IfcFeatureElementAddition : IfcFeatureElement, ObjectHelper { IfcFeatureElementAddition() : Object("IfcFeatureElementAddition") {} - - }; - - // C++ wrapper for IfcStructuredDimensionCallout - struct IfcStructuredDimensionCallout : IfcDraughtingCallout, ObjectHelper { IfcStructuredDimensionCallout() : Object("IfcStructuredDimensionCallout") {} - - }; - - // C++ wrapper for IfcCoolingTowerType - struct IfcCoolingTowerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoolingTowerType() : Object("IfcCoolingTowerType") {} - IfcCoolingTowerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcCenterLineProfileDef - struct IfcCenterLineProfileDef : IfcArbitraryOpenProfileDef, ObjectHelper { IfcCenterLineProfileDef() : Object("IfcCenterLineProfileDef") {} - IfcPositiveLengthMeasure::Out Thickness; - }; - - // C++ wrapper for IfcWindowStyle - struct IfcWindowStyle : IfcTypeProduct, ObjectHelper { IfcWindowStyle() : Object("IfcWindowStyle") {} - IfcWindowStyleConstructionEnum::Out ConstructionType; - IfcWindowStyleOperationEnum::Out OperationType; - BOOLEAN::Out ParameterTakesPrecedence; - BOOLEAN::Out Sizeable; - }; - - // C++ wrapper for IfcLightSourceGoniometric - struct IfcLightSourceGoniometric : IfcLightSource, ObjectHelper { IfcLightSourceGoniometric() : Object("IfcLightSourceGoniometric") {} - Lazy< IfcAxis2Placement3D > Position; - Maybe< Lazy< IfcColourRgb > > ColourAppearance; - IfcThermodynamicTemperatureMeasure::Out ColourTemperature; - IfcLuminousFluxMeasure::Out LuminousFlux; - IfcLightEmissionSourceEnum::Out LightEmissionSource; - IfcLightDistributionDataSourceSelect::Out LightDistributionDataSource; - }; - - // C++ wrapper for IfcTransformerType - struct IfcTransformerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTransformerType() : Object("IfcTransformerType") {} - IfcTransformerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcMemberType - struct IfcMemberType : IfcBuildingElementType, ObjectHelper { IfcMemberType() : Object("IfcMemberType") {} - IfcMemberTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcSurfaceOfLinearExtrusion - struct IfcSurfaceOfLinearExtrusion : IfcSweptSurface, ObjectHelper { IfcSurfaceOfLinearExtrusion() : Object("IfcSurfaceOfLinearExtrusion") {} - Lazy< IfcDirection > ExtrudedDirection; - IfcLengthMeasure::Out Depth; - }; - - // C++ wrapper for IfcMotorConnectionType - struct IfcMotorConnectionType : IfcEnergyConversionDeviceType, ObjectHelper { IfcMotorConnectionType() : Object("IfcMotorConnectionType") {} - IfcMotorConnectionTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFlowTreatmentDeviceType - struct IfcFlowTreatmentDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowTreatmentDeviceType() : Object("IfcFlowTreatmentDeviceType") {} - - }; - - // C++ wrapper for IfcDuctSilencerType - struct IfcDuctSilencerType : IfcFlowTreatmentDeviceType, ObjectHelper { IfcDuctSilencerType() : Object("IfcDuctSilencerType") {} - IfcDuctSilencerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFurnishingElementType - struct IfcFurnishingElementType : IfcElementType, ObjectHelper { IfcFurnishingElementType() : Object("IfcFurnishingElementType") {} - - }; - - // C++ wrapper for IfcSystemFurnitureElementType - struct IfcSystemFurnitureElementType : IfcFurnishingElementType, ObjectHelper { IfcSystemFurnitureElementType() : Object("IfcSystemFurnitureElementType") {} - - }; - - // C++ wrapper for IfcWasteTerminalType - struct IfcWasteTerminalType : IfcFlowTerminalType, ObjectHelper { IfcWasteTerminalType() : Object("IfcWasteTerminalType") {} - IfcWasteTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcBSplineCurve - struct IfcBSplineCurve : IfcBoundedCurve, ObjectHelper { IfcBSplineCurve() : Object("IfcBSplineCurve") {} - INTEGER::Out Degree; - ListOf< Lazy< IfcCartesianPoint >, 2, 0 > ControlPointsList; - IfcBSplineCurveForm::Out CurveForm; - LOGICAL::Out ClosedCurve; - LOGICAL::Out SelfIntersect; - }; - - // C++ wrapper for IfcBezierCurve - struct IfcBezierCurve : IfcBSplineCurve, ObjectHelper { IfcBezierCurve() : Object("IfcBezierCurve") {} - + // C++ wrapper for IfcCoveringType + struct IfcCoveringType : IfcBuildingElementType, ObjectHelper { IfcCoveringType() : Object("IfcCoveringType") {} + IfcCoveringTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcActuatorType @@ -2890,9 +3010,11 @@ namespace IFC { IfcActuatorTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcDistributionControlElement - struct IfcDistributionControlElement : IfcDistributionElement, ObjectHelper { IfcDistributionControlElement() : Object("IfcDistributionControlElement") {} - Maybe< IfcIdentifier::Out > ControlElementId; + // C++ wrapper for IfcOffsetCurve2D + struct IfcOffsetCurve2D : IfcCurve, ObjectHelper { IfcOffsetCurve2D() : Object("IfcOffsetCurve2D") {} + Lazy< IfcCurve > BasisCurve; + IfcLengthMeasure::Out Distance; + LOGICAL::Out SelfIntersect; }; // C++ wrapper for IfcAnnotation @@ -2900,112 +3022,39 @@ namespace IFC { }; - // C++ wrapper for IfcShellBasedSurfaceModel - struct IfcShellBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcShellBasedSurfaceModel() : Object("IfcShellBasedSurfaceModel") {} - ListOf< IfcShell, 1, 0 >::Out SbsmBoundary; - }; - - // C++ wrapper for IfcActionRequest - struct IfcActionRequest : IfcControl, ObjectHelper { IfcActionRequest() : Object("IfcActionRequest") {} - IfcIdentifier::Out RequestID; - }; - - // C++ wrapper for IfcExtrudedAreaSolid - struct IfcExtrudedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcExtrudedAreaSolid() : Object("IfcExtrudedAreaSolid") {} - Lazy< IfcDirection > ExtrudedDirection; - IfcPositiveLengthMeasure::Out Depth; - }; - - // C++ wrapper for IfcSystem - struct IfcSystem : IfcGroup, ObjectHelper { IfcSystem() : Object("IfcSystem") {} + // C++ wrapper for IfcDistributionChamberElement + struct IfcDistributionChamberElement : IfcDistributionFlowElement, ObjectHelper { IfcDistributionChamberElement() : Object("IfcDistributionChamberElement") {} }; - // C++ wrapper for IfcFillAreaStyleHatching - struct IfcFillAreaStyleHatching : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleHatching() : Object("IfcFillAreaStyleHatching") {} - Lazy< NotImplemented > HatchLineAppearance; - IfcHatchLineDistanceSelect::Out StartOfNextHatchLine; - Maybe< Lazy< IfcCartesianPoint > > PointOfReferenceHatchLine; - Maybe< Lazy< IfcCartesianPoint > > PatternStart; - IfcPlaneAngleMeasure::Out HatchLineAngle; + // C++ wrapper for IfcOffsetCurve3D + struct IfcOffsetCurve3D : IfcCurve, ObjectHelper { IfcOffsetCurve3D() : Object("IfcOffsetCurve3D") {} + Lazy< IfcCurve > BasisCurve; + IfcLengthMeasure::Out Distance; + LOGICAL::Out SelfIntersect; + Lazy< IfcDirection > RefDirection; }; - // C++ wrapper for IfcRelVoidsElement - struct IfcRelVoidsElement : IfcRelConnects, ObjectHelper { IfcRelVoidsElement() : Object("IfcRelVoidsElement") {} - Lazy< IfcElement > RelatingBuildingElement; - Lazy< IfcFeatureElementSubtraction > RelatedOpeningElement; + // C++ wrapper for IfcFooting + struct IfcFooting : IfcBuildingElement, ObjectHelper { IfcFooting() : Object("IfcFooting") {} + IfcFootingTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcSurfaceCurveSweptAreaSolid - struct IfcSurfaceCurveSweptAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcSurfaceCurveSweptAreaSolid() : Object("IfcSurfaceCurveSweptAreaSolid") {} - Lazy< IfcCurve > Directrix; - IfcParameterValue::Out StartParam; - IfcParameterValue::Out EndParam; - Lazy< IfcSurface > ReferenceSurface; + // C++ wrapper for IfcMappedItem + struct IfcMappedItem : IfcRepresentationItem, ObjectHelper { IfcMappedItem() : Object("IfcMappedItem") {} + Lazy< IfcRepresentationMap > MappingSource; + Lazy< IfcCartesianTransformationOperator > MappingTarget; }; - // C++ wrapper for IfcCartesianTransformationOperator3DnonUniform - struct IfcCartesianTransformationOperator3DnonUniform : IfcCartesianTransformationOperator3D, ObjectHelper { IfcCartesianTransformationOperator3DnonUniform() : Object("IfcCartesianTransformationOperator3DnonUniform") {} - Maybe< REAL::Out > Scale2; - Maybe< REAL::Out > Scale3; + // C++ wrapper for IfcTransformerType + struct IfcTransformerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTransformerType() : Object("IfcTransformerType") {} + IfcTransformerTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcCurtainWallType - struct IfcCurtainWallType : IfcBuildingElementType, ObjectHelper { IfcCurtainWallType() : Object("IfcCurtainWallType") {} - IfcCurtainWallTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcEquipmentStandard - struct IfcEquipmentStandard : IfcControl, ObjectHelper { IfcEquipmentStandard() : Object("IfcEquipmentStandard") {} - - }; - - // C++ wrapper for IfcFlowStorageDeviceType - struct IfcFlowStorageDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowStorageDeviceType() : Object("IfcFlowStorageDeviceType") {} - - }; - - // C++ wrapper for IfcDiameterDimension - struct IfcDiameterDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcDiameterDimension() : Object("IfcDiameterDimension") {} - - }; - - // C++ wrapper for IfcSwitchingDeviceType - struct IfcSwitchingDeviceType : IfcFlowControllerType, ObjectHelper { IfcSwitchingDeviceType() : Object("IfcSwitchingDeviceType") {} - IfcSwitchingDeviceTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcWindow - struct IfcWindow : IfcBuildingElement, ObjectHelper { IfcWindow() : Object("IfcWindow") {} - Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; - Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; - }; - - // C++ wrapper for IfcFlowTreatmentDevice - struct IfcFlowTreatmentDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowTreatmentDevice() : Object("IfcFlowTreatmentDevice") {} - - }; - - // C++ wrapper for IfcChillerType - struct IfcChillerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcChillerType() : Object("IfcChillerType") {} - IfcChillerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRectangleHollowProfileDef - struct IfcRectangleHollowProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRectangleHollowProfileDef() : Object("IfcRectangleHollowProfileDef") {} - IfcPositiveLengthMeasure::Out WallThickness; - Maybe< IfcPositiveLengthMeasure::Out > InnerFilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > OuterFilletRadius; - }; - - // C++ wrapper for IfcBoxedHalfSpace - struct IfcBoxedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcBoxedHalfSpace() : Object("IfcBoxedHalfSpace") {} - Lazy< IfcBoundingBox > Enclosure; - }; - - // C++ wrapper for IfcAxis2Placement2D - struct IfcAxis2Placement2D : IfcPlacement, ObjectHelper { IfcAxis2Placement2D() : Object("IfcAxis2Placement2D") {} - Maybe< Lazy< IfcDirection > > RefDirection; + // C++ wrapper for IfcRightCircularCylinder + struct IfcRightCircularCylinder : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCylinder() : Object("IfcRightCircularCylinder") {} + IfcPositiveLengthMeasure::Out Height; + IfcPositiveLengthMeasure::Out Radius; }; // C++ wrapper for IfcSpaceProgram @@ -3017,109 +3066,10 @@ namespace IFC { IfcAreaMeasure::Out StandardRequiredArea; }; - // C++ wrapper for IfcPoint - struct IfcPoint : IfcGeometricRepresentationItem, ObjectHelper { IfcPoint() : Object("IfcPoint") {} - - }; - - // C++ wrapper for IfcCartesianPoint - struct IfcCartesianPoint : IfcPoint, ObjectHelper { IfcCartesianPoint() : Object("IfcCartesianPoint") {} - ListOf< IfcLengthMeasure, 1, 3 >::Out Coordinates; - }; - - // C++ wrapper for IfcBoundedSurface - struct IfcBoundedSurface : IfcSurface, ObjectHelper { IfcBoundedSurface() : Object("IfcBoundedSurface") {} - - }; - - // C++ wrapper for IfcLoop - struct IfcLoop : IfcTopologicalRepresentationItem, ObjectHelper { IfcLoop() : Object("IfcLoop") {} - - }; - - // C++ wrapper for IfcPolyLoop - struct IfcPolyLoop : IfcLoop, ObjectHelper { IfcPolyLoop() : Object("IfcPolyLoop") {} - ListOf< Lazy< IfcCartesianPoint >, 3, 0 > Polygon; - }; - - // C++ wrapper for IfcTerminatorSymbol - struct IfcTerminatorSymbol : IfcAnnotationSymbolOccurrence, ObjectHelper { IfcTerminatorSymbol() : Object("IfcTerminatorSymbol") {} - Lazy< IfcAnnotationCurveOccurrence > AnnotatedCurve; - }; - - // C++ wrapper for IfcDimensionCurveTerminator - struct IfcDimensionCurveTerminator : IfcTerminatorSymbol, ObjectHelper { IfcDimensionCurveTerminator() : Object("IfcDimensionCurveTerminator") {} - IfcDimensionExtentUsage::Out Role; - }; - - // C++ wrapper for IfcTrapeziumProfileDef - struct IfcTrapeziumProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcTrapeziumProfileDef() : Object("IfcTrapeziumProfileDef") {} - IfcPositiveLengthMeasure::Out BottomXDim; - IfcPositiveLengthMeasure::Out TopXDim; - IfcPositiveLengthMeasure::Out YDim; - IfcLengthMeasure::Out TopXOffset; - }; - - // C++ wrapper for IfcRepresentationContext - struct IfcRepresentationContext : ObjectHelper { IfcRepresentationContext() : Object("IfcRepresentationContext") {} - Maybe< IfcLabel::Out > ContextIdentifier; - Maybe< IfcLabel::Out > ContextType; - }; - - // C++ wrapper for IfcGeometricRepresentationContext - struct IfcGeometricRepresentationContext : IfcRepresentationContext, ObjectHelper { IfcGeometricRepresentationContext() : Object("IfcGeometricRepresentationContext") {} - IfcDimensionCount::Out CoordinateSpaceDimension; - Maybe< REAL::Out > Precision; - IfcAxis2Placement::Out WorldCoordinateSystem; - Maybe< Lazy< IfcDirection > > TrueNorth; - }; - - // C++ wrapper for IfcCurveBoundedPlane - struct IfcCurveBoundedPlane : IfcBoundedSurface, ObjectHelper { IfcCurveBoundedPlane() : Object("IfcCurveBoundedPlane") {} - Lazy< IfcPlane > BasisSurface; - Lazy< IfcCurve > OuterBoundary; - ListOf< Lazy< IfcCurve >, 0, 0 > InnerBoundaries; - }; - - // C++ wrapper for IfcSIUnit - struct IfcSIUnit : IfcNamedUnit, ObjectHelper { IfcSIUnit() : Object("IfcSIUnit") {} - Maybe< IfcSIPrefix::Out > Prefix; - IfcSIUnitName::Out Name; - }; - - // C++ wrapper for IfcStructuralReaction - struct IfcStructuralReaction : IfcStructuralActivity, ObjectHelper { IfcStructuralReaction() : Object("IfcStructuralReaction") {} - - }; - - // C++ wrapper for IfcStructuralPointReaction - struct IfcStructuralPointReaction : IfcStructuralReaction, ObjectHelper { IfcStructuralPointReaction() : Object("IfcStructuralPointReaction") {} - - }; - - // C++ wrapper for IfcAxis1Placement - struct IfcAxis1Placement : IfcPlacement, ObjectHelper { IfcAxis1Placement() : Object("IfcAxis1Placement") {} - Maybe< Lazy< IfcDirection > > Axis; - }; - - // C++ wrapper for IfcElectricApplianceType - struct IfcElectricApplianceType : IfcFlowTerminalType, ObjectHelper { IfcElectricApplianceType() : Object("IfcElectricApplianceType") {} - IfcElectricApplianceTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcSensorType - struct IfcSensorType : IfcDistributionControlElementType, ObjectHelper { IfcSensorType() : Object("IfcSensorType") {} - IfcSensorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFurnishingElement - struct IfcFurnishingElement : IfcElement, ObjectHelper { IfcFurnishingElement() : Object("IfcFurnishingElement") {} - - }; - - // C++ wrapper for IfcProtectiveDeviceType - struct IfcProtectiveDeviceType : IfcFlowControllerType, ObjectHelper { IfcProtectiveDeviceType() : Object("IfcProtectiveDeviceType") {} - IfcProtectiveDeviceTypeEnum::Out PredefinedType; + // C++ wrapper for IfcAnnotationSurface + struct IfcAnnotationSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcAnnotationSurface() : Object("IfcAnnotationSurface") {} + Lazy< IfcGeometricRepresentationItem > Item; + Maybe< Lazy< NotImplemented > > TextureCoordinates; }; // C++ wrapper for IfcZShapeProfileDef @@ -3132,6 +3082,141 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius; }; + // C++ wrapper for IfcRectangleHollowProfileDef + struct IfcRectangleHollowProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRectangleHollowProfileDef() : Object("IfcRectangleHollowProfileDef") {} + IfcPositiveLengthMeasure::Out WallThickness; + Maybe< IfcPositiveLengthMeasure::Out > InnerFilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > OuterFilletRadius; + }; + + // C++ wrapper for IfcGeometricSet + struct IfcGeometricSet : IfcGeometricRepresentationItem, ObjectHelper { IfcGeometricSet() : Object("IfcGeometricSet") {} + ListOf< IfcGeometricSetSelect, 1, 0 >::Out Elements; + }; + + // C++ wrapper for IfcGeometricCurveSet + struct IfcGeometricCurveSet : IfcGeometricSet, ObjectHelper { IfcGeometricCurveSet() : Object("IfcGeometricCurveSet") {} + + }; + + // C++ wrapper for IfcArbitraryOpenProfileDef + struct IfcArbitraryOpenProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryOpenProfileDef() : Object("IfcArbitraryOpenProfileDef") {} + Lazy< IfcBoundedCurve > Curve; + }; + + // C++ wrapper for IfcFacetedBrepWithVoids + struct IfcFacetedBrepWithVoids : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrepWithVoids() : Object("IfcFacetedBrepWithVoids") {} + ListOf< Lazy< IfcClosedShell >, 1, 0 > Voids; + }; + + // C++ wrapper for IfcVector + struct IfcVector : IfcGeometricRepresentationItem, ObjectHelper { IfcVector() : Object("IfcVector") {} + Lazy< IfcDirection > Orientation; + IfcLengthMeasure::Out Magnitude; + }; + + // C++ wrapper for IfcServiceLife + struct IfcServiceLife : IfcControl, ObjectHelper { IfcServiceLife() : Object("IfcServiceLife") {} + IfcServiceLifeTypeEnum::Out ServiceLifeType; + IfcTimeMeasure::Out ServiceLifeDuration; + }; + + // C++ wrapper for IfcCurveBoundedPlane + struct IfcCurveBoundedPlane : IfcBoundedSurface, ObjectHelper { IfcCurveBoundedPlane() : Object("IfcCurveBoundedPlane") {} + Lazy< IfcPlane > BasisSurface; + Lazy< IfcCurve > OuterBoundary; + ListOf< Lazy< IfcCurve >, 0, 0 > InnerBoundaries; + }; + + // C++ wrapper for IfcCircle + struct IfcCircle : IfcConic, ObjectHelper { IfcCircle() : Object("IfcCircle") {} + IfcPositiveLengthMeasure::Out Radius; + }; + + // C++ wrapper for IfcVertexLoop + struct IfcVertexLoop : IfcLoop, ObjectHelper { IfcVertexLoop() : Object("IfcVertexLoop") {} + Lazy< IfcVertex > LoopVertex; + }; + + // C++ wrapper for IfcSurfaceCurveSweptAreaSolid + struct IfcSurfaceCurveSweptAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcSurfaceCurveSweptAreaSolid() : Object("IfcSurfaceCurveSweptAreaSolid") {} + Lazy< IfcCurve > Directrix; + IfcParameterValue::Out StartParam; + IfcParameterValue::Out EndParam; + Lazy< IfcSurface > ReferenceSurface; + }; + + // C++ wrapper for IfcConstructionEquipmentResource + struct IfcConstructionEquipmentResource : IfcConstructionResource, ObjectHelper { IfcConstructionEquipmentResource() : Object("IfcConstructionEquipmentResource") {} + + }; + + // C++ wrapper for IfcSectionedSpine + struct IfcSectionedSpine : IfcGeometricRepresentationItem, ObjectHelper { IfcSectionedSpine() : Object("IfcSectionedSpine") {} + Lazy< IfcCompositeCurve > SpineCurve; + ListOf< Lazy< IfcProfileDef >, 2, 0 > CrossSections; + ListOf< Lazy< IfcAxis2Placement3D >, 2, 0 > CrossSectionPositions; + }; + + // C++ wrapper for IfcPropertyReferenceValue + struct IfcPropertyReferenceValue : IfcSimpleProperty, ObjectHelper { IfcPropertyReferenceValue() : Object("IfcPropertyReferenceValue") {} + Maybe< IfcLabel::Out > UsageName; + IfcObjectReferenceSelect::Out PropertyReference; + }; + + // C++ wrapper for IfcSite + struct IfcSite : IfcSpatialStructureElement, ObjectHelper { IfcSite() : Object("IfcSite") {} + Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLatitude; + Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLongitude; + Maybe< IfcLengthMeasure::Out > RefElevation; + Maybe< IfcLabel::Out > LandTitleNumber; + Maybe< Lazy< NotImplemented > > SiteAddress; + }; + + // C++ wrapper for IfcPerformanceHistory + struct IfcPerformanceHistory : IfcControl, ObjectHelper { IfcPerformanceHistory() : Object("IfcPerformanceHistory") {} + IfcLabel::Out LifeCyclePhase; + }; + + // C++ wrapper for IfcPropertyTableValue + struct IfcPropertyTableValue : IfcSimpleProperty, ObjectHelper { IfcPropertyTableValue() : Object("IfcPropertyTableValue") {} + ListOf< IfcValue, 1, 0 >::Out DefiningValues; + ListOf< IfcValue, 1, 0 >::Out DefinedValues; + Maybe< IfcText::Out > Expression; + Maybe< IfcUnit::Out > DefiningUnit; + Maybe< IfcUnit::Out > DefinedUnit; + }; + + // C++ wrapper for IfcTransportElementType + struct IfcTransportElementType : IfcElementType, ObjectHelper { IfcTransportElementType() : Object("IfcTransportElementType") {} + IfcTransportElementTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPolygonalBoundedHalfSpace + struct IfcPolygonalBoundedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcPolygonalBoundedHalfSpace() : Object("IfcPolygonalBoundedHalfSpace") {} + Lazy< IfcAxis2Placement3D > Position; + Lazy< IfcBoundedCurve > PolygonalBoundary; + }; + + // C++ wrapper for IfcAxis2Placement2D + struct IfcAxis2Placement2D : IfcPlacement, ObjectHelper { IfcAxis2Placement2D() : Object("IfcAxis2Placement2D") {} + Maybe< Lazy< IfcDirection > > RefDirection; + }; + + // C++ wrapper for IfcFillAreaStyleHatching + struct IfcFillAreaStyleHatching : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleHatching() : Object("IfcFillAreaStyleHatching") {} + Lazy< NotImplemented > HatchLineAppearance; + IfcHatchLineDistanceSelect::Out StartOfNextHatchLine; + Maybe< Lazy< IfcCartesianPoint > > PointOfReferenceHatchLine; + Maybe< Lazy< IfcCartesianPoint > > PatternStart; + IfcPlaneAngleMeasure::Out HatchLineAngle; + }; + + // C++ wrapper for IfcFastener + struct IfcFastener : IfcElementComponent, ObjectHelper { IfcFastener() : Object("IfcFastener") {} + + }; + // C++ wrapper for IfcScheduleTimeControl struct IfcScheduleTimeControl : IfcControl, ObjectHelper { IfcScheduleTimeControl() : Object("IfcScheduleTimeControl") {} Maybe< IfcDateTimeSelect::Out > ActualStart; @@ -3154,37 +3239,158 @@ namespace IFC { Maybe< IfcPositiveRatioMeasure::Out > Completion; }; - // C++ wrapper for IfcRepresentationMap - struct IfcRepresentationMap : ObjectHelper { IfcRepresentationMap() : Object("IfcRepresentationMap") {} - IfcAxis2Placement::Out MappingOrigin; - Lazy< IfcRepresentation > MappedRepresentation; + // C++ wrapper for IfcElectricMotorType + struct IfcElectricMotorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricMotorType() : Object("IfcElectricMotorType") {} + IfcElectricMotorTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcClosedShell - struct IfcClosedShell : IfcConnectedFaceSet, ObjectHelper { IfcClosedShell() : Object("IfcClosedShell") {} + // C++ wrapper for IfcTimeSeriesSchedule + struct IfcTimeSeriesSchedule : IfcControl, ObjectHelper { IfcTimeSeriesSchedule() : Object("IfcTimeSeriesSchedule") {} + Maybe< ListOf< IfcDateTimeSelect, 1, 0 >::Out > ApplicableDates; + IfcTimeSeriesScheduleTypeEnum::Out TimeSeriesScheduleType; + Lazy< NotImplemented > TimeSeries; + }; + + // C++ wrapper for IfcPipeSegmentType + struct IfcPipeSegmentType : IfcFlowSegmentType, ObjectHelper { IfcPipeSegmentType() : Object("IfcPipeSegmentType") {} + IfcPipeSegmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowTerminal + struct IfcFlowTerminal : IfcDistributionFlowElement, ObjectHelper { IfcFlowTerminal() : Object("IfcFlowTerminal") {} }; - // C++ wrapper for IfcBuildingElementPart - struct IfcBuildingElementPart : IfcBuildingElementComponent, ObjectHelper { IfcBuildingElementPart() : Object("IfcBuildingElementPart") {} + // C++ wrapper for IfcWallType + struct IfcWallType : IfcBuildingElementType, ObjectHelper { IfcWallType() : Object("IfcWallType") {} + IfcWallTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCoilType + struct IfcCoilType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoilType() : Object("IfcCoilType") {} + IfcCoilTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFurnishingElement + struct IfcFurnishingElement : IfcElement, ObjectHelper { IfcFurnishingElement() : Object("IfcFurnishingElement") {} }; - // C++ wrapper for IfcBlock - struct IfcBlock : IfcCsgPrimitive3D, ObjectHelper { IfcBlock() : Object("IfcBlock") {} - IfcPositiveLengthMeasure::Out XLength; - IfcPositiveLengthMeasure::Out YLength; - IfcPositiveLengthMeasure::Out ZLength; + // C++ wrapper for IfcWasteTerminalType + struct IfcWasteTerminalType : IfcFlowTerminalType, ObjectHelper { IfcWasteTerminalType() : Object("IfcWasteTerminalType") {} + IfcWasteTerminalTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcLightFixtureType - struct IfcLightFixtureType : IfcFlowTerminalType, ObjectHelper { IfcLightFixtureType() : Object("IfcLightFixtureType") {} - IfcLightFixtureTypeEnum::Out PredefinedType; + // C++ wrapper for IfcWindow + struct IfcWindow : IfcBuildingElement, ObjectHelper { IfcWindow() : Object("IfcWindow") {} + Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; + Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; }; - // C++ wrapper for IfcOpeningElement - struct IfcOpeningElement : IfcFeatureElementSubtraction, ObjectHelper { IfcOpeningElement() : Object("IfcOpeningElement") {} + // C++ wrapper for IfcElectricFlowStorageDeviceType + struct IfcElectricFlowStorageDeviceType : IfcFlowStorageDeviceType, ObjectHelper { IfcElectricFlowStorageDeviceType() : Object("IfcElectricFlowStorageDeviceType") {} + IfcElectricFlowStorageDeviceTypeEnum::Out PredefinedType; + }; + // C++ wrapper for IfcRelAggregates + struct IfcRelAggregates : IfcRelDecomposes, ObjectHelper { IfcRelAggregates() : Object("IfcRelAggregates") {} + + }; + + // C++ wrapper for IfcRamp + struct IfcRamp : IfcBuildingElement, ObjectHelper { IfcRamp() : Object("IfcRamp") {} + IfcRampTypeEnum::Out ShapeType; + }; + + // C++ wrapper for IfcLinearDimension + struct IfcLinearDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcLinearDimension() : Object("IfcLinearDimension") {} + + }; + + // C++ wrapper for IfcElementarySurface + struct IfcElementarySurface : IfcSurface, ObjectHelper { IfcElementarySurface() : Object("IfcElementarySurface") {} + Lazy< IfcAxis2Placement3D > Position; + }; + + // C++ wrapper for IfcConstructionProductResource + struct IfcConstructionProductResource : IfcConstructionResource, ObjectHelper { IfcConstructionProductResource() : Object("IfcConstructionProductResource") {} + + }; + + // C++ wrapper for IfcCableSegmentType + struct IfcCableSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableSegmentType() : Object("IfcCableSegmentType") {} + IfcCableSegmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPath + struct IfcPath : IfcTopologicalRepresentationItem, ObjectHelper { IfcPath() : Object("IfcPath") {} + ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; + }; + + // C++ wrapper for IfcActor + struct IfcActor : IfcObject, ObjectHelper { IfcActor() : Object("IfcActor") {} + IfcActorSelect::Out TheActor; + }; + + // C++ wrapper for IfcOccupant + struct IfcOccupant : IfcActor, ObjectHelper { IfcOccupant() : Object("IfcOccupant") {} + IfcOccupantTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcSwitchingDeviceType + struct IfcSwitchingDeviceType : IfcFlowControllerType, ObjectHelper { IfcSwitchingDeviceType() : Object("IfcSwitchingDeviceType") {} + IfcSwitchingDeviceTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcSweptSurface + struct IfcSweptSurface : IfcSurface, ObjectHelper { IfcSweptSurface() : Object("IfcSweptSurface") {} + Lazy< IfcProfileDef > SweptCurve; + Lazy< IfcAxis2Placement3D > Position; + }; + + // C++ wrapper for IfcSurfaceOfLinearExtrusion + struct IfcSurfaceOfLinearExtrusion : IfcSweptSurface, ObjectHelper { IfcSurfaceOfLinearExtrusion() : Object("IfcSurfaceOfLinearExtrusion") {} + Lazy< IfcDirection > ExtrudedDirection; + IfcLengthMeasure::Out Depth; + }; + + // C++ wrapper for IfcShellBasedSurfaceModel + struct IfcShellBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcShellBasedSurfaceModel() : Object("IfcShellBasedSurfaceModel") {} + ListOf< IfcShell, 1, 0 >::Out SbsmBoundary; + }; + + // C++ wrapper for IfcBuilding + struct IfcBuilding : IfcSpatialStructureElement, ObjectHelper { IfcBuilding() : Object("IfcBuilding") {} + Maybe< IfcLengthMeasure::Out > ElevationOfRefHeight; + Maybe< IfcLengthMeasure::Out > ElevationOfTerrain; + Maybe< Lazy< NotImplemented > > BuildingAddress; + }; + + // C++ wrapper for IfcSIUnit + struct IfcSIUnit : IfcNamedUnit, ObjectHelper { IfcSIUnit() : Object("IfcSIUnit") {} + Maybe< IfcSIPrefix::Out > Prefix; + IfcSIUnitName::Out Name; + }; + + // C++ wrapper for IfcDiscreteAccessory + struct IfcDiscreteAccessory : IfcElementComponent, ObjectHelper { IfcDiscreteAccessory() : Object("IfcDiscreteAccessory") {} + + }; + + // C++ wrapper for IfcSystemFurnitureElementType + struct IfcSystemFurnitureElementType : IfcFurnishingElementType, ObjectHelper { IfcSystemFurnitureElementType() : Object("IfcSystemFurnitureElementType") {} + + }; + + // C++ wrapper for IfcElementAssembly + struct IfcElementAssembly : IfcElement, ObjectHelper { IfcElementAssembly() : Object("IfcElementAssembly") {} + Maybe< IfcAssemblyPlaceEnum::Out > AssemblyPlace; + IfcElementAssemblyTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCoolingTowerType + struct IfcCoolingTowerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoolingTowerType() : Object("IfcCoolingTowerType") {} + IfcCoolingTowerTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcLightSourceSpot @@ -3195,180 +3401,20 @@ namespace IFC { IfcPositivePlaneAngleMeasure::Out BeamWidthAngle; }; - // C++ wrapper for IfcTendonAnchor - struct IfcTendonAnchor : IfcReinforcingElement, ObjectHelper { IfcTendonAnchor() : Object("IfcTendonAnchor") {} - + // C++ wrapper for IfcEvaporatorType + struct IfcEvaporatorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporatorType() : Object("IfcEvaporatorType") {} + IfcEvaporatorTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcElectricFlowStorageDeviceType - struct IfcElectricFlowStorageDeviceType : IfcFlowStorageDeviceType, ObjectHelper { IfcElectricFlowStorageDeviceType() : Object("IfcElectricFlowStorageDeviceType") {} - IfcElectricFlowStorageDeviceTypeEnum::Out PredefinedType; + // C++ wrapper for IfcSpaceHeaterType + struct IfcSpaceHeaterType : IfcEnergyConversionDeviceType, ObjectHelper { IfcSpaceHeaterType() : Object("IfcSpaceHeaterType") {} + IfcSpaceHeaterTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcSphere - struct IfcSphere : IfcCsgPrimitive3D, ObjectHelper { IfcSphere() : Object("IfcSphere") {} - IfcPositiveLengthMeasure::Out Radius; - }; - - // C++ wrapper for IfcDamperType - struct IfcDamperType : IfcFlowControllerType, ObjectHelper { IfcDamperType() : Object("IfcDamperType") {} - IfcDamperTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcProjectOrderRecord - struct IfcProjectOrderRecord : IfcControl, ObjectHelper { IfcProjectOrderRecord() : Object("IfcProjectOrderRecord") {} - ListOf< Lazy< NotImplemented >, 1, 0 > Records; - IfcProjectOrderRecordTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDistributionChamberElement - struct IfcDistributionChamberElement : IfcDistributionFlowElement, ObjectHelper { IfcDistributionChamberElement() : Object("IfcDistributionChamberElement") {} - - }; - - // C++ wrapper for IfcMechanicalFastener - struct IfcMechanicalFastener : IfcFastener, ObjectHelper { IfcMechanicalFastener() : Object("IfcMechanicalFastener") {} - Maybe< IfcPositiveLengthMeasure::Out > NominalDiameter; - Maybe< IfcPositiveLengthMeasure::Out > NominalLength; - }; - - // C++ wrapper for IfcRectangularTrimmedSurface - struct IfcRectangularTrimmedSurface : IfcBoundedSurface, ObjectHelper { IfcRectangularTrimmedSurface() : Object("IfcRectangularTrimmedSurface") {} - Lazy< IfcSurface > BasisSurface; - IfcParameterValue::Out U1; - IfcParameterValue::Out V1; - IfcParameterValue::Out U2; - IfcParameterValue::Out V2; - BOOLEAN::Out Usense; - BOOLEAN::Out Vsense; - }; - - // C++ wrapper for IfcZone - struct IfcZone : IfcGroup, ObjectHelper { IfcZone() : Object("IfcZone") {} - - }; - - // C++ wrapper for IfcFanType - struct IfcFanType : IfcFlowMovingDeviceType, ObjectHelper { IfcFanType() : Object("IfcFanType") {} - IfcFanTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcGeometricSet - struct IfcGeometricSet : IfcGeometricRepresentationItem, ObjectHelper { IfcGeometricSet() : Object("IfcGeometricSet") {} - ListOf< IfcGeometricSetSelect, 1, 0 >::Out Elements; - }; - - // C++ wrapper for IfcFillAreaStyleTiles - struct IfcFillAreaStyleTiles : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTiles() : Object("IfcFillAreaStyleTiles") {} - Lazy< IfcOneDirectionRepeatFactor > TilingPattern; - ListOf< IfcFillAreaStyleTileShapeSelect, 1, 0 >::Out Tiles; - IfcPositiveRatioMeasure::Out TilingScale; - }; - - // C++ wrapper for IfcCableSegmentType - struct IfcCableSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableSegmentType() : Object("IfcCableSegmentType") {} - IfcCableSegmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRelOverridesProperties - struct IfcRelOverridesProperties : IfcRelDefinesByProperties, ObjectHelper { IfcRelOverridesProperties() : Object("IfcRelOverridesProperties") {} - ListOf< Lazy< IfcProperty >, 1, 0 > OverridingProperties; - }; - - // C++ wrapper for IfcMeasureWithUnit - struct IfcMeasureWithUnit : ObjectHelper { IfcMeasureWithUnit() : Object("IfcMeasureWithUnit") {} - IfcValue::Out ValueComponent; - IfcUnit::Out UnitComponent; - }; - - // C++ wrapper for IfcSlabType - struct IfcSlabType : IfcBuildingElementType, ObjectHelper { IfcSlabType() : Object("IfcSlabType") {} - IfcSlabTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcServiceLife - struct IfcServiceLife : IfcControl, ObjectHelper { IfcServiceLife() : Object("IfcServiceLife") {} - IfcServiceLifeTypeEnum::Out ServiceLifeType; - IfcTimeMeasure::Out ServiceLifeDuration; - }; - - // C++ wrapper for IfcFurnitureType - struct IfcFurnitureType : IfcFurnishingElementType, ObjectHelper { IfcFurnitureType() : Object("IfcFurnitureType") {} - IfcAssemblyPlaceEnum::Out AssemblyPlace; - }; - - // C++ wrapper for IfcCostItem - struct IfcCostItem : IfcControl, ObjectHelper { IfcCostItem() : Object("IfcCostItem") {} - - }; - - // C++ wrapper for IfcReinforcingMesh - struct IfcReinforcingMesh : IfcReinforcingElement, ObjectHelper { IfcReinforcingMesh() : Object("IfcReinforcingMesh") {} - Maybe< IfcPositiveLengthMeasure::Out > MeshLength; - Maybe< IfcPositiveLengthMeasure::Out > MeshWidth; - IfcPositiveLengthMeasure::Out LongitudinalBarNominalDiameter; - IfcPositiveLengthMeasure::Out TransverseBarNominalDiameter; - IfcAreaMeasure::Out LongitudinalBarCrossSectionArea; - IfcAreaMeasure::Out TransverseBarCrossSectionArea; - IfcPositiveLengthMeasure::Out LongitudinalBarSpacing; - IfcPositiveLengthMeasure::Out TransverseBarSpacing; - }; - - // C++ wrapper for IfcFacetedBrepWithVoids - struct IfcFacetedBrepWithVoids : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrepWithVoids() : Object("IfcFacetedBrepWithVoids") {} - ListOf< Lazy< IfcClosedShell >, 1, 0 > Voids; - }; - - // C++ wrapper for IfcGasTerminalType - struct IfcGasTerminalType : IfcFlowTerminalType, ObjectHelper { IfcGasTerminalType() : Object("IfcGasTerminalType") {} - IfcGasTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPile - struct IfcPile : IfcBuildingElement, ObjectHelper { IfcPile() : Object("IfcPile") {} - IfcPileTypeEnum::Out PredefinedType; - Maybe< IfcPileConstructionEnum::Out > ConstructionType; - }; - - // C++ wrapper for IfcFillAreaStyleTileSymbolWithStyle - struct IfcFillAreaStyleTileSymbolWithStyle : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTileSymbolWithStyle() : Object("IfcFillAreaStyleTileSymbolWithStyle") {} - Lazy< IfcAnnotationSymbolOccurrence > Symbol; - }; - - // C++ wrapper for IfcConstructionMaterialResource - struct IfcConstructionMaterialResource : IfcConstructionResource, ObjectHelper { IfcConstructionMaterialResource() : Object("IfcConstructionMaterialResource") {} - Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > Suppliers; - Maybe< IfcRatioMeasure::Out > UsageRatio; - }; - - // C++ wrapper for IfcAnnotationCurveOccurrence - struct IfcAnnotationCurveOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationCurveOccurrence() : Object("IfcAnnotationCurveOccurrence") {} - - }; - - // C++ wrapper for IfcDimensionCurve - struct IfcDimensionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcDimensionCurve() : Object("IfcDimensionCurve") {} - - }; - - // C++ wrapper for IfcGeometricCurveSet - struct IfcGeometricCurveSet : IfcGeometricSet, ObjectHelper { IfcGeometricCurveSet() : Object("IfcGeometricCurveSet") {} - - }; - - // C++ wrapper for IfcRelAggregates - struct IfcRelAggregates : IfcRelDecomposes, ObjectHelper { IfcRelAggregates() : Object("IfcRelAggregates") {} - - }; - - // C++ wrapper for IfcFaceBasedSurfaceModel - struct IfcFaceBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcFaceBasedSurfaceModel() : Object("IfcFaceBasedSurfaceModel") {} - ListOf< Lazy< IfcConnectedFaceSet >, 1, 0 > FbsmFaces; - }; - - // C++ wrapper for IfcEnergyConversionDevice - struct IfcEnergyConversionDevice : IfcDistributionFlowElement, ObjectHelper { IfcEnergyConversionDevice() : Object("IfcEnergyConversionDevice") {} - + // C++ wrapper for IfcElementQuantity + struct IfcElementQuantity : IfcPropertySetDefinition, ObjectHelper { IfcElementQuantity() : Object("IfcElementQuantity") {} + Maybe< IfcLabel::Out > MethodOfMeasurement; + ListOf< Lazy< NotImplemented >, 1, 0 > Quantities; }; // C++ wrapper for IfcRampFlight @@ -3376,14 +3422,42 @@ namespace IFC { }; - // C++ wrapper for IfcVertexLoop - struct IfcVertexLoop : IfcLoop, ObjectHelper { IfcVertexLoop() : Object("IfcVertexLoop") {} - Lazy< IfcVertex > LoopVertex; + // C++ wrapper for IfcConversionBasedUnit + struct IfcConversionBasedUnit : IfcNamedUnit, ObjectHelper { IfcConversionBasedUnit() : Object("IfcConversionBasedUnit") {} + IfcLabel::Out Name; + Lazy< IfcMeasureWithUnit > ConversionFactor; }; - // C++ wrapper for IfcPlate - struct IfcPlate : IfcBuildingElement, ObjectHelper { IfcPlate() : Object("IfcPlate") {} + // C++ wrapper for IfcExtrudedAreaSolid + struct IfcExtrudedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcExtrudedAreaSolid() : Object("IfcExtrudedAreaSolid") {} + Lazy< IfcDirection > ExtrudedDirection; + IfcPositiveLengthMeasure::Out Depth; + }; + // C++ wrapper for IfcProjectOrder + struct IfcProjectOrder : IfcControl, ObjectHelper { IfcProjectOrder() : Object("IfcProjectOrder") {} + IfcIdentifier::Out ID; + IfcProjectOrderTypeEnum::Out PredefinedType; + Maybe< IfcLabel::Out > Status; + }; + + // C++ wrapper for IfcBooleanClippingResult + struct IfcBooleanClippingResult : IfcBooleanResult, ObjectHelper { IfcBooleanClippingResult() : Object("IfcBooleanClippingResult") {} + + }; + + // C++ wrapper for IfcReinforcingBar + struct IfcReinforcingBar : IfcReinforcingElement, ObjectHelper { IfcReinforcingBar() : Object("IfcReinforcingBar") {} + IfcPositiveLengthMeasure::Out NominalDiameter; + IfcAreaMeasure::Out CrossSectionArea; + Maybe< IfcPositiveLengthMeasure::Out > BarLength; + IfcReinforcingBarRoleEnum::Out BarRole; + Maybe< IfcReinforcingBarSurfaceEnum::Out > BarSurface; + }; + + // C++ wrapper for IfcCenterLineProfileDef + struct IfcCenterLineProfileDef : IfcArbitraryOpenProfileDef, ObjectHelper { IfcCenterLineProfileDef() : Object("IfcCenterLineProfileDef") {} + IfcPositiveLengthMeasure::Out Thickness; }; // C++ wrapper for IfcUShapeProfileDef @@ -3398,46 +3472,138 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; }; - // C++ wrapper for IfcFaceBound - struct IfcFaceBound : IfcTopologicalRepresentationItem, ObjectHelper { IfcFaceBound() : Object("IfcFaceBound") {} - Lazy< IfcLoop > Bound; - BOOLEAN::Out Orientation; + // C++ wrapper for IfcBoundingBox + struct IfcBoundingBox : IfcGeometricRepresentationItem, ObjectHelper { IfcBoundingBox() : Object("IfcBoundingBox") {} + Lazy< IfcCartesianPoint > Corner; + IfcPositiveLengthMeasure::Out XDim; + IfcPositiveLengthMeasure::Out YDim; + IfcPositiveLengthMeasure::Out ZDim; }; - // C++ wrapper for IfcFaceOuterBound - struct IfcFaceOuterBound : IfcFaceBound, ObjectHelper { IfcFaceOuterBound() : Object("IfcFaceOuterBound") {} + // C++ wrapper for IfcWindowStyle + struct IfcWindowStyle : IfcTypeProduct, ObjectHelper { IfcWindowStyle() : Object("IfcWindowStyle") {} + IfcWindowStyleConstructionEnum::Out ConstructionType; + IfcWindowStyleOperationEnum::Out OperationType; + BOOLEAN::Out ParameterTakesPrecedence; + BOOLEAN::Out Sizeable; + }; + + // C++ wrapper for IfcMemberType + struct IfcMemberType : IfcBuildingElementType, ObjectHelper { IfcMemberType() : Object("IfcMemberType") {} + IfcMemberTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcLightFixtureType + struct IfcLightFixtureType : IfcFlowTerminalType, ObjectHelper { IfcLightFixtureType() : Object("IfcLightFixtureType") {} + IfcLightFixtureTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowStorageDevice + struct IfcFlowStorageDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowStorageDevice() : Object("IfcFlowStorageDevice") {} }; - // C++ wrapper for IfcOneDirectionRepeatFactor - struct IfcOneDirectionRepeatFactor : IfcGeometricRepresentationItem, ObjectHelper { IfcOneDirectionRepeatFactor() : Object("IfcOneDirectionRepeatFactor") {} - Lazy< IfcVector > RepeatFactor; - }; - - // C++ wrapper for IfcBoilerType - struct IfcBoilerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcBoilerType() : Object("IfcBoilerType") {} - IfcBoilerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcConstructionEquipmentResource - struct IfcConstructionEquipmentResource : IfcConstructionResource, ObjectHelper { IfcConstructionEquipmentResource() : Object("IfcConstructionEquipmentResource") {} + // C++ wrapper for IfcTopologyRepresentation + struct IfcTopologyRepresentation : IfcShapeModel, ObjectHelper { IfcTopologyRepresentation() : Object("IfcTopologyRepresentation") {} }; - // C++ wrapper for IfcComplexProperty - struct IfcComplexProperty : IfcProperty, ObjectHelper { IfcComplexProperty() : Object("IfcComplexProperty") {} - IfcIdentifier::Out UsageName; - ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; + // C++ wrapper for IfcRelDefinesByProperties + struct IfcRelDefinesByProperties : IfcRelDefines, ObjectHelper { IfcRelDefinesByProperties() : Object("IfcRelDefinesByProperties") {} + Lazy< IfcPropertySetDefinition > RelatingPropertyDefinition; }; - // C++ wrapper for IfcFooting - struct IfcFooting : IfcBuildingElement, ObjectHelper { IfcFooting() : Object("IfcFooting") {} - IfcFootingTypeEnum::Out PredefinedType; + // C++ wrapper for IfcRelOverridesProperties + struct IfcRelOverridesProperties : IfcRelDefinesByProperties, ObjectHelper { IfcRelOverridesProperties() : Object("IfcRelOverridesProperties") {} + ListOf< Lazy< IfcProperty >, 1, 0 > OverridingProperties; }; - // C++ wrapper for IfcConstructionProductResource - struct IfcConstructionProductResource : IfcConstructionResource, ObjectHelper { IfcConstructionProductResource() : Object("IfcConstructionProductResource") {} + // C++ wrapper for IfcStairFlightType + struct IfcStairFlightType : IfcBuildingElementType, ObjectHelper { IfcStairFlightType() : Object("IfcStairFlightType") {} + IfcStairFlightTypeEnum::Out PredefinedType; + }; + // C++ wrapper for IfcCircleProfileDef + struct IfcCircleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCircleProfileDef() : Object("IfcCircleProfileDef") {} + IfcPositiveLengthMeasure::Out Radius; + }; + + // C++ wrapper for IfcSweptDiskSolid + struct IfcSweptDiskSolid : IfcSolidModel, ObjectHelper { IfcSweptDiskSolid() : Object("IfcSweptDiskSolid") {} + Lazy< IfcCurve > Directrix; + IfcPositiveLengthMeasure::Out Radius; + Maybe< IfcPositiveLengthMeasure::Out > InnerRadius; + IfcParameterValue::Out StartParam; + IfcParameterValue::Out EndParam; + }; + + // C++ wrapper for IfcStructuralPlanarActionVarying + struct IfcStructuralPlanarActionVarying : IfcStructuralPlanarAction, ObjectHelper { IfcStructuralPlanarActionVarying() : Object("IfcStructuralPlanarActionVarying") {} + Lazy< NotImplemented > VaryingAppliedLoadLocation; + ListOf< Lazy< NotImplemented >, 2, 0 > SubsequentAppliedLoads; + }; + + // C++ wrapper for IfcValveType + struct IfcValveType : IfcFlowControllerType, ObjectHelper { IfcValveType() : Object("IfcValveType") {} + IfcValveTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcUnitAssignment + struct IfcUnitAssignment : ObjectHelper { IfcUnitAssignment() : Object("IfcUnitAssignment") {} + ListOf< IfcUnit, 1, 0 >::Out Units; + }; + + // C++ wrapper for IfcVirtualElement + struct IfcVirtualElement : IfcElement, ObjectHelper { IfcVirtualElement() : Object("IfcVirtualElement") {} + + }; + + // C++ wrapper for IfcStructuralCurveConnection + struct IfcStructuralCurveConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralCurveConnection() : Object("IfcStructuralCurveConnection") {} + + }; + + // C++ wrapper for IfcAirTerminalType + struct IfcAirTerminalType : IfcFlowTerminalType, ObjectHelper { IfcAirTerminalType() : Object("IfcAirTerminalType") {} + IfcAirTerminalTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowTreatmentDeviceType + struct IfcFlowTreatmentDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowTreatmentDeviceType() : Object("IfcFlowTreatmentDeviceType") {} + + }; + + // C++ wrapper for IfcRoof + struct IfcRoof : IfcBuildingElement, ObjectHelper { IfcRoof() : Object("IfcRoof") {} + IfcRoofTypeEnum::Out ShapeType; + }; + + // C++ wrapper for IfcElectricTimeControlType + struct IfcElectricTimeControlType : IfcFlowControllerType, ObjectHelper { IfcElectricTimeControlType() : Object("IfcElectricTimeControlType") {} + IfcElectricTimeControlTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPile + struct IfcPile : IfcBuildingElement, ObjectHelper { IfcPile() : Object("IfcPile") {} + IfcPileTypeEnum::Out PredefinedType; + Maybe< IfcPileConstructionEnum::Out > ConstructionType; + }; + + // C++ wrapper for IfcCostSchedule + struct IfcCostSchedule : IfcControl, ObjectHelper { IfcCostSchedule() : Object("IfcCostSchedule") {} + Maybe< IfcActorSelect::Out > SubmittedBy; + Maybe< IfcActorSelect::Out > PreparedBy; + Maybe< IfcDateTimeSelect::Out > SubmittedOn; + Maybe< IfcLabel::Out > Status; + Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > TargetUsers; + Maybe< IfcDateTimeSelect::Out > UpdateDate; + IfcIdentifier::Out ID; + IfcCostScheduleTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcRampFlightType + struct IfcRampFlightType : IfcBuildingElementType, ObjectHelper { IfcRampFlightType() : Object("IfcRampFlightType") {} + IfcRampFlightTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcDerivedProfileDef @@ -3447,35 +3613,82 @@ namespace IFC { Maybe< IfcLabel::Out > Label; }; - // C++ wrapper for IfcPropertyTableValue - struct IfcPropertyTableValue : IfcSimpleProperty, ObjectHelper { IfcPropertyTableValue() : Object("IfcPropertyTableValue") {} - ListOf< IfcValue, 1, 0 >::Out DefiningValues; - ListOf< IfcValue, 1, 0 >::Out DefinedValues; - Maybe< IfcText::Out > Expression; - Maybe< IfcUnit::Out > DefiningUnit; - Maybe< IfcUnit::Out > DefinedUnit; + // C++ wrapper for IfcCostItem + struct IfcCostItem : IfcControl, ObjectHelper { IfcCostItem() : Object("IfcCostItem") {} + }; - // C++ wrapper for IfcFlowMeterType - struct IfcFlowMeterType : IfcFlowControllerType, ObjectHelper { IfcFlowMeterType() : Object("IfcFlowMeterType") {} - IfcFlowMeterTypeEnum::Out PredefinedType; + // C++ wrapper for IfcEvaporativeCoolerType + struct IfcEvaporativeCoolerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporativeCoolerType() : Object("IfcEvaporativeCoolerType") {} + IfcEvaporativeCoolerTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcDoorStyle - struct IfcDoorStyle : IfcTypeProduct, ObjectHelper { IfcDoorStyle() : Object("IfcDoorStyle") {} - IfcDoorStyleOperationEnum::Out OperationType; - IfcDoorStyleConstructionEnum::Out ConstructionType; - BOOLEAN::Out ParameterTakesPrecedence; - BOOLEAN::Out Sizeable; + // C++ wrapper for IfcChillerType + struct IfcChillerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcChillerType() : Object("IfcChillerType") {} + IfcChillerTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcUnitAssignment - struct IfcUnitAssignment : ObjectHelper { IfcUnitAssignment() : Object("IfcUnitAssignment") {} - ListOf< IfcUnit, 1, 0 >::Out Units; + // C++ wrapper for IfcBoxedHalfSpace + struct IfcBoxedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcBoxedHalfSpace() : Object("IfcBoxedHalfSpace") {} + Lazy< IfcBoundingBox > Enclosure; }; - // C++ wrapper for IfcFlowTerminal - struct IfcFlowTerminal : IfcDistributionFlowElement, ObjectHelper { IfcFlowTerminal() : Object("IfcFlowTerminal") {} + // C++ wrapper for IfcCurtainWallType + struct IfcCurtainWallType : IfcBuildingElementType, ObjectHelper { IfcCurtainWallType() : Object("IfcCurtainWallType") {} + IfcCurtainWallTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcGeometricRepresentationSubContext + struct IfcGeometricRepresentationSubContext : IfcGeometricRepresentationContext, ObjectHelper { IfcGeometricRepresentationSubContext() : Object("IfcGeometricRepresentationSubContext") {} + Lazy< IfcGeometricRepresentationContext > ParentContext; + Maybe< IfcPositiveRatioMeasure::Out > TargetScale; + IfcGeometricProjectionEnum::Out TargetView; + Maybe< IfcLabel::Out > UserDefinedTargetView; + }; + + // C++ wrapper for IfcDimensionCurve + struct IfcDimensionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcDimensionCurve() : Object("IfcDimensionCurve") {} + + }; + + // C++ wrapper for IfcPlane + struct IfcPlane : IfcElementarySurface, ObjectHelper { IfcPlane() : Object("IfcPlane") {} + + }; + + // C++ wrapper for IfcProjectionCurve + struct IfcProjectionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcProjectionCurve() : Object("IfcProjectionCurve") {} + + }; + + // C++ wrapper for IfcDamperType + struct IfcDamperType : IfcFlowControllerType, ObjectHelper { IfcDamperType() : Object("IfcDamperType") {} + IfcDamperTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcMechanicalFastener + struct IfcMechanicalFastener : IfcFastener, ObjectHelper { IfcMechanicalFastener() : Object("IfcMechanicalFastener") {} + Maybe< IfcPositiveLengthMeasure::Out > NominalDiameter; + Maybe< IfcPositiveLengthMeasure::Out > NominalLength; + }; + + // C++ wrapper for IfcDuctSilencerType + struct IfcDuctSilencerType : IfcFlowTreatmentDeviceType, ObjectHelper { IfcDuctSilencerType() : Object("IfcDuctSilencerType") {} + IfcDuctSilencerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcLaborResource + struct IfcLaborResource : IfcConstructionResource, ObjectHelper { IfcLaborResource() : Object("IfcLaborResource") {} + Maybe< IfcText::Out > SkillSet; + }; + + // C++ wrapper for IfcFanType + struct IfcFanType : IfcFlowMovingDeviceType, ObjectHelper { IfcFanType() : Object("IfcFanType") {} + IfcFanTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcProjectionElement + struct IfcProjectionElement : IfcFeatureElementAddition, ObjectHelper { IfcProjectionElement() : Object("IfcProjectionElement") {} }; @@ -3492,42 +3705,50 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcFlowSegment - struct IfcFlowSegment : IfcDistributionFlowElement, ObjectHelper { IfcFlowSegment() : Object("IfcFlowSegment") {} + // C++ wrapper for IfcProject + struct IfcProject : IfcObject, ObjectHelper { IfcProject() : Object("IfcProject") {} + Maybe< IfcLabel::Out > LongName; + Maybe< IfcLabel::Out > Phase; + ListOf< Lazy< IfcRepresentationContext >, 1, 0 > RepresentationContexts; + Lazy< IfcUnitAssignment > UnitsInContext; + }; + + // C++ wrapper for IfcRelVoidsElement + struct IfcRelVoidsElement : IfcRelConnects, ObjectHelper { IfcRelVoidsElement() : Object("IfcRelVoidsElement") {} + Lazy< IfcElement > RelatingBuildingElement; + Lazy< IfcFeatureElementSubtraction > RelatedOpeningElement; + }; + + // C++ wrapper for IfcElectricalCircuit + struct IfcElectricalCircuit : IfcSystem, ObjectHelper { IfcElectricalCircuit() : Object("IfcElectricalCircuit") {} }; - // C++ wrapper for IfcElementQuantity - struct IfcElementQuantity : IfcPropertySetDefinition, ObjectHelper { IfcElementQuantity() : Object("IfcElementQuantity") {} - Maybe< IfcLabel::Out > MethodOfMeasurement; - ListOf< Lazy< NotImplemented >, 1, 0 > Quantities; + // C++ wrapper for IfcLShapeProfileDef + struct IfcLShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcLShapeProfileDef() : Object("IfcLShapeProfileDef") {} + IfcPositiveLengthMeasure::Out Depth; + Maybe< IfcPositiveLengthMeasure::Out > Width; + IfcPositiveLengthMeasure::Out Thickness; + Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius; + Maybe< IfcPlaneAngleMeasure::Out > LegSlope; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcCurtainWall - struct IfcCurtainWall : IfcBuildingElement, ObjectHelper { IfcCurtainWall() : Object("IfcCurtainWall") {} + // C++ wrapper for IfcFlowTreatmentDevice + struct IfcFlowTreatmentDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowTreatmentDevice() : Object("IfcFlowTreatmentDevice") {} }; - // C++ wrapper for IfcDiscreteAccessory - struct IfcDiscreteAccessory : IfcElementComponent, ObjectHelper { IfcDiscreteAccessory() : Object("IfcDiscreteAccessory") {} - + // C++ wrapper for IfcVertexPoint + struct IfcVertexPoint : IfcVertex, ObjectHelper { IfcVertexPoint() : Object("IfcVertexPoint") {} + Lazy< IfcPoint > VertexGeometry; }; - // C++ wrapper for IfcGrid - struct IfcGrid : IfcProduct, ObjectHelper { IfcGrid() : Object("IfcGrid") {} - ListOf< Lazy< NotImplemented >, 1, 0 > UAxes; - ListOf< Lazy< NotImplemented >, 1, 0 > VAxes; - Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > WAxes; - }; + // C++ wrapper for IfcAnnotationTextOccurrence + struct IfcAnnotationTextOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationTextOccurrence() : Object("IfcAnnotationTextOccurrence") {} - // C++ wrapper for IfcSanitaryTerminalType - struct IfcSanitaryTerminalType : IfcFlowTerminalType, ObjectHelper { IfcSanitaryTerminalType() : Object("IfcSanitaryTerminalType") {} - IfcSanitaryTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcSubedge - struct IfcSubedge : IfcEdge, ObjectHelper { IfcSubedge() : Object("IfcSubedge") {} - Lazy< IfcEdge > ParentEdge; }; // C++ wrapper for IfcFilterType @@ -3535,86 +3756,50 @@ namespace IFC { IfcFilterTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcTendon - struct IfcTendon : IfcReinforcingElement, ObjectHelper { IfcTendon() : Object("IfcTendon") {} - IfcTendonTypeEnum::Out PredefinedType; - IfcPositiveLengthMeasure::Out NominalDiameter; - IfcAreaMeasure::Out CrossSectionArea; - Maybe< IfcForceMeasure::Out > TensionForce; - Maybe< IfcPressureMeasure::Out > PreStress; - Maybe< IfcNormalisedRatioMeasure::Out > FrictionCoefficient; - Maybe< IfcPositiveLengthMeasure::Out > AnchorageSlip; - Maybe< IfcPositiveLengthMeasure::Out > MinCurvatureRadius; + // C++ wrapper for IfcEdgeLoop + struct IfcEdgeLoop : IfcLoop, ObjectHelper { IfcEdgeLoop() : Object("IfcEdgeLoop") {} + ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; }; - // C++ wrapper for IfcStructuralLoadGroup - struct IfcStructuralLoadGroup : IfcGroup, ObjectHelper { IfcStructuralLoadGroup() : Object("IfcStructuralLoadGroup") {} - IfcLoadGroupTypeEnum::Out PredefinedType; - IfcActionTypeEnum::Out ActionType; - IfcActionSourceTypeEnum::Out ActionSource; - Maybe< IfcPositiveRatioMeasure::Out > Coefficient; - Maybe< IfcLabel::Out > Purpose; + // C++ wrapper for IfcCircleHollowProfileDef + struct IfcCircleHollowProfileDef : IfcCircleProfileDef, ObjectHelper { IfcCircleHollowProfileDef() : Object("IfcCircleHollowProfileDef") {} + IfcPositiveLengthMeasure::Out WallThickness; }; - // C++ wrapper for IfcPresentationStyleAssignment - struct IfcPresentationStyleAssignment : ObjectHelper { IfcPresentationStyleAssignment() : Object("IfcPresentationStyleAssignment") {} - ListOf< IfcPresentationStyleSelect, 1, 0 >::Out Styles; + // C++ wrapper for IfcAirTerminalBoxType + struct IfcAirTerminalBoxType : IfcFlowControllerType, ObjectHelper { IfcAirTerminalBoxType() : Object("IfcAirTerminalBoxType") {} + IfcAirTerminalBoxTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcStructuralCurveMember - struct IfcStructuralCurveMember : IfcStructuralMember, ObjectHelper { IfcStructuralCurveMember() : Object("IfcStructuralCurveMember") {} - IfcStructuralCurveTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcLightSourceAmbient - struct IfcLightSourceAmbient : IfcLightSource, ObjectHelper { IfcLightSourceAmbient() : Object("IfcLightSourceAmbient") {} + // C++ wrapper for IfcStructuredDimensionCallout + struct IfcStructuredDimensionCallout : IfcDraughtingCallout, ObjectHelper { IfcStructuredDimensionCallout() : Object("IfcStructuredDimensionCallout") {} }; - // C++ wrapper for IfcCondition - struct IfcCondition : IfcGroup, ObjectHelper { IfcCondition() : Object("IfcCondition") {} - + // C++ wrapper for IfcCableCarrierSegmentType + struct IfcCableCarrierSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableCarrierSegmentType() : Object("IfcCableCarrierSegmentType") {} + IfcCableCarrierSegmentTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcPort - struct IfcPort : IfcProduct, ObjectHelper { IfcPort() : Object("IfcPort") {} - + // C++ wrapper for IfcDuctFittingType + struct IfcDuctFittingType : IfcFlowFittingType, ObjectHelper { IfcDuctFittingType() : Object("IfcDuctFittingType") {} + IfcDuctFittingTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcSpace - struct IfcSpace : IfcSpatialStructureElement, ObjectHelper { IfcSpace() : Object("IfcSpace") {} - IfcInternalOrExternalEnum::Out InteriorOrExteriorSpace; - Maybe< IfcLengthMeasure::Out > ElevationWithFlooring; + // C++ wrapper for IfcRectangularTrimmedSurface + struct IfcRectangularTrimmedSurface : IfcBoundedSurface, ObjectHelper { IfcRectangularTrimmedSurface() : Object("IfcRectangularTrimmedSurface") {} + Lazy< IfcSurface > BasisSurface; + IfcParameterValue::Out U1; + IfcParameterValue::Out V1; + IfcParameterValue::Out U2; + IfcParameterValue::Out V2; + BOOLEAN::Out Usense; + BOOLEAN::Out Vsense; }; - // C++ wrapper for IfcHeatExchangerType - struct IfcHeatExchangerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHeatExchangerType() : Object("IfcHeatExchangerType") {} - IfcHeatExchangerTypeEnum::Out PredefinedType; - }; + // C++ wrapper for IfcProductDefinitionShape + struct IfcProductDefinitionShape : IfcProductRepresentation, ObjectHelper { IfcProductDefinitionShape() : Object("IfcProductDefinitionShape") {} - // C++ wrapper for IfcTankType - struct IfcTankType : IfcFlowStorageDeviceType, ObjectHelper { IfcTankType() : Object("IfcTankType") {} - IfcTankTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcInventory - struct IfcInventory : IfcGroup, ObjectHelper { IfcInventory() : Object("IfcInventory") {} - IfcInventoryTypeEnum::Out InventoryType; - IfcActorSelect::Out Jurisdiction; - ListOf< Lazy< NotImplemented >, 1, 0 > ResponsiblePersons; - Lazy< NotImplemented > LastUpdateDate; - Maybe< Lazy< NotImplemented > > CurrentValue; - Maybe< Lazy< NotImplemented > > OriginalValue; - }; - - // C++ wrapper for IfcTransportElementType - struct IfcTransportElementType : IfcElementType, ObjectHelper { IfcTransportElementType() : Object("IfcTransportElementType") {} - IfcTransportElementTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcAirToAirHeatRecoveryType - struct IfcAirToAirHeatRecoveryType : IfcEnergyConversionDeviceType, ObjectHelper { IfcAirToAirHeatRecoveryType() : Object("IfcAirToAirHeatRecoveryType") {} - IfcAirToAirHeatRecoveryTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcStairFlight @@ -3625,290 +3810,105 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > TreadLength; }; - // C++ wrapper for IfcElectricalElement - struct IfcElectricalElement : IfcElement, ObjectHelper { IfcElectricalElement() : Object("IfcElectricalElement") {} - - }; - - // C++ wrapper for IfcSurfaceStyleWithTextures - struct IfcSurfaceStyleWithTextures : ObjectHelper { IfcSurfaceStyleWithTextures() : Object("IfcSurfaceStyleWithTextures") {} - ListOf< Lazy< NotImplemented >, 1, 0 > Textures; - }; - - // C++ wrapper for IfcBoundingBox - struct IfcBoundingBox : IfcGeometricRepresentationItem, ObjectHelper { IfcBoundingBox() : Object("IfcBoundingBox") {} - Lazy< IfcCartesianPoint > Corner; - IfcPositiveLengthMeasure::Out XDim; - IfcPositiveLengthMeasure::Out YDim; - IfcPositiveLengthMeasure::Out ZDim; - }; - - // C++ wrapper for IfcWallType - struct IfcWallType : IfcBuildingElementType, ObjectHelper { IfcWallType() : Object("IfcWallType") {} - IfcWallTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcMove - struct IfcMove : IfcTask, ObjectHelper { IfcMove() : Object("IfcMove") {} - Lazy< IfcSpatialStructureElement > MoveFrom; - Lazy< IfcSpatialStructureElement > MoveTo; - Maybe< ListOf< IfcText, 1, 0 >::Out > PunchList; - }; - - // C++ wrapper for IfcCircle - struct IfcCircle : IfcConic, ObjectHelper { IfcCircle() : Object("IfcCircle") {} - IfcPositiveLengthMeasure::Out Radius; - }; - - // C++ wrapper for IfcOffsetCurve2D - struct IfcOffsetCurve2D : IfcCurve, ObjectHelper { IfcOffsetCurve2D() : Object("IfcOffsetCurve2D") {} - Lazy< IfcCurve > BasisCurve; - IfcLengthMeasure::Out Distance; - LOGICAL::Out SelfIntersect; - }; - - // C++ wrapper for IfcPointOnCurve - struct IfcPointOnCurve : IfcPoint, ObjectHelper { IfcPointOnCurve() : Object("IfcPointOnCurve") {} - Lazy< IfcCurve > BasisCurve; - IfcParameterValue::Out PointParameter; - }; - - // C++ wrapper for IfcStructuralResultGroup - struct IfcStructuralResultGroup : IfcGroup, ObjectHelper { IfcStructuralResultGroup() : Object("IfcStructuralResultGroup") {} - IfcAnalysisTheoryTypeEnum::Out TheoryType; - Maybe< Lazy< IfcStructuralLoadGroup > > ResultForLoadGroup; - BOOLEAN::Out IsLinear; - }; - - // C++ wrapper for IfcSectionedSpine - struct IfcSectionedSpine : IfcGeometricRepresentationItem, ObjectHelper { IfcSectionedSpine() : Object("IfcSectionedSpine") {} - Lazy< IfcCompositeCurve > SpineCurve; - ListOf< Lazy< IfcProfileDef >, 2, 0 > CrossSections; - ListOf< Lazy< IfcAxis2Placement3D >, 2, 0 > CrossSectionPositions; - }; - // C++ wrapper for IfcSlab struct IfcSlab : IfcBuildingElement, ObjectHelper { IfcSlab() : Object("IfcSlab") {} Maybe< IfcSlabTypeEnum::Out > PredefinedType; }; - // C++ wrapper for IfcVertex - struct IfcVertex : IfcTopologicalRepresentationItem, ObjectHelper { IfcVertex() : Object("IfcVertex") {} - - }; - - // C++ wrapper for IfcVertexPoint - struct IfcVertexPoint : IfcVertex, ObjectHelper { IfcVertexPoint() : Object("IfcVertexPoint") {} - Lazy< IfcPoint > VertexGeometry; - }; - - // C++ wrapper for IfcStructuralLinearAction - struct IfcStructuralLinearAction : IfcStructuralAction, ObjectHelper { IfcStructuralLinearAction() : Object("IfcStructuralLinearAction") {} - IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; - }; - - // C++ wrapper for IfcStructuralLinearActionVarying - struct IfcStructuralLinearActionVarying : IfcStructuralLinearAction, ObjectHelper { IfcStructuralLinearActionVarying() : Object("IfcStructuralLinearActionVarying") {} - Lazy< NotImplemented > VaryingAppliedLoadLocation; - ListOf< Lazy< NotImplemented >, 1, 0 > SubsequentAppliedLoads; - }; - - // C++ wrapper for IfcBuildingElementProxyType - struct IfcBuildingElementProxyType : IfcBuildingElementType, ObjectHelper { IfcBuildingElementProxyType() : Object("IfcBuildingElementProxyType") {} - IfcBuildingElementProxyTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcProjectionElement - struct IfcProjectionElement : IfcFeatureElementAddition, ObjectHelper { IfcProjectionElement() : Object("IfcProjectionElement") {} - - }; - - // C++ wrapper for IfcConversionBasedUnit - struct IfcConversionBasedUnit : IfcNamedUnit, ObjectHelper { IfcConversionBasedUnit() : Object("IfcConversionBasedUnit") {} - IfcLabel::Out Name; - Lazy< IfcMeasureWithUnit > ConversionFactor; - }; - - // C++ wrapper for IfcGeometricRepresentationSubContext - struct IfcGeometricRepresentationSubContext : IfcGeometricRepresentationContext, ObjectHelper { IfcGeometricRepresentationSubContext() : Object("IfcGeometricRepresentationSubContext") {} - Lazy< IfcGeometricRepresentationContext > ParentContext; - Maybe< IfcPositiveRatioMeasure::Out > TargetScale; - IfcGeometricProjectionEnum::Out TargetView; - Maybe< IfcLabel::Out > UserDefinedTargetView; - }; - - // C++ wrapper for IfcAnnotationSurfaceOccurrence - struct IfcAnnotationSurfaceOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSurfaceOccurrence() : Object("IfcAnnotationSurfaceOccurrence") {} - - }; - - // C++ wrapper for IfcRoundedEdgeFeature - struct IfcRoundedEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcRoundedEdgeFeature() : Object("IfcRoundedEdgeFeature") {} - Maybe< IfcPositiveLengthMeasure::Out > Radius; - }; - - // C++ wrapper for IfcElectricDistributionPoint - struct IfcElectricDistributionPoint : IfcFlowController, ObjectHelper { IfcElectricDistributionPoint() : Object("IfcElectricDistributionPoint") {} - IfcElectricDistributionPointFunctionEnum::Out DistributionPointFunction; - Maybe< IfcLabel::Out > UserDefinedFunction; - }; - - // C++ wrapper for IfcCableCarrierSegmentType - struct IfcCableCarrierSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableCarrierSegmentType() : Object("IfcCableCarrierSegmentType") {} - IfcCableCarrierSegmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcWallStandardCase - struct IfcWallStandardCase : IfcWall, ObjectHelper { IfcWallStandardCase() : Object("IfcWallStandardCase") {} - - }; - - // C++ wrapper for IfcCsgSolid - struct IfcCsgSolid : IfcSolidModel, ObjectHelper { IfcCsgSolid() : Object("IfcCsgSolid") {} - IfcCsgSelect::Out TreeRootExpression; - }; - - // C++ wrapper for IfcBeamType - struct IfcBeamType : IfcBuildingElementType, ObjectHelper { IfcBeamType() : Object("IfcBeamType") {} - IfcBeamTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcAnnotationFillArea - struct IfcAnnotationFillArea : IfcGeometricRepresentationItem, ObjectHelper { IfcAnnotationFillArea() : Object("IfcAnnotationFillArea") {} - Lazy< IfcCurve > OuterBoundary; - Maybe< ListOf< Lazy< IfcCurve >, 1, 0 > > InnerBoundaries; - }; - - // C++ wrapper for IfcStructuralCurveMemberVarying - struct IfcStructuralCurveMemberVarying : IfcStructuralCurveMember, ObjectHelper { IfcStructuralCurveMemberVarying() : Object("IfcStructuralCurveMemberVarying") {} - - }; - - // C++ wrapper for IfcPointOnSurface - struct IfcPointOnSurface : IfcPoint, ObjectHelper { IfcPointOnSurface() : Object("IfcPointOnSurface") {} - Lazy< IfcSurface > BasisSurface; - IfcParameterValue::Out PointParameterU; - IfcParameterValue::Out PointParameterV; - }; - - // C++ wrapper for IfcOrderAction - struct IfcOrderAction : IfcTask, ObjectHelper { IfcOrderAction() : Object("IfcOrderAction") {} - IfcIdentifier::Out ActionID; - }; - - // C++ wrapper for IfcEdgeLoop - struct IfcEdgeLoop : IfcLoop, ObjectHelper { IfcEdgeLoop() : Object("IfcEdgeLoop") {} - ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; - }; - - // C++ wrapper for IfcAnnotationFillAreaOccurrence - struct IfcAnnotationFillAreaOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationFillAreaOccurrence() : Object("IfcAnnotationFillAreaOccurrence") {} - Maybe< Lazy< IfcPoint > > FillStyleTarget; - Maybe< IfcGlobalOrLocalEnum::Out > GlobalOrLocal; - }; - - // C++ wrapper for IfcWorkPlan - struct IfcWorkPlan : IfcWorkControl, ObjectHelper { IfcWorkPlan() : Object("IfcWorkPlan") {} - - }; - - // C++ wrapper for IfcEllipse - struct IfcEllipse : IfcConic, ObjectHelper { IfcEllipse() : Object("IfcEllipse") {} - IfcPositiveLengthMeasure::Out SemiAxis1; - IfcPositiveLengthMeasure::Out SemiAxis2; - }; - - // C++ wrapper for IfcProductDefinitionShape - struct IfcProductDefinitionShape : IfcProductRepresentation, ObjectHelper { IfcProductDefinitionShape() : Object("IfcProductDefinitionShape") {} - - }; - - // C++ wrapper for IfcProjectionCurve - struct IfcProjectionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcProjectionCurve() : Object("IfcProjectionCurve") {} - - }; - - // C++ wrapper for IfcElectricalCircuit - struct IfcElectricalCircuit : IfcSystem, ObjectHelper { IfcElectricalCircuit() : Object("IfcElectricalCircuit") {} - - }; - - // C++ wrapper for IfcRationalBezierCurve - struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {} - ListOf< REAL, 2, 0 >::Out WeightsData; - }; - - // C++ wrapper for IfcStructuralPointAction - struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {} - - }; - - // C++ wrapper for IfcPipeSegmentType - struct IfcPipeSegmentType : IfcFlowSegmentType, ObjectHelper { IfcPipeSegmentType() : Object("IfcPipeSegmentType") {} - IfcPipeSegmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcTwoDirectionRepeatFactor - struct IfcTwoDirectionRepeatFactor : IfcOneDirectionRepeatFactor, ObjectHelper { IfcTwoDirectionRepeatFactor() : Object("IfcTwoDirectionRepeatFactor") {} - Lazy< IfcVector > SecondRepeatFactor; - }; - - // C++ wrapper for IfcShapeRepresentation - struct IfcShapeRepresentation : IfcShapeModel, ObjectHelper { IfcShapeRepresentation() : Object("IfcShapeRepresentation") {} - - }; - - // C++ wrapper for IfcPropertySet - struct IfcPropertySet : IfcPropertySetDefinition, ObjectHelper { IfcPropertySet() : Object("IfcPropertySet") {} - ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; - }; - - // C++ wrapper for IfcSurfaceStyleRendering - struct IfcSurfaceStyleRendering : IfcSurfaceStyleShading, ObjectHelper { IfcSurfaceStyleRendering() : Object("IfcSurfaceStyleRendering") {} - Maybe< IfcNormalisedRatioMeasure::Out > Transparency; - Maybe< IfcColourOrFactor::Out > DiffuseColour; - Maybe< IfcColourOrFactor::Out > TransmissionColour; - Maybe< IfcColourOrFactor::Out > DiffuseTransmissionColour; - Maybe< IfcColourOrFactor::Out > ReflectionColour; - Maybe< IfcColourOrFactor::Out > SpecularColour; - Maybe< IfcSpecularHighlightSelect::Out > SpecularHighlight; - IfcReflectanceMethodEnum::Out ReflectanceMethod; - }; - - // C++ wrapper for IfcDistributionPort - struct IfcDistributionPort : IfcPort, ObjectHelper { IfcDistributionPort() : Object("IfcDistributionPort") {} - Maybe< IfcFlowDirectionEnum::Out > FlowDirection; - }; - // C++ wrapper for IfcPipeFittingType struct IfcPipeFittingType : IfcFlowFittingType, ObjectHelper { IfcPipeFittingType() : Object("IfcPipeFittingType") {} IfcPipeFittingTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcTransportElement - struct IfcTransportElement : IfcElement, ObjectHelper { IfcTransportElement() : Object("IfcTransportElement") {} - Maybe< IfcTransportElementTypeEnum::Out > OperationType; - Maybe< IfcMassMeasure::Out > CapacityByWeight; - Maybe< IfcCountMeasure::Out > CapacityByNumber; + // C++ wrapper for IfcSpace + struct IfcSpace : IfcSpatialStructureElement, ObjectHelper { IfcSpace() : Object("IfcSpace") {} + IfcInternalOrExternalEnum::Out InteriorOrExteriorSpace; + Maybe< IfcLengthMeasure::Out > ElevationWithFlooring; }; - // C++ wrapper for IfcAnnotationTextOccurrence - struct IfcAnnotationTextOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationTextOccurrence() : Object("IfcAnnotationTextOccurrence") {} + // C++ wrapper for IfcBuildingElementProxyType + struct IfcBuildingElementProxyType : IfcBuildingElementType, ObjectHelper { IfcBuildingElementProxyType() : Object("IfcBuildingElementProxyType") {} + IfcBuildingElementProxyTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcAlarmType + struct IfcAlarmType : IfcDistributionControlElementType, ObjectHelper { IfcAlarmType() : Object("IfcAlarmType") {} + IfcAlarmTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCableCarrierFittingType + struct IfcCableCarrierFittingType : IfcFlowFittingType, ObjectHelper { IfcCableCarrierFittingType() : Object("IfcCableCarrierFittingType") {} + IfcCableCarrierFittingTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcRoundedEdgeFeature + struct IfcRoundedEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcRoundedEdgeFeature() : Object("IfcRoundedEdgeFeature") {} + Maybe< IfcPositiveLengthMeasure::Out > Radius; + }; + + // C++ wrapper for IfcFaceSurface + struct IfcFaceSurface : IfcFace, ObjectHelper { IfcFaceSurface() : Object("IfcFaceSurface") {} + Lazy< IfcSurface > FaceSurface; + BOOLEAN::Out SameSense; + }; + + // C++ wrapper for IfcCartesianTransformationOperator2D + struct IfcCartesianTransformationOperator2D : IfcCartesianTransformationOperator, ObjectHelper { IfcCartesianTransformationOperator2D() : Object("IfcCartesianTransformationOperator2D") {} }; - // C++ wrapper for IfcStructuralAnalysisModel - struct IfcStructuralAnalysisModel : IfcSystem, ObjectHelper { IfcStructuralAnalysisModel() : Object("IfcStructuralAnalysisModel") {} - IfcAnalysisModelTypeEnum::Out PredefinedType; - Maybe< Lazy< IfcAxis2Placement3D > > OrientationOf2DPlane; - Maybe< ListOf< Lazy< IfcStructuralLoadGroup >, 1, 0 > > LoadedBy; - Maybe< ListOf< Lazy< IfcStructuralResultGroup >, 1, 0 > > HasResults; + // C++ wrapper for IfcTendonAnchor + struct IfcTendonAnchor : IfcReinforcingElement, ObjectHelper { IfcTendonAnchor() : Object("IfcTendonAnchor") {} + }; - // C++ wrapper for IfcConditionCriterion - struct IfcConditionCriterion : IfcControl, ObjectHelper { IfcConditionCriterion() : Object("IfcConditionCriterion") {} - IfcConditionCriterionSelect::Out Criterion; - IfcDateTimeSelect::Out CriterionDateTime; + // C++ wrapper for IfcWorkSchedule + struct IfcWorkSchedule : IfcWorkControl, ObjectHelper { IfcWorkSchedule() : Object("IfcWorkSchedule") {} + + }; + + // C++ wrapper for IfcSurfaceOfRevolution + struct IfcSurfaceOfRevolution : IfcSweptSurface, ObjectHelper { IfcSurfaceOfRevolution() : Object("IfcSurfaceOfRevolution") {} + Lazy< IfcAxis1Placement > AxisPosition; + }; + + // C++ wrapper for IfcElectricHeaterType + struct IfcElectricHeaterType : IfcFlowTerminalType, ObjectHelper { IfcElectricHeaterType() : Object("IfcElectricHeaterType") {} + IfcElectricHeaterTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcMeasureWithUnit + struct IfcMeasureWithUnit : ObjectHelper { IfcMeasureWithUnit() : Object("IfcMeasureWithUnit") {} + IfcValue::Out ValueComponent; + IfcUnit::Out UnitComponent; + }; + + // C++ wrapper for IfcOrientedEdge + struct IfcOrientedEdge : IfcEdge, ObjectHelper { IfcOrientedEdge() : Object("IfcOrientedEdge") {} + Lazy< IfcEdge > EdgeElement; + BOOLEAN::Out Orientation; + }; + + // C++ wrapper for IfcCartesianTransformationOperator2DnonUniform + struct IfcCartesianTransformationOperator2DnonUniform : IfcCartesianTransformationOperator2D, ObjectHelper { IfcCartesianTransformationOperator2DnonUniform() : Object("IfcCartesianTransformationOperator2DnonUniform") {} + Maybe< REAL::Out > Scale2; + }; + + // C++ wrapper for IfcRelFillsElement + struct IfcRelFillsElement : IfcRelConnects, ObjectHelper { IfcRelFillsElement() : Object("IfcRelFillsElement") {} + Lazy< IfcOpeningElement > RelatingOpeningElement; + Lazy< IfcElement > RelatedBuildingElement; + }; + + // C++ wrapper for IfcConstructionMaterialResource + struct IfcConstructionMaterialResource : IfcConstructionResource, ObjectHelper { IfcConstructionMaterialResource() : Object("IfcConstructionMaterialResource") {} + Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > Suppliers; + Maybe< IfcRatioMeasure::Out > UsageRatio; + }; + + // C++ wrapper for IfcRadiusDimension + struct IfcRadiusDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcRadiusDimension() : Object("IfcRadiusDimension") {} + }; void GetSchema(EXPRESS::ConversionSchema& out); @@ -3922,442 +3922,442 @@ namespace STEP { #define DECL_CONV_STUB(type) template <> size_t GenericFill(const STEP::DB& db, const EXPRESS::LIST& params, IFC::type* in) + DECL_CONV_STUB(IfcRepresentationItem); + DECL_CONV_STUB(IfcTopologicalRepresentationItem); + DECL_CONV_STUB(IfcEdge); + DECL_CONV_STUB(IfcGeometricRepresentationItem); + DECL_CONV_STUB(IfcCompositeCurveSegment); DECL_CONV_STUB(IfcRoot); DECL_CONV_STUB(IfcObjectDefinition); + DECL_CONV_STUB(IfcObject); + DECL_CONV_STUB(IfcProduct); + DECL_CONV_STUB(IfcStructuralItem); + DECL_CONV_STUB(IfcStructuralConnection); + DECL_CONV_STUB(IfcStructuralSurfaceConnection); + DECL_CONV_STUB(IfcPresentationStyleAssignment); + DECL_CONV_STUB(IfcElement); + DECL_CONV_STUB(IfcBuildingElement); + DECL_CONV_STUB(IfcCurtainWall); + DECL_CONV_STUB(IfcProxy); + DECL_CONV_STUB(IfcStyledItem); + DECL_CONV_STUB(IfcAnnotationOccurrence); + DECL_CONV_STUB(IfcAnnotationSymbolOccurrence); + DECL_CONV_STUB(IfcTerminatorSymbol); + DECL_CONV_STUB(IfcDimensionCurveTerminator); DECL_CONV_STUB(IfcTypeObject); DECL_CONV_STUB(IfcTypeProduct); DECL_CONV_STUB(IfcElementType); DECL_CONV_STUB(IfcDistributionElementType); - DECL_CONV_STUB(IfcDistributionFlowElementType); - DECL_CONV_STUB(IfcFlowControllerType); - DECL_CONV_STUB(IfcElectricTimeControlType); - DECL_CONV_STUB(IfcRepresentation); - DECL_CONV_STUB(IfcShapeModel); - DECL_CONV_STUB(IfcTopologyRepresentation); - DECL_CONV_STUB(IfcRelationship); - DECL_CONV_STUB(IfcRelConnects); - DECL_CONV_STUB(IfcFlowFittingType); - DECL_CONV_STUB(IfcCableCarrierFittingType); - DECL_CONV_STUB(IfcEnergyConversionDeviceType); - DECL_CONV_STUB(IfcCoilType); - DECL_CONV_STUB(IfcObject); - DECL_CONV_STUB(IfcControl); - DECL_CONV_STUB(IfcPerformanceHistory); - DECL_CONV_STUB(IfcRepresentationItem); - DECL_CONV_STUB(IfcGeometricRepresentationItem); - DECL_CONV_STUB(IfcTextLiteral); - DECL_CONV_STUB(IfcTextLiteralWithExtent); - DECL_CONV_STUB(IfcProductRepresentation); - DECL_CONV_STUB(IfcProduct); - DECL_CONV_STUB(IfcElement); - DECL_CONV_STUB(IfcDistributionElement); - DECL_CONV_STUB(IfcDistributionFlowElement); - DECL_CONV_STUB(IfcCurve); - DECL_CONV_STUB(IfcBoundedCurve); - DECL_CONV_STUB(IfcCompositeCurve); - DECL_CONV_STUB(Ifc2DCompositeCurve); - DECL_CONV_STUB(IfcCartesianTransformationOperator); - DECL_CONV_STUB(IfcCartesianTransformationOperator3D); - DECL_CONV_STUB(IfcProperty); - DECL_CONV_STUB(IfcSimpleProperty); - DECL_CONV_STUB(IfcPropertyEnumeratedValue); - DECL_CONV_STUB(IfcBuildingElementType); - DECL_CONV_STUB(IfcStairFlightType); - DECL_CONV_STUB(IfcSurface); - DECL_CONV_STUB(IfcElementarySurface); - DECL_CONV_STUB(IfcPlane); - DECL_CONV_STUB(IfcBooleanResult); - DECL_CONV_STUB(IfcBooleanClippingResult); - DECL_CONV_STUB(IfcSolidModel); - DECL_CONV_STUB(IfcManifoldSolidBrep); - DECL_CONV_STUB(IfcFlowTerminalType); - DECL_CONV_STUB(IfcStackTerminalType); - DECL_CONV_STUB(IfcStructuralItem); - DECL_CONV_STUB(IfcStructuralConnection); - DECL_CONV_STUB(IfcStructuralCurveConnection); - DECL_CONV_STUB(IfcJunctionBoxType); - DECL_CONV_STUB(IfcPropertyDefinition); - DECL_CONV_STUB(IfcPropertySetDefinition); - DECL_CONV_STUB(IfcProcess); - DECL_CONV_STUB(IfcTask); - DECL_CONV_STUB(IfcRelFillsElement); - DECL_CONV_STUB(IfcProcedure); - DECL_CONV_STUB(IfcProxy); - DECL_CONV_STUB(IfcResource); - DECL_CONV_STUB(IfcConstructionResource); - DECL_CONV_STUB(IfcSubContractResource); - DECL_CONV_STUB(IfcRelContainedInSpatialStructure); - DECL_CONV_STUB(IfcTopologicalRepresentationItem); - DECL_CONV_STUB(IfcEdge); - DECL_CONV_STUB(IfcEdgeCurve); - DECL_CONV_STUB(IfcPlateType); - DECL_CONV_STUB(IfcObjectPlacement); - DECL_CONV_STUB(IfcGridPlacement); - DECL_CONV_STUB(IfcFireSuppressionTerminalType); - DECL_CONV_STUB(IfcFlowStorageDevice); - DECL_CONV_STUB(IfcSweptSurface); - DECL_CONV_STUB(IfcSurfaceOfRevolution); - DECL_CONV_STUB(IfcOrientedEdge); - DECL_CONV_STUB(IfcDirection); - DECL_CONV_STUB(IfcProfileDef); - DECL_CONV_STUB(IfcParameterizedProfileDef); - DECL_CONV_STUB(IfcCShapeProfileDef); DECL_CONV_STUB(IfcFeatureElement); DECL_CONV_STUB(IfcFeatureElementSubtraction); - DECL_CONV_STUB(IfcEdgeFeature); - DECL_CONV_STUB(IfcChamferEdgeFeature); - DECL_CONV_STUB(IfcBuildingElement); - DECL_CONV_STUB(IfcColumn); - DECL_CONV_STUB(IfcPropertyReferenceValue); - DECL_CONV_STUB(IfcElectricMotorType); - DECL_CONV_STUB(IfcSpatialStructureElementType); - DECL_CONV_STUB(IfcSpaceType); - DECL_CONV_STUB(IfcColumnType); - DECL_CONV_STUB(IfcCraneRailAShapeProfileDef); - DECL_CONV_STUB(IfcCondenserType); - DECL_CONV_STUB(IfcCircleProfileDef); - DECL_CONV_STUB(IfcCircleHollowProfileDef); - DECL_CONV_STUB(IfcPlacement); - DECL_CONV_STUB(IfcAxis2Placement3D); + DECL_CONV_STUB(IfcOpeningElement); DECL_CONV_STUB(IfcPresentationStyle); - DECL_CONV_STUB(IfcEquipmentElement); - DECL_CONV_STUB(IfcCompositeCurveSegment); - DECL_CONV_STUB(IfcRectangleProfileDef); - DECL_CONV_STUB(IfcBuildingElementProxy); - DECL_CONV_STUB(IfcDistributionControlElementType); - DECL_CONV_STUB(IfcFlowInstrumentType); - DECL_CONV_STUB(IfcDraughtingCallout); - DECL_CONV_STUB(IfcDimensionCurveDirectedCallout); - DECL_CONV_STUB(IfcLinearDimension); - DECL_CONV_STUB(IfcElementAssembly); - DECL_CONV_STUB(IfcCsgPrimitive3D); - DECL_CONV_STUB(IfcRightCircularCone); - DECL_CONV_STUB(IfcProjectOrder); - DECL_CONV_STUB(IfcLShapeProfileDef); - DECL_CONV_STUB(IfcAngularDimension); - DECL_CONV_STUB(IfcLocalPlacement); - DECL_CONV_STUB(IfcSweptAreaSolid); - DECL_CONV_STUB(IfcRevolvedAreaSolid); - DECL_CONV_STUB(IfcStructuralSurfaceConnection); - DECL_CONV_STUB(IfcRadiusDimension); - DECL_CONV_STUB(IfcSweptDiskSolid); - DECL_CONV_STUB(IfcHalfSpaceSolid); - DECL_CONV_STUB(IfcPolygonalBoundedHalfSpace); - DECL_CONV_STUB(IfcTimeSeriesSchedule); - DECL_CONV_STUB(IfcCooledBeamType); - DECL_CONV_STUB(IfcProject); - DECL_CONV_STUB(IfcEvaporatorType); - DECL_CONV_STUB(IfcLaborResource); - DECL_CONV_STUB(IfcPropertyBoundedValue); - DECL_CONV_STUB(IfcRampFlightType); - DECL_CONV_STUB(IfcMember); - DECL_CONV_STUB(IfcTubeBundleType); - DECL_CONV_STUB(IfcValveType); - DECL_CONV_STUB(IfcTrimmedCurve); - DECL_CONV_STUB(IfcRelDefines); - DECL_CONV_STUB(IfcRelDefinesByProperties); - DECL_CONV_STUB(IfcActor); - DECL_CONV_STUB(IfcOccupant); - DECL_CONV_STUB(IfcHumidifierType); - DECL_CONV_STUB(IfcArbitraryOpenProfileDef); - DECL_CONV_STUB(IfcPermit); - DECL_CONV_STUB(IfcOffsetCurve3D); - DECL_CONV_STUB(IfcLightSource); - DECL_CONV_STUB(IfcLightSourcePositional); - DECL_CONV_STUB(IfcCompositeProfileDef); - DECL_CONV_STUB(IfcRamp); - DECL_CONV_STUB(IfcFlowMovingDevice); - DECL_CONV_STUB(IfcSpaceHeaterType); - DECL_CONV_STUB(IfcLampType); - DECL_CONV_STUB(IfcBuildingElementComponent); - DECL_CONV_STUB(IfcReinforcingElement); - DECL_CONV_STUB(IfcReinforcingBar); - DECL_CONV_STUB(IfcElectricHeaterType); - DECL_CONV_STUB(IfcTShapeProfileDef); - DECL_CONV_STUB(IfcStructuralActivity); - DECL_CONV_STUB(IfcStructuralAction); - DECL_CONV_STUB(IfcDuctFittingType); - DECL_CONV_STUB(IfcCartesianTransformationOperator2D); - DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform); - DECL_CONV_STUB(IfcVirtualElement); - DECL_CONV_STUB(IfcRightCircularCylinder); - DECL_CONV_STUB(IfcOutletType); - DECL_CONV_STUB(IfcRelDecomposes); - DECL_CONV_STUB(IfcCovering); - DECL_CONV_STUB(IfcPolyline); - DECL_CONV_STUB(IfcPath); - DECL_CONV_STUB(IfcElementComponent); - DECL_CONV_STUB(IfcFastener); - DECL_CONV_STUB(IfcMappedItem); - DECL_CONV_STUB(IfcRectangularPyramid); - DECL_CONV_STUB(IfcCrewResource); - DECL_CONV_STUB(IfcNamedUnit); - DECL_CONV_STUB(IfcContextDependentUnit); - DECL_CONV_STUB(IfcUnitaryEquipmentType); - DECL_CONV_STUB(IfcRoof); - DECL_CONV_STUB(IfcStructuralMember); - DECL_CONV_STUB(IfcStyleModel); - DECL_CONV_STUB(IfcStyledRepresentation); - DECL_CONV_STUB(IfcSpatialStructureElement); - DECL_CONV_STUB(IfcBuilding); - DECL_CONV_STUB(IfcConnectedFaceSet); - DECL_CONV_STUB(IfcOpenShell); - DECL_CONV_STUB(IfcFacetedBrep); - DECL_CONV_STUB(IfcConic); - DECL_CONV_STUB(IfcCoveringType); - DECL_CONV_STUB(IfcRoundedRectangleProfileDef); - DECL_CONV_STUB(IfcAirTerminalType); - DECL_CONV_STUB(IfcFlowMovingDeviceType); - DECL_CONV_STUB(IfcCompressorType); - DECL_CONV_STUB(IfcIShapeProfileDef); - DECL_CONV_STUB(IfcAsymmetricIShapeProfileDef); - DECL_CONV_STUB(IfcControllerType); - DECL_CONV_STUB(IfcRailing); - DECL_CONV_STUB(IfcGroup); - DECL_CONV_STUB(IfcAsset); - DECL_CONV_STUB(IfcMaterialDefinitionRepresentation); - DECL_CONV_STUB(IfcRailingType); - DECL_CONV_STUB(IfcWall); - DECL_CONV_STUB(IfcStructuralPointConnection); - DECL_CONV_STUB(IfcPropertyListValue); - DECL_CONV_STUB(IfcFurnitureStandard); - DECL_CONV_STUB(IfcElectricGeneratorType); - DECL_CONV_STUB(IfcDoor); - DECL_CONV_STUB(IfcStyledItem); - DECL_CONV_STUB(IfcAnnotationOccurrence); - DECL_CONV_STUB(IfcAnnotationSymbolOccurrence); - DECL_CONV_STUB(IfcArbitraryClosedProfileDef); - DECL_CONV_STUB(IfcArbitraryProfileDefWithVoids); - DECL_CONV_STUB(IfcLine); - DECL_CONV_STUB(IfcFlowSegmentType); - DECL_CONV_STUB(IfcAirTerminalBoxType); - DECL_CONV_STUB(IfcPropertySingleValue); - DECL_CONV_STUB(IfcAlarmType); - DECL_CONV_STUB(IfcEllipseProfileDef); - DECL_CONV_STUB(IfcStair); - DECL_CONV_STUB(IfcSurfaceStyleShading); - DECL_CONV_STUB(IfcPumpType); - DECL_CONV_STUB(IfcDefinedSymbol); - DECL_CONV_STUB(IfcElementComponentType); - DECL_CONV_STUB(IfcFastenerType); - DECL_CONV_STUB(IfcMechanicalFastenerType); - DECL_CONV_STUB(IfcFlowFitting); - DECL_CONV_STUB(IfcLightSourceDirectional); DECL_CONV_STUB(IfcSurfaceStyle); - DECL_CONV_STUB(IfcAnnotationSurface); - DECL_CONV_STUB(IfcFlowController); - DECL_CONV_STUB(IfcBuildingStorey); - DECL_CONV_STUB(IfcWorkControl); - DECL_CONV_STUB(IfcWorkSchedule); - DECL_CONV_STUB(IfcDuctSegmentType); - DECL_CONV_STUB(IfcFace); + DECL_CONV_STUB(IfcFillAreaStyleTileSymbolWithStyle); + DECL_CONV_STUB(IfcRelationship); + DECL_CONV_STUB(IfcRelConnects); + DECL_CONV_STUB(IfcStructuralMember); DECL_CONV_STUB(IfcStructuralSurfaceMember); - DECL_CONV_STUB(IfcStructuralSurfaceMemberVarying); - DECL_CONV_STUB(IfcFaceSurface); - DECL_CONV_STUB(IfcCostSchedule); - DECL_CONV_STUB(IfcPlanarExtent); - DECL_CONV_STUB(IfcPlanarBox); - DECL_CONV_STUB(IfcColourSpecification); - DECL_CONV_STUB(IfcVector); - DECL_CONV_STUB(IfcBeam); - DECL_CONV_STUB(IfcColourRgb); - DECL_CONV_STUB(IfcStructuralPlanarAction); - DECL_CONV_STUB(IfcStructuralPlanarActionVarying); - DECL_CONV_STUB(IfcSite); - DECL_CONV_STUB(IfcDiscreteAccessoryType); - DECL_CONV_STUB(IfcVibrationIsolatorType); - DECL_CONV_STUB(IfcEvaporativeCoolerType); - DECL_CONV_STUB(IfcDistributionChamberElementType); - DECL_CONV_STUB(IfcFeatureElementAddition); - DECL_CONV_STUB(IfcStructuredDimensionCallout); - DECL_CONV_STUB(IfcCoolingTowerType); - DECL_CONV_STUB(IfcCenterLineProfileDef); - DECL_CONV_STUB(IfcWindowStyle); - DECL_CONV_STUB(IfcLightSourceGoniometric); - DECL_CONV_STUB(IfcTransformerType); - DECL_CONV_STUB(IfcMemberType); - DECL_CONV_STUB(IfcSurfaceOfLinearExtrusion); - DECL_CONV_STUB(IfcMotorConnectionType); - DECL_CONV_STUB(IfcFlowTreatmentDeviceType); - DECL_CONV_STUB(IfcDuctSilencerType); - DECL_CONV_STUB(IfcFurnishingElementType); - DECL_CONV_STUB(IfcSystemFurnitureElementType); - DECL_CONV_STUB(IfcWasteTerminalType); - DECL_CONV_STUB(IfcBSplineCurve); - DECL_CONV_STUB(IfcBezierCurve); - DECL_CONV_STUB(IfcActuatorType); - DECL_CONV_STUB(IfcDistributionControlElement); - DECL_CONV_STUB(IfcAnnotation); - DECL_CONV_STUB(IfcShellBasedSurfaceModel); - DECL_CONV_STUB(IfcActionRequest); - DECL_CONV_STUB(IfcExtrudedAreaSolid); - DECL_CONV_STUB(IfcSystem); - DECL_CONV_STUB(IfcFillAreaStyleHatching); - DECL_CONV_STUB(IfcRelVoidsElement); - DECL_CONV_STUB(IfcSurfaceCurveSweptAreaSolid); - DECL_CONV_STUB(IfcCartesianTransformationOperator3DnonUniform); - DECL_CONV_STUB(IfcCurtainWallType); + DECL_CONV_STUB(IfcCartesianTransformationOperator); + DECL_CONV_STUB(IfcCartesianTransformationOperator3D); + DECL_CONV_STUB(IfcDistributionFlowElementType); + DECL_CONV_STUB(IfcFlowTerminalType); + DECL_CONV_STUB(IfcSanitaryTerminalType); + DECL_CONV_STUB(IfcEnergyConversionDeviceType); + DECL_CONV_STUB(IfcElectricGeneratorType); + DECL_CONV_STUB(IfcResource); + DECL_CONV_STUB(IfcConstructionResource); + DECL_CONV_STUB(IfcControl); DECL_CONV_STUB(IfcEquipmentStandard); - DECL_CONV_STUB(IfcFlowStorageDeviceType); - DECL_CONV_STUB(IfcDiameterDimension); - DECL_CONV_STUB(IfcSwitchingDeviceType); - DECL_CONV_STUB(IfcWindow); - DECL_CONV_STUB(IfcFlowTreatmentDevice); - DECL_CONV_STUB(IfcChillerType); - DECL_CONV_STUB(IfcRectangleHollowProfileDef); - DECL_CONV_STUB(IfcBoxedHalfSpace); - DECL_CONV_STUB(IfcAxis2Placement2D); - DECL_CONV_STUB(IfcSpaceProgram); + DECL_CONV_STUB(IfcElectricApplianceType); + DECL_CONV_STUB(IfcFurnitureStandard); + DECL_CONV_STUB(IfcDefinedSymbol); + DECL_CONV_STUB(IfcColourSpecification); + DECL_CONV_STUB(IfcCurve); + DECL_CONV_STUB(IfcLine); + DECL_CONV_STUB(IfcLoop); + DECL_CONV_STUB(IfcProperty); + DECL_CONV_STUB(IfcComplexProperty); + DECL_CONV_STUB(IfcCovering); + DECL_CONV_STUB(IfcBoundedCurve); + DECL_CONV_STUB(IfcBSplineCurve); + DECL_CONV_STUB(IfcNamedUnit); + DECL_CONV_STUB(IfcSubContractResource); + DECL_CONV_STUB(IfcObjectPlacement); + DECL_CONV_STUB(IfcGridPlacement); + DECL_CONV_STUB(IfcPropertyDefinition); + DECL_CONV_STUB(IfcPropertySetDefinition); DECL_CONV_STUB(IfcPoint); DECL_CONV_STUB(IfcCartesianPoint); - DECL_CONV_STUB(IfcBoundedSurface); - DECL_CONV_STUB(IfcLoop); - DECL_CONV_STUB(IfcPolyLoop); - DECL_CONV_STUB(IfcTerminatorSymbol); - DECL_CONV_STUB(IfcDimensionCurveTerminator); - DECL_CONV_STUB(IfcTrapeziumProfileDef); - DECL_CONV_STUB(IfcRepresentationContext); - DECL_CONV_STUB(IfcGeometricRepresentationContext); - DECL_CONV_STUB(IfcCurveBoundedPlane); - DECL_CONV_STUB(IfcSIUnit); + DECL_CONV_STUB(IfcFaceBound); + DECL_CONV_STUB(IfcEdgeCurve); + DECL_CONV_STUB(IfcOneDirectionRepeatFactor); + DECL_CONV_STUB(IfcTwoDirectionRepeatFactor); + DECL_CONV_STUB(IfcLightSource); + DECL_CONV_STUB(IfcLightSourceAmbient); + DECL_CONV_STUB(IfcPlacement); + DECL_CONV_STUB(IfcAxis1Placement); + DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence); + DECL_CONV_STUB(IfcFlowControllerType); + DECL_CONV_STUB(IfcFlowMeterType); + DECL_CONV_STUB(IfcAnnotationCurveOccurrence); + DECL_CONV_STUB(IfcProfileDef); + DECL_CONV_STUB(IfcCompositeProfileDef); + DECL_CONV_STUB(IfcSubedge); + DECL_CONV_STUB(IfcFlowStorageDeviceType); + DECL_CONV_STUB(IfcTankType); + DECL_CONV_STUB(IfcBuildingElementComponent); + DECL_CONV_STUB(IfcBuildingElementPart); + DECL_CONV_STUB(IfcRepresentation); + DECL_CONV_STUB(IfcShapeModel); + DECL_CONV_STUB(IfcShapeRepresentation); + DECL_CONV_STUB(IfcRailing); + DECL_CONV_STUB(IfcStyleModel); + DECL_CONV_STUB(IfcStyledRepresentation); + DECL_CONV_STUB(IfcColourRgb); + DECL_CONV_STUB(IfcElementComponentType); + DECL_CONV_STUB(IfcDiscreteAccessoryType); + DECL_CONV_STUB(IfcVibrationIsolatorType); + DECL_CONV_STUB(IfcProcess); + DECL_CONV_STUB(IfcProcedure); + DECL_CONV_STUB(IfcFeatureElementAddition); + DECL_CONV_STUB(IfcEdgeFeature); + DECL_CONV_STUB(IfcTrimmedCurve); + DECL_CONV_STUB(IfcTextLiteral); + DECL_CONV_STUB(IfcParameterizedProfileDef); + DECL_CONV_STUB(IfcCraneRailAShapeProfileDef); + DECL_CONV_STUB(IfcElementComponent); + DECL_CONV_STUB(IfcCsgPrimitive3D); + DECL_CONV_STUB(IfcBlock); + DECL_CONV_STUB(IfcBuildingElementType); + DECL_CONV_STUB(IfcRailingType); + DECL_CONV_STUB(IfcStructuralPointConnection); + DECL_CONV_STUB(IfcFlowMovingDeviceType); + DECL_CONV_STUB(IfcPumpType); + DECL_CONV_STUB(IfcStructuralCurveMember); + DECL_CONV_STUB(IfcStructuralCurveMemberVarying); + DECL_CONV_STUB(IfcReinforcingElement); + DECL_CONV_STUB(IfcReinforcingMesh); + DECL_CONV_STUB(IfcPlanarExtent); + DECL_CONV_STUB(IfcPlanarBox); + DECL_CONV_STUB(IfcCooledBeamType); + DECL_CONV_STUB(IfcProjectOrderRecord); + DECL_CONV_STUB(IfcPointOnSurface); + DECL_CONV_STUB(IfcPointOnCurve); + DECL_CONV_STUB(IfcRelContainedInSpatialStructure); + DECL_CONV_STUB(IfcSimpleProperty); + DECL_CONV_STUB(IfcPropertyListValue); + DECL_CONV_STUB(IfcSpatialStructureElement); + DECL_CONV_STUB(IfcBuildingStorey); + DECL_CONV_STUB(IfcUnitaryEquipmentType); + DECL_CONV_STUB(IfcOutletType); + DECL_CONV_STUB(IfcFastenerType); + DECL_CONV_STUB(IfcGroup); + DECL_CONV_STUB(IfcSystem); + DECL_CONV_STUB(IfcStructuralAnalysisModel); + DECL_CONV_STUB(IfcSlabType); + DECL_CONV_STUB(IfcDistributionElement); + DECL_CONV_STUB(IfcDistributionFlowElement); + DECL_CONV_STUB(IfcTShapeProfileDef); + DECL_CONV_STUB(IfcPolyline); + DECL_CONV_STUB(IfcDraughtingCallout); + DECL_CONV_STUB(IfcFace); + DECL_CONV_STUB(IfcStructuralSurfaceMemberVarying); + DECL_CONV_STUB(IfcMotorConnectionType); + DECL_CONV_STUB(IfcAirToAirHeatRecoveryType); + DECL_CONV_STUB(IfcPlateType); + DECL_CONV_STUB(IfcSolidModel); + DECL_CONV_STUB(IfcCsgSolid); + DECL_CONV_STUB(IfcMechanicalFastenerType); + DECL_CONV_STUB(IfcRelDecomposes); + DECL_CONV_STUB(IfcElectricalElement); + DECL_CONV_STUB(IfcColumnType); + DECL_CONV_STUB(IfcRectangularPyramid); + DECL_CONV_STUB(IfcActionRequest); + DECL_CONV_STUB(IfcStructuralActivity); DECL_CONV_STUB(IfcStructuralReaction); DECL_CONV_STUB(IfcStructuralPointReaction); - DECL_CONV_STUB(IfcAxis1Placement); - DECL_CONV_STUB(IfcElectricApplianceType); - DECL_CONV_STUB(IfcSensorType); - DECL_CONV_STUB(IfcFurnishingElement); - DECL_CONV_STUB(IfcProtectiveDeviceType); - DECL_CONV_STUB(IfcZShapeProfileDef); - DECL_CONV_STUB(IfcScheduleTimeControl); - DECL_CONV_STUB(IfcRepresentationMap); - DECL_CONV_STUB(IfcClosedShell); - DECL_CONV_STUB(IfcBuildingElementPart); - DECL_CONV_STUB(IfcBlock); - DECL_CONV_STUB(IfcLightFixtureType); - DECL_CONV_STUB(IfcOpeningElement); - DECL_CONV_STUB(IfcLightSourceSpot); - DECL_CONV_STUB(IfcTendonAnchor); - DECL_CONV_STUB(IfcElectricFlowStorageDeviceType); - DECL_CONV_STUB(IfcSphere); - DECL_CONV_STUB(IfcDamperType); - DECL_CONV_STUB(IfcProjectOrderRecord); - DECL_CONV_STUB(IfcDistributionChamberElement); - DECL_CONV_STUB(IfcMechanicalFastener); - DECL_CONV_STUB(IfcRectangularTrimmedSurface); - DECL_CONV_STUB(IfcZone); - DECL_CONV_STUB(IfcFanType); - DECL_CONV_STUB(IfcGeometricSet); - DECL_CONV_STUB(IfcFillAreaStyleTiles); - DECL_CONV_STUB(IfcCableSegmentType); - DECL_CONV_STUB(IfcRelOverridesProperties); - DECL_CONV_STUB(IfcMeasureWithUnit); - DECL_CONV_STUB(IfcSlabType); - DECL_CONV_STUB(IfcServiceLife); - DECL_CONV_STUB(IfcFurnitureType); - DECL_CONV_STUB(IfcCostItem); - DECL_CONV_STUB(IfcReinforcingMesh); - DECL_CONV_STUB(IfcFacetedBrepWithVoids); - DECL_CONV_STUB(IfcGasTerminalType); - DECL_CONV_STUB(IfcPile); - DECL_CONV_STUB(IfcFillAreaStyleTileSymbolWithStyle); - DECL_CONV_STUB(IfcConstructionMaterialResource); - DECL_CONV_STUB(IfcAnnotationCurveOccurrence); - DECL_CONV_STUB(IfcDimensionCurve); - DECL_CONV_STUB(IfcGeometricCurveSet); - DECL_CONV_STUB(IfcRelAggregates); - DECL_CONV_STUB(IfcFaceBasedSurfaceModel); - DECL_CONV_STUB(IfcEnergyConversionDevice); - DECL_CONV_STUB(IfcRampFlight); - DECL_CONV_STUB(IfcVertexLoop); - DECL_CONV_STUB(IfcPlate); - DECL_CONV_STUB(IfcUShapeProfileDef); - DECL_CONV_STUB(IfcFaceBound); - DECL_CONV_STUB(IfcFaceOuterBound); - DECL_CONV_STUB(IfcOneDirectionRepeatFactor); - DECL_CONV_STUB(IfcBoilerType); - DECL_CONV_STUB(IfcConstructionEquipmentResource); - DECL_CONV_STUB(IfcComplexProperty); - DECL_CONV_STUB(IfcFooting); - DECL_CONV_STUB(IfcConstructionProductResource); - DECL_CONV_STUB(IfcDerivedProfileDef); - DECL_CONV_STUB(IfcPropertyTableValue); - DECL_CONV_STUB(IfcFlowMeterType); - DECL_CONV_STUB(IfcDoorStyle); - DECL_CONV_STUB(IfcUnitAssignment); - DECL_CONV_STUB(IfcFlowTerminal); - DECL_CONV_STUB(IfcCraneRailFShapeProfileDef); - DECL_CONV_STUB(IfcFlowSegment); - DECL_CONV_STUB(IfcElementQuantity); - DECL_CONV_STUB(IfcCurtainWall); - DECL_CONV_STUB(IfcDiscreteAccessory); - DECL_CONV_STUB(IfcGrid); - DECL_CONV_STUB(IfcSanitaryTerminalType); - DECL_CONV_STUB(IfcSubedge); - DECL_CONV_STUB(IfcFilterType); - DECL_CONV_STUB(IfcTendon); - DECL_CONV_STUB(IfcStructuralLoadGroup); - DECL_CONV_STUB(IfcPresentationStyleAssignment); - DECL_CONV_STUB(IfcStructuralCurveMember); - DECL_CONV_STUB(IfcLightSourceAmbient); - DECL_CONV_STUB(IfcCondition); - DECL_CONV_STUB(IfcPort); - DECL_CONV_STUB(IfcSpace); - DECL_CONV_STUB(IfcHeatExchangerType); - DECL_CONV_STUB(IfcTankType); - DECL_CONV_STUB(IfcInventory); - DECL_CONV_STUB(IfcTransportElementType); - DECL_CONV_STUB(IfcAirToAirHeatRecoveryType); - DECL_CONV_STUB(IfcStairFlight); - DECL_CONV_STUB(IfcElectricalElement); - DECL_CONV_STUB(IfcSurfaceStyleWithTextures); - DECL_CONV_STUB(IfcBoundingBox); - DECL_CONV_STUB(IfcWallType); - DECL_CONV_STUB(IfcMove); - DECL_CONV_STUB(IfcCircle); - DECL_CONV_STUB(IfcOffsetCurve2D); - DECL_CONV_STUB(IfcPointOnCurve); - DECL_CONV_STUB(IfcStructuralResultGroup); - DECL_CONV_STUB(IfcSectionedSpine); - DECL_CONV_STUB(IfcSlab); - DECL_CONV_STUB(IfcVertex); - DECL_CONV_STUB(IfcVertexPoint); + DECL_CONV_STUB(IfcStructuralAction); DECL_CONV_STUB(IfcStructuralLinearAction); DECL_CONV_STUB(IfcStructuralLinearActionVarying); - DECL_CONV_STUB(IfcBuildingElementProxyType); - DECL_CONV_STUB(IfcProjectionElement); - DECL_CONV_STUB(IfcConversionBasedUnit); - DECL_CONV_STUB(IfcGeometricRepresentationSubContext); - DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence); - DECL_CONV_STUB(IfcRoundedEdgeFeature); - DECL_CONV_STUB(IfcElectricDistributionPoint); - DECL_CONV_STUB(IfcCableCarrierSegmentType); - DECL_CONV_STUB(IfcWallStandardCase); - DECL_CONV_STUB(IfcCsgSolid); + DECL_CONV_STUB(IfcCrewResource); + DECL_CONV_STUB(IfcChamferEdgeFeature); + DECL_CONV_STUB(IfcCompositeCurve); + DECL_CONV_STUB(Ifc2DCompositeCurve); + DECL_CONV_STUB(IfcGrid); + DECL_CONV_STUB(IfcTendon); + DECL_CONV_STUB(IfcRectangleProfileDef); + DECL_CONV_STUB(IfcRoundedRectangleProfileDef); DECL_CONV_STUB(IfcBeamType); - DECL_CONV_STUB(IfcAnnotationFillArea); - DECL_CONV_STUB(IfcStructuralCurveMemberVarying); - DECL_CONV_STUB(IfcPointOnSurface); - DECL_CONV_STUB(IfcOrderAction); - DECL_CONV_STUB(IfcEdgeLoop); - DECL_CONV_STUB(IfcAnnotationFillAreaOccurrence); - DECL_CONV_STUB(IfcWorkPlan); + DECL_CONV_STUB(IfcLampType); + DECL_CONV_STUB(IfcLightSourceGoniometric); + DECL_CONV_STUB(IfcProductRepresentation); + DECL_CONV_STUB(IfcMaterialDefinitionRepresentation); + DECL_CONV_STUB(IfcPermit); + DECL_CONV_STUB(IfcContextDependentUnit); + DECL_CONV_STUB(IfcFlowMovingDevice); + DECL_CONV_STUB(IfcColumn); + DECL_CONV_STUB(IfcDistributionControlElement); + DECL_CONV_STUB(IfcProtectiveDeviceType); + DECL_CONV_STUB(IfcFlowSegment); + DECL_CONV_STUB(IfcCompressorType); + DECL_CONV_STUB(IfcCShapeProfileDef); + DECL_CONV_STUB(IfcTrapeziumProfileDef); + DECL_CONV_STUB(IfcRelDefines); + DECL_CONV_STUB(IfcTask); + DECL_CONV_STUB(IfcMove); + DECL_CONV_STUB(IfcLightSourceDirectional); + DECL_CONV_STUB(IfcCondenserType); + DECL_CONV_STUB(IfcConic); DECL_CONV_STUB(IfcEllipse); - DECL_CONV_STUB(IfcProductDefinitionShape); - DECL_CONV_STUB(IfcProjectionCurve); - DECL_CONV_STUB(IfcElectricalCircuit); - DECL_CONV_STUB(IfcRationalBezierCurve); - DECL_CONV_STUB(IfcStructuralPointAction); - DECL_CONV_STUB(IfcPipeSegmentType); - DECL_CONV_STUB(IfcTwoDirectionRepeatFactor); - DECL_CONV_STUB(IfcShapeRepresentation); - DECL_CONV_STUB(IfcPropertySet); - DECL_CONV_STUB(IfcSurfaceStyleRendering); + DECL_CONV_STUB(IfcDoorStyle); + DECL_CONV_STUB(IfcDistributionControlElementType); + DECL_CONV_STUB(IfcSensorType); + DECL_CONV_STUB(IfcAnnotationFillAreaOccurrence); + DECL_CONV_STUB(IfcWall); + DECL_CONV_STUB(IfcFurnishingElementType); + DECL_CONV_STUB(IfcFurnitureType); + DECL_CONV_STUB(IfcControllerType); + DECL_CONV_STUB(IfcFlowFitting); + DECL_CONV_STUB(IfcRepresentationContext); + DECL_CONV_STUB(IfcRepresentationMap); + DECL_CONV_STUB(IfcDirection); + DECL_CONV_STUB(IfcDimensionCurveDirectedCallout); + DECL_CONV_STUB(IfcAngularDimension); + DECL_CONV_STUB(IfcWorkControl); + DECL_CONV_STUB(IfcWorkPlan); + DECL_CONV_STUB(IfcSpatialStructureElementType); + DECL_CONV_STUB(IfcSpaceType); + DECL_CONV_STUB(IfcPort); DECL_CONV_STUB(IfcDistributionPort); - DECL_CONV_STUB(IfcPipeFittingType); + DECL_CONV_STUB(IfcOrderAction); + DECL_CONV_STUB(IfcBeam); + DECL_CONV_STUB(IfcManifoldSolidBrep); + DECL_CONV_STUB(IfcFacetedBrep); + DECL_CONV_STUB(IfcSurfaceStyleWithTextures); + DECL_CONV_STUB(IfcArbitraryClosedProfileDef); + DECL_CONV_STUB(IfcHumidifierType); + DECL_CONV_STUB(IfcPolyLoop); + DECL_CONV_STUB(IfcFlowFittingType); + DECL_CONV_STUB(IfcFillAreaStyleTiles); + DECL_CONV_STUB(IfcVertex); + DECL_CONV_STUB(IfcAnnotationFillArea); + DECL_CONV_STUB(IfcPlate); + DECL_CONV_STUB(IfcRightCircularCone); + DECL_CONV_STUB(IfcSurface); + DECL_CONV_STUB(IfcBoundedSurface); + DECL_CONV_STUB(IfcStructuralLoadGroup); + DECL_CONV_STUB(IfcGeometricRepresentationContext); + DECL_CONV_STUB(IfcTubeBundleType); + DECL_CONV_STUB(IfcStructuralPlanarAction); + DECL_CONV_STUB(IfcHeatExchangerType); + DECL_CONV_STUB(IfcFaceOuterBound); + DECL_CONV_STUB(IfcSphere); + DECL_CONV_STUB(IfcLightSourcePositional); + DECL_CONV_STUB(IfcStructuralPointAction); + DECL_CONV_STUB(IfcFlowSegmentType); + DECL_CONV_STUB(IfcFireSuppressionTerminalType); + DECL_CONV_STUB(IfcPropertySingleValue); + DECL_CONV_STUB(IfcFaceBasedSurfaceModel); + DECL_CONV_STUB(IfcAxis2Placement3D); + DECL_CONV_STUB(IfcStructuralResultGroup); + DECL_CONV_STUB(IfcHalfSpaceSolid); + DECL_CONV_STUB(IfcGasTerminalType); + DECL_CONV_STUB(IfcMember); + DECL_CONV_STUB(IfcPropertySet); + DECL_CONV_STUB(IfcCondition); + DECL_CONV_STUB(IfcPropertyEnumeratedValue); + DECL_CONV_STUB(IfcDistributionChamberElementType); + DECL_CONV_STUB(IfcTextLiteralWithExtent); + DECL_CONV_STUB(IfcFlowController); + DECL_CONV_STUB(IfcElectricDistributionPoint); DECL_CONV_STUB(IfcTransportElement); - DECL_CONV_STUB(IfcAnnotationTextOccurrence); - DECL_CONV_STUB(IfcStructuralAnalysisModel); + DECL_CONV_STUB(IfcAsset); + DECL_CONV_STUB(IfcSweptAreaSolid); + DECL_CONV_STUB(IfcRevolvedAreaSolid); + DECL_CONV_STUB(IfcFlowInstrumentType); + DECL_CONV_STUB(IfcEnergyConversionDevice); + DECL_CONV_STUB(IfcSurfaceStyleShading); + DECL_CONV_STUB(IfcSurfaceStyleRendering); + DECL_CONV_STUB(IfcBoilerType); + DECL_CONV_STUB(IfcBuildingElementProxy); + DECL_CONV_STUB(IfcLocalPlacement); + DECL_CONV_STUB(IfcZone); + DECL_CONV_STUB(IfcStair); + DECL_CONV_STUB(IfcWallStandardCase); + DECL_CONV_STUB(IfcDiameterDimension); + DECL_CONV_STUB(IfcDuctSegmentType); + DECL_CONV_STUB(IfcJunctionBoxType); + DECL_CONV_STUB(IfcCartesianTransformationOperator3DnonUniform); + DECL_CONV_STUB(IfcInventory); DECL_CONV_STUB(IfcConditionCriterion); + DECL_CONV_STUB(IfcConnectedFaceSet); + DECL_CONV_STUB(IfcOpenShell); + DECL_CONV_STUB(IfcDoor); + DECL_CONV_STUB(IfcBezierCurve); + DECL_CONV_STUB(IfcRationalBezierCurve); + DECL_CONV_STUB(IfcArbitraryProfileDefWithVoids); + DECL_CONV_STUB(IfcBooleanResult); + DECL_CONV_STUB(IfcStackTerminalType); + DECL_CONV_STUB(IfcIShapeProfileDef); + DECL_CONV_STUB(IfcAsymmetricIShapeProfileDef); + DECL_CONV_STUB(IfcEquipmentElement); + DECL_CONV_STUB(IfcClosedShell); + DECL_CONV_STUB(IfcEllipseProfileDef); + DECL_CONV_STUB(IfcPropertyBoundedValue); + DECL_CONV_STUB(IfcCoveringType); + DECL_CONV_STUB(IfcActuatorType); + DECL_CONV_STUB(IfcOffsetCurve2D); + DECL_CONV_STUB(IfcAnnotation); + DECL_CONV_STUB(IfcDistributionChamberElement); + DECL_CONV_STUB(IfcOffsetCurve3D); + DECL_CONV_STUB(IfcFooting); + DECL_CONV_STUB(IfcMappedItem); + DECL_CONV_STUB(IfcTransformerType); + DECL_CONV_STUB(IfcRightCircularCylinder); + DECL_CONV_STUB(IfcSpaceProgram); + DECL_CONV_STUB(IfcAnnotationSurface); + DECL_CONV_STUB(IfcZShapeProfileDef); + DECL_CONV_STUB(IfcRectangleHollowProfileDef); + DECL_CONV_STUB(IfcGeometricSet); + DECL_CONV_STUB(IfcGeometricCurveSet); + DECL_CONV_STUB(IfcArbitraryOpenProfileDef); + DECL_CONV_STUB(IfcFacetedBrepWithVoids); + DECL_CONV_STUB(IfcVector); + DECL_CONV_STUB(IfcServiceLife); + DECL_CONV_STUB(IfcCurveBoundedPlane); + DECL_CONV_STUB(IfcCircle); + DECL_CONV_STUB(IfcVertexLoop); + DECL_CONV_STUB(IfcSurfaceCurveSweptAreaSolid); + DECL_CONV_STUB(IfcConstructionEquipmentResource); + DECL_CONV_STUB(IfcSectionedSpine); + DECL_CONV_STUB(IfcPropertyReferenceValue); + DECL_CONV_STUB(IfcSite); + DECL_CONV_STUB(IfcPerformanceHistory); + DECL_CONV_STUB(IfcPropertyTableValue); + DECL_CONV_STUB(IfcTransportElementType); + DECL_CONV_STUB(IfcPolygonalBoundedHalfSpace); + DECL_CONV_STUB(IfcAxis2Placement2D); + DECL_CONV_STUB(IfcFillAreaStyleHatching); + DECL_CONV_STUB(IfcFastener); + DECL_CONV_STUB(IfcScheduleTimeControl); + DECL_CONV_STUB(IfcElectricMotorType); + DECL_CONV_STUB(IfcTimeSeriesSchedule); + DECL_CONV_STUB(IfcPipeSegmentType); + DECL_CONV_STUB(IfcFlowTerminal); + DECL_CONV_STUB(IfcWallType); + DECL_CONV_STUB(IfcCoilType); + DECL_CONV_STUB(IfcFurnishingElement); + DECL_CONV_STUB(IfcWasteTerminalType); + DECL_CONV_STUB(IfcWindow); + DECL_CONV_STUB(IfcElectricFlowStorageDeviceType); + DECL_CONV_STUB(IfcRelAggregates); + DECL_CONV_STUB(IfcRamp); + DECL_CONV_STUB(IfcLinearDimension); + DECL_CONV_STUB(IfcElementarySurface); + DECL_CONV_STUB(IfcConstructionProductResource); + DECL_CONV_STUB(IfcCableSegmentType); + DECL_CONV_STUB(IfcPath); + DECL_CONV_STUB(IfcActor); + DECL_CONV_STUB(IfcOccupant); + DECL_CONV_STUB(IfcSwitchingDeviceType); + DECL_CONV_STUB(IfcSweptSurface); + DECL_CONV_STUB(IfcSurfaceOfLinearExtrusion); + DECL_CONV_STUB(IfcShellBasedSurfaceModel); + DECL_CONV_STUB(IfcBuilding); + DECL_CONV_STUB(IfcSIUnit); + DECL_CONV_STUB(IfcDiscreteAccessory); + DECL_CONV_STUB(IfcSystemFurnitureElementType); + DECL_CONV_STUB(IfcElementAssembly); + DECL_CONV_STUB(IfcCoolingTowerType); + DECL_CONV_STUB(IfcLightSourceSpot); + DECL_CONV_STUB(IfcEvaporatorType); + DECL_CONV_STUB(IfcSpaceHeaterType); + DECL_CONV_STUB(IfcElementQuantity); + DECL_CONV_STUB(IfcRampFlight); + DECL_CONV_STUB(IfcConversionBasedUnit); + DECL_CONV_STUB(IfcExtrudedAreaSolid); + DECL_CONV_STUB(IfcProjectOrder); + DECL_CONV_STUB(IfcBooleanClippingResult); + DECL_CONV_STUB(IfcReinforcingBar); + DECL_CONV_STUB(IfcCenterLineProfileDef); + DECL_CONV_STUB(IfcUShapeProfileDef); + DECL_CONV_STUB(IfcBoundingBox); + DECL_CONV_STUB(IfcWindowStyle); + DECL_CONV_STUB(IfcMemberType); + DECL_CONV_STUB(IfcLightFixtureType); + DECL_CONV_STUB(IfcFlowStorageDevice); + DECL_CONV_STUB(IfcTopologyRepresentation); + DECL_CONV_STUB(IfcRelDefinesByProperties); + DECL_CONV_STUB(IfcRelOverridesProperties); + DECL_CONV_STUB(IfcStairFlightType); + DECL_CONV_STUB(IfcCircleProfileDef); + DECL_CONV_STUB(IfcSweptDiskSolid); + DECL_CONV_STUB(IfcStructuralPlanarActionVarying); + DECL_CONV_STUB(IfcValveType); + DECL_CONV_STUB(IfcUnitAssignment); + DECL_CONV_STUB(IfcVirtualElement); + DECL_CONV_STUB(IfcStructuralCurveConnection); + DECL_CONV_STUB(IfcAirTerminalType); + DECL_CONV_STUB(IfcFlowTreatmentDeviceType); + DECL_CONV_STUB(IfcRoof); + DECL_CONV_STUB(IfcElectricTimeControlType); + DECL_CONV_STUB(IfcPile); + DECL_CONV_STUB(IfcCostSchedule); + DECL_CONV_STUB(IfcRampFlightType); + DECL_CONV_STUB(IfcDerivedProfileDef); + DECL_CONV_STUB(IfcCostItem); + DECL_CONV_STUB(IfcEvaporativeCoolerType); + DECL_CONV_STUB(IfcChillerType); + DECL_CONV_STUB(IfcBoxedHalfSpace); + DECL_CONV_STUB(IfcCurtainWallType); + DECL_CONV_STUB(IfcGeometricRepresentationSubContext); + DECL_CONV_STUB(IfcDimensionCurve); + DECL_CONV_STUB(IfcPlane); + DECL_CONV_STUB(IfcProjectionCurve); + DECL_CONV_STUB(IfcDamperType); + DECL_CONV_STUB(IfcMechanicalFastener); + DECL_CONV_STUB(IfcDuctSilencerType); + DECL_CONV_STUB(IfcLaborResource); + DECL_CONV_STUB(IfcFanType); + DECL_CONV_STUB(IfcProjectionElement); + DECL_CONV_STUB(IfcCraneRailFShapeProfileDef); + DECL_CONV_STUB(IfcProject); + DECL_CONV_STUB(IfcRelVoidsElement); + DECL_CONV_STUB(IfcElectricalCircuit); + DECL_CONV_STUB(IfcLShapeProfileDef); + DECL_CONV_STUB(IfcFlowTreatmentDevice); + DECL_CONV_STUB(IfcVertexPoint); + DECL_CONV_STUB(IfcAnnotationTextOccurrence); + DECL_CONV_STUB(IfcFilterType); + DECL_CONV_STUB(IfcEdgeLoop); + DECL_CONV_STUB(IfcCircleHollowProfileDef); + DECL_CONV_STUB(IfcAirTerminalBoxType); + DECL_CONV_STUB(IfcStructuredDimensionCallout); + DECL_CONV_STUB(IfcCableCarrierSegmentType); + DECL_CONV_STUB(IfcDuctFittingType); + DECL_CONV_STUB(IfcRectangularTrimmedSurface); + DECL_CONV_STUB(IfcProductDefinitionShape); + DECL_CONV_STUB(IfcStairFlight); + DECL_CONV_STUB(IfcSlab); + DECL_CONV_STUB(IfcPipeFittingType); + DECL_CONV_STUB(IfcSpace); + DECL_CONV_STUB(IfcBuildingElementProxyType); + DECL_CONV_STUB(IfcAlarmType); + DECL_CONV_STUB(IfcCableCarrierFittingType); + DECL_CONV_STUB(IfcRoundedEdgeFeature); + DECL_CONV_STUB(IfcFaceSurface); + DECL_CONV_STUB(IfcCartesianTransformationOperator2D); + DECL_CONV_STUB(IfcTendonAnchor); + DECL_CONV_STUB(IfcWorkSchedule); + DECL_CONV_STUB(IfcSurfaceOfRevolution); + DECL_CONV_STUB(IfcElectricHeaterType); + DECL_CONV_STUB(IfcMeasureWithUnit); + DECL_CONV_STUB(IfcOrientedEdge); + DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform); + DECL_CONV_STUB(IfcRelFillsElement); + DECL_CONV_STUB(IfcConstructionMaterialResource); + DECL_CONV_STUB(IfcRadiusDimension); #undef DECL_CONV_STUB diff --git a/code/IFCUtil.h b/code/IFCUtil.h index 8d329c5d6..9a84c30ef 100644 --- a/code/IFCUtil.h +++ b/code/IFCUtil.h @@ -271,6 +271,7 @@ IfcFloat ConvertSIPrefix(const std::string& prefix); // IFCProfile.cpp bool ProcessProfile(const IfcProfileDef& prof, TempMesh& meshout, ConversionData& conv); +bool ProcessCurve(const IfcCurve& curve, TempMesh& meshout, ConversionData& conv); // IFCMaterial.cpp unsigned int ProcessMaterials(uint64_t id, unsigned int prevMatId, ConversionData& conv, bool forceDefaultMat); diff --git a/scripts/IFCImporter/entitylist.txt b/scripts/IFCImporter/entitylist.txt index ef91e2f56..3c7a9d7eb 100644 --- a/scripts/IFCImporter/entitylist.txt +++ b/scripts/IFCImporter/entitylist.txt @@ -1,16 +1,17 @@ -# ============================================================================== +# ============================================================================== # List of IFC structures needed by Assimp -# ============================================================================== +# ============================================================================== # use genentitylist.sh to update this list -# This machine-generated list is not complete, it lacks many intermediate +# This machine-generated list is not complete, it lacks many intermediate # classes in the inheritance hierarchy. Those are magically augmented by the -# code generator. Also, the names of all used entities need to be present +# code generator. Also, the names of all used entities need to be present # in the source code for this to work. IfcAnnotation IfcArbitraryClosedProfileDef IfcArbitraryOpenProfileDef +IfcArbitraryProfileDefWithVoids IfcAxis1Placement IfcAxis2Placement IfcAxis2Placement2D diff --git a/scripts/IFCImporter/schema.exp b/scripts/IFCImporter/schema.exp new file mode 100644 index 000000000..ae978a6e6 --- /dev/null +++ b/scripts/IFCImporter/schema.exp @@ -0,0 +1,9571 @@ +(* +Copyright by: +International Alliance for Interoperability, 1996-2005 + +All rights reserved. No part of this documentation may be +reproduced, stored in a retrieval system, or transmitted +in any form or by any means, without the prior written +permission of the owner. + +Contents: +full IFC object model EXPRESS definitions for the IFC2x Edition 3 final version + + +- express longform distribution +- compiled for EXPRESS version 1 technical corrigendum 2 + +Issue date: +December 15, 2005 + +Development Team: +Modeling Support Group of the +International Alliance for Interoperability +compiled by Thomas Liebich tl@aec3.com +*) +SCHEMA IFC2X3; + +TYPE IfcAbsorbedDoseMeasure = REAL; +END_TYPE; + +TYPE IfcAccelerationMeasure = REAL; +END_TYPE; + +TYPE IfcAmountOfSubstanceMeasure = REAL; +END_TYPE; + +TYPE IfcAngularVelocityMeasure = REAL; +END_TYPE; + +TYPE IfcAreaMeasure = REAL; +END_TYPE; + +TYPE IfcBoolean = BOOLEAN; +END_TYPE; + +TYPE IfcBoxAlignment = IfcLabel; + WHERE + WR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']; +END_TYPE; + +TYPE IfcComplexNumber = ARRAY [1:2] OF REAL; +END_TYPE; + +TYPE IfcCompoundPlaneAngleMeasure = LIST [3:3] OF INTEGER; + WHERE + WR1 : { -360 <= SELF[1] < 360 }; + WR2 : { -60 <= SELF[2] < 60 }; + WR3 : { -60 <= SELF[3] < 60 }; + WR4 : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0)) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0)); +END_TYPE; + +TYPE IfcContextDependentMeasure = REAL; +END_TYPE; + +TYPE IfcCountMeasure = NUMBER; +END_TYPE; + +TYPE IfcCurvatureMeasure = REAL; +END_TYPE; + +TYPE IfcDayInMonthNumber = INTEGER; +END_TYPE; + +TYPE IfcDaylightSavingHour = INTEGER; + WHERE + WR1 : { 0 <= SELF <= 2 }; +END_TYPE; + +TYPE IfcDescriptiveMeasure = STRING; +END_TYPE; + +TYPE IfcDimensionCount = INTEGER; + WHERE + WR1 : { 0 < SELF <= 3 }; +END_TYPE; + +TYPE IfcDoseEquivalentMeasure = REAL; +END_TYPE; + +TYPE IfcDynamicViscosityMeasure = REAL; +END_TYPE; + +TYPE IfcElectricCapacitanceMeasure = REAL; +END_TYPE; + +TYPE IfcElectricChargeMeasure = REAL; +END_TYPE; + +TYPE IfcElectricConductanceMeasure = REAL; +END_TYPE; + +TYPE IfcElectricCurrentMeasure = REAL; +END_TYPE; + +TYPE IfcElectricResistanceMeasure = REAL; +END_TYPE; + +TYPE IfcElectricVoltageMeasure = REAL; +END_TYPE; + +TYPE IfcEnergyMeasure = REAL; +END_TYPE; + +TYPE IfcFontStyle = STRING; + WHERE + WR1 : SELF IN ['normal','italic','oblique']; +END_TYPE; + +TYPE IfcFontVariant = STRING; + WHERE + WR1 : SELF IN ['normal','small-caps']; +END_TYPE; + +TYPE IfcFontWeight = STRING; + WHERE + WR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900']; +END_TYPE; + +TYPE IfcForceMeasure = REAL; +END_TYPE; + +TYPE IfcFrequencyMeasure = REAL; +END_TYPE; + +TYPE IfcGloballyUniqueId = STRING(22) FIXED; +END_TYPE; + +TYPE IfcHeatFluxDensityMeasure = REAL; +END_TYPE; + +TYPE IfcHeatingValueMeasure = REAL; + WHERE + WR1 : SELF > 0.; +END_TYPE; + +TYPE IfcHourInDay = INTEGER; + WHERE + WR1 : { 0 <= SELF < 24 }; +END_TYPE; + +TYPE IfcIdentifier = STRING; +END_TYPE; + +TYPE IfcIlluminanceMeasure = REAL; +END_TYPE; + +TYPE IfcInductanceMeasure = REAL; +END_TYPE; + +TYPE IfcInteger = INTEGER; +END_TYPE; + +TYPE IfcIntegerCountRateMeasure = INTEGER; +END_TYPE; + +TYPE IfcIonConcentrationMeasure = REAL; +END_TYPE; + +TYPE IfcIsothermalMoistureCapacityMeasure = REAL; +END_TYPE; + +TYPE IfcKinematicViscosityMeasure = REAL; +END_TYPE; + +TYPE IfcLabel = STRING; +END_TYPE; + +TYPE IfcLengthMeasure = REAL; +END_TYPE; + +TYPE IfcLinearForceMeasure = REAL; +END_TYPE; + +TYPE IfcLinearMomentMeasure = REAL; +END_TYPE; + +TYPE IfcLinearStiffnessMeasure = REAL; +END_TYPE; + +TYPE IfcLinearVelocityMeasure = REAL; +END_TYPE; + +TYPE IfcLogical = LOGICAL; +END_TYPE; + +TYPE IfcLuminousFluxMeasure = REAL; +END_TYPE; + +TYPE IfcLuminousIntensityDistributionMeasure = REAL; +END_TYPE; + +TYPE IfcLuminousIntensityMeasure = REAL; +END_TYPE; + +TYPE IfcMagneticFluxDensityMeasure = REAL; +END_TYPE; + +TYPE IfcMagneticFluxMeasure = REAL; +END_TYPE; + +TYPE IfcMassDensityMeasure = REAL; +END_TYPE; + +TYPE IfcMassFlowRateMeasure = REAL; +END_TYPE; + +TYPE IfcMassMeasure = REAL; +END_TYPE; + +TYPE IfcMassPerLengthMeasure = REAL; +END_TYPE; + +TYPE IfcMinuteInHour = INTEGER; + WHERE + WR1 : {0 <= SELF <= 59 }; +END_TYPE; + +TYPE IfcModulusOfElasticityMeasure = REAL; +END_TYPE; + +TYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL; +END_TYPE; + +TYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL; +END_TYPE; + +TYPE IfcModulusOfSubgradeReactionMeasure = REAL; +END_TYPE; + +TYPE IfcMoistureDiffusivityMeasure = REAL; +END_TYPE; + +TYPE IfcMolecularWeightMeasure = REAL; +END_TYPE; + +TYPE IfcMomentOfInertiaMeasure = REAL; +END_TYPE; + +TYPE IfcMonetaryMeasure = REAL; +END_TYPE; + +TYPE IfcMonthInYearNumber = INTEGER; + WHERE + WR1 : { 1<= SELF <= 12 }; +END_TYPE; + +TYPE IfcNormalisedRatioMeasure = IfcRatioMeasure; + WHERE + WR1 : {0.0 <= SELF <= 1.0}; +END_TYPE; + +TYPE IfcNumericMeasure = NUMBER; +END_TYPE; + +TYPE IfcPHMeasure = REAL; + WHERE + WR21 : {0.0 <= SELF <= 14.0}; +END_TYPE; + +TYPE IfcParameterValue = REAL; +END_TYPE; + +TYPE IfcPlanarForceMeasure = REAL; +END_TYPE; + +TYPE IfcPlaneAngleMeasure = REAL; +END_TYPE; + +TYPE IfcPositiveLengthMeasure = IfcLengthMeasure; + WHERE + WR1 : SELF > 0.; +END_TYPE; + +TYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure; + WHERE + WR1 : SELF > 0.; +END_TYPE; + +TYPE IfcPositiveRatioMeasure = IfcRatioMeasure; + WHERE + WR1 : SELF > 0.; +END_TYPE; + +TYPE IfcPowerMeasure = REAL; +END_TYPE; + +TYPE IfcPresentableText = STRING; +END_TYPE; + +TYPE IfcPressureMeasure = REAL; +END_TYPE; + +TYPE IfcRadioActivityMeasure = REAL; +END_TYPE; + +TYPE IfcRatioMeasure = REAL; +END_TYPE; + +TYPE IfcReal = REAL; +END_TYPE; + +TYPE IfcRotationalFrequencyMeasure = REAL; +END_TYPE; + +TYPE IfcRotationalMassMeasure = REAL; +END_TYPE; + +TYPE IfcRotationalStiffnessMeasure = REAL; +END_TYPE; + +TYPE IfcSecondInMinute = REAL; + WHERE + WR1 : { 0. <= SELF < 60. }; +END_TYPE; + +TYPE IfcSectionModulusMeasure = REAL; +END_TYPE; + +TYPE IfcSectionalAreaIntegralMeasure = REAL; +END_TYPE; + +TYPE IfcShearModulusMeasure = REAL; +END_TYPE; + +TYPE IfcSolidAngleMeasure = REAL; +END_TYPE; + +TYPE IfcSoundPowerMeasure = REAL; +END_TYPE; + +TYPE IfcSoundPressureMeasure = REAL; +END_TYPE; + +TYPE IfcSpecificHeatCapacityMeasure = REAL; +END_TYPE; + +TYPE IfcSpecularExponent = REAL; +END_TYPE; + +TYPE IfcSpecularRoughness = REAL; + WHERE + WR1 : {0.0 <= SELF <= 1.0}; +END_TYPE; + +TYPE IfcTemperatureGradientMeasure = REAL; +END_TYPE; + +TYPE IfcText = STRING; +END_TYPE; + +TYPE IfcTextAlignment = STRING; + WHERE + WR1 : SELF IN ['left', 'right', 'center', 'justify']; +END_TYPE; + +TYPE IfcTextDecoration = STRING; + WHERE + WR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink']; +END_TYPE; + +TYPE IfcTextFontName = STRING; +END_TYPE; + +TYPE IfcTextTransformation = STRING; + WHERE + WR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none']; +END_TYPE; + +TYPE IfcThermalAdmittanceMeasure = REAL; +END_TYPE; + +TYPE IfcThermalConductivityMeasure = REAL; +END_TYPE; + +TYPE IfcThermalExpansionCoefficientMeasure = REAL; +END_TYPE; + +TYPE IfcThermalResistanceMeasure = REAL; +END_TYPE; + +TYPE IfcThermalTransmittanceMeasure = REAL; +END_TYPE; + +TYPE IfcThermodynamicTemperatureMeasure = REAL; +END_TYPE; + +TYPE IfcTimeMeasure = REAL; +END_TYPE; + +TYPE IfcTimeStamp = INTEGER; +END_TYPE; + +TYPE IfcTorqueMeasure = REAL; +END_TYPE; + +TYPE IfcVaporPermeabilityMeasure = REAL; +END_TYPE; + +TYPE IfcVolumeMeasure = REAL; +END_TYPE; + +TYPE IfcVolumetricFlowRateMeasure = REAL; +END_TYPE; + +TYPE IfcWarpingConstantMeasure = REAL; +END_TYPE; + +TYPE IfcWarpingMomentMeasure = REAL; +END_TYPE; + +TYPE IfcYearNumber = INTEGER; +END_TYPE; + +TYPE IfcActionSourceTypeEnum = ENUMERATION OF + (DEAD_LOAD_G + ,COMPLETION_G1 + ,LIVE_LOAD_Q + ,SNOW_S + ,WIND_W + ,PRESTRESSING_P + ,SETTLEMENT_U + ,TEMPERATURE_T + ,EARTHQUAKE_E + ,FIRE + ,IMPULSE + ,IMPACT + ,TRANSPORT + ,ERECTION + ,PROPPING + ,SYSTEM_IMPERFECTION + ,SHRINKAGE + ,CREEP + ,LACK_OF_FIT + ,BUOYANCY + ,ICE + ,CURRENT + ,WAVE + ,RAIN + ,BRAKES + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcActionTypeEnum = ENUMERATION OF + (PERMANENT_G + ,VARIABLE_Q + ,EXTRAORDINARY_A + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcActuatorTypeEnum = ENUMERATION OF + (ELECTRICACTUATOR + ,HANDOPERATEDACTUATOR + ,HYDRAULICACTUATOR + ,PNEUMATICACTUATOR + ,THERMOSTATICACTUATOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAddressTypeEnum = ENUMERATION OF + (OFFICE + ,SITE + ,HOME + ,DISTRIBUTIONPOINT + ,USERDEFINED); +END_TYPE; + +TYPE IfcAheadOrBehind = ENUMERATION OF + (AHEAD + ,BEHIND); +END_TYPE; + +TYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF + (CONSTANTFLOW + ,VARIABLEFLOWPRESSUREDEPENDANT + ,VARIABLEFLOWPRESSUREINDEPENDANT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAirTerminalTypeEnum = ENUMERATION OF + (GRILLE + ,REGISTER + ,DIFFUSER + ,EYEBALL + ,IRIS + ,LINEARGRILLE + ,LINEARDIFFUSER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF + (FIXEDPLATECOUNTERFLOWEXCHANGER + ,FIXEDPLATECROSSFLOWEXCHANGER + ,FIXEDPLATEPARALLELFLOWEXCHANGER + ,ROTARYWHEEL + ,RUNAROUNDCOILLOOP + ,HEATPIPE + ,TWINTOWERENTHALPYRECOVERYLOOPS + ,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS + ,THERMOSIPHONCOILTYPEHEATEXCHANGERS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAlarmTypeEnum = ENUMERATION OF + (BELL + ,BREAKGLASSBUTTON + ,LIGHT + ,MANUALPULLBOX + ,SIREN + ,WHISTLE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAnalysisModelTypeEnum = ENUMERATION OF + (IN_PLANE_LOADING_2D + ,OUT_PLANE_LOADING_2D + ,LOADING_3D + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF + (FIRST_ORDER_THEORY + ,SECOND_ORDER_THEORY + ,THIRD_ORDER_THEORY + ,FULL_NONLINEAR_THEORY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcArithmeticOperatorEnum = ENUMERATION OF + (ADD + ,DIVIDE + ,MULTIPLY + ,SUBTRACT); +END_TYPE; + +TYPE IfcAssemblyPlaceEnum = ENUMERATION OF + (SITE + ,FACTORY + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBSplineCurveForm = ENUMERATION OF + (POLYLINE_FORM + ,CIRCULAR_ARC + ,ELLIPTIC_ARC + ,PARABOLIC_ARC + ,HYPERBOLIC_ARC + ,UNSPECIFIED); +END_TYPE; + +TYPE IfcBeamTypeEnum = ENUMERATION OF + (BEAM + ,JOIST + ,LINTEL + ,T_BEAM + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBenchmarkEnum = ENUMERATION OF + (GREATERTHAN + ,GREATERTHANOREQUALTO + ,LESSTHAN + ,LESSTHANOREQUALTO + ,EQUALTO + ,NOTEQUALTO); +END_TYPE; + +TYPE IfcBoilerTypeEnum = ENUMERATION OF + (WATER + ,STEAM + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBooleanOperator = ENUMERATION OF + (UNION + ,INTERSECTION + ,DIFFERENCE); +END_TYPE; + +TYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF + (BEND + ,CROSS + ,REDUCER + ,TEE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF + (CABLELADDERSEGMENT + ,CABLETRAYSEGMENT + ,CABLETRUNKINGSEGMENT + ,CONDUITSEGMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCableSegmentTypeEnum = ENUMERATION OF + (CABLESEGMENT + ,CONDUCTORSEGMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcChangeActionEnum = ENUMERATION OF + (NOCHANGE + ,MODIFIED + ,ADDED + ,DELETED + ,MODIFIEDADDED + ,MODIFIEDDELETED); +END_TYPE; + +TYPE IfcChillerTypeEnum = ENUMERATION OF + (AIRCOOLED + ,WATERCOOLED + ,HEATRECOVERY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCoilTypeEnum = ENUMERATION OF + (DXCOOLINGCOIL + ,WATERCOOLINGCOIL + ,STEAMHEATINGCOIL + ,WATERHEATINGCOIL + ,ELECTRICHEATINGCOIL + ,GASHEATINGCOIL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcColumnTypeEnum = ENUMERATION OF + (COLUMN + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCompressorTypeEnum = ENUMERATION OF + (DYNAMIC + ,RECIPROCATING + ,ROTARY + ,SCROLL + ,TROCHOIDAL + ,SINGLESTAGE + ,BOOSTER + ,OPENTYPE + ,HERMETIC + ,SEMIHERMETIC + ,WELDEDSHELLHERMETIC + ,ROLLINGPISTON + ,ROTARYVANE + ,SINGLESCREW + ,TWINSCREW + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCondenserTypeEnum = ENUMERATION OF + (WATERCOOLEDSHELLTUBE + ,WATERCOOLEDSHELLCOIL + ,WATERCOOLEDTUBEINTUBE + ,WATERCOOLEDBRAZEDPLATE + ,AIRCOOLED + ,EVAPORATIVECOOLED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConnectionTypeEnum = ENUMERATION OF + (ATPATH + ,ATSTART + ,ATEND + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConstraintEnum = ENUMERATION OF + (HARD + ,SOFT + ,ADVISORY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcControllerTypeEnum = ENUMERATION OF + (FLOATING + ,PROPORTIONAL + ,PROPORTIONALINTEGRAL + ,PROPORTIONALINTEGRALDERIVATIVE + ,TIMEDTWOPOSITION + ,TWOPOSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCooledBeamTypeEnum = ENUMERATION OF + (ACTIVE + ,PASSIVE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCoolingTowerTypeEnum = ENUMERATION OF + (NATURALDRAFT + ,MECHANICALINDUCEDDRAFT + ,MECHANICALFORCEDDRAFT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCostScheduleTypeEnum = ENUMERATION OF + (BUDGET + ,COSTPLAN + ,ESTIMATE + ,TENDER + ,PRICEDBILLOFQUANTITIES + ,UNPRICEDBILLOFQUANTITIES + ,SCHEDULEOFRATES + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCoveringTypeEnum = ENUMERATION OF + (CEILING + ,FLOORING + ,CLADDING + ,ROOFING + ,INSULATION + ,MEMBRANE + ,SLEEVING + ,WRAPPING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCurrencyEnum = ENUMERATION OF + (AED + ,AES + ,ATS + ,AUD + ,BBD + ,BEG + ,BGL + ,BHD + ,BMD + ,BND + ,BRL + ,BSD + ,BWP + ,BZD + ,CAD + ,CBD + ,CHF + ,CLP + ,CNY + ,CYS + ,CZK + ,DDP + ,DEM + ,DKK + ,EGL + ,EST + ,EUR + ,FAK + ,FIM + ,FJD + ,FKP + ,FRF + ,GBP + ,GIP + ,GMD + ,GRX + ,HKD + ,HUF + ,ICK + ,IDR + ,ILS + ,INR + ,IRP + ,ITL + ,JMD + ,JOD + ,JPY + ,KES + ,KRW + ,KWD + ,KYD + ,LKR + ,LUF + ,MTL + ,MUR + ,MXN + ,MYR + ,NLG + ,NZD + ,OMR + ,PGK + ,PHP + ,PKR + ,PLN + ,PTN + ,QAR + ,RUR + ,SAR + ,SCR + ,SEK + ,SGD + ,SKP + ,THB + ,TRL + ,TTD + ,TWD + ,USD + ,VEB + ,VND + ,XEU + ,ZAR + ,ZWD + ,NOK); +END_TYPE; + +TYPE IfcCurtainWallTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDamperTypeEnum = ENUMERATION OF + (CONTROLDAMPER + ,FIREDAMPER + ,SMOKEDAMPER + ,FIRESMOKEDAMPER + ,BACKDRAFTDAMPER + ,RELIEFDAMPER + ,BLASTDAMPER + ,GRAVITYDAMPER + ,GRAVITYRELIEFDAMPER + ,BALANCINGDAMPER + ,FUMEHOODEXHAUST + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDataOriginEnum = ENUMERATION OF + (MEASURED + ,PREDICTED + ,SIMULATED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDerivedUnitEnum = ENUMERATION OF + (ANGULARVELOCITYUNIT + ,COMPOUNDPLANEANGLEUNIT + ,DYNAMICVISCOSITYUNIT + ,HEATFLUXDENSITYUNIT + ,INTEGERCOUNTRATEUNIT + ,ISOTHERMALMOISTURECAPACITYUNIT + ,KINEMATICVISCOSITYUNIT + ,LINEARVELOCITYUNIT + ,MASSDENSITYUNIT + ,MASSFLOWRATEUNIT + ,MOISTUREDIFFUSIVITYUNIT + ,MOLECULARWEIGHTUNIT + ,SPECIFICHEATCAPACITYUNIT + ,THERMALADMITTANCEUNIT + ,THERMALCONDUCTANCEUNIT + ,THERMALRESISTANCEUNIT + ,THERMALTRANSMITTANCEUNIT + ,VAPORPERMEABILITYUNIT + ,VOLUMETRICFLOWRATEUNIT + ,ROTATIONALFREQUENCYUNIT + ,TORQUEUNIT + ,MOMENTOFINERTIAUNIT + ,LINEARMOMENTUNIT + ,LINEARFORCEUNIT + ,PLANARFORCEUNIT + ,MODULUSOFELASTICITYUNIT + ,SHEARMODULUSUNIT + ,LINEARSTIFFNESSUNIT + ,ROTATIONALSTIFFNESSUNIT + ,MODULUSOFSUBGRADEREACTIONUNIT + ,ACCELERATIONUNIT + ,CURVATUREUNIT + ,HEATINGVALUEUNIT + ,IONCONCENTRATIONUNIT + ,LUMINOUSINTENSITYDISTRIBUTIONUNIT + ,MASSPERLENGTHUNIT + ,MODULUSOFLINEARSUBGRADEREACTIONUNIT + ,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT + ,PHUNIT + ,ROTATIONALMASSUNIT + ,SECTIONAREAINTEGRALUNIT + ,SECTIONMODULUSUNIT + ,SOUNDPOWERUNIT + ,SOUNDPRESSUREUNIT + ,TEMPERATUREGRADIENTUNIT + ,THERMALEXPANSIONCOEFFICIENTUNIT + ,WARPINGCONSTANTUNIT + ,WARPINGMOMENTUNIT + ,USERDEFINED); +END_TYPE; + +TYPE IfcDimensionExtentUsage = ENUMERATION OF + (ORIGIN + ,TARGET); +END_TYPE; + +TYPE IfcDirectionSenseEnum = ENUMERATION OF + (POSITIVE + ,NEGATIVE); +END_TYPE; + +TYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF + (FORMEDDUCT + ,INSPECTIONCHAMBER + ,INSPECTIONPIT + ,MANHOLE + ,METERCHAMBER + ,SUMP + ,TRENCH + ,VALVECHAMBER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDocumentConfidentialityEnum = ENUMERATION OF + (PUBLIC + ,RESTRICTED + ,CONFIDENTIAL + ,PERSONAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDocumentStatusEnum = ENUMERATION OF + (DRAFT + ,FINALDRAFT + ,FINAL + ,REVISION + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorPanelOperationEnum = ENUMERATION OF + (SWINGING + ,DOUBLE_ACTING + ,SLIDING + ,FOLDING + ,REVOLVING + ,ROLLINGUP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorPanelPositionEnum = ENUMERATION OF + (LEFT + ,MIDDLE + ,RIGHT + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorStyleConstructionEnum = ENUMERATION OF + (ALUMINIUM + ,HIGH_GRADE_STEEL + ,STEEL + ,WOOD + ,ALUMINIUM_WOOD + ,ALUMINIUM_PLASTIC + ,PLASTIC + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorStyleOperationEnum = ENUMERATION OF + (SINGLE_SWING_LEFT + ,SINGLE_SWING_RIGHT + ,DOUBLE_DOOR_SINGLE_SWING + ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT + ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT + ,DOUBLE_SWING_LEFT + ,DOUBLE_SWING_RIGHT + ,DOUBLE_DOOR_DOUBLE_SWING + ,SLIDING_TO_LEFT + ,SLIDING_TO_RIGHT + ,DOUBLE_DOOR_SLIDING + ,FOLDING_TO_LEFT + ,FOLDING_TO_RIGHT + ,DOUBLE_DOOR_FOLDING + ,REVOLVING + ,ROLLINGUP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDuctFittingTypeEnum = ENUMERATION OF + (BEND + ,CONNECTOR + ,ENTRY + ,EXIT + ,JUNCTION + ,OBSTRUCTION + ,TRANSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDuctSegmentTypeEnum = ENUMERATION OF + (RIGIDSEGMENT + ,FLEXIBLESEGMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDuctSilencerTypeEnum = ENUMERATION OF + (FLATOVAL + ,RECTANGULAR + ,ROUND + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricApplianceTypeEnum = ENUMERATION OF + (COMPUTER + ,DIRECTWATERHEATER + ,DISHWASHER + ,ELECTRICCOOKER + ,ELECTRICHEATER + ,FACSIMILE + ,FREESTANDINGFAN + ,FREEZER + ,FRIDGE_FREEZER + ,HANDDRYER + ,INDIRECTWATERHEATER + ,MICROWAVE + ,PHOTOCOPIER + ,PRINTER + ,REFRIGERATOR + ,RADIANTHEATER + ,SCANNER + ,TELEPHONE + ,TUMBLEDRYER + ,TV + ,VENDINGMACHINE + ,WASHINGMACHINE + ,WATERHEATER + ,WATERCOOLER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricCurrentEnum = ENUMERATION OF + (ALTERNATING + ,DIRECT + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricDistributionPointFunctionEnum = ENUMERATION OF + (ALARMPANEL + ,CONSUMERUNIT + ,CONTROLPANEL + ,DISTRIBUTIONBOARD + ,GASDETECTORPANEL + ,INDICATORPANEL + ,MIMICPANEL + ,MOTORCONTROLCENTRE + ,SWITCHBOARD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF + (BATTERY + ,CAPACITORBANK + ,HARMONICFILTER + ,INDUCTORBANK + ,UPS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricHeaterTypeEnum = ENUMERATION OF + (ELECTRICPOINTHEATER + ,ELECTRICCABLEHEATER + ,ELECTRICMATHEATER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricMotorTypeEnum = ENUMERATION OF + (DC + ,INDUCTION + ,POLYPHASE + ,RELUCTANCESYNCHRONOUS + ,SYNCHRONOUS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF + (TIMECLOCK + ,TIMEDELAY + ,RELAY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElementAssemblyTypeEnum = ENUMERATION OF + (ACCESSORY_ASSEMBLY + ,ARCH + ,BEAM_GRID + ,BRACED_FRAME + ,GIRDER + ,REINFORCEMENT_UNIT + ,RIGID_FRAME + ,SLAB_FIELD + ,TRUSS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElementCompositionEnum = ENUMERATION OF + (COMPLEX + ,ELEMENT + ,PARTIAL); +END_TYPE; + +TYPE IfcEnergySequenceEnum = ENUMERATION OF + (PRIMARY + ,SECONDARY + ,TERTIARY + ,AUXILIARY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEnvironmentalImpactCategoryEnum = ENUMERATION OF + (COMBINEDVALUE + ,DISPOSAL + ,EXTRACTION + ,INSTALLATION + ,MANUFACTURE + ,TRANSPORTATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF + (DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER + ,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER + ,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER + ,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER + ,DIRECTEVAPORATIVEAIRWASHER + ,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER + ,INDIRECTEVAPORATIVEWETCOIL + ,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER + ,INDIRECTDIRECTCOMBINATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEvaporatorTypeEnum = ENUMERATION OF + (DIRECTEXPANSIONSHELLANDTUBE + ,DIRECTEXPANSIONTUBEINTUBE + ,DIRECTEXPANSIONBRAZEDPLATE + ,FLOODEDSHELLANDTUBE + ,SHELLANDCOIL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFanTypeEnum = ENUMERATION OF + (CENTRIFUGALFORWARDCURVED + ,CENTRIFUGALRADIAL + ,CENTRIFUGALBACKWARDINCLINEDCURVED + ,CENTRIFUGALAIRFOIL + ,TUBEAXIAL + ,VANEAXIAL + ,PROPELLORAXIAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFilterTypeEnum = ENUMERATION OF + (AIRPARTICLEFILTER + ,ODORFILTER + ,OILFILTER + ,STRAINER + ,WATERFILTER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF + (BREECHINGINLET + ,FIREHYDRANT + ,HOSEREEL + ,SPRINKLER + ,SPRINKLERDEFLECTOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFlowDirectionEnum = ENUMERATION OF + (SOURCE + ,SINK + ,SOURCEANDSINK + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF + (PRESSUREGAUGE + ,THERMOMETER + ,AMMETER + ,FREQUENCYMETER + ,POWERFACTORMETER + ,PHASEANGLEMETER + ,VOLTMETER_PEAK + ,VOLTMETER_RMS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFlowMeterTypeEnum = ENUMERATION OF + (ELECTRICMETER + ,ENERGYMETER + ,FLOWMETER + ,GASMETER + ,OILMETER + ,WATERMETER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFootingTypeEnum = ENUMERATION OF + (FOOTING_BEAM + ,PAD_FOOTING + ,PILE_CAP + ,STRIP_FOOTING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcGasTerminalTypeEnum = ENUMERATION OF + (GASAPPLIANCE + ,GASBOOSTER + ,GASBURNER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcGeometricProjectionEnum = ENUMERATION OF + (GRAPH_VIEW + ,SKETCH_VIEW + ,MODEL_VIEW + ,PLAN_VIEW + ,REFLECTED_PLAN_VIEW + ,SECTION_VIEW + ,ELEVATION_VIEW + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcGlobalOrLocalEnum = ENUMERATION OF + (GLOBAL_COORDS + ,LOCAL_COORDS); +END_TYPE; + +TYPE IfcHeatExchangerTypeEnum = ENUMERATION OF + (PLATE + ,SHELLANDTUBE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcHumidifierTypeEnum = ENUMERATION OF + (STEAMINJECTION + ,ADIABATICAIRWASHER + ,ADIABATICPAN + ,ADIABATICWETTEDELEMENT + ,ADIABATICATOMIZING + ,ADIABATICULTRASONIC + ,ADIABATICRIGIDMEDIA + ,ADIABATICCOMPRESSEDAIRNOZZLE + ,ASSISTEDELECTRIC + ,ASSISTEDNATURALGAS + ,ASSISTEDPROPANE + ,ASSISTEDBUTANE + ,ASSISTEDSTEAM + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcInternalOrExternalEnum = ENUMERATION OF + (INTERNAL + ,EXTERNAL + ,NOTDEFINED); +END_TYPE; + +TYPE IfcInventoryTypeEnum = ENUMERATION OF + (ASSETINVENTORY + ,SPACEINVENTORY + ,FURNITUREINVENTORY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcJunctionBoxTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLampTypeEnum = ENUMERATION OF + (COMPACTFLUORESCENT + ,FLUORESCENT + ,HIGHPRESSUREMERCURY + ,HIGHPRESSURESODIUM + ,METALHALIDE + ,TUNGSTENFILAMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLayerSetDirectionEnum = ENUMERATION OF + (AXIS1 + ,AXIS2 + ,AXIS3); +END_TYPE; + +TYPE IfcLightDistributionCurveEnum = ENUMERATION OF + (TYPE_A + ,TYPE_B + ,TYPE_C + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLightEmissionSourceEnum = ENUMERATION OF + (COMPACTFLUORESCENT + ,FLUORESCENT + ,HIGHPRESSUREMERCURY + ,HIGHPRESSURESODIUM + ,LIGHTEMITTINGDIODE + ,LOWPRESSURESODIUM + ,LOWVOLTAGEHALOGEN + ,MAINVOLTAGEHALOGEN + ,METALHALIDE + ,TUNGSTENFILAMENT + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLightFixtureTypeEnum = ENUMERATION OF + (POINTSOURCE + ,DIRECTIONSOURCE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLoadGroupTypeEnum = ENUMERATION OF + (LOAD_GROUP + ,LOAD_CASE + ,LOAD_COMBINATION_GROUP + ,LOAD_COMBINATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLogicalOperatorEnum = ENUMERATION OF + (LOGICALAND + ,LOGICALOR); +END_TYPE; + +TYPE IfcMemberTypeEnum = ENUMERATION OF + (BRACE + ,CHORD + ,COLLAR + ,MEMBER + ,MULLION + ,PLATE + ,POST + ,PURLIN + ,RAFTER + ,STRINGER + ,STRUT + ,STUD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMotorConnectionTypeEnum = ENUMERATION OF + (BELTDRIVE + ,COUPLING + ,DIRECTDRIVE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcNullStyle = ENUMERATION OF + (NULL); +END_TYPE; + +TYPE IfcObjectTypeEnum = ENUMERATION OF + (PRODUCT + ,PROCESS + ,CONTROL + ,RESOURCE + ,ACTOR + ,GROUP + ,PROJECT + ,NOTDEFINED); +END_TYPE; + +TYPE IfcObjectiveEnum = ENUMERATION OF + (CODECOMPLIANCE + ,DESIGNINTENT + ,HEALTHANDSAFETY + ,REQUIREMENT + ,SPECIFICATION + ,TRIGGERCONDITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcOccupantTypeEnum = ENUMERATION OF + (ASSIGNEE + ,ASSIGNOR + ,LESSEE + ,LESSOR + ,LETTINGAGENT + ,OWNER + ,TENANT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcOutletTypeEnum = ENUMERATION OF + (AUDIOVISUALOUTLET + ,COMMUNICATIONSOUTLET + ,POWEROUTLET + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF + (GRILL + ,LOUVER + ,SCREEN + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF + (PHYSICAL + ,VIRTUAL + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPileConstructionEnum = ENUMERATION OF + (CAST_IN_PLACE + ,COMPOSITE + ,PRECAST_CONCRETE + ,PREFAB_STEEL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPileTypeEnum = ENUMERATION OF + (COHESION + ,FRICTION + ,SUPPORT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPipeFittingTypeEnum = ENUMERATION OF + (BEND + ,CONNECTOR + ,ENTRY + ,EXIT + ,JUNCTION + ,OBSTRUCTION + ,TRANSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPipeSegmentTypeEnum = ENUMERATION OF + (FLEXIBLESEGMENT + ,RIGIDSEGMENT + ,GUTTER + ,SPOOL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPlateTypeEnum = ENUMERATION OF + (CURTAIN_PANEL + ,SHEET + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcProcedureTypeEnum = ENUMERATION OF + (ADVICE_CAUTION + ,ADVICE_NOTE + ,ADVICE_WARNING + ,CALIBRATION + ,DIAGNOSTIC + ,SHUTDOWN + ,STARTUP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcProfileTypeEnum = ENUMERATION OF + (CURVE + ,AREA); +END_TYPE; + +TYPE IfcProjectOrderRecordTypeEnum = ENUMERATION OF + (CHANGE + ,MAINTENANCE + ,MOVE + ,PURCHASE + ,WORK + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcProjectOrderTypeEnum = ENUMERATION OF + (CHANGEORDER + ,MAINTENANCEWORKORDER + ,MOVEORDER + ,PURCHASEORDER + ,WORKORDER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF + (PROJECTED_LENGTH + ,TRUE_LENGTH); +END_TYPE; + +TYPE IfcPropertySourceEnum = ENUMERATION OF + (DESIGN + ,DESIGNMAXIMUM + ,DESIGNMINIMUM + ,SIMULATED + ,ASBUILT + ,COMMISSIONING + ,MEASURED + ,USERDEFINED + ,NOTKNOWN); +END_TYPE; + +TYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF + (FUSEDISCONNECTOR + ,CIRCUITBREAKER + ,EARTHFAILUREDEVICE + ,RESIDUALCURRENTCIRCUITBREAKER + ,RESIDUALCURRENTSWITCH + ,VARISTOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPumpTypeEnum = ENUMERATION OF + (CIRCULATOR + ,ENDSUCTION + ,SPLITCASE + ,VERTICALINLINE + ,VERTICALTURBINE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRailingTypeEnum = ENUMERATION OF + (HANDRAIL + ,GUARDRAIL + ,BALUSTRADE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRampFlightTypeEnum = ENUMERATION OF + (STRAIGHT + ,SPIRAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRampTypeEnum = ENUMERATION OF + (STRAIGHT_RUN_RAMP + ,TWO_STRAIGHT_RUN_RAMP + ,QUARTER_TURN_RAMP + ,TWO_QUARTER_TURN_RAMP + ,HALF_TURN_RAMP + ,SPIRAL_RAMP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReflectanceMethodEnum = ENUMERATION OF + (BLINN + ,FLAT + ,GLASS + ,MATT + ,METAL + ,MIRROR + ,PHONG + ,PLASTIC + ,STRAUSS + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReinforcingBarRoleEnum = ENUMERATION OF + (MAIN + ,SHEAR + ,LIGATURE + ,STUD + ,PUNCHING + ,EDGE + ,RING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF + (PLAIN + ,TEXTURED); +END_TYPE; + +TYPE IfcResourceConsumptionEnum = ENUMERATION OF + (CONSUMED + ,PARTIALLYCONSUMED + ,NOTCONSUMED + ,OCCUPIED + ,PARTIALLYOCCUPIED + ,NOTOCCUPIED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRibPlateDirectionEnum = ENUMERATION OF + (DIRECTION_X + ,DIRECTION_Y); +END_TYPE; + +TYPE IfcRoleEnum = ENUMERATION OF + (SUPPLIER + ,MANUFACTURER + ,CONTRACTOR + ,SUBCONTRACTOR + ,ARCHITECT + ,STRUCTURALENGINEER + ,COSTENGINEER + ,CLIENT + ,BUILDINGOWNER + ,BUILDINGOPERATOR + ,MECHANICALENGINEER + ,ELECTRICALENGINEER + ,PROJECTMANAGER + ,FACILITIESMANAGER + ,CIVILENGINEER + ,COMISSIONINGENGINEER + ,ENGINEER + ,OWNER + ,CONSULTANT + ,CONSTRUCTIONMANAGER + ,FIELDCONSTRUCTIONMANAGER + ,RESELLER + ,USERDEFINED); +END_TYPE; + +TYPE IfcRoofTypeEnum = ENUMERATION OF + (FLAT_ROOF + ,SHED_ROOF + ,GABLE_ROOF + ,HIP_ROOF + ,HIPPED_GABLE_ROOF + ,GAMBREL_ROOF + ,MANSARD_ROOF + ,BARREL_ROOF + ,RAINBOW_ROOF + ,BUTTERFLY_ROOF + ,PAVILION_ROOF + ,DOME_ROOF + ,FREEFORM + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSIPrefix = ENUMERATION OF + (EXA + ,PETA + ,TERA + ,GIGA + ,MEGA + ,KILO + ,HECTO + ,DECA + ,DECI + ,CENTI + ,MILLI + ,MICRO + ,NANO + ,PICO + ,FEMTO + ,ATTO); +END_TYPE; + +TYPE IfcSIUnitName = ENUMERATION OF + (AMPERE + ,BECQUEREL + ,CANDELA + ,COULOMB + ,CUBIC_METRE + ,DEGREE_CELSIUS + ,FARAD + ,GRAM + ,GRAY + ,HENRY + ,HERTZ + ,JOULE + ,KELVIN + ,LUMEN + ,LUX + ,METRE + ,MOLE + ,NEWTON + ,OHM + ,PASCAL + ,RADIAN + ,SECOND + ,SIEMENS + ,SIEVERT + ,SQUARE_METRE + ,STERADIAN + ,TESLA + ,VOLT + ,WATT + ,WEBER); +END_TYPE; + +TYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF + (BATH + ,BIDET + ,CISTERN + ,SHOWER + ,SINK + ,SANITARYFOUNTAIN + ,TOILETPAN + ,URINAL + ,WASHHANDBASIN + ,WCSEAT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSectionTypeEnum = ENUMERATION OF + (UNIFORM + ,TAPERED); +END_TYPE; + +TYPE IfcSensorTypeEnum = ENUMERATION OF + (CO2SENSOR + ,FIRESENSOR + ,FLOWSENSOR + ,GASSENSOR + ,HEATSENSOR + ,HUMIDITYSENSOR + ,LIGHTSENSOR + ,MOISTURESENSOR + ,MOVEMENTSENSOR + ,PRESSURESENSOR + ,SMOKESENSOR + ,SOUNDSENSOR + ,TEMPERATURESENSOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSequenceEnum = ENUMERATION OF + (START_START + ,START_FINISH + ,FINISH_START + ,FINISH_FINISH + ,NOTDEFINED); +END_TYPE; + +TYPE IfcServiceLifeFactorTypeEnum = ENUMERATION OF + (A_QUALITYOFCOMPONENTS + ,B_DESIGNLEVEL + ,C_WORKEXECUTIONLEVEL + ,D_INDOORENVIRONMENT + ,E_OUTDOORENVIRONMENT + ,F_INUSECONDITIONS + ,G_MAINTENANCELEVEL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcServiceLifeTypeEnum = ENUMERATION OF + (ACTUALSERVICELIFE + ,EXPECTEDSERVICELIFE + ,OPTIMISTICREFERENCESERVICELIFE + ,PESSIMISTICREFERENCESERVICELIFE + ,REFERENCESERVICELIFE); +END_TYPE; + +TYPE IfcSlabTypeEnum = ENUMERATION OF + (FLOOR + ,ROOF + ,LANDING + ,BASESLAB + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSoundScaleEnum = ENUMERATION OF + (DBA + ,DBB + ,DBC + ,NC + ,NR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF + (SECTIONALRADIATOR + ,PANELRADIATOR + ,TUBULARRADIATOR + ,CONVECTOR + ,BASEBOARDHEATER + ,FINNEDTUBEUNIT + ,UNITHEATER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSpaceTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStackTerminalTypeEnum = ENUMERATION OF + (BIRDCAGE + ,COWL + ,RAINWATERHOPPER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStairFlightTypeEnum = ENUMERATION OF + (STRAIGHT + ,WINDER + ,SPIRAL + ,CURVED + ,FREEFORM + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStairTypeEnum = ENUMERATION OF + (STRAIGHT_RUN_STAIR + ,TWO_STRAIGHT_RUN_STAIR + ,QUARTER_WINDING_STAIR + ,QUARTER_TURN_STAIR + ,HALF_WINDING_STAIR + ,HALF_TURN_STAIR + ,TWO_QUARTER_WINDING_STAIR + ,TWO_QUARTER_TURN_STAIR + ,THREE_QUARTER_WINDING_STAIR + ,THREE_QUARTER_TURN_STAIR + ,SPIRAL_STAIR + ,DOUBLE_RETURN_STAIR + ,CURVED_RUN_STAIR + ,TWO_CURVED_RUN_STAIR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStateEnum = ENUMERATION OF + (READWRITE + ,READONLY + ,LOCKED + ,READWRITELOCKED + ,READONLYLOCKED); +END_TYPE; + +TYPE IfcStructuralCurveTypeEnum = ENUMERATION OF + (RIGID_JOINED_MEMBER + ,PIN_JOINED_MEMBER + ,CABLE + ,TENSION_MEMBER + ,COMPRESSION_MEMBER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStructuralSurfaceTypeEnum = ENUMERATION OF + (BENDING_ELEMENT + ,MEMBRANE_ELEMENT + ,SHELL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSurfaceSide = ENUMERATION OF + (POSITIVE + ,NEGATIVE + ,BOTH); +END_TYPE; + +TYPE IfcSurfaceTextureEnum = ENUMERATION OF + (BUMP + ,OPACITY + ,REFLECTION + ,SELFILLUMINATION + ,SHININESS + ,SPECULAR + ,TEXTURE + ,TRANSPARENCYMAP + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF + (CONTACTOR + ,EMERGENCYSTOP + ,STARTER + ,SWITCHDISCONNECTOR + ,TOGGLESWITCH + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTankTypeEnum = ENUMERATION OF + (PREFORMED + ,SECTIONAL + ,EXPANSION + ,PRESSUREVESSEL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTendonTypeEnum = ENUMERATION OF + (STRAND + ,WIRE + ,BAR + ,COATED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTextPath = ENUMERATION OF + (LEFT + ,RIGHT + ,UP + ,DOWN); +END_TYPE; + +TYPE IfcThermalLoadSourceEnum = ENUMERATION OF + (PEOPLE + ,LIGHTING + ,EQUIPMENT + ,VENTILATIONINDOORAIR + ,VENTILATIONOUTSIDEAIR + ,RECIRCULATEDAIR + ,EXHAUSTAIR + ,AIREXCHANGERATE + ,DRYBULBTEMPERATURE + ,RELATIVEHUMIDITY + ,INFILTRATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcThermalLoadTypeEnum = ENUMERATION OF + (SENSIBLE + ,LATENT + ,RADIANT + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF + (CONTINUOUS + ,DISCRETE + ,DISCRETEBINARY + ,PIECEWISEBINARY + ,PIECEWISECONSTANT + ,PIECEWISECONTINUOUS + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTimeSeriesScheduleTypeEnum = ENUMERATION OF + (ANNUAL + ,MONTHLY + ,WEEKLY + ,DAILY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTransformerTypeEnum = ENUMERATION OF + (CURRENT + ,FREQUENCY + ,VOLTAGE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTransitionCode = ENUMERATION OF + (DISCONTINUOUS + ,CONTINUOUS + ,CONTSAMEGRADIENT + ,CONTSAMEGRADIENTSAMECURVATURE); +END_TYPE; + +TYPE IfcTransportElementTypeEnum = ENUMERATION OF + (ELEVATOR + ,ESCALATOR + ,MOVINGWALKWAY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTrimmingPreference = ENUMERATION OF + (CARTESIAN + ,PARAMETER + ,UNSPECIFIED); +END_TYPE; + +TYPE IfcTubeBundleTypeEnum = ENUMERATION OF + (FINNED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcUnitEnum = ENUMERATION OF + (ABSORBEDDOSEUNIT + ,AMOUNTOFSUBSTANCEUNIT + ,AREAUNIT + ,DOSEEQUIVALENTUNIT + ,ELECTRICCAPACITANCEUNIT + ,ELECTRICCHARGEUNIT + ,ELECTRICCONDUCTANCEUNIT + ,ELECTRICCURRENTUNIT + ,ELECTRICRESISTANCEUNIT + ,ELECTRICVOLTAGEUNIT + ,ENERGYUNIT + ,FORCEUNIT + ,FREQUENCYUNIT + ,ILLUMINANCEUNIT + ,INDUCTANCEUNIT + ,LENGTHUNIT + ,LUMINOUSFLUXUNIT + ,LUMINOUSINTENSITYUNIT + ,MAGNETICFLUXDENSITYUNIT + ,MAGNETICFLUXUNIT + ,MASSUNIT + ,PLANEANGLEUNIT + ,POWERUNIT + ,PRESSUREUNIT + ,RADIOACTIVITYUNIT + ,SOLIDANGLEUNIT + ,THERMODYNAMICTEMPERATUREUNIT + ,TIMEUNIT + ,VOLUMEUNIT + ,USERDEFINED); +END_TYPE; + +TYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF + (AIRHANDLER + ,AIRCONDITIONINGUNIT + ,SPLITSYSTEM + ,ROOFTOPUNIT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcValveTypeEnum = ENUMERATION OF + (AIRRELEASE + ,ANTIVACUUM + ,CHANGEOVER + ,CHECK + ,COMMISSIONING + ,DIVERTING + ,DRAWOFFCOCK + ,DOUBLECHECK + ,DOUBLEREGULATING + ,FAUCET + ,FLUSHING + ,GASCOCK + ,GASTAP + ,ISOLATING + ,MIXING + ,PRESSUREREDUCING + ,PRESSURERELIEF + ,REGULATING + ,SAFETYCUTOFF + ,STEAMTRAP + ,STOPCOCK + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF + (COMPRESSION + ,SPRING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWallTypeEnum = ENUMERATION OF + (STANDARD + ,POLYGONAL + ,SHEAR + ,ELEMENTEDWALL + ,PLUMBINGWALL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWasteTerminalTypeEnum = ENUMERATION OF + (FLOORTRAP + ,FLOORWASTE + ,GULLYSUMP + ,GULLYTRAP + ,GREASEINTERCEPTOR + ,OILINTERCEPTOR + ,PETROLINTERCEPTOR + ,ROOFDRAIN + ,WASTEDISPOSALUNIT + ,WASTETRAP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowPanelOperationEnum = ENUMERATION OF + (SIDEHUNGRIGHTHAND + ,SIDEHUNGLEFTHAND + ,TILTANDTURNRIGHTHAND + ,TILTANDTURNLEFTHAND + ,TOPHUNG + ,BOTTOMHUNG + ,PIVOTHORIZONTAL + ,PIVOTVERTICAL + ,SLIDINGHORIZONTAL + ,SLIDINGVERTICAL + ,REMOVABLECASEMENT + ,FIXEDCASEMENT + ,OTHEROPERATION + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowPanelPositionEnum = ENUMERATION OF + (LEFT + ,MIDDLE + ,RIGHT + ,BOTTOM + ,TOP + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowStyleConstructionEnum = ENUMERATION OF + (ALUMINIUM + ,HIGH_GRADE_STEEL + ,STEEL + ,WOOD + ,ALUMINIUM_WOOD + ,PLASTIC + ,OTHER_CONSTRUCTION + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowStyleOperationEnum = ENUMERATION OF + (SINGLE_PANEL + ,DOUBLE_PANEL_VERTICAL + ,DOUBLE_PANEL_HORIZONTAL + ,TRIPLE_PANEL_VERTICAL + ,TRIPLE_PANEL_BOTTOM + ,TRIPLE_PANEL_TOP + ,TRIPLE_PANEL_LEFT + ,TRIPLE_PANEL_RIGHT + ,TRIPLE_PANEL_HORIZONTAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWorkControlTypeEnum = ENUMERATION OF + (ACTUAL + ,BASELINE + ,PLANNED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcActorSelect = SELECT + (IfcOrganization + ,IfcPerson + ,IfcPersonAndOrganization); +END_TYPE; + +TYPE IfcAppliedValueSelect = SELECT + (IfcRatioMeasure + ,IfcMeasureWithUnit + ,IfcMonetaryMeasure); +END_TYPE; + +TYPE IfcAxis2Placement = SELECT + (IfcAxis2Placement2D + ,IfcAxis2Placement3D); +END_TYPE; + +TYPE IfcBooleanOperand = SELECT + (IfcSolidModel + ,IfcHalfSpaceSolid + ,IfcBooleanResult + ,IfcCsgPrimitive3D); +END_TYPE; + +TYPE IfcCharacterStyleSelect = SELECT + (IfcTextStyleForDefinedFont); +END_TYPE; + +TYPE IfcClassificationNotationSelect = SELECT + (IfcClassificationNotation + ,IfcClassificationReference); +END_TYPE; + +TYPE IfcColour = SELECT + (IfcColourSpecification + ,IfcPreDefinedColour); +END_TYPE; + +TYPE IfcColourOrFactor = SELECT + (IfcColourRgb + ,IfcNormalisedRatioMeasure); +END_TYPE; + +TYPE IfcConditionCriterionSelect = SELECT + (IfcLabel + ,IfcMeasureWithUnit); +END_TYPE; + +TYPE IfcCsgSelect = SELECT + (IfcBooleanResult + ,IfcCsgPrimitive3D); +END_TYPE; + +TYPE IfcCurveFontOrScaledCurveFontSelect = SELECT + (IfcCurveStyleFontSelect + ,IfcCurveStyleFontAndScaling); +END_TYPE; + +TYPE IfcCurveOrEdgeCurve = SELECT + (IfcBoundedCurve + ,IfcEdgeCurve); +END_TYPE; + +TYPE IfcCurveStyleFontSelect = SELECT + (IfcPreDefinedCurveFont + ,IfcCurveStyleFont); +END_TYPE; + +TYPE IfcDateTimeSelect = SELECT + (IfcCalendarDate + ,IfcLocalTime + ,IfcDateAndTime); +END_TYPE; + +TYPE IfcDefinedSymbolSelect = SELECT + (IfcPreDefinedSymbol + ,IfcExternallyDefinedSymbol); +END_TYPE; + +TYPE IfcDerivedMeasureValue = SELECT + (IfcVolumetricFlowRateMeasure + ,IfcTimeStamp + ,IfcThermalTransmittanceMeasure + ,IfcThermalResistanceMeasure + ,IfcThermalAdmittanceMeasure + ,IfcPressureMeasure + ,IfcPowerMeasure + ,IfcMassFlowRateMeasure + ,IfcMassDensityMeasure + ,IfcLinearVelocityMeasure + ,IfcKinematicViscosityMeasure + ,IfcIntegerCountRateMeasure + ,IfcHeatFluxDensityMeasure + ,IfcFrequencyMeasure + ,IfcEnergyMeasure + ,IfcElectricVoltageMeasure + ,IfcDynamicViscosityMeasure + ,IfcCompoundPlaneAngleMeasure + ,IfcAngularVelocityMeasure + ,IfcThermalConductivityMeasure + ,IfcMolecularWeightMeasure + ,IfcVaporPermeabilityMeasure + ,IfcMoistureDiffusivityMeasure + ,IfcIsothermalMoistureCapacityMeasure + ,IfcSpecificHeatCapacityMeasure + ,IfcMonetaryMeasure + ,IfcMagneticFluxDensityMeasure + ,IfcMagneticFluxMeasure + ,IfcLuminousFluxMeasure + ,IfcForceMeasure + ,IfcInductanceMeasure + ,IfcIlluminanceMeasure + ,IfcElectricResistanceMeasure + ,IfcElectricConductanceMeasure + ,IfcElectricChargeMeasure + ,IfcDoseEquivalentMeasure + ,IfcElectricCapacitanceMeasure + ,IfcAbsorbedDoseMeasure + ,IfcRadioActivityMeasure + ,IfcRotationalFrequencyMeasure + ,IfcTorqueMeasure + ,IfcAccelerationMeasure + ,IfcLinearForceMeasure + ,IfcLinearStiffnessMeasure + ,IfcModulusOfSubgradeReactionMeasure + ,IfcModulusOfElasticityMeasure + ,IfcMomentOfInertiaMeasure + ,IfcPlanarForceMeasure + ,IfcRotationalStiffnessMeasure + ,IfcShearModulusMeasure + ,IfcLinearMomentMeasure + ,IfcLuminousIntensityDistributionMeasure + ,IfcCurvatureMeasure + ,IfcMassPerLengthMeasure + ,IfcModulusOfLinearSubgradeReactionMeasure + ,IfcModulusOfRotationalSubgradeReactionMeasure + ,IfcRotationalMassMeasure + ,IfcSectionalAreaIntegralMeasure + ,IfcSectionModulusMeasure + ,IfcTemperatureGradientMeasure + ,IfcThermalExpansionCoefficientMeasure + ,IfcWarpingConstantMeasure + ,IfcWarpingMomentMeasure + ,IfcSoundPowerMeasure + ,IfcSoundPressureMeasure + ,IfcHeatingValueMeasure + ,IfcPHMeasure + ,IfcIonConcentrationMeasure); +END_TYPE; + +TYPE IfcDocumentSelect = SELECT + (IfcDocumentReference + ,IfcDocumentInformation); +END_TYPE; + +TYPE IfcDraughtingCalloutElement = SELECT + (IfcAnnotationCurveOccurrence + ,IfcAnnotationTextOccurrence + ,IfcAnnotationSymbolOccurrence); +END_TYPE; + +TYPE IfcFillAreaStyleTileShapeSelect = SELECT + (IfcFillAreaStyleTileSymbolWithStyle); +END_TYPE; + +TYPE IfcFillStyleSelect = SELECT + (IfcFillAreaStyleHatching + ,IfcFillAreaStyleTiles + ,IfcColour + ,IfcExternallyDefinedHatchStyle); +END_TYPE; + +TYPE IfcGeometricSetSelect = SELECT + (IfcPoint + ,IfcCurve + ,IfcSurface); +END_TYPE; + +TYPE IfcHatchLineDistanceSelect = SELECT + (IfcOneDirectionRepeatFactor + ,IfcPositiveLengthMeasure); +END_TYPE; + +TYPE IfcLayeredItem = SELECT + (IfcRepresentationItem + ,IfcRepresentation); +END_TYPE; + +TYPE IfcLibrarySelect = SELECT + (IfcLibraryReference + ,IfcLibraryInformation); +END_TYPE; + +TYPE IfcLightDistributionDataSourceSelect = SELECT + (IfcExternalReference + ,IfcLightIntensityDistribution); +END_TYPE; + +TYPE IfcMaterialSelect = SELECT + (IfcMaterial + ,IfcMaterialList + ,IfcMaterialLayerSetUsage + ,IfcMaterialLayerSet + ,IfcMaterialLayer); +END_TYPE; + +TYPE IfcMeasureValue = SELECT + (IfcVolumeMeasure + ,IfcTimeMeasure + ,IfcThermodynamicTemperatureMeasure + ,IfcSolidAngleMeasure + ,IfcPositiveRatioMeasure + ,IfcRatioMeasure + ,IfcPositivePlaneAngleMeasure + ,IfcPlaneAngleMeasure + ,IfcParameterValue + ,IfcNumericMeasure + ,IfcMassMeasure + ,IfcPositiveLengthMeasure + ,IfcLengthMeasure + ,IfcElectricCurrentMeasure + ,IfcDescriptiveMeasure + ,IfcCountMeasure + ,IfcContextDependentMeasure + ,IfcAreaMeasure + ,IfcAmountOfSubstanceMeasure + ,IfcLuminousIntensityMeasure + ,IfcNormalisedRatioMeasure + ,IfcComplexNumber); +END_TYPE; + +TYPE IfcMetricValueSelect = SELECT + (IfcDateTimeSelect + ,IfcMeasureWithUnit + ,IfcTable + ,IfcText + ,IfcTimeSeries + ,IfcCostValue); +END_TYPE; + +TYPE IfcObjectReferenceSelect = SELECT + (IfcMaterial + ,IfcPerson + ,IfcDateAndTime + ,IfcMaterialList + ,IfcOrganization + ,IfcCalendarDate + ,IfcLocalTime + ,IfcPersonAndOrganization + ,IfcMaterialLayer + ,IfcExternalReference + ,IfcTimeSeries + ,IfcAddress + ,IfcAppliedValue); +END_TYPE; + +TYPE IfcOrientationSelect = SELECT + (IfcPlaneAngleMeasure + ,IfcDirection); +END_TYPE; + +TYPE IfcPointOrVertexPoint = SELECT + (IfcPoint + ,IfcVertexPoint); +END_TYPE; + +TYPE IfcPresentationStyleSelect = SELECT + (IfcNullStyle + ,IfcCurveStyle + ,IfcSymbolStyle + ,IfcFillAreaStyle + ,IfcTextStyle + ,IfcSurfaceStyle); +END_TYPE; + +TYPE IfcShell = SELECT + (IfcClosedShell + ,IfcOpenShell); +END_TYPE; + +TYPE IfcSimpleValue = SELECT + (IfcInteger + ,IfcReal + ,IfcBoolean + ,IfcIdentifier + ,IfcText + ,IfcLabel + ,IfcLogical); +END_TYPE; + +TYPE IfcSizeSelect = SELECT + (IfcRatioMeasure + ,IfcLengthMeasure + ,IfcDescriptiveMeasure + ,IfcPositiveLengthMeasure + ,IfcNormalisedRatioMeasure + ,IfcPositiveRatioMeasure); +END_TYPE; + +TYPE IfcSpecularHighlightSelect = SELECT + (IfcSpecularExponent + ,IfcSpecularRoughness); +END_TYPE; + +TYPE IfcStructuralActivityAssignmentSelect = SELECT + (IfcStructuralItem + ,IfcElement); +END_TYPE; + +TYPE IfcSurfaceOrFaceSurface = SELECT + (IfcSurface + ,IfcFaceSurface + ,IfcFaceBasedSurfaceModel); +END_TYPE; + +TYPE IfcSurfaceStyleElementSelect = SELECT + (IfcSurfaceStyleShading + ,IfcSurfaceStyleLighting + ,IfcSurfaceStyleWithTextures + ,IfcExternallyDefinedSurfaceStyle + ,IfcSurfaceStyleRefraction); +END_TYPE; + +TYPE IfcSymbolStyleSelect = SELECT + (IfcColour); +END_TYPE; + +TYPE IfcTextFontSelect = SELECT + (IfcPreDefinedTextFont + ,IfcExternallyDefinedTextFont); +END_TYPE; + +TYPE IfcTextStyleSelect = SELECT + (IfcTextStyleWithBoxCharacteristics + ,IfcTextStyleTextModel); +END_TYPE; + +TYPE IfcTrimmingSelect = SELECT + (IfcCartesianPoint + ,IfcParameterValue); +END_TYPE; + +TYPE IfcUnit = SELECT + (IfcDerivedUnit + ,IfcNamedUnit + ,IfcMonetaryUnit); +END_TYPE; + +TYPE IfcValue = SELECT + (IfcMeasureValue + ,IfcSimpleValue + ,IfcDerivedMeasureValue); +END_TYPE; + +TYPE IfcVectorOrDirection = SELECT + (IfcDirection + ,IfcVector); +END_TYPE; + +ENTITY Ifc2DCompositeCurve + SUBTYPE OF (IfcCompositeCurve); + WHERE + WR1 : SELF\IfcCompositeCurve.ClosedCurve; + WR2 : SELF\IfcCurve.Dim = 2; +END_ENTITY; + +ENTITY IfcActionRequest + SUBTYPE OF (IfcControl); + RequestID : IfcIdentifier; + UNIQUE + UR2 : RequestID; +END_ENTITY; + +ENTITY IfcActor + SUPERTYPE OF (ONEOF + (IfcOccupant)) + SUBTYPE OF (IfcObject); + TheActor : IfcActorSelect; + INVERSE + IsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor; +END_ENTITY; + +ENTITY IfcActorRole; + Role : IfcRoleEnum; + UserDefinedRole : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + WHERE + WR1 : (Role <> IfcRoleEnum.USERDEFINED) OR + ((Role = IfcRoleEnum.USERDEFINED) AND + EXISTS(SELF.UserDefinedRole)); +END_ENTITY; + +ENTITY IfcActuatorType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcActuatorTypeEnum; +END_ENTITY; + +ENTITY IfcAddress + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPostalAddress + ,IfcTelecomAddress)); + Purpose : OPTIONAL IfcAddressTypeEnum; + Description : OPTIONAL IfcText; + UserDefinedPurpose : OPTIONAL IfcLabel; + INVERSE + OfPerson : SET [0:?] OF IfcPerson FOR Addresses; + OfOrganization : SET [0:?] OF IfcOrganization FOR Addresses; + WHERE + WR1 : (NOT(EXISTS(Purpose))) OR + ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR + ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND + EXISTS(SELF.UserDefinedPurpose))); +END_ENTITY; + +ENTITY IfcAirTerminalBoxType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcAirTerminalBoxTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcAirTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcAirTerminalTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcAirToAirHeatRecoveryType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcAirToAirHeatRecoveryTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcAlarmType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcAlarmTypeEnum; +END_ENTITY; + +ENTITY IfcAngularDimension + SUBTYPE OF (IfcDimensionCurveDirectedCallout); +END_ENTITY; + +ENTITY IfcAnnotation + SUBTYPE OF (IfcProduct); + INVERSE + ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; +END_ENTITY; + +ENTITY IfcAnnotationCurveOccurrence + SUPERTYPE OF (ONEOF + (IfcDimensionCurve + ,IfcProjectionCurve)) + SUBTYPE OF (IfcAnnotationOccurrence); + WHERE + WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR + ('IFC2X3.IFCCURVE' IN TYPEOF (SELF\IfcStyledItem.Item)); +END_ENTITY; + +ENTITY IfcAnnotationFillArea + SUBTYPE OF (IfcGeometricRepresentationItem); + OuterBoundary : IfcCurve; + InnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve; +END_ENTITY; + +ENTITY IfcAnnotationFillAreaOccurrence + SUBTYPE OF (IfcAnnotationOccurrence); + FillStyleTarget : OPTIONAL IfcPoint; + GlobalOrLocal : OPTIONAL IfcGlobalOrLocalEnum; + WHERE + WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR + ('IFC2X3.IFCANNOTATIONFILLAREA' IN TYPEOF (SELF\IfcStyledItem.Item)); +END_ENTITY; + +ENTITY IfcAnnotationOccurrence + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAnnotationCurveOccurrence + ,IfcAnnotationFillAreaOccurrence + ,IfcAnnotationSurfaceOccurrence + ,IfcAnnotationSymbolOccurrence + ,IfcAnnotationTextOccurrence)) + SUBTYPE OF (IfcStyledItem); +END_ENTITY; + +ENTITY IfcAnnotationSurface + SUBTYPE OF (IfcGeometricRepresentationItem); + Item : IfcGeometricRepresentationItem; + TextureCoordinates : OPTIONAL IfcTextureCoordinate; + WHERE + WR01 : SIZEOF([ + 'IFC2X3.IFCSURFACE', + 'IFC2X3.IFCSHELLBASEDSURFACEMODEL', + 'IFC2X3.IFCFACEBASEDSURFACEMODEL', + 'IFC2X3.IFCSOLIDMODEL', + 'IFC2X3.IFCBOOLEANRESULT', + 'IFC2X3.IFCCSGPRIMITIVE3D'] + * TYPEOF(Item) + ) >= 1; +END_ENTITY; + +ENTITY IfcAnnotationSurfaceOccurrence + SUBTYPE OF (IfcAnnotationOccurrence); + WHERE + WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR + (SIZEOF( + ['IFC2X3.IFCSURFACE', + 'IFC2X3.IFCFACEBASEDSURFACEMODEL', + 'IFC2X3.IFCSHELLBASEDSURFACEMODEL', + 'IFC2X3.IFCSOLIDMODEL'] * + TYPEOF(SELF\IfcStyledItem.Item)) > 0); +END_ENTITY; + +ENTITY IfcAnnotationSymbolOccurrence + SUPERTYPE OF (ONEOF + (IfcTerminatorSymbol)) + SUBTYPE OF (IfcAnnotationOccurrence); + WHERE + WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR + ('IFC2X3.IFCDEFINEDSYMBOL' IN TYPEOF (SELF\IfcStyledItem.Item)); +END_ENTITY; + +ENTITY IfcAnnotationTextOccurrence + SUBTYPE OF (IfcAnnotationOccurrence); + WHERE + WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR + ('IFC2X3.IFCTEXTLITERAL' IN TYPEOF (SELF\IfcStyledItem.Item)); +END_ENTITY; + +ENTITY IfcApplication; + ApplicationDeveloper : IfcOrganization; + Version : IfcLabel; + ApplicationFullName : IfcLabel; + ApplicationIdentifier : IfcIdentifier; + UNIQUE + UR1 : ApplicationIdentifier; + UR2 : ApplicationFullName, Version; +END_ENTITY; + +ENTITY IfcAppliedValue + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCostValue + ,IfcEnvironmentalImpactValue)); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + AppliedValue : OPTIONAL IfcAppliedValueSelect; + UnitBasis : OPTIONAL IfcMeasureWithUnit; + ApplicableDate : OPTIONAL IfcDateTimeSelect; + FixedUntilDate : OPTIONAL IfcDateTimeSelect; + INVERSE + ValuesReferenced : SET [0:?] OF IfcReferencesValueDocument FOR ReferencingValues; + ValueOfComponents : SET [0:?] OF IfcAppliedValueRelationship FOR ComponentOfTotal; + IsComponentIn : SET [0:?] OF IfcAppliedValueRelationship FOR Components; + WHERE + WR1 : EXISTS (AppliedValue) OR + EXISTS (ValueOfComponents); +END_ENTITY; + +ENTITY IfcAppliedValueRelationship; + ComponentOfTotal : IfcAppliedValue; + Components : SET [1:?] OF IfcAppliedValue; + ArithmeticOperator : IfcArithmeticOperatorEnum; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcApproval; + Description : OPTIONAL IfcText; + ApprovalDateTime : IfcDateTimeSelect; + ApprovalStatus : OPTIONAL IfcLabel; + ApprovalLevel : OPTIONAL IfcLabel; + ApprovalQualifier : OPTIONAL IfcText; + Name : IfcLabel; + Identifier : IfcIdentifier; + INVERSE + Actors : SET [0:?] OF IfcApprovalActorRelationship FOR Approval; + IsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApproval; + Relates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval; +END_ENTITY; + +ENTITY IfcApprovalActorRelationship; + Actor : IfcActorSelect; + Approval : IfcApproval; + Role : IfcActorRole; +END_ENTITY; + +ENTITY IfcApprovalPropertyRelationship; + ApprovedProperties : SET [1:?] OF IfcProperty; + Approval : IfcApproval; +END_ENTITY; + +ENTITY IfcApprovalRelationship; + RelatedApproval : IfcApproval; + RelatingApproval : IfcApproval; + Description : OPTIONAL IfcText; + Name : IfcLabel; +END_ENTITY; + +ENTITY IfcArbitraryClosedProfileDef + SUPERTYPE OF (ONEOF + (IfcArbitraryProfileDefWithVoids)) + SUBTYPE OF (IfcProfileDef); + OuterCurve : IfcCurve; + WHERE + WR1 : OuterCurve.Dim = 2; + WR2 : NOT('IFC2X3.IFCLINE' IN TYPEOF(OuterCurve)); + WR3 : NOT('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve)); +END_ENTITY; + +ENTITY IfcArbitraryOpenProfileDef + SUPERTYPE OF (ONEOF + (IfcCenterLineProfileDef)) + SUBTYPE OF (IfcProfileDef); + Curve : IfcBoundedCurve; + WHERE + WR11 : ('IFC2X3.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR + (SELF\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE); + WR12 : Curve.Dim = 2; +END_ENTITY; + +ENTITY IfcArbitraryProfileDefWithVoids + SUBTYPE OF (IfcArbitraryClosedProfileDef); + InnerCurves : SET [1:?] OF IfcCurve; + WHERE + WR1 : SELF\IfcProfileDef.ProfileType = AREA; + WR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0; + WR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC2X3.IFCLINE' IN TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcAsset + SUBTYPE OF (IfcGroup); + AssetID : IfcIdentifier; + OriginalValue : IfcCostValue; + CurrentValue : IfcCostValue; + TotalReplacementCost : IfcCostValue; + Owner : IfcActorSelect; + User : IfcActorSelect; + ResponsiblePerson : IfcPerson; + IncorporationDate : IfcCalendarDate; + DepreciatedValue : IfcCostValue; + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects | NOT('IFC2X3.IFCELEMENT' IN TYPEOF(Temp)))) = 0; +END_ENTITY; + +ENTITY IfcAsymmetricIShapeProfileDef + SUBTYPE OF (IfcIShapeProfileDef); + TopFlangeWidth : IfcPositiveLengthMeasure; + TopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure; + TopFlangeFilletRadius : OPTIONAL IfcPositiveLengthMeasure; + CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcAxis1Placement + SUBTYPE OF (IfcPlacement); + Axis : OPTIONAL IfcDirection; + DERIVE + Z : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0])); + WHERE + WR1 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); + WR2 : SELF\IfcPlacement.Location.Dim = 3; +END_ENTITY; + +ENTITY IfcAxis2Placement2D + SUBTYPE OF (IfcPlacement); + RefDirection : OPTIONAL IfcDirection; + DERIVE + P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection); + WHERE + WR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2); + WR2 : SELF\IfcPlacement.Location.Dim = 2; +END_ENTITY; + +ENTITY IfcAxis2Placement3D + SUBTYPE OF (IfcPlacement); + Axis : OPTIONAL IfcDirection; + RefDirection : OPTIONAL IfcDirection; + DERIVE + P : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection); + WHERE + WR1 : SELF\IfcPlacement.Location.Dim = 3; + WR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); + WR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3); + WR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0); + WR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection))); +END_ENTITY; + +ENTITY IfcBSplineCurve + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBezierCurve)) + SUBTYPE OF (IfcBoundedCurve); + Degree : INTEGER; + ControlPointsList : LIST [2:?] OF IfcCartesianPoint; + CurveForm : IfcBSplineCurveForm; + ClosedCurve : LOGICAL; + SelfIntersect : LOGICAL; + DERIVE + ControlPoints : ARRAY [0:255] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints); + UpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1); + WHERE + WR41 : SIZEOF(QUERY(Temp <* ControlPointsList | + Temp.Dim <> ControlPointsList[1].Dim)) + = 0; +END_ENTITY; + +ENTITY IfcBeam + SUBTYPE OF (IfcBuildingElement); +END_ENTITY; + +ENTITY IfcBeamType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcBeamTypeEnum; +END_ENTITY; + +ENTITY IfcBezierCurve + SUPERTYPE OF (ONEOF + (IfcRationalBezierCurve)) + SUBTYPE OF (IfcBSplineCurve); +END_ENTITY; + +ENTITY IfcBlobTexture + SUBTYPE OF (IfcSurfaceTexture); + RasterFormat : IfcIdentifier; + RasterCode : BOOLEAN; + WHERE + WR11 : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG']; +END_ENTITY; + +ENTITY IfcBlock + SUBTYPE OF (IfcCsgPrimitive3D); + XLength : IfcPositiveLengthMeasure; + YLength : IfcPositiveLengthMeasure; + ZLength : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcBoilerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcBoilerTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcBooleanClippingResult + SUBTYPE OF (IfcBooleanResult); + WHERE + WR1 : ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand)); + WR2 : ('IFC2X3.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand)); + WR3 : Operator = DIFFERENCE; +END_ENTITY; + +ENTITY IfcBooleanResult + SUPERTYPE OF (ONEOF + (IfcBooleanClippingResult)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Operator : IfcBooleanOperator; + FirstOperand : IfcBooleanOperand; + SecondOperand : IfcBooleanOperand; + DERIVE + Dim : IfcDimensionCount := FirstOperand.Dim; + WHERE + WR1 : FirstOperand.Dim = SecondOperand.Dim; +END_ENTITY; + +ENTITY IfcBoundaryCondition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBoundaryEdgeCondition + ,IfcBoundaryFaceCondition + ,IfcBoundaryNodeCondition)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcBoundaryEdgeCondition + SUBTYPE OF (IfcBoundaryCondition); + LinearStiffnessByLengthX : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure; + LinearStiffnessByLengthY : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure; + LinearStiffnessByLengthZ : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure; + RotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure; + RotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure; + RotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure; +END_ENTITY; + +ENTITY IfcBoundaryFaceCondition + SUBTYPE OF (IfcBoundaryCondition); + LinearStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionMeasure; + LinearStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionMeasure; + LinearStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionMeasure; +END_ENTITY; + +ENTITY IfcBoundaryNodeCondition + SUPERTYPE OF (ONEOF + (IfcBoundaryNodeConditionWarping)) + SUBTYPE OF (IfcBoundaryCondition); + LinearStiffnessX : OPTIONAL IfcLinearStiffnessMeasure; + LinearStiffnessY : OPTIONAL IfcLinearStiffnessMeasure; + LinearStiffnessZ : OPTIONAL IfcLinearStiffnessMeasure; + RotationalStiffnessX : OPTIONAL IfcRotationalStiffnessMeasure; + RotationalStiffnessY : OPTIONAL IfcRotationalStiffnessMeasure; + RotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessMeasure; +END_ENTITY; + +ENTITY IfcBoundaryNodeConditionWarping + SUBTYPE OF (IfcBoundaryNodeCondition); + WarpingStiffness : OPTIONAL IfcWarpingMomentMeasure; +END_ENTITY; + +ENTITY IfcBoundedCurve + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBSplineCurve + ,IfcCompositeCurve + ,IfcPolyline + ,IfcTrimmedCurve)) + SUBTYPE OF (IfcCurve); +END_ENTITY; + +ENTITY IfcBoundedSurface + SUPERTYPE OF (ONEOF + (IfcCurveBoundedPlane + ,IfcRectangularTrimmedSurface)) + SUBTYPE OF (IfcSurface); +END_ENTITY; + +ENTITY IfcBoundingBox + SUBTYPE OF (IfcGeometricRepresentationItem); + Corner : IfcCartesianPoint; + XDim : IfcPositiveLengthMeasure; + YDim : IfcPositiveLengthMeasure; + ZDim : IfcPositiveLengthMeasure; + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcBoxedHalfSpace + SUBTYPE OF (IfcHalfSpaceSolid); + Enclosure : IfcBoundingBox; + WHERE + WR1 : NOT ('IFC2X3.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface)); +END_ENTITY; + +ENTITY IfcBuilding + SUBTYPE OF (IfcSpatialStructureElement); + ElevationOfRefHeight : OPTIONAL IfcLengthMeasure; + ElevationOfTerrain : OPTIONAL IfcLengthMeasure; + BuildingAddress : OPTIONAL IfcPostalAddress; +END_ENTITY; + +ENTITY IfcBuildingElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBeam + ,IfcBuildingElementComponent + ,IfcBuildingElementProxy + ,IfcColumn + ,IfcCovering + ,IfcCurtainWall + ,IfcDoor + ,IfcFooting + ,IfcMember + ,IfcPile + ,IfcPlate + ,IfcRailing + ,IfcRamp + ,IfcRampFlight + ,IfcRoof + ,IfcSlab + ,IfcStair + ,IfcStairFlight + ,IfcWall + ,IfcWindow)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcBuildingElementComponent + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuildingElementPart + ,IfcReinforcingElement)) + SUBTYPE OF (IfcBuildingElement); +END_ENTITY; + +ENTITY IfcBuildingElementPart + SUBTYPE OF (IfcBuildingElementComponent); +END_ENTITY; + +ENTITY IfcBuildingElementProxy + SUBTYPE OF (IfcBuildingElement); + CompositionType : OPTIONAL IfcElementCompositionEnum; + WHERE + WR1 : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcBuildingElementProxyType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcBuildingElementProxyTypeEnum; +END_ENTITY; + +ENTITY IfcBuildingElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBeamType + ,IfcBuildingElementProxyType + ,IfcColumnType + ,IfcCoveringType + ,IfcCurtainWallType + ,IfcMemberType + ,IfcPlateType + ,IfcRailingType + ,IfcRampFlightType + ,IfcSlabType + ,IfcStairFlightType + ,IfcWallType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcBuildingStorey + SUBTYPE OF (IfcSpatialStructureElement); + Elevation : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcCShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + Width : IfcPositiveLengthMeasure; + WallThickness : IfcPositiveLengthMeasure; + Girth : IfcPositiveLengthMeasure; + InternalFilletRadius : OPTIONAL IfcPositiveLengthMeasure; + CentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR1 : Girth < (Depth / 2.); + WR2 : NOT(EXISTS(InternalFilletRadius)) OR + ((InternalFilletRadius <= Width/2.) AND (InternalFilletRadius <= Depth/2.)); + WR3 : (WallThickness < Width/2.) AND (WallThickness < Depth/2.); +END_ENTITY; + +ENTITY IfcCableCarrierFittingType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcCableCarrierFittingTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCableCarrierSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcCableCarrierSegmentTypeEnum; +END_ENTITY; + +ENTITY IfcCableSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcCableSegmentTypeEnum; +END_ENTITY; + +ENTITY IfcCalendarDate; + DayComponent : IfcDayInMonthNumber; + MonthComponent : IfcMonthInYearNumber; + YearComponent : IfcYearNumber; + WHERE + WR21 : IfcValidCalendarDate (SELF); +END_ENTITY; + +ENTITY IfcCartesianPoint + SUBTYPE OF (IfcPoint); + Coordinates : LIST [1:3] OF IfcLengthMeasure; + DERIVE + Dim : IfcDimensionCount := HIINDEX(Coordinates); + WHERE + WR1 : HIINDEX(Coordinates) >= 2; +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCartesianTransformationOperator2D + ,IfcCartesianTransformationOperator3D)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Axis1 : OPTIONAL IfcDirection; + Axis2 : OPTIONAL IfcDirection; + LocalOrigin : IfcCartesianPoint; + Scale : OPTIONAL REAL; + DERIVE + Scl : REAL := NVL(Scale, 1.0); + Dim : IfcDimensionCount := LocalOrigin.Dim; + WHERE + WR1 : Scl > 0.0; +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator2D + SUPERTYPE OF (ONEOF + (IfcCartesianTransformationOperator2DnonUniform)) + SUBTYPE OF (IfcCartesianTransformationOperator); + DERIVE + U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\IfcCartesianTransformationOperator.Axis1, + SELF\IfcCartesianTransformationOperator.Axis2,?); + WHERE + WR1 : SELF\IfcCartesianTransformationOperator.Dim = 2; + WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR + (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2); + WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR + (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 2); +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator2DnonUniform + SUBTYPE OF (IfcCartesianTransformationOperator2D); + Scale2 : OPTIONAL REAL; + DERIVE + Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); + WHERE + WR1 : Scl2 > 0.0; +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator3D + SUPERTYPE OF (ONEOF + (IfcCartesianTransformationOperator3DnonUniform)) + SUBTYPE OF (IfcCartesianTransformationOperator); + Axis3 : OPTIONAL IfcDirection; + DERIVE + U : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\IfcCartesianTransformationOperator.Axis1, + SELF\IfcCartesianTransformationOperator.Axis2,Axis3); + WHERE + WR1 : SELF\IfcCartesianTransformationOperator.Dim = 3; + WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR + (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3); + WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR + (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3); + WR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3); +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator3DnonUniform + SUBTYPE OF (IfcCartesianTransformationOperator3D); + Scale2 : OPTIONAL REAL; + Scale3 : OPTIONAL REAL; + DERIVE + Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); + Scl3 : REAL := NVL(Scale3, SELF\IfcCartesianTransformationOperator.Scl); + WHERE + WR1 : Scl2 > 0.0; + WR2 : Scl3 > 0.0; +END_ENTITY; + +ENTITY IfcCenterLineProfileDef + SUBTYPE OF (IfcArbitraryOpenProfileDef); + Thickness : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcChamferEdgeFeature + SUBTYPE OF (IfcEdgeFeature); + Width : OPTIONAL IfcPositiveLengthMeasure; + Height : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcChillerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcChillerTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCircle + SUBTYPE OF (IfcConic); + Radius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcCircleHollowProfileDef + SUBTYPE OF (IfcCircleProfileDef); + WallThickness : IfcPositiveLengthMeasure; + WHERE + WR1 : WallThickness < SELF\IfcCircleProfileDef.Radius; +END_ENTITY; + +ENTITY IfcCircleProfileDef + SUPERTYPE OF (ONEOF + (IfcCircleHollowProfileDef)) + SUBTYPE OF (IfcParameterizedProfileDef); + Radius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcClassification; + Source : IfcLabel; + Edition : IfcLabel; + EditionDate : OPTIONAL IfcCalendarDate; + Name : IfcLabel; + INVERSE + Contains : SET [0:?] OF IfcClassificationItem FOR ItemOf; +END_ENTITY; + +ENTITY IfcClassificationItem; + Notation : IfcClassificationNotationFacet; + ItemOf : OPTIONAL IfcClassification; + Title : IfcLabel; + INVERSE + IsClassifiedItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatedItems; + IsClassifyingItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatingItem; +END_ENTITY; + +ENTITY IfcClassificationItemRelationship; + RelatingItem : IfcClassificationItem; + RelatedItems : SET [1:?] OF IfcClassificationItem; +END_ENTITY; + +ENTITY IfcClassificationNotation; + NotationFacets : SET [1:?] OF IfcClassificationNotationFacet; +END_ENTITY; + +ENTITY IfcClassificationNotationFacet; + NotationValue : IfcLabel; +END_ENTITY; + +ENTITY IfcClassificationReference + SUBTYPE OF (IfcExternalReference); + ReferencedSource : OPTIONAL IfcClassification; +END_ENTITY; + +ENTITY IfcClosedShell + SUBTYPE OF (IfcConnectedFaceSet); +END_ENTITY; + +ENTITY IfcCoilType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCoilTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcColourRgb + SUBTYPE OF (IfcColourSpecification); + Red : IfcNormalisedRatioMeasure; + Green : IfcNormalisedRatioMeasure; + Blue : IfcNormalisedRatioMeasure; +END_ENTITY; + +ENTITY IfcColourSpecification + ABSTRACT SUPERTYPE OF (ONEOF + (IfcColourRgb)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcColumn + SUBTYPE OF (IfcBuildingElement); +END_ENTITY; + +ENTITY IfcColumnType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcColumnTypeEnum; +END_ENTITY; + +ENTITY IfcComplexProperty + SUBTYPE OF (IfcProperty); + UsageName : IfcIdentifier; + HasProperties : SET [1:?] OF IfcProperty; + WHERE + WR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0; + WR22 : IfcUniquePropertyName(HasProperties); +END_ENTITY; + +ENTITY IfcCompositeCurve + SUPERTYPE OF (ONEOF + (Ifc2DCompositeCurve)) + SUBTYPE OF (IfcBoundedCurve); + Segments : LIST [1:?] OF IfcCompositeCurveSegment; + SelfIntersect : LOGICAL; + DERIVE + NSegments : INTEGER := SIZEOF(Segments); + ClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous; + WHERE + WR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0)); + WR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0; +END_ENTITY; + +ENTITY IfcCompositeCurveSegment + SUBTYPE OF (IfcGeometricRepresentationItem); + Transition : IfcTransitionCode; + SameSense : BOOLEAN; + ParentCurve : IfcCurve; + DERIVE + Dim : IfcDimensionCount := ParentCurve.Dim; + INVERSE + UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments; + WHERE + WR1 : ('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve)); +END_ENTITY; + +ENTITY IfcCompositeProfileDef + SUBTYPE OF (IfcProfileDef); + Profiles : SET [2:?] OF IfcProfileDef; + Label : OPTIONAL IfcLabel; + WHERE + WR1 : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0; + WR2 : SIZEOF(QUERY(temp <* Profiles | 'IFC2X3.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcCompressorType + SUBTYPE OF (IfcFlowMovingDeviceType); + PredefinedType : IfcCompressorTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCondenserType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCondenserTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCondition + SUBTYPE OF (IfcGroup); +END_ENTITY; + +ENTITY IfcConditionCriterion + SUBTYPE OF (IfcControl); + Criterion : IfcConditionCriterionSelect; + CriterionDateTime : IfcDateTimeSelect; + WHERE + WR1 : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcConic + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCircle + ,IfcEllipse)) + SUBTYPE OF (IfcCurve); + Position : IfcAxis2Placement; +END_ENTITY; + +ENTITY IfcConnectedFaceSet + SUPERTYPE OF (ONEOF + (IfcClosedShell + ,IfcOpenShell)) + SUBTYPE OF (IfcTopologicalRepresentationItem); + CfsFaces : SET [1:?] OF IfcFace; +END_ENTITY; + +ENTITY IfcConnectionCurveGeometry + SUBTYPE OF (IfcConnectionGeometry); + CurveOnRelatingElement : IfcCurveOrEdgeCurve; + CurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve; +END_ENTITY; + +ENTITY IfcConnectionGeometry + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConnectionCurveGeometry + ,IfcConnectionPointGeometry + ,IfcConnectionPortGeometry + ,IfcConnectionSurfaceGeometry)); +END_ENTITY; + +ENTITY IfcConnectionPointEccentricity + SUBTYPE OF (IfcConnectionPointGeometry); + EccentricityInX : OPTIONAL IfcLengthMeasure; + EccentricityInY : OPTIONAL IfcLengthMeasure; + EccentricityInZ : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcConnectionPointGeometry + SUPERTYPE OF (ONEOF + (IfcConnectionPointEccentricity)) + SUBTYPE OF (IfcConnectionGeometry); + PointOnRelatingElement : IfcPointOrVertexPoint; + PointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint; +END_ENTITY; + +ENTITY IfcConnectionPortGeometry + SUBTYPE OF (IfcConnectionGeometry); + LocationAtRelatingElement : IfcAxis2Placement; + LocationAtRelatedElement : OPTIONAL IfcAxis2Placement; + ProfileOfPort : IfcProfileDef; +END_ENTITY; + +ENTITY IfcConnectionSurfaceGeometry + SUBTYPE OF (IfcConnectionGeometry); + SurfaceOnRelatingElement : IfcSurfaceOrFaceSurface; + SurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface; +END_ENTITY; + +ENTITY IfcConstraint + ABSTRACT SUPERTYPE OF (ONEOF + (IfcMetric + ,IfcObjective)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + ConstraintGrade : IfcConstraintEnum; + ConstraintSource : OPTIONAL IfcLabel; + CreatingActor : OPTIONAL IfcActorSelect; + CreationTime : OPTIONAL IfcDateTimeSelect; + UserDefinedGrade : OPTIONAL IfcLabel; + INVERSE + ClassifiedAs : SET [0:?] OF IfcConstraintClassificationRelationship FOR ClassifiedConstraint; + RelatesConstraints : SET [0:?] OF IfcConstraintRelationship FOR RelatingConstraint; + IsRelatedWith : SET [0:?] OF IfcConstraintRelationship FOR RelatedConstraints; + PropertiesForConstraint : SET [0:?] OF IfcPropertyConstraintRelationship FOR RelatingConstraint; + Aggregates : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatingConstraint; + IsAggregatedIn : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatedConstraints; + WHERE + WR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR + ((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\IfcConstraint.UserDefinedGrade)); +END_ENTITY; + +ENTITY IfcConstraintAggregationRelationship; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + RelatingConstraint : IfcConstraint; + RelatedConstraints : LIST [1:?] OF UNIQUE IfcConstraint; + LogicalAggregator : IfcLogicalOperatorEnum; + WHERE + WR11 : SIZEOF(QUERY(temp <* RelatedConstraints | + temp :=: RelatingConstraint + )) = 0; +END_ENTITY; + +ENTITY IfcConstraintClassificationRelationship; + ClassifiedConstraint : IfcConstraint; + RelatedClassifications : SET [1:?] OF IfcClassificationNotationSelect; +END_ENTITY; + +ENTITY IfcConstraintRelationship; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + RelatingConstraint : IfcConstraint; + RelatedConstraints : SET [1:?] OF IfcConstraint; + WHERE + WR11 : SIZEOF(QUERY(temp <* RelatedConstraints | temp :=: RelatingConstraint )) = 0; +END_ENTITY; + +ENTITY IfcConstructionEquipmentResource + SUBTYPE OF (IfcConstructionResource); +END_ENTITY; + +ENTITY IfcConstructionMaterialResource + SUBTYPE OF (IfcConstructionResource); + Suppliers : OPTIONAL SET [1:?] OF IfcActorSelect; + UsageRatio : OPTIONAL IfcRatioMeasure; + WHERE + WR1 : SIZEOF(SELF\IfcResource.ResourceOf) <=1; + WR2 : NOT(EXISTS(SELF\IfcResource.ResourceOf[1])) OR + (SELF\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT); +END_ENTITY; + +ENTITY IfcConstructionProductResource + SUBTYPE OF (IfcConstructionResource); + WHERE + WR1 : SIZEOF(SELF\IfcResource.ResourceOf) <=1; + WR2 : NOT(EXISTS(SELF\IfcResource.ResourceOf[1])) OR + (SELF\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT); +END_ENTITY; + +ENTITY IfcConstructionResource + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConstructionEquipmentResource + ,IfcConstructionMaterialResource + ,IfcConstructionProductResource + ,IfcCrewResource + ,IfcLaborResource + ,IfcSubContractResource)) + SUBTYPE OF (IfcResource); + ResourceIdentifier : OPTIONAL IfcIdentifier; + ResourceGroup : OPTIONAL IfcLabel; + ResourceConsumption : OPTIONAL IfcResourceConsumptionEnum; + BaseQuantity : OPTIONAL IfcMeasureWithUnit; +END_ENTITY; + +ENTITY IfcContextDependentUnit + SUBTYPE OF (IfcNamedUnit); + Name : IfcLabel; +END_ENTITY; + +ENTITY IfcControl + ABSTRACT SUPERTYPE OF (ONEOF + (IfcActionRequest + ,IfcConditionCriterion + ,IfcCostItem + ,IfcCostSchedule + ,IfcEquipmentStandard + ,IfcFurnitureStandard + ,IfcPerformanceHistory + ,IfcPermit + ,IfcProjectOrder + ,IfcProjectOrderRecord + ,IfcScheduleTimeControl + ,IfcServiceLife + ,IfcSpaceProgram + ,IfcTimeSeriesSchedule + ,IfcWorkControl)) + SUBTYPE OF (IfcObject); + INVERSE + Controls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl; +END_ENTITY; + +ENTITY IfcControllerType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcControllerTypeEnum; +END_ENTITY; + +ENTITY IfcConversionBasedUnit + SUBTYPE OF (IfcNamedUnit); + Name : IfcLabel; + ConversionFactor : IfcMeasureWithUnit; +END_ENTITY; + +ENTITY IfcCooledBeamType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCooledBeamTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCoolingTowerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCoolingTowerTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCoordinatedUniversalTimeOffset; + HourOffset : IfcHourInDay; + MinuteOffset : OPTIONAL IfcMinuteInHour; + Sense : IfcAheadOrBehind; +END_ENTITY; + +ENTITY IfcCostItem + SUBTYPE OF (IfcControl); +END_ENTITY; + +ENTITY IfcCostSchedule + SUBTYPE OF (IfcControl); + SubmittedBy : OPTIONAL IfcActorSelect; + PreparedBy : OPTIONAL IfcActorSelect; + SubmittedOn : OPTIONAL IfcDateTimeSelect; + Status : OPTIONAL IfcLabel; + TargetUsers : OPTIONAL SET [1:?] OF IfcActorSelect; + UpdateDate : OPTIONAL IfcDateTimeSelect; + ID : IfcIdentifier; + PredefinedType : IfcCostScheduleTypeEnum; + UNIQUE + UR2 : ID; +END_ENTITY; + +ENTITY IfcCostValue + SUBTYPE OF (IfcAppliedValue); + CostType : IfcLabel; + Condition : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcCovering + SUBTYPE OF (IfcBuildingElement); + PredefinedType : OPTIONAL IfcCoveringTypeEnum; + INVERSE + CoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings; + Covers : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings; +END_ENTITY; + +ENTITY IfcCoveringType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcCoveringTypeEnum; +END_ENTITY; + +ENTITY IfcCraneRailAShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + OverallHeight : IfcPositiveLengthMeasure; + BaseWidth2 : IfcPositiveLengthMeasure; + Radius : OPTIONAL IfcPositiveLengthMeasure; + HeadWidth : IfcPositiveLengthMeasure; + HeadDepth2 : IfcPositiveLengthMeasure; + HeadDepth3 : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + BaseWidth4 : IfcPositiveLengthMeasure; + BaseDepth1 : IfcPositiveLengthMeasure; + BaseDepth2 : IfcPositiveLengthMeasure; + BaseDepth3 : IfcPositiveLengthMeasure; + CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcCraneRailFShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + OverallHeight : IfcPositiveLengthMeasure; + HeadWidth : IfcPositiveLengthMeasure; + Radius : OPTIONAL IfcPositiveLengthMeasure; + HeadDepth2 : IfcPositiveLengthMeasure; + HeadDepth3 : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + BaseDepth1 : IfcPositiveLengthMeasure; + BaseDepth2 : IfcPositiveLengthMeasure; + CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcCrewResource + SUBTYPE OF (IfcConstructionResource); +END_ENTITY; + +ENTITY IfcCsgPrimitive3D + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBlock + ,IfcRectangularPyramid + ,IfcRightCircularCone + ,IfcRightCircularCylinder + ,IfcSphere)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Position : IfcAxis2Placement3D; + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcCsgSolid + SUBTYPE OF (IfcSolidModel); + TreeRootExpression : IfcCsgSelect; +END_ENTITY; + +ENTITY IfcCurrencyRelationship; + RelatingMonetaryUnit : IfcMonetaryUnit; + RelatedMonetaryUnit : IfcMonetaryUnit; + ExchangeRate : IfcPositiveRatioMeasure; + RateDateTime : IfcDateAndTime; + RateSource : OPTIONAL IfcLibraryInformation; +END_ENTITY; + +ENTITY IfcCurtainWall + SUBTYPE OF (IfcBuildingElement); +END_ENTITY; + +ENTITY IfcCurtainWallType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcCurtainWallTypeEnum; +END_ENTITY; + +ENTITY IfcCurve + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBoundedCurve + ,IfcConic + ,IfcLine + ,IfcOffsetCurve2D + ,IfcOffsetCurve3D)) + SUBTYPE OF (IfcGeometricRepresentationItem); + DERIVE + Dim : IfcDimensionCount := IfcCurveDim(SELF); +END_ENTITY; + +ENTITY IfcCurveBoundedPlane + SUBTYPE OF (IfcBoundedSurface); + BasisSurface : IfcPlane; + OuterBoundary : IfcCurve; + InnerBoundaries : SET [0:?] OF IfcCurve; + DERIVE + Dim : IfcDimensionCount := BasisSurface.Dim; +END_ENTITY; + +ENTITY IfcCurveStyle + SUBTYPE OF (IfcPresentationStyle); + CurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect; + CurveWidth : OPTIONAL IfcSizeSelect; + CurveColour : OPTIONAL IfcColour; + WHERE + WR11 : (NOT(EXISTS(CurveWidth))) OR + ('IFC2X3.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR + (('IFC2X3.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND + (CurveWidth = 'by layer')); +END_ENTITY; + +ENTITY IfcCurveStyleFont; + Name : OPTIONAL IfcLabel; + PatternList : LIST [1:?] OF IfcCurveStyleFontPattern; +END_ENTITY; + +ENTITY IfcCurveStyleFontAndScaling; + Name : OPTIONAL IfcLabel; + CurveFont : IfcCurveStyleFontSelect; + CurveFontScaling : IfcPositiveRatioMeasure; +END_ENTITY; + +ENTITY IfcCurveStyleFontPattern; + VisibleSegmentLength : IfcLengthMeasure; + InvisibleSegmentLength : IfcPositiveLengthMeasure; + WHERE + WR01 : VisibleSegmentLength >= 0.; +END_ENTITY; + +ENTITY IfcDamperType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcDamperTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDateAndTime; + DateComponent : IfcCalendarDate; + TimeComponent : IfcLocalTime; +END_ENTITY; + +ENTITY IfcDefinedSymbol + SUBTYPE OF (IfcGeometricRepresentationItem); + Definition : IfcDefinedSymbolSelect; + Target : IfcCartesianTransformationOperator2D; +END_ENTITY; + +ENTITY IfcDerivedProfileDef + SUBTYPE OF (IfcProfileDef); + ParentProfile : IfcProfileDef; + Operator : IfcCartesianTransformationOperator2D; + Label : OPTIONAL IfcLabel; + WHERE + WR1 : SELF\IfcProfileDef.ProfileType = ParentProfile.ProfileType; +END_ENTITY; + +ENTITY IfcDerivedUnit; + Elements : SET [1:?] OF IfcDerivedUnitElement; + UnitType : IfcDerivedUnitEnum; + UserDefinedType : OPTIONAL IfcLabel; + DERIVE + Dimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(SELF); + WHERE + WR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 )); + WR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR + ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND + (EXISTS(SELF.UserDefinedType))); +END_ENTITY; + +ENTITY IfcDerivedUnitElement; + Unit : IfcNamedUnit; + Exponent : INTEGER; +END_ENTITY; + +ENTITY IfcDiameterDimension + SUBTYPE OF (IfcDimensionCurveDirectedCallout); +END_ENTITY; + +ENTITY IfcDimensionCalloutRelationship + SUBTYPE OF (IfcDraughtingCalloutRelationship); + WHERE + WR11 : SELF\IfcDraughtingCalloutRelationship.Name IN ['primary','secondary']; + WR12 : SIZEOF(TYPEOF(SELF\IfcDraughtingCalloutRelationship.RelatingDraughtingCallout) * [ + 'IFC2X3.IFCANGULARDIMENSION', + 'IFC2X3.IFCDIAMETERDIMENSION', + 'IFC2X3.IFCLINEARDIMENSION', + 'IFC2X3.IFCRADIUSDIMENSION']) = 1; + WR13 : NOT ('IFC2X3.IFCDIMENSIONCURVEDIRECTEDCALLOUT' + IN TYPEOF (SELF\IfcDraughtingCalloutRelationship.RelatedDraughtingCallout)); +END_ENTITY; + +ENTITY IfcDimensionCurve + SUBTYPE OF (IfcAnnotationCurveOccurrence); + INVERSE + AnnotatedBySymbols : SET [0:2] OF IfcTerminatorSymbol FOR AnnotatedCurve; + WHERE + WR51 : SIZEOF(USEDIN(SELF,'IFC2X3.IFCDRAUGHTINGCALLOUT.CONTENTS')) + >= 1; + WR52 : (SIZEOF(QUERY (Dct1 <* USEDIN(SELF,'IFC2X3.' + + 'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct1.Role = IfcDimensionExtentUsage.ORIGIN))) <= 1) + AND + (SIZEOF(QUERY (Dct2 <* USEDIN(SELF,'IFC2X3.' + + 'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct2.Role = IfcDimensionExtentUsage.TARGET))) <= 1); + WR53 : SIZEOF(QUERY (Dct <* AnnotatedBySymbols | + NOT('IFC2X3.IFCDIMENSIONCURVETERMINATOR' IN TYPEOF(Dct)))) + = 0; +END_ENTITY; + +ENTITY IfcDimensionCurveDirectedCallout + SUPERTYPE OF (ONEOF + (IfcAngularDimension + ,IfcDiameterDimension + ,IfcLinearDimension + ,IfcRadiusDimension)) + SUBTYPE OF (IfcDraughtingCallout); + WHERE + WR41 : SIZEOF(QUERY (Dc <* SELF\IfcDraughtingCallout.Contents | ( + 'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF(Dc)))) + = 1; + WR42 : SIZEOF (QUERY (Dc <* SELF.contents | + ('IFC2X3.IFCPROJECTIONCURVE' IN + TYPEOF (Dc)))) <= 2; +END_ENTITY; + +ENTITY IfcDimensionCurveTerminator + SUBTYPE OF (IfcTerminatorSymbol); + Role : IfcDimensionExtentUsage; + WHERE + WR61 : 'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF + (SELF\IfcTerminatorSymbol.AnnotatedCurve); +END_ENTITY; + +ENTITY IfcDimensionPair + SUBTYPE OF (IfcDraughtingCalloutRelationship); + WHERE + WR11 : SELF.Name IN ['chained','parallel']; + WR12 : SIZEOF(TYPEOF(SELF.RelatingDraughtingCallout) * [ + 'IFC2X3.IFCANGULARDIMENSION', + 'IFC2X3.IFCDIAMETERDIMENSION', + 'IFC2X3.IFCLINEARDIMENSION', + 'IFC2X3.IFCRADIUSDIMENSION']) = 1; + WR13 : SIZEOF(TYPEOF(SELF.RelatedDraughtingCallout) * [ + 'IFC2X3.IFCANGULARDIMENSION', + 'IFC2X3.IFCDIAMETERDIMENSION', + 'IFC2X3.IFCLINEARDIMENSION', + 'IFC2X3.IFCRADIUSDIMENSION']) = 1; +END_ENTITY; + +ENTITY IfcDimensionalExponents; + LengthExponent : INTEGER; + MassExponent : INTEGER; + TimeExponent : INTEGER; + ElectricCurrentExponent : INTEGER; + ThermodynamicTemperatureExponent : INTEGER; + AmountOfSubstanceExponent : INTEGER; + LuminousIntensityExponent : INTEGER; +END_ENTITY; + +ENTITY IfcDirection + SUBTYPE OF (IfcGeometricRepresentationItem); + DirectionRatios : LIST [2:3] OF REAL; + DERIVE + Dim : IfcDimensionCount := HIINDEX(DirectionRatios); +END_ENTITY; + +ENTITY IfcDiscreteAccessory + SUBTYPE OF (IfcElementComponent); +END_ENTITY; + +ENTITY IfcDiscreteAccessoryType + SUPERTYPE OF (ONEOF + (IfcVibrationIsolatorType)) + SUBTYPE OF (IfcElementComponentType); +END_ENTITY; + +ENTITY IfcDistributionChamberElement + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcDistributionChamberElementType + SUBTYPE OF (IfcDistributionFlowElementType); + PredefinedType : IfcDistributionChamberElementTypeEnum; +END_ENTITY; + +ENTITY IfcDistributionControlElement + SUBTYPE OF (IfcDistributionElement); + ControlElementId : OPTIONAL IfcIdentifier; + INVERSE + AssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements; +END_ENTITY; + +ENTITY IfcDistributionControlElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcActuatorType + ,IfcAlarmType + ,IfcControllerType + ,IfcFlowInstrumentType + ,IfcSensorType)) + SUBTYPE OF (IfcDistributionElementType); +END_ENTITY; + +ENTITY IfcDistributionElement + SUPERTYPE OF (ONEOF + (IfcDistributionControlElement + ,IfcDistributionFlowElement)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcDistributionElementType + SUPERTYPE OF (ONEOF + (IfcDistributionControlElementType + ,IfcDistributionFlowElementType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcDistributionFlowElement + SUPERTYPE OF (ONEOF + (IfcDistributionChamberElement + ,IfcEnergyConversionDevice + ,IfcFlowController + ,IfcFlowFitting + ,IfcFlowMovingDevice + ,IfcFlowSegment + ,IfcFlowStorageDevice + ,IfcFlowTerminal + ,IfcFlowTreatmentDevice)) + SUBTYPE OF (IfcDistributionElement); + INVERSE + HasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement; +END_ENTITY; + +ENTITY IfcDistributionFlowElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDistributionChamberElementType + ,IfcEnergyConversionDeviceType + ,IfcFlowControllerType + ,IfcFlowFittingType + ,IfcFlowMovingDeviceType + ,IfcFlowSegmentType + ,IfcFlowStorageDeviceType + ,IfcFlowTerminalType + ,IfcFlowTreatmentDeviceType)) + SUBTYPE OF (IfcDistributionElementType); +END_ENTITY; + +ENTITY IfcDistributionPort + SUBTYPE OF (IfcPort); + FlowDirection : OPTIONAL IfcFlowDirectionEnum; +END_ENTITY; + +ENTITY IfcDocumentElectronicFormat; + FileExtension : OPTIONAL IfcLabel; + MimeContentType : OPTIONAL IfcLabel; + MimeSubtype : OPTIONAL IfcLabel; + WHERE + WR1 : EXISTS(FileExtension) OR EXISTS(MimeContentType); +END_ENTITY; + +ENTITY IfcDocumentInformation; + DocumentId : IfcIdentifier; + Name : IfcLabel; + Description : OPTIONAL IfcText; + DocumentReferences : OPTIONAL SET [1:?] OF IfcDocumentReference; + Purpose : OPTIONAL IfcText; + IntendedUse : OPTIONAL IfcText; + Scope : OPTIONAL IfcText; + Revision : OPTIONAL IfcLabel; + DocumentOwner : OPTIONAL IfcActorSelect; + Editors : OPTIONAL SET [1:?] OF IfcActorSelect; + CreationTime : OPTIONAL IfcDateAndTime; + LastRevisionTime : OPTIONAL IfcDateAndTime; + ElectronicFormat : OPTIONAL IfcDocumentElectronicFormat; + ValidFrom : OPTIONAL IfcCalendarDate; + ValidUntil : OPTIONAL IfcCalendarDate; + Confidentiality : OPTIONAL IfcDocumentConfidentialityEnum; + Status : OPTIONAL IfcDocumentStatusEnum; + INVERSE + IsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments; + IsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument; +END_ENTITY; + +ENTITY IfcDocumentInformationRelationship; + RelatingDocument : IfcDocumentInformation; + RelatedDocuments : SET [1:?] OF IfcDocumentInformation; + RelationshipType : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcDocumentReference + SUBTYPE OF (IfcExternalReference); + INVERSE + ReferenceToDocument : SET [0:1] OF IfcDocumentInformation FOR DocumentReferences; + WHERE + WR1 : EXISTS(Name) XOR EXISTS(ReferenceToDocument[1]); +END_ENTITY; + +ENTITY IfcDoor + SUBTYPE OF (IfcBuildingElement); + OverallHeight : OPTIONAL IfcPositiveLengthMeasure; + OverallWidth : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcDoorLiningProperties + SUBTYPE OF (IfcPropertySetDefinition); + LiningDepth : OPTIONAL IfcPositiveLengthMeasure; + LiningThickness : OPTIONAL IfcPositiveLengthMeasure; + ThresholdDepth : OPTIONAL IfcPositiveLengthMeasure; + ThresholdThickness : OPTIONAL IfcPositiveLengthMeasure; + TransomThickness : OPTIONAL IfcPositiveLengthMeasure; + TransomOffset : OPTIONAL IfcLengthMeasure; + LiningOffset : OPTIONAL IfcLengthMeasure; + ThresholdOffset : OPTIONAL IfcLengthMeasure; + CasingThickness : OPTIONAL IfcPositiveLengthMeasure; + CasingDepth : OPTIONAL IfcPositiveLengthMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; + WHERE + WR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness)); + WR32 : NOT(NOT(EXISTS(ThresholdDepth)) AND EXISTS(ThresholdThickness)); + WR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR + (NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness))); + WR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR + (NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness))); + WR35 : EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1]) AND + ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])); +END_ENTITY; + +ENTITY IfcDoorPanelProperties + SUBTYPE OF (IfcPropertySetDefinition); + PanelDepth : OPTIONAL IfcPositiveLengthMeasure; + PanelOperation : IfcDoorPanelOperationEnum; + PanelWidth : OPTIONAL IfcNormalisedRatioMeasure; + PanelPosition : IfcDoorPanelPositionEnum; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; + WHERE + WR31 : EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1]) AND + ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])); +END_ENTITY; + +ENTITY IfcDoorStyle + SUBTYPE OF (IfcTypeProduct); + OperationType : IfcDoorStyleOperationEnum; + ConstructionType : IfcDoorStyleConstructionEnum; + ParameterTakesPrecedence : BOOLEAN; + Sizeable : BOOLEAN; +END_ENTITY; + +ENTITY IfcDraughtingCallout + SUPERTYPE OF (ONEOF + (IfcDimensionCurveDirectedCallout + ,IfcStructuredDimensionCallout)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Contents : SET [1:?] OF IfcDraughtingCalloutElement; + INVERSE + IsRelatedFromCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatedDraughtingCallout; + IsRelatedToCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatingDraughtingCallout; +END_ENTITY; + +ENTITY IfcDraughtingCalloutRelationship + SUPERTYPE OF (ONEOF + (IfcDimensionCalloutRelationship + ,IfcDimensionPair)); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + RelatingDraughtingCallout : IfcDraughtingCallout; + RelatedDraughtingCallout : IfcDraughtingCallout; +END_ENTITY; + +ENTITY IfcDraughtingPreDefinedColour + SUBTYPE OF (IfcPreDefinedColour); + WHERE + WR31 : SELF\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow', + 'magenta','cyan','white','by layer']; +END_ENTITY; + +ENTITY IfcDraughtingPreDefinedCurveFont + SUBTYPE OF (IfcPreDefinedCurveFont); + WHERE + WR31 : SELF\IfcPredefinedItem.Name IN + ['continuous', + 'chain', + 'chain double dash', + 'dashed', + 'dotted', + 'by layer']; +END_ENTITY; + +ENTITY IfcDraughtingPreDefinedTextFont + SUBTYPE OF (IfcPreDefinedTextFont); + WHERE + WR31 : SELF\IfcPreDefinedItem.Name IN ['ISO 3098-1 font A','ISO 3098-1 font B']; +END_ENTITY; + +ENTITY IfcDuctFittingType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcDuctFittingTypeEnum; + WHERE + WR2 : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDuctSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcDuctSegmentTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDuctSilencerType + SUBTYPE OF (IfcFlowTreatmentDeviceType); + PredefinedType : IfcDuctSilencerTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcEdge + SUPERTYPE OF (ONEOF + (IfcEdgeCurve + ,IfcOrientedEdge + ,IfcSubedge)) + SUBTYPE OF (IfcTopologicalRepresentationItem); + EdgeStart : IfcVertex; + EdgeEnd : IfcVertex; +END_ENTITY; + +ENTITY IfcEdgeCurve + SUBTYPE OF (IfcEdge); + EdgeGeometry : IfcCurve; + SameSense : BOOLEAN; +END_ENTITY; + +ENTITY IfcEdgeFeature + ABSTRACT SUPERTYPE OF (ONEOF + (IfcChamferEdgeFeature + ,IfcRoundedEdgeFeature)) + SUBTYPE OF (IfcFeatureElementSubtraction); + FeatureLength : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcEdgeLoop + SUBTYPE OF (IfcLoop); + EdgeList : LIST [1:?] OF IfcOrientedEdge; + DERIVE + Ne : INTEGER := SIZEOF(EdgeList); + WHERE + WR1 : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd); + WR2 : IfcLoopHeadToTail(SELF); +END_ENTITY; + +ENTITY IfcElectricApplianceType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcElectricApplianceTypeEnum; +END_ENTITY; + +ENTITY IfcElectricDistributionPoint + SUBTYPE OF (IfcFlowController); + DistributionPointFunction : IfcElectricDistributionPointFunctionEnum; + UserDefinedFunction : OPTIONAL IfcLabel; + WHERE + WR31 : (DistributionPointFunction <> IfcElectricDistributionPointFunctionEnum.USERDEFINED) OR + ((DistributionPointFunction = IfcElectricDistributionPointFunctionEnum.USERDEFINED) AND EXISTS(SELF\IfcElectricDistributionPoint.UserDefinedFunction)); +END_ENTITY; + +ENTITY IfcElectricFlowStorageDeviceType + SUBTYPE OF (IfcFlowStorageDeviceType); + PredefinedType : IfcElectricFlowStorageDeviceTypeEnum; +END_ENTITY; + +ENTITY IfcElectricGeneratorType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcElectricGeneratorTypeEnum; +END_ENTITY; + +ENTITY IfcElectricHeaterType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcElectricHeaterTypeEnum; +END_ENTITY; + +ENTITY IfcElectricMotorType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcElectricMotorTypeEnum; +END_ENTITY; + +ENTITY IfcElectricTimeControlType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcElectricTimeControlTypeEnum; +END_ENTITY; + +ENTITY IfcElectricalBaseProperties + SUBTYPE OF (IfcEnergyProperties); + ElectricCurrentType : OPTIONAL IfcElectricCurrentEnum; + InputVoltage : IfcElectricVoltageMeasure; + InputFrequency : IfcFrequencyMeasure; + FullLoadCurrent : OPTIONAL IfcElectricCurrentMeasure; + MinimumCircuitCurrent : OPTIONAL IfcElectricCurrentMeasure; + MaximumPowerInput : OPTIONAL IfcPowerMeasure; + RatedPowerInput : OPTIONAL IfcPowerMeasure; + InputPhase : INTEGER; +END_ENTITY; + +ENTITY IfcElectricalCircuit + SUBTYPE OF (IfcSystem); +END_ENTITY; + +ENTITY IfcElectricalElement + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuildingElement + ,IfcDistributionElement + ,IfcElectricalElement + ,IfcElementAssembly + ,IfcElementComponent + ,IfcEquipmentElement + ,IfcFeatureElement + ,IfcFurnishingElement + ,IfcTransportElement + ,IfcVirtualElement)) + SUBTYPE OF (IfcProduct); + Tag : OPTIONAL IfcIdentifier; + INVERSE + FillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement; + ConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement; + HasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement; + HasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement; + HasStructuralMember : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatingElement; + ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements; + HasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement; + HasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement; + IsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements; + ProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement; + ConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement; + ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; +END_ENTITY; + +ENTITY IfcElementAssembly + SUBTYPE OF (IfcElement); + AssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum; + PredefinedType : IfcElementAssemblyTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcElementComponent + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDiscreteAccessory + ,IfcFastener)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcElementComponentType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDiscreteAccessoryType + ,IfcFastenerType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcElementQuantity + SUBTYPE OF (IfcPropertySetDefinition); + MethodOfMeasurement : OPTIONAL IfcLabel; + Quantities : SET [1:?] OF IfcPhysicalQuantity; +END_ENTITY; + +ENTITY IfcElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuildingElementType + ,IfcDistributionElementType + ,IfcElementComponentType + ,IfcFurnishingElementType + ,IfcSpatialStructureElementType + ,IfcTransportElementType)) + SUBTYPE OF (IfcTypeProduct); + ElementType : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcElementarySurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPlane)) + SUBTYPE OF (IfcSurface); + Position : IfcAxis2Placement3D; + DERIVE + Dim : IfcDimensionCount := Position.Dim; +END_ENTITY; + +ENTITY IfcEllipse + SUBTYPE OF (IfcConic); + SemiAxis1 : IfcPositiveLengthMeasure; + SemiAxis2 : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcEllipseProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + SemiAxis1 : IfcPositiveLengthMeasure; + SemiAxis2 : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcEnergyConversionDevice + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcEnergyConversionDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAirToAirHeatRecoveryType + ,IfcBoilerType + ,IfcChillerType + ,IfcCoilType + ,IfcCondenserType + ,IfcCooledBeamType + ,IfcCoolingTowerType + ,IfcElectricGeneratorType + ,IfcElectricMotorType + ,IfcEvaporativeCoolerType + ,IfcEvaporatorType + ,IfcHeatExchangerType + ,IfcHumidifierType + ,IfcMotorConnectionType + ,IfcSpaceHeaterType + ,IfcTransformerType + ,IfcTubeBundleType + ,IfcUnitaryEquipmentType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcEnergyProperties + SUPERTYPE OF (ONEOF + (IfcElectricalBaseProperties)) + SUBTYPE OF (IfcPropertySetDefinition); + EnergySequence : OPTIONAL IfcEnergySequenceEnum; + UserDefinedEnergySequence : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcEnvironmentalImpactValue + SUBTYPE OF (IfcAppliedValue); + ImpactType : IfcLabel; + Category : IfcEnvironmentalImpactCategoryEnum; + UserDefinedCategory : OPTIONAL IfcLabel; + WHERE + WR1 : (Category <> IfcEnvironmentalImpactCategoryEnum.USERDEFINED) OR + ((Category = IfcEnvironmentalImpactCategoryEnum.USERDEFINED) AND EXISTS(SELF\IfcEnvironmentalImpactValue.UserDefinedCategory)); +END_ENTITY; + +ENTITY IfcEquipmentElement + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcEquipmentStandard + SUBTYPE OF (IfcControl); +END_ENTITY; + +ENTITY IfcEvaporativeCoolerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcEvaporativeCoolerTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcEvaporatorType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcEvaporatorTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcExtendedMaterialProperties + SUBTYPE OF (IfcMaterialProperties); + ExtendedProperties : SET [1:?] OF IfcProperty; + Description : OPTIONAL IfcText; + Name : IfcLabel; +END_ENTITY; + +ENTITY IfcExternalReference + ABSTRACT SUPERTYPE OF (ONEOF + (IfcClassificationReference + ,IfcDocumentReference + ,IfcExternallyDefinedHatchStyle + ,IfcExternallyDefinedSurfaceStyle + ,IfcExternallyDefinedSymbol + ,IfcExternallyDefinedTextFont + ,IfcLibraryReference)); + Location : OPTIONAL IfcLabel; + ItemReference : OPTIONAL IfcIdentifier; + Name : OPTIONAL IfcLabel; + WHERE + WR1 : EXISTS(ItemReference) OR EXISTS(Location) OR EXISTS(Name); +END_ENTITY; + +ENTITY IfcExternallyDefinedHatchStyle + SUBTYPE OF (IfcExternalReference); +END_ENTITY; + +ENTITY IfcExternallyDefinedSurfaceStyle + SUBTYPE OF (IfcExternalReference); +END_ENTITY; + +ENTITY IfcExternallyDefinedSymbol + SUBTYPE OF (IfcExternalReference); +END_ENTITY; + +ENTITY IfcExternallyDefinedTextFont + SUBTYPE OF (IfcExternalReference); +END_ENTITY; + +ENTITY IfcExtrudedAreaSolid + SUBTYPE OF (IfcSweptAreaSolid); + ExtrudedDirection : IfcDirection; + Depth : IfcPositiveLengthMeasure; + WHERE + WR31 : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0; +END_ENTITY; + +ENTITY IfcFace + SUPERTYPE OF (ONEOF + (IfcFaceSurface)) + SUBTYPE OF (IfcTopologicalRepresentationItem); + Bounds : SET [1:?] OF IfcFaceBound; + WHERE + WR1 : SIZEOF(QUERY(temp <* Bounds | 'IFC2X3.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1; +END_ENTITY; + +ENTITY IfcFaceBasedSurfaceModel + SUBTYPE OF (IfcGeometricRepresentationItem); + FbsmFaces : SET [1:?] OF IfcConnectedFaceSet; + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcFaceBound + SUPERTYPE OF (ONEOF + (IfcFaceOuterBound)) + SUBTYPE OF (IfcTopologicalRepresentationItem); + Bound : IfcLoop; + Orientation : BOOLEAN; +END_ENTITY; + +ENTITY IfcFaceOuterBound + SUBTYPE OF (IfcFaceBound); +END_ENTITY; + +ENTITY IfcFaceSurface + SUBTYPE OF (IfcFace); + FaceSurface : IfcSurface; + SameSense : BOOLEAN; +END_ENTITY; + +ENTITY IfcFacetedBrep + SUBTYPE OF (IfcManifoldSolidBrep); +END_ENTITY; + +ENTITY IfcFacetedBrepWithVoids + SUBTYPE OF (IfcManifoldSolidBrep); + Voids : SET [1:?] OF IfcClosedShell; +END_ENTITY; + +ENTITY IfcFailureConnectionCondition + SUBTYPE OF (IfcStructuralConnectionCondition); + TensionFailureX : OPTIONAL IfcForceMeasure; + TensionFailureY : OPTIONAL IfcForceMeasure; + TensionFailureZ : OPTIONAL IfcForceMeasure; + CompressionFailureX : OPTIONAL IfcForceMeasure; + CompressionFailureY : OPTIONAL IfcForceMeasure; + CompressionFailureZ : OPTIONAL IfcForceMeasure; +END_ENTITY; + +ENTITY IfcFanType + SUBTYPE OF (IfcFlowMovingDeviceType); + PredefinedType : IfcFanTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFastener + SUPERTYPE OF (ONEOF + (IfcMechanicalFastener)) + SUBTYPE OF (IfcElementComponent); +END_ENTITY; + +ENTITY IfcFastenerType + SUPERTYPE OF (ONEOF + (IfcMechanicalFastenerType)) + SUBTYPE OF (IfcElementComponentType); +END_ENTITY; + +ENTITY IfcFeatureElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcFeatureElementAddition + ,IfcFeatureElementSubtraction)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcFeatureElementAddition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcProjectionElement)) + SUBTYPE OF (IfcFeatureElement); + INVERSE + ProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement; +END_ENTITY; + +ENTITY IfcFeatureElementSubtraction + ABSTRACT SUPERTYPE OF (ONEOF + (IfcEdgeFeature + ,IfcOpeningElement)) + SUBTYPE OF (IfcFeatureElement); + INVERSE + VoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement; +END_ENTITY; + +ENTITY IfcFillAreaStyle + SUBTYPE OF (IfcPresentationStyle); + FillStyles : SET [1:?] OF IfcFillStyleSelect; + WHERE + WR11 : SIZEOF(QUERY(Style <* SELF.FillStyles | + 'IFC2X3.IFCCOLOUR' IN + TYPEOF(Style) + )) <= 1; + WR12 : SIZEOF(QUERY(Style <* SELF.FillStyles | + 'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN + TYPEOF(Style) + )) <= 1; + WR13 : (SIZEOF(QUERY(Style <* SELF.FillStyles | + 'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN + TYPEOF(Style) + )) >= 1) + XOR + (SIZEOF(QUERY(Style <* SELF.FillStyles | + 'IFC2X3.IFCFILLAREASTYLEHATCHING' IN + TYPEOF(Style) + )) >= 1) + XOR + (SIZEOF(QUERY(Style <* SELF.FillStyles | + 'IFC2X3.IFCFILLAREASTYLETILES' IN + TYPEOF(Style) + )) >= 1); +END_ENTITY; + +ENTITY IfcFillAreaStyleHatching + SUBTYPE OF (IfcGeometricRepresentationItem); + HatchLineAppearance : IfcCurveStyle; + StartOfNextHatchLine : IfcHatchLineDistanceSelect; + PointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint; + PatternStart : OPTIONAL IfcCartesianPoint; + HatchLineAngle : IfcPlaneAngleMeasure; + WHERE + WR21 : NOT( + 'IFC2X3.IFCTWODIRECTIONREPEATFACTOR' + IN TYPEOF(StartOfNextHatchLine) + ); + WR22 : NOT(EXISTS(PatternStart)) + OR (PatternStart.Dim = 2); + WR23 : NOT(EXISTS(PointOfReferenceHatchLine)) + OR (PointOfReferenceHatchLine.Dim = 2); +END_ENTITY; + +ENTITY IfcFillAreaStyleTileSymbolWithStyle + SUBTYPE OF (IfcGeometricRepresentationItem); + Symbol : IfcAnnotationSymbolOccurrence; +END_ENTITY; + +ENTITY IfcFillAreaStyleTiles + SUBTYPE OF (IfcGeometricRepresentationItem); + TilingPattern : IfcOneDirectionRepeatFactor; + Tiles : SET [1:?] OF IfcFillAreaStyleTileShapeSelect; + TilingScale : IfcPositiveRatioMeasure; +END_ENTITY; + +ENTITY IfcFilterType + SUBTYPE OF (IfcFlowTreatmentDeviceType); + PredefinedType : IfcFilterTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFireSuppressionTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcFireSuppressionTerminalTypeEnum; +END_ENTITY; + +ENTITY IfcFlowController + SUPERTYPE OF (ONEOF + (IfcElectricDistributionPoint)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowControllerType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAirTerminalBoxType + ,IfcDamperType + ,IfcElectricTimeControlType + ,IfcFlowMeterType + ,IfcProtectiveDeviceType + ,IfcSwitchingDeviceType + ,IfcValveType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowFitting + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowFittingType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCableCarrierFittingType + ,IfcDuctFittingType + ,IfcJunctionBoxType + ,IfcPipeFittingType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowInstrumentType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcFlowInstrumentTypeEnum; +END_ENTITY; + +ENTITY IfcFlowMeterType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcFlowMeterTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFlowMovingDevice + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowMovingDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCompressorType + ,IfcFanType + ,IfcPumpType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowSegment + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowSegmentType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCableCarrierSegmentType + ,IfcCableSegmentType + ,IfcDuctSegmentType + ,IfcPipeSegmentType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowStorageDevice + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowStorageDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcElectricFlowStorageDeviceType + ,IfcTankType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowTerminal + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowTerminalType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAirTerminalType + ,IfcElectricApplianceType + ,IfcElectricHeaterType + ,IfcFireSuppressionTerminalType + ,IfcGasTerminalType + ,IfcLampType + ,IfcLightFixtureType + ,IfcOutletType + ,IfcSanitaryTerminalType + ,IfcStackTerminalType + ,IfcWasteTerminalType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowTreatmentDevice + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowTreatmentDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDuctSilencerType + ,IfcFilterType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFluidFlowProperties + SUBTYPE OF (IfcPropertySetDefinition); + PropertySource : IfcPropertySourceEnum; + FlowConditionTimeSeries : OPTIONAL IfcTimeSeries; + VelocityTimeSeries : OPTIONAL IfcTimeSeries; + FlowrateTimeSeries : OPTIONAL IfcTimeSeries; + Fluid : IfcMaterial; + PressureTimeSeries : OPTIONAL IfcTimeSeries; + UserDefinedPropertySource : OPTIONAL IfcLabel; + TemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure; + WetBulbTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure; + WetBulbTemperatureTimeSeries : OPTIONAL IfcTimeSeries; + TemperatureTimeSeries : OPTIONAL IfcTimeSeries; + FlowrateSingleValue : OPTIONAL IfcDerivedMeasureValue; + FlowConditionSingleValue : OPTIONAL IfcPositiveRatioMeasure; + VelocitySingleValue : OPTIONAL IfcLinearVelocityMeasure; + PressureSingleValue : OPTIONAL IfcPressureMeasure; +END_ENTITY; + +ENTITY IfcFooting + SUBTYPE OF (IfcBuildingElement); + PredefinedType : IfcFootingTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcFuelProperties + SUBTYPE OF (IfcMaterialProperties); + CombustionTemperature : OPTIONAL IfcThermodynamicTemperatureMeasure; + CarbonContent : OPTIONAL IfcPositiveRatioMeasure; + LowerHeatingValue : OPTIONAL IfcHeatingValueMeasure; + HigherHeatingValue : OPTIONAL IfcHeatingValueMeasure; + UNIQUE + UR11 : Material; +END_ENTITY; + +ENTITY IfcFurnishingElement + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcFurnishingElementType + SUPERTYPE OF (ONEOF + (IfcFurnitureType + ,IfcSystemFurnitureElementType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcFurnitureStandard + SUBTYPE OF (IfcControl); +END_ENTITY; + +ENTITY IfcFurnitureType + SUBTYPE OF (IfcFurnishingElementType); + AssemblyPlace : IfcAssemblyPlaceEnum; +END_ENTITY; + +ENTITY IfcGasTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcGasTerminalTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcGasTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcGasTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcGeneralMaterialProperties + SUBTYPE OF (IfcMaterialProperties); + MolecularWeight : OPTIONAL IfcMolecularWeightMeasure; + Porosity : OPTIONAL IfcNormalisedRatioMeasure; + MassDensity : OPTIONAL IfcMassDensityMeasure; + UNIQUE + UR11 : Material; +END_ENTITY; + +ENTITY IfcGeneralProfileProperties + SUPERTYPE OF (ONEOF + (IfcStructuralProfileProperties)) + SUBTYPE OF (IfcProfileProperties); + PhysicalWeight : OPTIONAL IfcMassPerLengthMeasure; + Perimeter : OPTIONAL IfcPositiveLengthMeasure; + MinimumPlateThickness : OPTIONAL IfcPositiveLengthMeasure; + MaximumPlateThickness : OPTIONAL IfcPositiveLengthMeasure; + CrossSectionArea : OPTIONAL IfcAreaMeasure; + WHERE + WR1 : NOT(EXISTS(CrossSectionArea)) OR (CrossSectionArea > 0.); +END_ENTITY; + +ENTITY IfcGeometricCurveSet + SUBTYPE OF (IfcGeometricSet); + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcGeometricSet.Elements | + 'IFC2X3.IFCSURFACE' IN TYPEOF(Temp))) = 0; +END_ENTITY; + +ENTITY IfcGeometricRepresentationContext + SUPERTYPE OF (ONEOF + (IfcGeometricRepresentationSubContext)) + SUBTYPE OF (IfcRepresentationContext); + CoordinateSpaceDimension : IfcDimensionCount; + Precision : OPTIONAL REAL; + WorldCoordinateSystem : IfcAxis2Placement; + TrueNorth : OPTIONAL IfcDirection; + INVERSE + HasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext; +END_ENTITY; + +ENTITY IfcGeometricRepresentationItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAnnotationFillArea + ,IfcAnnotationSurface + ,IfcBooleanResult + ,IfcBoundingBox + ,IfcCartesianTransformationOperator + ,IfcCompositeCurveSegment + ,IfcCsgPrimitive3D + ,IfcCurve + ,IfcDefinedSymbol + ,IfcDirection + ,IfcDraughtingCallout + ,IfcFaceBasedSurfaceModel + ,IfcFillAreaStyleHatching + ,IfcFillAreaStyleTileSymbolWithStyle + ,IfcFillAreaStyleTiles + ,IfcGeometricSet + ,IfcHalfSpaceSolid + ,IfcLightSource + ,IfcOneDirectionRepeatFactor + ,IfcPlacement + ,IfcPlanarExtent + ,IfcPoint + ,IfcSectionedSpine + ,IfcShellBasedSurfaceModel + ,IfcSolidModel + ,IfcSurface + ,IfcTextLiteral + ,IfcVector)) + SUBTYPE OF (IfcRepresentationItem); +END_ENTITY; + +ENTITY IfcGeometricRepresentationSubContext + SUBTYPE OF (IfcGeometricRepresentationContext); + ParentContext : IfcGeometricRepresentationContext; + TargetScale : OPTIONAL IfcPositiveRatioMeasure; + TargetView : IfcGeometricProjectionEnum; + UserDefinedTargetView : OPTIONAL IfcLabel; + DERIVE + SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem; + SELF\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension; + SELF\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth,SELF.WorldCoordinateSystem.P[2]); + SELF\IfcGeometricRepresentationContext.Precision : REAL := NVL(ParentContext.Precision,1.E-5); + WHERE + WR31 : NOT('IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext)); + WR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR + ((TargetView = IfcGeometricProjectionEnum.USERDEFINED) AND + EXISTS(UserDefinedTargetView)); +END_ENTITY; + +ENTITY IfcGeometricSet + SUPERTYPE OF (ONEOF + (IfcGeometricCurveSet)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Elements : SET [1:?] OF IfcGeometricSetSelect; + DERIVE + Dim : IfcDimensionCount := Elements[1].Dim; + WHERE + WR21 : SIZEOF(QUERY(Temp <* Elements | + Temp.Dim <> Elements[1].Dim)) + = 0; +END_ENTITY; + +ENTITY IfcGrid + SUBTYPE OF (IfcProduct); + UAxes : LIST [1:?] OF UNIQUE IfcGridAxis; + VAxes : LIST [1:?] OF UNIQUE IfcGridAxis; + WAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis; + INVERSE + ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; + WHERE + WR41 : EXISTS(SELF\IfcProduct.ObjectPlacement); +END_ENTITY; + +ENTITY IfcGridAxis; + AxisTag : OPTIONAL IfcLabel; + AxisCurve : IfcCurve; + SameSense : IfcBoolean; + INVERSE + PartOfW : SET [0:1] OF IfcGrid FOR WAxes; + PartOfV : SET [0:1] OF IfcGrid FOR VAxes; + PartOfU : SET [0:1] OF IfcGrid FOR UAxes; + HasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes; + WHERE + WR1 : AxisCurve.Dim = 2; + WR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1); +END_ENTITY; + +ENTITY IfcGridPlacement + SUBTYPE OF (IfcObjectPlacement); + PlacementLocation : IfcVirtualGridIntersection; + PlacementRefDirection : OPTIONAL IfcVirtualGridIntersection; +END_ENTITY; + +ENTITY IfcGroup + SUPERTYPE OF (ONEOF + (IfcAsset + ,IfcCondition + ,IfcInventory + ,IfcStructuralLoadGroup + ,IfcStructuralResultGroup + ,IfcSystem + ,IfcZone)) + SUBTYPE OF (IfcObject); + INVERSE + IsGroupedBy : IfcRelAssignsToGroup FOR RelatingGroup; +END_ENTITY; + +ENTITY IfcHalfSpaceSolid + SUPERTYPE OF (ONEOF + (IfcBoxedHalfSpace + ,IfcPolygonalBoundedHalfSpace)) + SUBTYPE OF (IfcGeometricRepresentationItem); + BaseSurface : IfcSurface; + AgreementFlag : BOOLEAN; + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcHeatExchangerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcHeatExchangerTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcHumidifierType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcHumidifierTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcHygroscopicMaterialProperties + SUBTYPE OF (IfcMaterialProperties); + UpperVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure; + LowerVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure; + IsothermalMoistureCapacity : OPTIONAL IfcIsothermalMoistureCapacityMeasure; + VaporPermeability : OPTIONAL IfcVaporPermeabilityMeasure; + MoistureDiffusivity : OPTIONAL IfcMoistureDiffusivityMeasure; + UNIQUE + UR11 : Material; +END_ENTITY; + +ENTITY IfcIShapeProfileDef + SUPERTYPE OF (ONEOF + (IfcAsymmetricIShapeProfileDef)) + SUBTYPE OF (IfcParameterizedProfileDef); + OverallWidth : IfcPositiveLengthMeasure; + OverallDepth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR1 : FlangeThickness < (OverallDepth / 2.); + WR2 : WebThickness < OverallWidth; + WR3 : NOT(EXISTS(FilletRadius)) OR + ((FilletRadius <= (OverallWidth - WebThickness)/2.) AND + (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.)); +END_ENTITY; + +ENTITY IfcImageTexture + SUBTYPE OF (IfcSurfaceTexture); + UrlReference : IfcIdentifier; +END_ENTITY; + +ENTITY IfcInventory + SUBTYPE OF (IfcGroup); + InventoryType : IfcInventoryTypeEnum; + Jurisdiction : IfcActorSelect; + ResponsiblePersons : SET [1:?] OF IfcPerson; + LastUpdateDate : IfcCalendarDate; + CurrentValue : OPTIONAL IfcCostValue; + OriginalValue : OPTIONAL IfcCostValue; + WHERE + WR41 : SIZEOF(QUERY(temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects | + NOT( ('IFC2X3.IFCSPACE' IN TYPEOF (temp)) OR + ('IFC2X3.IFCASSET' IN TYPEOF (temp)) OR + ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp)) + ))) = 0; +END_ENTITY; + +ENTITY IfcIrregularTimeSeries + SUBTYPE OF (IfcTimeSeries); + Values : LIST [1:?] OF IfcIrregularTimeSeriesValue; +END_ENTITY; + +ENTITY IfcIrregularTimeSeriesValue; + TimeStamp : IfcDateTimeSelect; + ListValues : LIST [1:?] OF IfcValue; +END_ENTITY; + +ENTITY IfcJunctionBoxType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcJunctionBoxTypeEnum; +END_ENTITY; + +ENTITY IfcLShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + Width : OPTIONAL IfcPositiveLengthMeasure; + Thickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcPositiveLengthMeasure; + EdgeRadius : OPTIONAL IfcPositiveLengthMeasure; + LegSlope : OPTIONAL IfcPlaneAngleMeasure; + CentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure; + CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR21 : Thickness < Depth; + WR22 : NOT(EXISTS(Width)) OR (Thickness < Width); +END_ENTITY; + +ENTITY IfcLaborResource + SUBTYPE OF (IfcConstructionResource); + SkillSet : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcLampType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcLampTypeEnum; +END_ENTITY; + +ENTITY IfcLibraryInformation; + Name : IfcLabel; + Version : OPTIONAL IfcLabel; + Publisher : OPTIONAL IfcOrganization; + VersionDate : OPTIONAL IfcCalendarDate; + LibraryReference : OPTIONAL SET [1:?] OF IfcLibraryReference; +END_ENTITY; + +ENTITY IfcLibraryReference + SUBTYPE OF (IfcExternalReference); + INVERSE + ReferenceIntoLibrary : SET [0:1] OF IfcLibraryInformation FOR LibraryReference; +END_ENTITY; + +ENTITY IfcLightDistributionData; + MainPlaneAngle : IfcPlaneAngleMeasure; + SecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure; + LuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure; +END_ENTITY; + +ENTITY IfcLightFixtureType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcLightFixtureTypeEnum; +END_ENTITY; + +ENTITY IfcLightIntensityDistribution; + LightDistributionCurve : IfcLightDistributionCurveEnum; + DistributionData : LIST [1:?] OF IfcLightDistributionData; +END_ENTITY; + +ENTITY IfcLightSource + ABSTRACT SUPERTYPE OF (ONEOF + (IfcLightSourceAmbient + ,IfcLightSourceDirectional + ,IfcLightSourceGoniometric + ,IfcLightSourcePositional)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Name : OPTIONAL IfcLabel; + LightColour : IfcColourRgb; + AmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure; + Intensity : OPTIONAL IfcNormalisedRatioMeasure; +END_ENTITY; + +ENTITY IfcLightSourceAmbient + SUBTYPE OF (IfcLightSource); +END_ENTITY; + +ENTITY IfcLightSourceDirectional + SUBTYPE OF (IfcLightSource); + Orientation : IfcDirection; +END_ENTITY; + +ENTITY IfcLightSourceGoniometric + SUBTYPE OF (IfcLightSource); + Position : IfcAxis2Placement3D; + ColourAppearance : OPTIONAL IfcColourRgb; + ColourTemperature : IfcThermodynamicTemperatureMeasure; + LuminousFlux : IfcLuminousFluxMeasure; + LightEmissionSource : IfcLightEmissionSourceEnum; + LightDistributionDataSource : IfcLightDistributionDataSourceSelect; +END_ENTITY; + +ENTITY IfcLightSourcePositional + SUPERTYPE OF (ONEOF + (IfcLightSourceSpot)) + SUBTYPE OF (IfcLightSource); + Position : IfcCartesianPoint; + Radius : IfcPositiveLengthMeasure; + ConstantAttenuation : IfcReal; + DistanceAttenuation : IfcReal; + QuadricAttenuation : IfcReal; +END_ENTITY; + +ENTITY IfcLightSourceSpot + SUBTYPE OF (IfcLightSourcePositional); + Orientation : IfcDirection; + ConcentrationExponent : OPTIONAL IfcReal; + SpreadAngle : IfcPositivePlaneAngleMeasure; + BeamWidthAngle : IfcPositivePlaneAngleMeasure; +END_ENTITY; + +ENTITY IfcLine + SUBTYPE OF (IfcCurve); + Pnt : IfcCartesianPoint; + Dir : IfcVector; + WHERE + WR1 : Dir.Dim = Pnt.Dim; +END_ENTITY; + +ENTITY IfcLinearDimension + SUBTYPE OF (IfcDimensionCurveDirectedCallout); +END_ENTITY; + +ENTITY IfcLocalPlacement + SUBTYPE OF (IfcObjectPlacement); + PlacementRelTo : OPTIONAL IfcObjectPlacement; + RelativePlacement : IfcAxis2Placement; + WHERE + WR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo); +END_ENTITY; + +ENTITY IfcLocalTime; + HourComponent : IfcHourInDay; + MinuteComponent : OPTIONAL IfcMinuteInHour; + SecondComponent : OPTIONAL IfcSecondInMinute; + Zone : OPTIONAL IfcCoordinatedUniversalTimeOffset; + DaylightSavingOffset : OPTIONAL IfcDaylightSavingHour; + WHERE + WR21 : IfcValidTime (SELF); +END_ENTITY; + +ENTITY IfcLoop + SUPERTYPE OF (ONEOF + (IfcEdgeLoop + ,IfcPolyLoop + ,IfcVertexLoop)) + SUBTYPE OF (IfcTopologicalRepresentationItem); +END_ENTITY; + +ENTITY IfcManifoldSolidBrep + ABSTRACT SUPERTYPE OF (ONEOF + (IfcFacetedBrep + ,IfcFacetedBrepWithVoids)) + SUBTYPE OF (IfcSolidModel); + Outer : IfcClosedShell; +END_ENTITY; + +ENTITY IfcMappedItem + SUBTYPE OF (IfcRepresentationItem); + MappingSource : IfcRepresentationMap; + MappingTarget : IfcCartesianTransformationOperator; +END_ENTITY; + +ENTITY IfcMaterial; + Name : IfcLabel; + INVERSE + HasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial; + ClassifiedAs : SET [0:1] OF IfcMaterialClassificationRelationship FOR ClassifiedMaterial; +END_ENTITY; + +ENTITY IfcMaterialClassificationRelationship; + MaterialClassifications : SET [1:?] OF IfcClassificationNotationSelect; + ClassifiedMaterial : IfcMaterial; +END_ENTITY; + +ENTITY IfcMaterialDefinitionRepresentation + SUBTYPE OF (IfcProductRepresentation); + RepresentedMaterial : IfcMaterial; + WHERE + WR11 : SIZEOF(QUERY(temp <* Representations | + (NOT('IFC2X3.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp))) + )) = 0; +END_ENTITY; + +ENTITY IfcMaterialLayer; + Material : OPTIONAL IfcMaterial; + LayerThickness : IfcPositiveLengthMeasure; + IsVentilated : OPTIONAL IfcLogical; + INVERSE + ToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers; +END_ENTITY; + +ENTITY IfcMaterialLayerSet; + MaterialLayers : LIST [1:?] OF IfcMaterialLayer; + LayerSetName : OPTIONAL IfcLabel; + DERIVE + TotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF); +END_ENTITY; + +ENTITY IfcMaterialLayerSetUsage; + ForLayerSet : IfcMaterialLayerSet; + LayerSetDirection : IfcLayerSetDirectionEnum; + DirectionSense : IfcDirectionSenseEnum; + OffsetFromReferenceLine : IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcMaterialList; + Materials : LIST [1:?] OF IfcMaterial; +END_ENTITY; + +ENTITY IfcMaterialProperties + ABSTRACT SUPERTYPE OF (ONEOF + (IfcExtendedMaterialProperties + ,IfcFuelProperties + ,IfcGeneralMaterialProperties + ,IfcHygroscopicMaterialProperties + ,IfcMechanicalMaterialProperties + ,IfcOpticalMaterialProperties + ,IfcProductsOfCombustionProperties + ,IfcThermalMaterialProperties + ,IfcWaterProperties)); + Material : IfcMaterial; +END_ENTITY; + +ENTITY IfcMeasureWithUnit; + ValueComponent : IfcValue; + UnitComponent : IfcUnit; +END_ENTITY; + +ENTITY IfcMechanicalConcreteMaterialProperties + SUBTYPE OF (IfcMechanicalMaterialProperties); + CompressiveStrength : OPTIONAL IfcPressureMeasure; + MaxAggregateSize : OPTIONAL IfcPositiveLengthMeasure; + AdmixturesDescription : OPTIONAL IfcText; + Workability : OPTIONAL IfcText; + ProtectivePoreRatio : OPTIONAL IfcNormalisedRatioMeasure; + WaterImpermeability : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcMechanicalFastener + SUBTYPE OF (IfcFastener); + NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + NominalLength : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcMechanicalFastenerType + SUBTYPE OF (IfcFastenerType); +END_ENTITY; + +ENTITY IfcMechanicalMaterialProperties + SUPERTYPE OF (ONEOF + (IfcMechanicalConcreteMaterialProperties + ,IfcMechanicalSteelMaterialProperties)) + SUBTYPE OF (IfcMaterialProperties); + DynamicViscosity : OPTIONAL IfcDynamicViscosityMeasure; + YoungModulus : OPTIONAL IfcModulusOfElasticityMeasure; + ShearModulus : OPTIONAL IfcModulusOfElasticityMeasure; + PoissonRatio : OPTIONAL IfcPositiveRatioMeasure; + ThermalExpansionCoefficient : OPTIONAL IfcThermalExpansionCoefficientMeasure; + UNIQUE + UR11 : Material; + WHERE + WR21 : NOT(EXISTS(YoungModulus)) OR (YoungModulus >= 0.0); + WR22 : NOT(EXISTS(ShearModulus)) OR (ShearModulus >= 0.0); +END_ENTITY; + +ENTITY IfcMechanicalSteelMaterialProperties + SUBTYPE OF (IfcMechanicalMaterialProperties); + YieldStress : OPTIONAL IfcPressureMeasure; + UltimateStress : OPTIONAL IfcPressureMeasure; + UltimateStrain : OPTIONAL IfcPositiveRatioMeasure; + HardeningModule : OPTIONAL IfcModulusOfElasticityMeasure; + ProportionalStress : OPTIONAL IfcPressureMeasure; + PlasticStrain : OPTIONAL IfcPositiveRatioMeasure; + Relaxations : OPTIONAL SET [1:?] OF IfcRelaxation; + WHERE + WR31 : NOT(EXISTS(YieldStress)) OR (YieldStress >= 0.); + WR32 : NOT(EXISTS(UltimateStress)) OR (UltimateStress >= 0.); + WR33 : NOT(EXISTS(HardeningModule)) OR (HardeningModule >= 0.); + WR34 : NOT(EXISTS(ProportionalStress)) OR (ProportionalStress >= 0.); +END_ENTITY; + +ENTITY IfcMember + SUBTYPE OF (IfcBuildingElement); +END_ENTITY; + +ENTITY IfcMemberType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcMemberTypeEnum; +END_ENTITY; + +ENTITY IfcMetric + SUBTYPE OF (IfcConstraint); + Benchmark : IfcBenchmarkEnum; + ValueSource : OPTIONAL IfcLabel; + DataValue : IfcMetricValueSelect; +END_ENTITY; + +ENTITY IfcMonetaryUnit; + Currency : IfcCurrencyEnum; +END_ENTITY; + +ENTITY IfcMotorConnectionType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcMotorConnectionTypeEnum; +END_ENTITY; + +ENTITY IfcMove + SUBTYPE OF (IfcTask); + MoveFrom : IfcSpatialStructureElement; + MoveTo : IfcSpatialStructureElement; + PunchList : OPTIONAL LIST [1:?] OF UNIQUE IfcText; + WHERE + WR1 : SIZEOF(SELF\IfcProcess.OperatesOn) >= 1; + WR2 : SIZEOF(QUERY(temp <* OperatesOn | + SIZEOF(QUERY(temp2 <* temp.RelatedObjects | + ('IFC2X3.IFCACTOR' IN TYPEOF (temp2)) OR + ('IFC2X3.IFCEQUIPMENTELEMENT' IN TYPEOF (temp2)) OR + ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp2)) )) >=1 + )) >= 1; + WR3 : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcNamedUnit + ABSTRACT SUPERTYPE OF (ONEOF + (IfcContextDependentUnit + ,IfcConversionBasedUnit + ,IfcSIUnit)); + Dimensions : IfcDimensionalExponents; + UnitType : IfcUnitEnum; + WHERE + WR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions); +END_ENTITY; + +ENTITY IfcObject + ABSTRACT SUPERTYPE OF (ONEOF + (IfcActor + ,IfcControl + ,IfcGroup + ,IfcProcess + ,IfcProduct + ,IfcProject + ,IfcResource)) + SUBTYPE OF (IfcObjectDefinition); + ObjectType : OPTIONAL IfcLabel; + INVERSE + IsDefinedBy : SET [0:?] OF IfcRelDefines FOR RelatedObjects; + WHERE + WR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X3.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1; +END_ENTITY; + +ENTITY IfcObjectDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcObject + ,IfcTypeObject)) + SUBTYPE OF (IfcRoot); + INVERSE + HasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects; + IsDecomposedBy : SET [0:?] OF IfcRelDecomposes FOR RelatingObject; + Decomposes : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects; + HasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects; +END_ENTITY; + +ENTITY IfcObjectPlacement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcGridPlacement + ,IfcLocalPlacement)); + INVERSE + PlacesObject : SET [1:1] OF IfcProduct FOR ObjectPlacement; + ReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo; +END_ENTITY; + +ENTITY IfcObjective + SUBTYPE OF (IfcConstraint); + BenchmarkValues : OPTIONAL IfcMetric; + ResultValues : OPTIONAL IfcMetric; + ObjectiveQualifier : IfcObjectiveEnum; + UserDefinedQualifier : OPTIONAL IfcLabel; + WHERE + WR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR + ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\IfcObjective.UserDefinedQualifier)); +END_ENTITY; + +ENTITY IfcOccupant + SUBTYPE OF (IfcActor); + PredefinedType : IfcOccupantTypeEnum; + WHERE + WR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) + OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcOffsetCurve2D + SUBTYPE OF (IfcCurve); + BasisCurve : IfcCurve; + Distance : IfcLengthMeasure; + SelfIntersect : LOGICAL; + WHERE + WR1 : BasisCurve.Dim = 2; +END_ENTITY; + +ENTITY IfcOffsetCurve3D + SUBTYPE OF (IfcCurve); + BasisCurve : IfcCurve; + Distance : IfcLengthMeasure; + SelfIntersect : LOGICAL; + RefDirection : IfcDirection; + WHERE + WR1 : BasisCurve.Dim = 3; +END_ENTITY; + +ENTITY IfcOneDirectionRepeatFactor + SUPERTYPE OF (ONEOF + (IfcTwoDirectionRepeatFactor)) + SUBTYPE OF (IfcGeometricRepresentationItem); + RepeatFactor : IfcVector; +END_ENTITY; + +ENTITY IfcOpenShell + SUBTYPE OF (IfcConnectedFaceSet); +END_ENTITY; + +ENTITY IfcOpeningElement + SUBTYPE OF (IfcFeatureElementSubtraction); + INVERSE + HasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement; +END_ENTITY; + +ENTITY IfcOpticalMaterialProperties + SUBTYPE OF (IfcMaterialProperties); + VisibleTransmittance : OPTIONAL IfcPositiveRatioMeasure; + SolarTransmittance : OPTIONAL IfcPositiveRatioMeasure; + ThermalIrTransmittance : OPTIONAL IfcPositiveRatioMeasure; + ThermalIrEmissivityBack : OPTIONAL IfcPositiveRatioMeasure; + ThermalIrEmissivityFront : OPTIONAL IfcPositiveRatioMeasure; + VisibleReflectanceBack : OPTIONAL IfcPositiveRatioMeasure; + VisibleReflectanceFront : OPTIONAL IfcPositiveRatioMeasure; + SolarReflectanceFront : OPTIONAL IfcPositiveRatioMeasure; + SolarReflectanceBack : OPTIONAL IfcPositiveRatioMeasure; + UNIQUE + UR11 : Material; +END_ENTITY; + +ENTITY IfcOrderAction + SUBTYPE OF (IfcTask); + ActionID : IfcIdentifier; + UNIQUE + UR2 : ActionID; +END_ENTITY; + +ENTITY IfcOrganization; + Id : OPTIONAL IfcIdentifier; + Name : IfcLabel; + Description : OPTIONAL IfcText; + Roles : OPTIONAL LIST [1:?] OF IfcActorRole; + Addresses : OPTIONAL LIST [1:?] OF IfcAddress; + INVERSE + IsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations; + Relates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization; + Engages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization; +END_ENTITY; + +ENTITY IfcOrganizationRelationship; + Name : IfcLabel; + Description : OPTIONAL IfcText; + RelatingOrganization : IfcOrganization; + RelatedOrganizations : SET [1:?] OF IfcOrganization; +END_ENTITY; + +ENTITY IfcOrientedEdge + SUBTYPE OF (IfcEdge); + EdgeElement : IfcEdge; + Orientation : BOOLEAN; + DERIVE + SELF\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose + (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd); + SELF\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose + (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart); + WHERE + WR1 : NOT('IFC2X3.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement)); +END_ENTITY; + +ENTITY IfcOutletType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcOutletTypeEnum; +END_ENTITY; + +ENTITY IfcOwnerHistory; + OwningUser : IfcPersonAndOrganization; + OwningApplication : IfcApplication; + State : OPTIONAL IfcStateEnum; + ChangeAction : IfcChangeActionEnum; + LastModifiedDate : OPTIONAL IfcTimeStamp; + LastModifyingUser : OPTIONAL IfcPersonAndOrganization; + LastModifyingApplication : OPTIONAL IfcApplication; + CreationDate : IfcTimeStamp; +END_ENTITY; + +ENTITY IfcParameterizedProfileDef + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCShapeProfileDef + ,IfcCircleProfileDef + ,IfcCraneRailAShapeProfileDef + ,IfcCraneRailFShapeProfileDef + ,IfcEllipseProfileDef + ,IfcIShapeProfileDef + ,IfcLShapeProfileDef + ,IfcRectangleProfileDef + ,IfcTShapeProfileDef + ,IfcTrapeziumProfileDef + ,IfcUShapeProfileDef + ,IfcZShapeProfileDef)) + SUBTYPE OF (IfcProfileDef); + Position : IfcAxis2Placement2D; +END_ENTITY; + +ENTITY IfcPath + SUBTYPE OF (IfcTopologicalRepresentationItem); + EdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge; + WHERE + WR1 : IfcPathHeadToTail(SELF); +END_ENTITY; + +ENTITY IfcPerformanceHistory + SUBTYPE OF (IfcControl); + LifeCyclePhase : IfcLabel; +END_ENTITY; + +ENTITY IfcPermeableCoveringProperties + SUBTYPE OF (IfcPropertySetDefinition); + OperationType : IfcPermeableCoveringOperationEnum; + PanelPosition : IfcWindowPanelPositionEnum; + FrameDepth : OPTIONAL IfcPositiveLengthMeasure; + FrameThickness : OPTIONAL IfcPositiveLengthMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; +END_ENTITY; + +ENTITY IfcPermit + SUBTYPE OF (IfcControl); + PermitID : IfcIdentifier; + UNIQUE + UR2 : PermitID; +END_ENTITY; + +ENTITY IfcPerson; + Id : OPTIONAL IfcIdentifier; + FamilyName : OPTIONAL IfcLabel; + GivenName : OPTIONAL IfcLabel; + MiddleNames : OPTIONAL LIST [1:?] OF IfcLabel; + PrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel; + SuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel; + Roles : OPTIONAL LIST [1:?] OF IfcActorRole; + Addresses : OPTIONAL LIST [1:?] OF IfcAddress; + INVERSE + EngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson; + WHERE + WR1 : EXISTS(FamilyName) OR + EXISTS(GivenName); +END_ENTITY; + +ENTITY IfcPersonAndOrganization; + ThePerson : IfcPerson; + TheOrganization : IfcOrganization; + Roles : OPTIONAL LIST [1:?] OF IfcActorRole; +END_ENTITY; + +ENTITY IfcPhysicalComplexQuantity + SUBTYPE OF (IfcPhysicalQuantity); + HasQuantities : SET [1:?] OF IfcPhysicalQuantity; + Discrimination : IfcLabel; + Quality : OPTIONAL IfcLabel; + Usage : OPTIONAL IfcLabel; + WHERE + WR21 : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0; +END_ENTITY; + +ENTITY IfcPhysicalQuantity + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPhysicalComplexQuantity + ,IfcPhysicalSimpleQuantity)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + INVERSE + PartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities; +END_ENTITY; + +ENTITY IfcPhysicalSimpleQuantity + ABSTRACT SUPERTYPE OF (ONEOF + (IfcQuantityArea + ,IfcQuantityCount + ,IfcQuantityLength + ,IfcQuantityTime + ,IfcQuantityVolume + ,IfcQuantityWeight)) + SUBTYPE OF (IfcPhysicalQuantity); + Unit : OPTIONAL IfcNamedUnit; +END_ENTITY; + +ENTITY IfcPile + SUBTYPE OF (IfcBuildingElement); + PredefinedType : IfcPileTypeEnum; + ConstructionType : OPTIONAL IfcPileConstructionEnum; + WHERE + WR1 : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcPipeFittingType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcPipeFittingTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcPipeSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcPipeSegmentTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcPixelTexture + SUBTYPE OF (IfcSurfaceTexture); + Width : IfcInteger; + Height : IfcInteger; + ColourComponents : IfcInteger; + Pixel : LIST [1:?] OF BINARY(32); + WHERE + WR21 : Width >= 1; + WR22 : Height >= 1; + WR23 : {1 <= ColourComponents <= 4}; + WR24 : SIZEOF(Pixel) = (Width * Height); +END_ENTITY; + +ENTITY IfcPlacement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAxis1Placement + ,IfcAxis2Placement2D + ,IfcAxis2Placement3D)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Location : IfcCartesianPoint; + DERIVE + Dim : IfcDimensionCount := Location.Dim; +END_ENTITY; + +ENTITY IfcPlanarBox + SUBTYPE OF (IfcPlanarExtent); + Placement : IfcAxis2Placement; +END_ENTITY; + +ENTITY IfcPlanarExtent + SUPERTYPE OF (ONEOF + (IfcPlanarBox)) + SUBTYPE OF (IfcGeometricRepresentationItem); + SizeInX : IfcLengthMeasure; + SizeInY : IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcPlane + SUBTYPE OF (IfcElementarySurface); +END_ENTITY; + +ENTITY IfcPlate + SUBTYPE OF (IfcBuildingElement); +END_ENTITY; + +ENTITY IfcPlateType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcPlateTypeEnum; + WHERE + WR1 : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | 'IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) = 1; +END_ENTITY; + +ENTITY IfcPoint + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCartesianPoint + ,IfcPointOnCurve + ,IfcPointOnSurface)) + SUBTYPE OF (IfcGeometricRepresentationItem); +END_ENTITY; + +ENTITY IfcPointOnCurve + SUBTYPE OF (IfcPoint); + BasisCurve : IfcCurve; + PointParameter : IfcParameterValue; + DERIVE + Dim : IfcDimensionCount := BasisCurve.Dim; +END_ENTITY; + +ENTITY IfcPointOnSurface + SUBTYPE OF (IfcPoint); + BasisSurface : IfcSurface; + PointParameterU : IfcParameterValue; + PointParameterV : IfcParameterValue; + DERIVE + Dim : IfcDimensionCount := BasisSurface.Dim; +END_ENTITY; + +ENTITY IfcPolyLoop + SUBTYPE OF (IfcLoop); + Polygon : LIST [3:?] OF UNIQUE IfcCartesianPoint; + WHERE + WR21 : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0; +END_ENTITY; + +ENTITY IfcPolygonalBoundedHalfSpace + SUBTYPE OF (IfcHalfSpaceSolid); + Position : IfcAxis2Placement3D; + PolygonalBoundary : IfcBoundedCurve; + WHERE + WR41 : PolygonalBoundary.Dim = 2; + WR42 : SIZEOF(TYPEOF(PolygonalBoundary) * [ + 'IFC2X3.IFCPOLYLINE', + 'IFC2X3.IFCCOMPOSITECURVE'] + ) = 1; +END_ENTITY; + +ENTITY IfcPolyline + SUBTYPE OF (IfcBoundedCurve); + Points : LIST [2:?] OF IfcCartesianPoint; + WHERE + WR41 : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0; +END_ENTITY; + +ENTITY IfcPort + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDistributionPort)) + SUBTYPE OF (IfcProduct); + INVERSE + ContainedIn : IfcRelConnectsPortToElement FOR RelatingPort; + ConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort; + ConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort; +END_ENTITY; + +ENTITY IfcPostalAddress + SUBTYPE OF (IfcAddress); + InternalLocation : OPTIONAL IfcLabel; + AddressLines : OPTIONAL LIST [1:?] OF IfcLabel; + PostalBox : OPTIONAL IfcLabel; + Town : OPTIONAL IfcLabel; + Region : OPTIONAL IfcLabel; + PostalCode : OPTIONAL IfcLabel; + Country : OPTIONAL IfcLabel; + WHERE + WR1 : EXISTS (InternalLocation) OR + EXISTS (AddressLines) OR + EXISTS (PostalBox) OR + EXISTS (PostalCode) OR + EXISTS (Town) OR + EXISTS (Region) OR + EXISTS (Country); +END_ENTITY; + +ENTITY IfcPreDefinedColour + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDraughtingPreDefinedColour)) + SUBTYPE OF (IfcPreDefinedItem); +END_ENTITY; + +ENTITY IfcPreDefinedCurveFont + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDraughtingPreDefinedCurveFont)) + SUBTYPE OF (IfcPreDefinedItem); +END_ENTITY; + +ENTITY IfcPreDefinedDimensionSymbol + SUBTYPE OF (IfcPreDefinedSymbol); + WHERE + WR31 : SELF\IfcPreDefinedItem.Name IN ['arc length','conical taper','counterbore', + 'countersink','depth','diameter','plus minus','radius', + 'slope','spherical diameter','spherical radius','square']; +END_ENTITY; + +ENTITY IfcPreDefinedItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPreDefinedColour + ,IfcPreDefinedCurveFont + ,IfcPreDefinedSymbol + ,IfcPreDefinedTextFont)); + Name : IfcLabel; +END_ENTITY; + +ENTITY IfcPreDefinedPointMarkerSymbol + SUBTYPE OF (IfcPreDefinedSymbol); + WHERE + WR31 : SELF\IfcPreDefinedItem.Name IN ['asterisk','circle','dot','plus','square','triangle','x']; +END_ENTITY; + +ENTITY IfcPreDefinedSymbol + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPreDefinedDimensionSymbol + ,IfcPreDefinedPointMarkerSymbol + ,IfcPreDefinedTerminatorSymbol)) + SUBTYPE OF (IfcPreDefinedItem); +END_ENTITY; + +ENTITY IfcPreDefinedTerminatorSymbol + SUBTYPE OF (IfcPreDefinedSymbol); + WHERE + WR31 : SELF\IfcPreDefinedItem.Name IN ['blanked arrow','blanked box', + 'blanked dot','dimension origin','filled arrow','filled box', + 'filled dot','integral symbol','open arrow','slash','unfilled arrow']; +END_ENTITY; + +ENTITY IfcPreDefinedTextFont + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDraughtingPreDefinedTextFont + ,IfcTextStyleFontModel)) + SUBTYPE OF (IfcPreDefinedItem); +END_ENTITY; + +ENTITY IfcPresentationLayerAssignment + SUPERTYPE OF (ONEOF + (IfcPresentationLayerWithStyle)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + AssignedItems : SET [1:?] OF IfcLayeredItem; + Identifier : OPTIONAL IfcIdentifier; +END_ENTITY; + +ENTITY IfcPresentationLayerWithStyle + SUBTYPE OF (IfcPresentationLayerAssignment); + LayerOn : LOGICAL; + LayerFrozen : LOGICAL; + LayerBlocked : LOGICAL; + LayerStyles : SET [0:?] OF IfcPresentationStyleSelect; +END_ENTITY; + +ENTITY IfcPresentationStyle + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCurveStyle + ,IfcFillAreaStyle + ,IfcSurfaceStyle + ,IfcSymbolStyle + ,IfcTextStyle)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcPresentationStyleAssignment; + Styles : SET [1:?] OF IfcPresentationStyleSelect; +END_ENTITY; + +ENTITY IfcProcedure + SUBTYPE OF (IfcProcess); + ProcedureID : IfcIdentifier; + ProcedureType : IfcProcedureTypeEnum; + UserDefinedProcedureType : OPTIONAL IfcLabel; + WHERE + WR1 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0; + WR2 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0; + WR3 : EXISTS(SELF\IfcRoot.Name); + WR4 : (ProcedureType <> IfcProcedureTypeEnum.USERDEFINED) OR + ((ProcedureType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcProcedure.UserDefinedProcedureType)); +END_ENTITY; + +ENTITY IfcProcess + ABSTRACT SUPERTYPE OF (ONEOF + (IfcProcedure + ,IfcTask)) + SUBTYPE OF (IfcObject); + INVERSE + OperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess; + IsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess; + IsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess; +END_ENTITY; + +ENTITY IfcProduct + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAnnotation + ,IfcElement + ,IfcGrid + ,IfcPort + ,IfcProxy + ,IfcSpatialStructureElement + ,IfcStructuralActivity + ,IfcStructuralItem)) + SUBTYPE OF (IfcObject); + ObjectPlacement : OPTIONAL IfcObjectPlacement; + Representation : OPTIONAL IfcProductRepresentation; + INVERSE + ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct; + WHERE + WR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement)) + OR (EXISTS(Representation) AND + (NOT('IFC2X3.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation)))) + OR (NOT(EXISTS(Representation))); +END_ENTITY; + +ENTITY IfcProductDefinitionShape + SUBTYPE OF (IfcProductRepresentation); + INVERSE + ShapeOfProduct : SET [1:1] OF IfcProduct FOR Representation; + HasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape; + WHERE + WR11 : SIZEOF(QUERY(temp <* Representations | + (NOT('IFC2X3.IFCSHAPEMODEL' IN TYPEOF(temp))) + )) = 0; +END_ENTITY; + +ENTITY IfcProductRepresentation + SUPERTYPE OF (ONEOF + (IfcMaterialDefinitionRepresentation + ,IfcProductDefinitionShape)); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + Representations : LIST [1:?] OF IfcRepresentation; +END_ENTITY; + +ENTITY IfcProductsOfCombustionProperties + SUBTYPE OF (IfcMaterialProperties); + SpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure; + N20Content : OPTIONAL IfcPositiveRatioMeasure; + COContent : OPTIONAL IfcPositiveRatioMeasure; + CO2Content : OPTIONAL IfcPositiveRatioMeasure; + UNIQUE + UR11 : Material; +END_ENTITY; + +ENTITY IfcProfileDef + ABSTRACT SUPERTYPE OF (ONEOF + (IfcArbitraryClosedProfileDef + ,IfcArbitraryOpenProfileDef + ,IfcCompositeProfileDef + ,IfcDerivedProfileDef + ,IfcParameterizedProfileDef)); + ProfileType : IfcProfileTypeEnum; + ProfileName : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcProfileProperties + ABSTRACT SUPERTYPE OF (ONEOF + (IfcGeneralProfileProperties + ,IfcRibPlateProfileProperties)); + ProfileName : OPTIONAL IfcLabel; + ProfileDefinition : OPTIONAL IfcProfileDef; +END_ENTITY; + +ENTITY IfcProject + SUBTYPE OF (IfcObject); + LongName : OPTIONAL IfcLabel; + Phase : OPTIONAL IfcLabel; + RepresentationContexts : SET [1:?] OF IfcRepresentationContext; + UnitsInContext : IfcUnitAssignment; + WHERE + WR31 : EXISTS(SELF\IfcRoot.Name); + WR32 : SIZEOF(QUERY(Temp <* RepresentationContexts | + 'IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp) + )) = 0; + WR33 : SIZEOF(SELF\IfcObjectDefinition.Decomposes) = 0; +END_ENTITY; + +ENTITY IfcProjectOrder + SUBTYPE OF (IfcControl); + ID : IfcIdentifier; + PredefinedType : IfcProjectOrderTypeEnum; + Status : OPTIONAL IfcLabel; + UNIQUE + UR2 : ID; +END_ENTITY; + +ENTITY IfcProjectOrderRecord + SUBTYPE OF (IfcControl); + Records : LIST [1:?] OF UNIQUE IfcRelAssignsToProjectOrder; + PredefinedType : IfcProjectOrderRecordTypeEnum; +END_ENTITY; + +ENTITY IfcProjectionCurve + SUBTYPE OF (IfcAnnotationCurveOccurrence); +END_ENTITY; + +ENTITY IfcProjectionElement + SUBTYPE OF (IfcFeatureElementAddition); +END_ENTITY; + +ENTITY IfcProperty + ABSTRACT SUPERTYPE OF (ONEOF + (IfcComplexProperty + ,IfcSimpleProperty)); + Name : IfcIdentifier; + Description : OPTIONAL IfcText; + INVERSE + PropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty; + PropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty; + PartOfComplex : SET [0:1] OF IfcComplexProperty FOR HasProperties; +END_ENTITY; + +ENTITY IfcPropertyBoundedValue + SUBTYPE OF (IfcSimpleProperty); + UpperBoundValue : OPTIONAL IfcValue; + LowerBoundValue : OPTIONAL IfcValue; + Unit : OPTIONAL IfcUnit; + WHERE + WR21 : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR + (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue)); + WR22 : EXISTS(UpperBoundValue) OR EXISTS(LowerBoundValue); +END_ENTITY; + +ENTITY IfcPropertyConstraintRelationship; + RelatingConstraint : IfcConstraint; + RelatedProperties : SET [1:?] OF IfcProperty; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcPropertyDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPropertySetDefinition)) + SUBTYPE OF (IfcRoot); + INVERSE + HasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects; +END_ENTITY; + +ENTITY IfcPropertyDependencyRelationship; + DependingProperty : IfcProperty; + DependantProperty : IfcProperty; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + Expression : OPTIONAL IfcText; + WHERE + WR1 : DependingProperty :<>: DependantProperty; +END_ENTITY; + +ENTITY IfcPropertyEnumeratedValue + SUBTYPE OF (IfcSimpleProperty); + EnumerationValues : LIST [1:?] OF IfcValue; + EnumerationReference : OPTIONAL IfcPropertyEnumeration; + WHERE + WR1 : NOT(EXISTS(EnumerationReference)) OR + (SIZEOF(QUERY(temp <* EnumerationValues | + temp IN EnumerationReference.EnumerationValues)) + = SIZEOF(EnumerationValues)); +END_ENTITY; + +ENTITY IfcPropertyEnumeration; + Name : IfcLabel; + EnumerationValues : LIST [1:?] OF UNIQUE IfcValue; + Unit : OPTIONAL IfcUnit; + UNIQUE + UR1 : Name; + WHERE + WR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues | + NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp)) + )) = 0; +END_ENTITY; + +ENTITY IfcPropertyListValue + SUBTYPE OF (IfcSimpleProperty); + ListValues : LIST [1:?] OF IfcValue; + Unit : OPTIONAL IfcUnit; + WHERE + WR31 : SIZEOF(QUERY(temp <* SELF.ListValues | + NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp)) + )) = 0; +END_ENTITY; + +ENTITY IfcPropertyReferenceValue + SUBTYPE OF (IfcSimpleProperty); + UsageName : OPTIONAL IfcLabel; + PropertyReference : IfcObjectReferenceSelect; +END_ENTITY; + +ENTITY IfcPropertySet + SUBTYPE OF (IfcPropertySetDefinition); + HasProperties : SET [1:?] OF IfcProperty; + WHERE + WR31 : EXISTS(SELF\IfcRoot.Name); + WR32 : IfcUniquePropertyName(HasProperties); +END_ENTITY; + +ENTITY IfcPropertySetDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDoorLiningProperties + ,IfcDoorPanelProperties + ,IfcElementQuantity + ,IfcEnergyProperties + ,IfcFluidFlowProperties + ,IfcPermeableCoveringProperties + ,IfcPropertySet + ,IfcReinforcementDefinitionProperties + ,IfcServiceLifeFactor + ,IfcSoundProperties + ,IfcSoundValue + ,IfcSpaceThermalLoadProperties + ,IfcWindowLiningProperties + ,IfcWindowPanelProperties)) + SUBTYPE OF (IfcPropertyDefinition); + INVERSE + PropertyDefinitionOf : SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition; + DefinesType : SET [0:1] OF IfcTypeObject FOR HasPropertySets; +END_ENTITY; + +ENTITY IfcPropertySingleValue + SUBTYPE OF (IfcSimpleProperty); + NominalValue : OPTIONAL IfcValue; + Unit : OPTIONAL IfcUnit; +END_ENTITY; + +ENTITY IfcPropertyTableValue + SUBTYPE OF (IfcSimpleProperty); + DefiningValues : LIST [1:?] OF UNIQUE IfcValue; + DefinedValues : LIST [1:?] OF IfcValue; + Expression : OPTIONAL IfcText; + DefiningUnit : OPTIONAL IfcUnit; + DefinedUnit : OPTIONAL IfcUnit; + WHERE + WR1 : SIZEOF(DefiningValues) = SIZEOF(DefinedValues); + WR2 : SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])))=0; + WR3 : SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])))=0; +END_ENTITY; + +ENTITY IfcProtectiveDeviceType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcProtectiveDeviceTypeEnum; +END_ENTITY; + +ENTITY IfcProxy + SUBTYPE OF (IfcProduct); + ProxyType : IfcObjectTypeEnum; + Tag : OPTIONAL IfcLabel; + WHERE + WR1 : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcPumpType + SUBTYPE OF (IfcFlowMovingDeviceType); + PredefinedType : IfcPumpTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcQuantityArea + SUBTYPE OF (IfcPhysicalSimpleQuantity); + AreaValue : IfcAreaMeasure; + WHERE + WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR + (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT); + WR22 : AreaValue >= 0.; +END_ENTITY; + +ENTITY IfcQuantityCount + SUBTYPE OF (IfcPhysicalSimpleQuantity); + CountValue : IfcCountMeasure; + WHERE + WR21 : CountValue >= 0.; +END_ENTITY; + +ENTITY IfcQuantityLength + SUBTYPE OF (IfcPhysicalSimpleQuantity); + LengthValue : IfcLengthMeasure; + WHERE + WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR + (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT); + WR22 : LengthValue >= 0.; +END_ENTITY; + +ENTITY IfcQuantityTime + SUBTYPE OF (IfcPhysicalSimpleQuantity); + TimeValue : IfcTimeMeasure; + WHERE + WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR + (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT); + WR22 : TimeValue >= 0.; +END_ENTITY; + +ENTITY IfcQuantityVolume + SUBTYPE OF (IfcPhysicalSimpleQuantity); + VolumeValue : IfcVolumeMeasure; + WHERE + WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR + (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT); + WR22 : VolumeValue >= 0.; +END_ENTITY; + +ENTITY IfcQuantityWeight + SUBTYPE OF (IfcPhysicalSimpleQuantity); + WeightValue : IfcMassMeasure; + WHERE + WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR + (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT); + WR22 : WeightValue >= 0.; +END_ENTITY; + +ENTITY IfcRadiusDimension + SUBTYPE OF (IfcDimensionCurveDirectedCallout); +END_ENTITY; + +ENTITY IfcRailing + SUBTYPE OF (IfcBuildingElement); + PredefinedType : OPTIONAL IfcRailingTypeEnum; +END_ENTITY; + +ENTITY IfcRailingType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcRailingTypeEnum; +END_ENTITY; + +ENTITY IfcRamp + SUBTYPE OF (IfcBuildingElement); + ShapeType : IfcRampTypeEnum; + WHERE + WR1 : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR + ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\IfcProduct.Representation)))); +END_ENTITY; + +ENTITY IfcRampFlight + SUBTYPE OF (IfcBuildingElement); +END_ENTITY; + +ENTITY IfcRampFlightType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcRampFlightTypeEnum; +END_ENTITY; + +ENTITY IfcRationalBezierCurve + SUBTYPE OF (IfcBezierCurve); + WeightsData : LIST [2:?] OF REAL; + DERIVE + Weights : ARRAY [0:255] OF REAL := IfcListToArray(WeightsData,0,SELF\IfcBSplineCurve.UpperIndexOnControlPoints); + WHERE + WR1 : SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineCurve.ControlPointsList); + WR2 : IfcCurveWeightsPositive(SELF); +END_ENTITY; + +ENTITY IfcRectangleHollowProfileDef + SUBTYPE OF (IfcRectangleProfileDef); + WallThickness : IfcPositiveLengthMeasure; + InnerFilletRadius : OPTIONAL IfcPositiveLengthMeasure; + OuterFilletRadius : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR31 : (WallThickness < (SELF\IfcRectangleProfileDef.XDim/2.)) AND + (WallThickness < (SELF\IfcRectangleProfileDef.YDim/2.)); + WR32 : NOT(EXISTS(OuterFilletRadius)) OR + ((OuterFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2.)) AND + (OuterFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2.))); + WR33 : NOT(EXISTS(InnerFilletRadius)) OR + ((InnerFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND + (InnerFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2. - WallThickness))); +END_ENTITY; + +ENTITY IfcRectangleProfileDef + SUPERTYPE OF (ONEOF + (IfcRectangleHollowProfileDef + ,IfcRoundedRectangleProfileDef)) + SUBTYPE OF (IfcParameterizedProfileDef); + XDim : IfcPositiveLengthMeasure; + YDim : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcRectangularPyramid + SUBTYPE OF (IfcCsgPrimitive3D); + XLength : IfcPositiveLengthMeasure; + YLength : IfcPositiveLengthMeasure; + Height : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcRectangularTrimmedSurface + SUBTYPE OF (IfcBoundedSurface); + BasisSurface : IfcSurface; + U1 : IfcParameterValue; + V1 : IfcParameterValue; + U2 : IfcParameterValue; + V2 : IfcParameterValue; + Usense : BOOLEAN; + Vsense : BOOLEAN; + DERIVE + Dim : IfcDimensionCount := BasisSurface.Dim; + WHERE + WR1 : U1 <> U2; + WR2 : V1 <> V2; + WR3 : (('IFC2X3.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND + (NOT ('IFC2X3.IFCPLANE' IN TYPEOF(BasisSurface)))) OR + ('IFC2X3.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR + (Usense = (U2 > U1)); + WR4 : Vsense = (V2 > V1); +END_ENTITY; + +ENTITY IfcReferencesValueDocument; + ReferencedDocument : IfcDocumentSelect; + ReferencingValues : SET [1:?] OF IfcAppliedValue; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcRegularTimeSeries + SUBTYPE OF (IfcTimeSeries); + TimeStep : IfcTimeMeasure; + Values : LIST [1:?] OF IfcTimeSeriesValue; +END_ENTITY; + +ENTITY IfcReinforcementBarProperties; + TotalCrossSectionArea : IfcAreaMeasure; + SteelGrade : IfcLabel; + BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum; + EffectiveDepth : OPTIONAL IfcLengthMeasure; + NominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure; + BarCount : OPTIONAL IfcCountMeasure; +END_ENTITY; + +ENTITY IfcReinforcementDefinitionProperties + SUBTYPE OF (IfcPropertySetDefinition); + DefinitionType : OPTIONAL IfcLabel; + ReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties; +END_ENTITY; + +ENTITY IfcReinforcingBar + SUBTYPE OF (IfcReinforcingElement); + NominalDiameter : IfcPositiveLengthMeasure; + CrossSectionArea : IfcAreaMeasure; + BarLength : OPTIONAL IfcPositiveLengthMeasure; + BarRole : IfcReinforcingBarRoleEnum; + BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum; + WHERE + WR1 : (BarRole <> IfcReinforcingBarRoleEnum.USERDEFINED) OR ((BarRole = IfcReinforcingBarRoleEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcReinforcingElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcReinforcingBar + ,IfcReinforcingMesh + ,IfcTendon + ,IfcTendonAnchor)) + SUBTYPE OF (IfcBuildingElementComponent); + SteelGrade : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcReinforcingMesh + SUBTYPE OF (IfcReinforcingElement); + MeshLength : OPTIONAL IfcPositiveLengthMeasure; + MeshWidth : OPTIONAL IfcPositiveLengthMeasure; + LongitudinalBarNominalDiameter : IfcPositiveLengthMeasure; + TransverseBarNominalDiameter : IfcPositiveLengthMeasure; + LongitudinalBarCrossSectionArea : IfcAreaMeasure; + TransverseBarCrossSectionArea : IfcAreaMeasure; + LongitudinalBarSpacing : IfcPositiveLengthMeasure; + TransverseBarSpacing : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcRelAggregates + SUBTYPE OF (IfcRelDecomposes); +END_ENTITY; + +ENTITY IfcRelAssigns + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelAssignsToActor + ,IfcRelAssignsToControl + ,IfcRelAssignsToGroup + ,IfcRelAssignsToProcess + ,IfcRelAssignsToProduct + ,IfcRelAssignsToResource)) + SUBTYPE OF (IfcRelationship); + RelatedObjects : SET [1:?] OF IfcObjectDefinition; + RelatedObjectsType : OPTIONAL IfcObjectTypeEnum; + WHERE + WR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects); +END_ENTITY; + +ENTITY IfcRelAssignsTasks + SUBTYPE OF (IfcRelAssignsToControl); + TimeForTask : OPTIONAL IfcScheduleTimeControl; + WHERE + WR1 : HIINDEX(SELF\IfcRelAssigns.RelatedObjects) = 1; + WR2 : 'IFC2X3.IFCTASK' IN TYPEOF(SELF\IfcRelAssigns.RelatedObjects[1]); + WR3 : 'IFC2X3.IFCWORKCONTROL' IN TYPEOF(SELF\IfcRelAssignsToControl.RelatingControl); +END_ENTITY; + +ENTITY IfcRelAssignsToActor + SUPERTYPE OF (ONEOF + (IfcRelOccupiesSpaces)) + SUBTYPE OF (IfcRelAssigns); + RelatingActor : IfcActor; + ActingRole : OPTIONAL IfcActorRole; + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToControl + SUPERTYPE OF (ONEOF + (IfcRelAssignsTasks + ,IfcRelAssignsToProjectOrder + ,IfcRelSchedulesCostItems)) + SUBTYPE OF (IfcRelAssigns); + RelatingControl : IfcControl; + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToGroup + SUBTYPE OF (IfcRelAssigns); + RelatingGroup : IfcGroup; + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToProcess + SUBTYPE OF (IfcRelAssigns); + RelatingProcess : IfcProcess; + QuantityInProcess : OPTIONAL IfcMeasureWithUnit; + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToProduct + SUBTYPE OF (IfcRelAssigns); + RelatingProduct : IfcProduct; + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToProjectOrder + SUBTYPE OF (IfcRelAssignsToControl); +END_ENTITY; + +ENTITY IfcRelAssignsToResource + SUBTYPE OF (IfcRelAssigns); + RelatingResource : IfcResource; + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssociates + SUPERTYPE OF (ONEOF + (IfcRelAssociatesAppliedValue + ,IfcRelAssociatesApproval + ,IfcRelAssociatesClassification + ,IfcRelAssociatesConstraint + ,IfcRelAssociatesDocument + ,IfcRelAssociatesLibrary + ,IfcRelAssociatesMaterial + ,IfcRelAssociatesProfileProperties)) + SUBTYPE OF (IfcRelationship); + RelatedObjects : SET [1:?] OF IfcRoot; + WHERE + WR21 : SIZEOF(QUERY(temp <* RelatedObjects | + NOT(('IFC2X3.IFCOBJECTDEFINITION' IN TYPEOF(temp)) + OR ('IFC2X3.IFCPROPERTYDEFINITION' IN TYPEOF(temp))) + )) = 0; +END_ENTITY; + +ENTITY IfcRelAssociatesAppliedValue + SUBTYPE OF (IfcRelAssociates); + RelatingAppliedValue : IfcAppliedValue; +END_ENTITY; + +ENTITY IfcRelAssociatesApproval + SUBTYPE OF (IfcRelAssociates); + RelatingApproval : IfcApproval; +END_ENTITY; + +ENTITY IfcRelAssociatesClassification + SUBTYPE OF (IfcRelAssociates); + RelatingClassification : IfcClassificationNotationSelect; +END_ENTITY; + +ENTITY IfcRelAssociatesConstraint + SUBTYPE OF (IfcRelAssociates); + Intent : IfcLabel; + RelatingConstraint : IfcConstraint; +END_ENTITY; + +ENTITY IfcRelAssociatesDocument + SUBTYPE OF (IfcRelAssociates); + RelatingDocument : IfcDocumentSelect; +END_ENTITY; + +ENTITY IfcRelAssociatesLibrary + SUBTYPE OF (IfcRelAssociates); + RelatingLibrary : IfcLibrarySelect; +END_ENTITY; + +ENTITY IfcRelAssociatesMaterial + SUBTYPE OF (IfcRelAssociates); + RelatingMaterial : IfcMaterialSelect; + WHERE + WR21 : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | + ('IFC2X3.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) + OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(temp)) + )) = 0; + WR22 : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | + (NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)) AND NOT('IFC2X3.IFCTYPEPRODUCT' IN TYPEOF(temp))) + )) = 0; +END_ENTITY; + +ENTITY IfcRelAssociatesProfileProperties + SUBTYPE OF (IfcRelAssociates); + RelatingProfileProperties : IfcProfileProperties; + ProfileSectionLocation : OPTIONAL IfcShapeAspect; + ProfileOrientation : OPTIONAL IfcOrientationSelect; +END_ENTITY; + +ENTITY IfcRelConnects + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelConnectsElements + ,IfcRelConnectsPortToElement + ,IfcRelConnectsPorts + ,IfcRelConnectsStructuralActivity + ,IfcRelConnectsStructuralElement + ,IfcRelConnectsStructuralMember + ,IfcRelContainedInSpatialStructure + ,IfcRelCoversBldgElements + ,IfcRelCoversSpaces + ,IfcRelFillsElement + ,IfcRelFlowControlElements + ,IfcRelInteractionRequirements + ,IfcRelProjectsElement + ,IfcRelReferencedInSpatialStructure + ,IfcRelSequence + ,IfcRelServicesBuildings + ,IfcRelSpaceBoundary + ,IfcRelVoidsElement)) + SUBTYPE OF (IfcRelationship); +END_ENTITY; + +ENTITY IfcRelConnectsElements + SUPERTYPE OF (ONEOF + (IfcRelConnectsPathElements + ,IfcRelConnectsWithRealizingElements)) + SUBTYPE OF (IfcRelConnects); + ConnectionGeometry : OPTIONAL IfcConnectionGeometry; + RelatingElement : IfcElement; + RelatedElement : IfcElement; + WHERE + WR31 : RelatingElement :<>: RelatedElement; +END_ENTITY; + +ENTITY IfcRelConnectsPathElements + SUBTYPE OF (IfcRelConnectsElements); + RelatingPriorities : LIST [0:?] OF INTEGER; + RelatedPriorities : LIST [0:?] OF INTEGER; + RelatedConnectionType : IfcConnectionTypeEnum; + RelatingConnectionType : IfcConnectionTypeEnum; + DERIVE + RelatedLayerCount : INTEGER := IfcNoOfLayers(SELF\IfcRelConnectsElements.RelatedElement); + RelatingLayerCount : INTEGER := IfcNoOfLayers(SELF\IfcRelConnectsElements.RelatingElement); +END_ENTITY; + +ENTITY IfcRelConnectsPortToElement + SUBTYPE OF (IfcRelConnects); + RelatingPort : IfcPort; + RelatedElement : IfcElement; +END_ENTITY; + +ENTITY IfcRelConnectsPorts + SUBTYPE OF (IfcRelConnects); + RelatingPort : IfcPort; + RelatedPort : IfcPort; + RealizingElement : OPTIONAL IfcElement; +END_ENTITY; + +ENTITY IfcRelConnectsStructuralActivity + SUBTYPE OF (IfcRelConnects); + RelatingElement : IfcStructuralActivityAssignmentSelect; + RelatedStructuralActivity : IfcStructuralActivity; +END_ENTITY; + +ENTITY IfcRelConnectsStructuralElement + SUBTYPE OF (IfcRelConnects); + RelatingElement : IfcElement; + RelatedStructuralMember : IfcStructuralMember; +END_ENTITY; + +ENTITY IfcRelConnectsStructuralMember + SUPERTYPE OF (ONEOF + (IfcRelConnectsWithEccentricity)) + SUBTYPE OF (IfcRelConnects); + RelatingStructuralMember : IfcStructuralMember; + RelatedStructuralConnection : IfcStructuralConnection; + AppliedCondition : OPTIONAL IfcBoundaryCondition; + AdditionalConditions : OPTIONAL IfcStructuralConnectionCondition; + SupportedLength : OPTIONAL IfcLengthMeasure; + ConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D; +END_ENTITY; + +ENTITY IfcRelConnectsWithEccentricity + SUBTYPE OF (IfcRelConnectsStructuralMember); + ConnectionConstraint : IfcConnectionGeometry; +END_ENTITY; + +ENTITY IfcRelConnectsWithRealizingElements + SUBTYPE OF (IfcRelConnectsElements); + RealizingElements : SET [1:?] OF IfcElement; + ConnectionType : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcRelContainedInSpatialStructure + SUBTYPE OF (IfcRelConnects); + RelatedElements : SET [1:?] OF IfcProduct; + RelatingStructure : IfcSpatialStructureElement; + WHERE + WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcRelCoversBldgElements + SUBTYPE OF (IfcRelConnects); + RelatingBuildingElement : IfcElement; + RelatedCoverings : SET [1:?] OF IfcCovering; +END_ENTITY; + +ENTITY IfcRelCoversSpaces + SUBTYPE OF (IfcRelConnects); + RelatedSpace : IfcSpace; + RelatedCoverings : SET [1:?] OF IfcCovering; +END_ENTITY; + +ENTITY IfcRelDecomposes + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelAggregates + ,IfcRelNests)) + SUBTYPE OF (IfcRelationship); + RelatingObject : IfcObjectDefinition; + RelatedObjects : SET [1:?] OF IfcObjectDefinition; + WHERE + WR31 : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0; + WR32 : SIZEOF(QUERY(Temp <* RelatedObjects | 'IFC2X3.IFCTYPEOBJECT' IN TYPEOF(temp))) = 0; + WR33 : NOT('IFC2X3.IFCTYPEOBJECT' IN TYPEOF(RelatingObject)); +END_ENTITY; + +ENTITY IfcRelDefines + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelDefinesByProperties + ,IfcRelDefinesByType)) + SUBTYPE OF (IfcRelationship); + RelatedObjects : SET [1:?] OF IfcObject; +END_ENTITY; + +ENTITY IfcRelDefinesByProperties + SUPERTYPE OF (ONEOF + (IfcRelOverridesProperties)) + SUBTYPE OF (IfcRelDefines); + RelatingPropertyDefinition : IfcPropertySetDefinition; +END_ENTITY; + +ENTITY IfcRelDefinesByType + SUBTYPE OF (IfcRelDefines); + RelatingType : IfcTypeObject; +END_ENTITY; + +ENTITY IfcRelFillsElement + SUBTYPE OF (IfcRelConnects); + RelatingOpeningElement : IfcOpeningElement; + RelatedBuildingElement : IfcElement; +END_ENTITY; + +ENTITY IfcRelFlowControlElements + SUBTYPE OF (IfcRelConnects); + RelatedControlElements : SET [1:?] OF IfcDistributionControlElement; + RelatingFlowElement : IfcDistributionFlowElement; +END_ENTITY; + +ENTITY IfcRelInteractionRequirements + SUBTYPE OF (IfcRelConnects); + DailyInteraction : OPTIONAL IfcCountMeasure; + ImportanceRating : OPTIONAL IfcNormalisedRatioMeasure; + LocationOfInteraction : OPTIONAL IfcSpatialStructureElement; + RelatedSpaceProgram : IfcSpaceProgram; + RelatingSpaceProgram : IfcSpaceProgram; +END_ENTITY; + +ENTITY IfcRelNests + SUBTYPE OF (IfcRelDecomposes); + WHERE + WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelDecomposes.RelatedObjects | + NOT(TYPEOF(SELF\IfcRelDecomposes.RelatingObject) = TYPEOF(Temp)))) = 0; +END_ENTITY; + +ENTITY IfcRelOccupiesSpaces + SUBTYPE OF (IfcRelAssignsToActor); +END_ENTITY; + +ENTITY IfcRelOverridesProperties + SUBTYPE OF (IfcRelDefinesByProperties); + OverridingProperties : SET [1:?] OF IfcProperty; + WHERE + WR1 : SIZEOF(SELF\IfcRelDefines.RelatedObjects) = 1; +END_ENTITY; + +ENTITY IfcRelProjectsElement + SUBTYPE OF (IfcRelConnects); + RelatingElement : IfcElement; + RelatedFeatureElement : IfcFeatureElementAddition; +END_ENTITY; + +ENTITY IfcRelReferencedInSpatialStructure + SUBTYPE OF (IfcRelConnects); + RelatedElements : SET [1:?] OF IfcProduct; + RelatingStructure : IfcSpatialStructureElement; + WHERE + WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcRelSchedulesCostItems + SUBTYPE OF (IfcRelAssignsToControl); + WHERE + WR11 : SIZEOF(QUERY(temp <* SELF\IfcRelAssigns.RelatedObjects | + NOT('IFC2X3.IFCCOSTITEM' IN TYPEOF(temp)) + )) = 0; + WR12 : 'IFC2X3.IFCCOSTSCHEDULE' IN TYPEOF (SELF\IfcRelAssignsToControl.RelatingControl); +END_ENTITY; + +ENTITY IfcRelSequence + SUBTYPE OF (IfcRelConnects); + RelatingProcess : IfcProcess; + RelatedProcess : IfcProcess; + TimeLag : IfcTimeMeasure; + SequenceType : IfcSequenceEnum; + WHERE + WR1 : RelatingProcess :<>: RelatedProcess; +END_ENTITY; + +ENTITY IfcRelServicesBuildings + SUBTYPE OF (IfcRelConnects); + RelatingSystem : IfcSystem; + RelatedBuildings : SET [1:?] OF IfcSpatialStructureElement; +END_ENTITY; + +ENTITY IfcRelSpaceBoundary + SUBTYPE OF (IfcRelConnects); + RelatingSpace : IfcSpace; + RelatedBuildingElement : OPTIONAL IfcElement; + ConnectionGeometry : OPTIONAL IfcConnectionGeometry; + PhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum; + InternalOrExternalBoundary : IfcInternalOrExternalEnum; + WHERE + WR1 : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) AND + (EXISTS(RelatedBuildingElement) AND NOT('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) + OR + ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND + (NOT(EXISTS(RelatedBuildingElement)) OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) + OR + (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined); +END_ENTITY; + +ENTITY IfcRelVoidsElement + SUBTYPE OF (IfcRelConnects); + RelatingBuildingElement : IfcElement; + RelatedOpeningElement : IfcFeatureElementSubtraction; +END_ENTITY; + +ENTITY IfcRelationship + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelAssigns + ,IfcRelAssociates + ,IfcRelConnects + ,IfcRelDecomposes + ,IfcRelDefines)) + SUBTYPE OF (IfcRoot); +END_ENTITY; + +ENTITY IfcRelaxation; + RelaxationValue : IfcNormalisedRatioMeasure; + InitialStress : IfcNormalisedRatioMeasure; +END_ENTITY; + +ENTITY IfcRepresentation + SUPERTYPE OF (ONEOF + (IfcShapeModel + ,IfcStyleModel)); + ContextOfItems : IfcRepresentationContext; + RepresentationIdentifier : OPTIONAL IfcLabel; + RepresentationType : OPTIONAL IfcLabel; + Items : SET [1:?] OF IfcRepresentationItem; + INVERSE + RepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation; + LayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR Assigneditems; + OfProductRepresentation : SET [0:1] OF IfcProductRepresentation FOR Representations; +END_ENTITY; + +ENTITY IfcRepresentationContext + SUPERTYPE OF (ONEOF + (IfcGeometricRepresentationContext)); + ContextIdentifier : OPTIONAL IfcLabel; + ContextType : OPTIONAL IfcLabel; + INVERSE + RepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems; +END_ENTITY; + +ENTITY IfcRepresentationItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcGeometricRepresentationItem + ,IfcMappedItem + ,IfcStyledItem + ,IfcTopologicalRepresentationItem)); + INVERSE + LayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems; + StyledByItem : SET [0:1] OF IfcStyledItem FOR Item; +END_ENTITY; + +ENTITY IfcRepresentationMap; + MappingOrigin : IfcAxis2Placement; + MappedRepresentation : IfcRepresentation; + INVERSE + MapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource; +END_ENTITY; + +ENTITY IfcResource + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConstructionResource)) + SUBTYPE OF (IfcObject); + INVERSE + ResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource; +END_ENTITY; + +ENTITY IfcRevolvedAreaSolid + SUBTYPE OF (IfcSweptAreaSolid); + Axis : IfcAxis1Placement; + Angle : IfcPlaneAngleMeasure; + DERIVE + AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, + IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0)); + WHERE + WR31 : Axis.Location.Coordinates[3] = 0.0; + WR32 : Axis.Z.DirectionRatios[3] = 0.0; +END_ENTITY; + +ENTITY IfcRibPlateProfileProperties + SUBTYPE OF (IfcProfileProperties); + Thickness : OPTIONAL IfcPositiveLengthMeasure; + RibHeight : OPTIONAL IfcPositiveLengthMeasure; + RibWidth : OPTIONAL IfcPositiveLengthMeasure; + RibSpacing : OPTIONAL IfcPositiveLengthMeasure; + Direction : IfcRibPlateDirectionEnum; +END_ENTITY; + +ENTITY IfcRightCircularCone + SUBTYPE OF (IfcCsgPrimitive3D); + Height : IfcPositiveLengthMeasure; + BottomRadius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcRightCircularCylinder + SUBTYPE OF (IfcCsgPrimitive3D); + Height : IfcPositiveLengthMeasure; + Radius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcRoof + SUBTYPE OF (IfcBuildingElement); + ShapeType : IfcRoofTypeEnum; + WHERE + WR1 : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR + ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\IfcProduct.Representation)))); +END_ENTITY; + +ENTITY IfcRoot + ABSTRACT SUPERTYPE OF (ONEOF + (IfcObjectDefinition + ,IfcPropertyDefinition + ,IfcRelationship)); + GlobalId : IfcGloballyUniqueId; + OwnerHistory : IfcOwnerHistory; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + UNIQUE + UR1 : GlobalId; +END_ENTITY; + +ENTITY IfcRoundedEdgeFeature + SUBTYPE OF (IfcEdgeFeature); + Radius : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcRoundedRectangleProfileDef + SUBTYPE OF (IfcRectangleProfileDef); + RoundingRadius : IfcPositiveLengthMeasure; + WHERE + WR31 : ((RoundingRadius <= (SELF\IfcRectangleProfileDef.XDim/2.)) AND + (RoundingRadius <= (SELF\IfcRectangleProfileDef.YDim/2.))); +END_ENTITY; + +ENTITY IfcSIUnit + SUBTYPE OF (IfcNamedUnit); + Prefix : OPTIONAL IfcSIPrefix; + Name : IfcSIUnitName; + DERIVE + SELF\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name); +END_ENTITY; + +ENTITY IfcSanitaryTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcSanitaryTerminalTypeEnum; +END_ENTITY; + +ENTITY IfcScheduleTimeControl + SUBTYPE OF (IfcControl); + ActualStart : OPTIONAL IfcDateTimeSelect; + EarlyStart : OPTIONAL IfcDateTimeSelect; + LateStart : OPTIONAL IfcDateTimeSelect; + ScheduleStart : OPTIONAL IfcDateTimeSelect; + ActualFinish : OPTIONAL IfcDateTimeSelect; + EarlyFinish : OPTIONAL IfcDateTimeSelect; + LateFinish : OPTIONAL IfcDateTimeSelect; + ScheduleFinish : OPTIONAL IfcDateTimeSelect; + ScheduleDuration : OPTIONAL IfcTimeMeasure; + ActualDuration : OPTIONAL IfcTimeMeasure; + RemainingTime : OPTIONAL IfcTimeMeasure; + FreeFloat : OPTIONAL IfcTimeMeasure; + TotalFloat : OPTIONAL IfcTimeMeasure; + IsCritical : OPTIONAL BOOLEAN; + StatusTime : OPTIONAL IfcDateTimeSelect; + StartFloat : OPTIONAL IfcTimeMeasure; + FinishFloat : OPTIONAL IfcTimeMeasure; + Completion : OPTIONAL IfcPositiveRatioMeasure; + INVERSE + ScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask; +END_ENTITY; + +ENTITY IfcSectionProperties; + SectionType : IfcSectionTypeEnum; + StartProfile : IfcProfileDef; + EndProfile : OPTIONAL IfcProfileDef; +END_ENTITY; + +ENTITY IfcSectionReinforcementProperties; + LongitudinalStartPosition : IfcLengthMeasure; + LongitudinalEndPosition : IfcLengthMeasure; + TransversePosition : OPTIONAL IfcLengthMeasure; + ReinforcementRole : IfcReinforcingBarRoleEnum; + SectionDefinition : IfcSectionProperties; + CrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties; +END_ENTITY; + +ENTITY IfcSectionedSpine + SUBTYPE OF (IfcGeometricRepresentationItem); + SpineCurve : IfcCompositeCurve; + CrossSections : LIST [2:?] OF IfcProfileDef; + CrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D; + DERIVE + Dim : IfcDimensionCount := 3; + WHERE + WR1 : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions); + WR2 : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0; + WR3 : SpineCurve.Dim = 3; +END_ENTITY; + +ENTITY IfcSensorType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcSensorTypeEnum; +END_ENTITY; + +ENTITY IfcServiceLife + SUBTYPE OF (IfcControl); + ServiceLifeType : IfcServiceLifeTypeEnum; + ServiceLifeDuration : IfcTimeMeasure; +END_ENTITY; + +ENTITY IfcServiceLifeFactor + SUBTYPE OF (IfcPropertySetDefinition); + PredefinedType : IfcServiceLifeFactorTypeEnum; + UpperValue : OPTIONAL IfcMeasureValue; + MostUsedValue : IfcMeasureValue; + LowerValue : OPTIONAL IfcMeasureValue; + WHERE + WR31 : NOT(PredefinedType = IfcServiceLifeFactorTypeEnum.USERDEFINED) + OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcShapeAspect; + ShapeRepresentations : LIST [1:?] OF IfcShapeModel; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + ProductDefinitional : LOGICAL; + PartOfProductDefinitionShape : IfcProductDefinitionShape; +END_ENTITY; + +ENTITY IfcShapeModel + ABSTRACT SUPERTYPE OF (ONEOF + (IfcShapeRepresentation + ,IfcTopologyRepresentation)) + SUBTYPE OF (IfcRepresentation); + INVERSE + OfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations; + WHERE + WR11 : (SIZEOF(SELF\IfcRepresentation.OfProductRepresentation) = 1) XOR + (SIZEOF(SELF\IfcRepresentation.RepresentationMap) = 1) XOR + (SIZEOF(OfShapeAspect) = 1); +END_ENTITY; + +ENTITY IfcShapeRepresentation + SUBTYPE OF (IfcShapeModel); + WHERE + WR21 : 'IFC2X3.IFCGEOMETRICREPRESENTATIONCONTEXT' + IN TYPEOF(SELF\IfcRepresentation.ContextOfItems); + WR22 : SIZEOF(QUERY(temp <* Items | + ('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) + AND (NOT(SIZEOF( + ['IFC2X3.IFCVERTEXPOINT', + 'IFC2X3.IFCEDGECURVE', + 'IFC2X3.IFCFACESURFACE'] * TYPEOF(temp)) = 1)) + )) = 0; + WR23 : EXISTS(SELF\IfcRepresentation.RepresentationType); + WR24 : IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); +END_ENTITY; + +ENTITY IfcShellBasedSurfaceModel + SUBTYPE OF (IfcGeometricRepresentationItem); + SbsmBoundary : SET [1:?] OF IfcShell; + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcSimpleProperty + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPropertyBoundedValue + ,IfcPropertyEnumeratedValue + ,IfcPropertyListValue + ,IfcPropertyReferenceValue + ,IfcPropertySingleValue + ,IfcPropertyTableValue)) + SUBTYPE OF (IfcProperty); +END_ENTITY; + +ENTITY IfcSite + SUBTYPE OF (IfcSpatialStructureElement); + RefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure; + RefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure; + RefElevation : OPTIONAL IfcLengthMeasure; + LandTitleNumber : OPTIONAL IfcLabel; + SiteAddress : OPTIONAL IfcPostalAddress; +END_ENTITY; + +ENTITY IfcSlab + SUBTYPE OF (IfcBuildingElement); + PredefinedType : OPTIONAL IfcSlabTypeEnum; + WHERE + WR2 : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcSlabType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcSlabTypeEnum; +END_ENTITY; + +ENTITY IfcSlippageConnectionCondition + SUBTYPE OF (IfcStructuralConnectionCondition); + SlippageX : OPTIONAL IfcLengthMeasure; + SlippageY : OPTIONAL IfcLengthMeasure; + SlippageZ : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcSolidModel + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCsgSolid + ,IfcManifoldSolidBrep + ,IfcSweptAreaSolid + ,IfcSweptDiskSolid)) + SUBTYPE OF (IfcGeometricRepresentationItem); + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcSoundProperties + SUBTYPE OF (IfcPropertySetDefinition); + IsAttenuating : IfcBoolean; + SoundScale : OPTIONAL IfcSoundScaleEnum; + SoundValues : LIST [1:8] OF IfcSoundValue; +END_ENTITY; + +ENTITY IfcSoundValue + SUBTYPE OF (IfcPropertySetDefinition); + SoundLevelTimeSeries : OPTIONAL IfcTimeSeries; + Frequency : IfcFrequencyMeasure; + SoundLevelSingleValue : OPTIONAL IfcDerivedMeasureValue; +END_ENTITY; + +ENTITY IfcSpace + SUBTYPE OF (IfcSpatialStructureElement); + InteriorOrExteriorSpace : IfcInternalOrExternalEnum; + ElevationWithFlooring : OPTIONAL IfcLengthMeasure; + INVERSE + HasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatedSpace; + BoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace; +END_ENTITY; + +ENTITY IfcSpaceHeaterType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcSpaceHeaterTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSpaceProgram + SUBTYPE OF (IfcControl); + SpaceProgramIdentifier : IfcIdentifier; + MaxRequiredArea : OPTIONAL IfcAreaMeasure; + MinRequiredArea : OPTIONAL IfcAreaMeasure; + RequestedLocation : OPTIONAL IfcSpatialStructureElement; + StandardRequiredArea : IfcAreaMeasure; + INVERSE + HasInteractionReqsFrom : SET [0:?] OF IfcRelInteractionRequirements FOR RelatedSpaceProgram; + HasInteractionReqsTo : SET [0:?] OF IfcRelInteractionRequirements FOR RelatingSpaceProgram; +END_ENTITY; + +ENTITY IfcSpaceThermalLoadProperties + SUBTYPE OF (IfcPropertySetDefinition); + ApplicableValueRatio : OPTIONAL IfcPositiveRatioMeasure; + ThermalLoadSource : IfcThermalLoadSourceEnum; + PropertySource : IfcPropertySourceEnum; + SourceDescription : OPTIONAL IfcText; + MaximumValue : IfcPowerMeasure; + MinimumValue : OPTIONAL IfcPowerMeasure; + ThermalLoadTimeSeriesValues : OPTIONAL IfcTimeSeries; + UserDefinedThermalLoadSource : OPTIONAL IfcLabel; + UserDefinedPropertySource : OPTIONAL IfcLabel; + ThermalLoadType : IfcThermalLoadTypeEnum; +END_ENTITY; + +ENTITY IfcSpaceType + SUBTYPE OF (IfcSpatialStructureElementType); + PredefinedType : IfcSpaceTypeEnum; +END_ENTITY; + +ENTITY IfcSpatialStructureElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuilding + ,IfcBuildingStorey + ,IfcSite + ,IfcSpace)) + SUBTYPE OF (IfcProduct); + LongName : OPTIONAL IfcLabel; + CompositionType : IfcElementCompositionEnum; + INVERSE + ReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure; + ServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings; + ContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure; + WHERE + WR41 : (HIINDEX(SELF\IfcObjectDefinition.Decomposes) = 1) + AND + ('IFC2X3.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1])) + AND + (('IFC2X3.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR + ('IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) + ); +END_ENTITY; + +ENTITY IfcSpatialStructureElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcSpaceType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcSphere + SUBTYPE OF (IfcCsgPrimitive3D); + Radius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcStackTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcStackTerminalTypeEnum; +END_ENTITY; + +ENTITY IfcStair + SUBTYPE OF (IfcBuildingElement); + ShapeType : IfcStairTypeEnum; + WHERE + WR1 : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR + ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\IfcProduct.Representation)))); +END_ENTITY; + +ENTITY IfcStairFlight + SUBTYPE OF (IfcBuildingElement); + NumberOfRiser : OPTIONAL INTEGER; + NumberOfTreads : OPTIONAL INTEGER; + RiserHeight : OPTIONAL IfcPositiveLengthMeasure; + TreadLength : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcStairFlightType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcStairFlightTypeEnum; +END_ENTITY; + +ENTITY IfcStructuralAction + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralLinearAction + ,IfcStructuralPlanarAction + ,IfcStructuralPointAction)) + SUBTYPE OF (IfcStructuralActivity); + DestabilizingLoad : BOOLEAN; + CausedBy : OPTIONAL IfcStructuralReaction; +END_ENTITY; + +ENTITY IfcStructuralActivity + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralAction + ,IfcStructuralReaction)) + SUBTYPE OF (IfcProduct); + AppliedLoad : IfcStructuralLoad; + GlobalOrLocal : IfcGlobalOrLocalEnum; + INVERSE + AssignedToStructuralItem : IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity; +END_ENTITY; + +ENTITY IfcStructuralAnalysisModel + SUBTYPE OF (IfcSystem); + PredefinedType : IfcAnalysisModelTypeEnum; + OrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D; + LoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup; + HasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup; +END_ENTITY; + +ENTITY IfcStructuralConnection + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralCurveConnection + ,IfcStructuralPointConnection + ,IfcStructuralSurfaceConnection)) + SUBTYPE OF (IfcStructuralItem); + AppliedCondition : OPTIONAL IfcBoundaryCondition; + INVERSE + ConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection; +END_ENTITY; + +ENTITY IfcStructuralConnectionCondition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcFailureConnectionCondition + ,IfcSlippageConnectionCondition)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcStructuralCurveConnection + SUBTYPE OF (IfcStructuralConnection); +END_ENTITY; + +ENTITY IfcStructuralCurveMember + SUPERTYPE OF (ONEOF + (IfcStructuralCurveMemberVarying)) + SUBTYPE OF (IfcStructuralMember); + PredefinedType : IfcStructuralCurveTypeEnum; +END_ENTITY; + +ENTITY IfcStructuralCurveMemberVarying + SUBTYPE OF (IfcStructuralCurveMember); +END_ENTITY; + +ENTITY IfcStructuralItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralConnection + ,IfcStructuralMember)) + SUBTYPE OF (IfcProduct); + INVERSE + AssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement; +END_ENTITY; + +ENTITY IfcStructuralLinearAction + SUPERTYPE OF (ONEOF + (IfcStructuralLinearActionVarying)) + SUBTYPE OF (IfcStructuralAction); + ProjectedOrTrue : IfcProjectedOrTrueLengthEnum; + WHERE + WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADLINEARFORCE', + 'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE'] + * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralLinearActionVarying + SUBTYPE OF (IfcStructuralLinearAction); + VaryingAppliedLoadLocation : IfcShapeAspect; + SubsequentAppliedLoads : LIST [1:?] OF IfcStructuralLoad; + DERIVE + VaryingAppliedLoads : LIST [2:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads); +END_ENTITY; + +ENTITY IfcStructuralLoad + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralLoadStatic)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcStructuralLoadGroup + SUBTYPE OF (IfcGroup); + PredefinedType : IfcLoadGroupTypeEnum; + ActionType : IfcActionTypeEnum; + ActionSource : IfcActionSourceTypeEnum; + Coefficient : OPTIONAL IfcPositiveRatioMeasure; + Purpose : OPTIONAL IfcLabel; + INVERSE + SourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup; + LoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy; +END_ENTITY; + +ENTITY IfcStructuralLoadLinearForce + SUBTYPE OF (IfcStructuralLoadStatic); + LinearForceX : OPTIONAL IfcLinearForceMeasure; + LinearForceY : OPTIONAL IfcLinearForceMeasure; + LinearForceZ : OPTIONAL IfcLinearForceMeasure; + LinearMomentX : OPTIONAL IfcLinearMomentMeasure; + LinearMomentY : OPTIONAL IfcLinearMomentMeasure; + LinearMomentZ : OPTIONAL IfcLinearMomentMeasure; +END_ENTITY; + +ENTITY IfcStructuralLoadPlanarForce + SUBTYPE OF (IfcStructuralLoadStatic); + PlanarForceX : OPTIONAL IfcPlanarForceMeasure; + PlanarForceY : OPTIONAL IfcPlanarForceMeasure; + PlanarForceZ : OPTIONAL IfcPlanarForceMeasure; +END_ENTITY; + +ENTITY IfcStructuralLoadSingleDisplacement + SUPERTYPE OF (ONEOF + (IfcStructuralLoadSingleDisplacementDistortion)) + SUBTYPE OF (IfcStructuralLoadStatic); + DisplacementX : OPTIONAL IfcLengthMeasure; + DisplacementY : OPTIONAL IfcLengthMeasure; + DisplacementZ : OPTIONAL IfcLengthMeasure; + RotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure; + RotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure; + RotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure; +END_ENTITY; + +ENTITY IfcStructuralLoadSingleDisplacementDistortion + SUBTYPE OF (IfcStructuralLoadSingleDisplacement); + Distortion : OPTIONAL IfcCurvatureMeasure; +END_ENTITY; + +ENTITY IfcStructuralLoadSingleForce + SUPERTYPE OF (ONEOF + (IfcStructuralLoadSingleForceWarping)) + SUBTYPE OF (IfcStructuralLoadStatic); + ForceX : OPTIONAL IfcForceMeasure; + ForceY : OPTIONAL IfcForceMeasure; + ForceZ : OPTIONAL IfcForceMeasure; + MomentX : OPTIONAL IfcTorqueMeasure; + MomentY : OPTIONAL IfcTorqueMeasure; + MomentZ : OPTIONAL IfcTorqueMeasure; +END_ENTITY; + +ENTITY IfcStructuralLoadSingleForceWarping + SUBTYPE OF (IfcStructuralLoadSingleForce); + WarpingMoment : OPTIONAL IfcWarpingMomentMeasure; +END_ENTITY; + +ENTITY IfcStructuralLoadStatic + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralLoadLinearForce + ,IfcStructuralLoadPlanarForce + ,IfcStructuralLoadSingleDisplacement + ,IfcStructuralLoadSingleForce + ,IfcStructuralLoadTemperature)) + SUBTYPE OF (IfcStructuralLoad); +END_ENTITY; + +ENTITY IfcStructuralLoadTemperature + SUBTYPE OF (IfcStructuralLoadStatic); + DeltaT_Constant : OPTIONAL IfcThermodynamicTemperatureMeasure; + DeltaT_Y : OPTIONAL IfcThermodynamicTemperatureMeasure; + DeltaT_Z : OPTIONAL IfcThermodynamicTemperatureMeasure; +END_ENTITY; + +ENTITY IfcStructuralMember + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralCurveMember + ,IfcStructuralSurfaceMember)) + SUBTYPE OF (IfcStructuralItem); + INVERSE + ReferencesElement : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatedStructuralMember; + ConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember; +END_ENTITY; + +ENTITY IfcStructuralPlanarAction + SUPERTYPE OF (ONEOF + (IfcStructuralPlanarActionVarying)) + SUBTYPE OF (IfcStructuralAction); + ProjectedOrTrue : IfcProjectedOrTrueLengthEnum; + WHERE + WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADPLANARFORCE', + 'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE'] + * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralPlanarActionVarying + SUBTYPE OF (IfcStructuralPlanarAction); + VaryingAppliedLoadLocation : IfcShapeAspect; + SubsequentAppliedLoads : LIST [2:?] OF IfcStructuralLoad; + DERIVE + VaryingAppliedLoads : LIST [3:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads); +END_ENTITY; + +ENTITY IfcStructuralPointAction + SUBTYPE OF (IfcStructuralAction); + WHERE + WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE', + 'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] + * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralPointConnection + SUBTYPE OF (IfcStructuralConnection); +END_ENTITY; + +ENTITY IfcStructuralPointReaction + SUBTYPE OF (IfcStructuralReaction); + WHERE + WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE', + 'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] + * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralProfileProperties + SUPERTYPE OF (ONEOF + (IfcStructuralSteelProfileProperties)) + SUBTYPE OF (IfcGeneralProfileProperties); + TorsionalConstantX : OPTIONAL IfcMomentOfInertiaMeasure; + MomentOfInertiaYZ : OPTIONAL IfcMomentOfInertiaMeasure; + MomentOfInertiaY : OPTIONAL IfcMomentOfInertiaMeasure; + MomentOfInertiaZ : OPTIONAL IfcMomentOfInertiaMeasure; + WarpingConstant : OPTIONAL IfcWarpingConstantMeasure; + ShearCentreZ : OPTIONAL IfcLengthMeasure; + ShearCentreY : OPTIONAL IfcLengthMeasure; + ShearDeformationAreaZ : OPTIONAL IfcAreaMeasure; + ShearDeformationAreaY : OPTIONAL IfcAreaMeasure; + MaximumSectionModulusY : OPTIONAL IfcSectionModulusMeasure; + MinimumSectionModulusY : OPTIONAL IfcSectionModulusMeasure; + MaximumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure; + MinimumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure; + TorsionalSectionModulus : OPTIONAL IfcSectionModulusMeasure; + CentreOfGravityInX : OPTIONAL IfcLengthMeasure; + CentreOfGravityInY : OPTIONAL IfcLengthMeasure; + WHERE + WR21 : NOT(EXISTS(ShearDeformationAreaY)) OR (ShearDeformationAreaY >= 0.); + WR22 : NOT(EXISTS(ShearDeformationAreaZ)) OR (ShearDeformationAreaZ >= 0.); +END_ENTITY; + +ENTITY IfcStructuralReaction + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralPointReaction)) + SUBTYPE OF (IfcStructuralActivity); + INVERSE + Causes : SET [0:?] OF IfcStructuralAction FOR CausedBy; +END_ENTITY; + +ENTITY IfcStructuralResultGroup + SUBTYPE OF (IfcGroup); + TheoryType : IfcAnalysisTheoryTypeEnum; + ResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup; + IsLinear : BOOLEAN; + INVERSE + ResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults; +END_ENTITY; + +ENTITY IfcStructuralSteelProfileProperties + SUBTYPE OF (IfcStructuralProfileProperties); + ShearAreaZ : OPTIONAL IfcAreaMeasure; + ShearAreaY : OPTIONAL IfcAreaMeasure; + PlasticShapeFactorY : OPTIONAL IfcPositiveRatioMeasure; + PlasticShapeFactorZ : OPTIONAL IfcPositiveRatioMeasure; + WHERE + WR31 : NOT(EXISTS(ShearAreaY)) OR (ShearAreaY >= 0.); + WR32 : NOT(EXISTS(ShearAreaZ)) OR (ShearAreaZ >= 0.); +END_ENTITY; + +ENTITY IfcStructuralSurfaceConnection + SUBTYPE OF (IfcStructuralConnection); +END_ENTITY; + +ENTITY IfcStructuralSurfaceMember + SUPERTYPE OF (ONEOF + (IfcStructuralSurfaceMemberVarying)) + SUBTYPE OF (IfcStructuralMember); + PredefinedType : IfcStructuralSurfaceTypeEnum; + Thickness : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcStructuralSurfaceMemberVarying + SUBTYPE OF (IfcStructuralSurfaceMember); + SubsequentThickness : LIST [2:?] OF IfcPositiveLengthMeasure; + VaryingThicknessLocation : IfcShapeAspect; + DERIVE + VaryingThickness : LIST [3:?] OF IfcPositiveLengthMeasure := IfcAddToBeginOfList(SELF\IfcStructuralSurfaceMember.Thickness, SubsequentThickness); + WHERE + WR61 : EXISTS(SELF\IfcStructuralSurfaceMember.Thickness); + WR62 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations | + NOT(SIZEOF(temp\IfcRepresentation.Items) = 1) + )) = 0; + WR63 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations | + NOT(('IFC2X3.IFCCARTESIANPOINT' IN TYPEOF(temp\IfcRepresentation.Items[1])) + OR + ('IFC2X3.IFCPOINTONSURFACE' IN TYPEOF(temp\IfcRepresentation.Items[1]))) + )) = 0; +END_ENTITY; + +ENTITY IfcStructuredDimensionCallout + SUBTYPE OF (IfcDraughtingCallout); + WHERE + WR31 : SIZEOF(QUERY ( Ato <* QUERY ( Con <* SELF.contents | ( + 'IFC2X3.IFCANNOTATIONTEXTOCCURRENCE' IN + TYPEOF(Con)) ) | (NOT (Ato.Name IN ['dimension value', + 'tolerance value','unit text','prefix text','suffix text'])))) + = 0; +END_ENTITY; + +ENTITY IfcStyleModel + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStyledRepresentation)) + SUBTYPE OF (IfcRepresentation); +END_ENTITY; + +ENTITY IfcStyledItem + SUPERTYPE OF (ONEOF + (IfcAnnotationOccurrence)) + SUBTYPE OF (IfcRepresentationItem); + Item : OPTIONAL IfcRepresentationItem; + Styles : SET [1:?] OF IfcPresentationStyleAssignment; + Name : OPTIONAL IfcLabel; + WHERE + WR11 : SIZEOF(Styles) = 1; + WR12 : NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(Item)); +END_ENTITY; + +ENTITY IfcStyledRepresentation + SUBTYPE OF (IfcStyleModel); + WHERE + WR21 : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | + (NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(temp))) + )) = 0; +END_ENTITY; + +ENTITY IfcSubContractResource + SUBTYPE OF (IfcConstructionResource); + SubContractor : OPTIONAL IfcActorSelect; + JobDescription : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcSubedge + SUBTYPE OF (IfcEdge); + ParentEdge : IfcEdge; +END_ENTITY; + +ENTITY IfcSurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBoundedSurface + ,IfcElementarySurface + ,IfcSweptSurface)) + SUBTYPE OF (IfcGeometricRepresentationItem); +END_ENTITY; + +ENTITY IfcSurfaceCurveSweptAreaSolid + SUBTYPE OF (IfcSweptAreaSolid); + Directrix : IfcCurve; + StartParam : IfcParameterValue; + EndParam : IfcParameterValue; + ReferenceSurface : IfcSurface; +END_ENTITY; + +ENTITY IfcSurfaceOfLinearExtrusion + SUBTYPE OF (IfcSweptSurface); + ExtrudedDirection : IfcDirection; + Depth : IfcLengthMeasure; + DERIVE + ExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth); + WHERE + WR41 : Depth > 0.; +END_ENTITY; + +ENTITY IfcSurfaceOfRevolution + SUBTYPE OF (IfcSweptSurface); + AxisPosition : IfcAxis1Placement; + DERIVE + AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, + IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0)); +END_ENTITY; + +ENTITY IfcSurfaceStyle + SUBTYPE OF (IfcPresentationStyle); + Side : IfcSurfaceSide; + Styles : SET [1:5] OF IfcSurfaceStyleElementSelect; + WHERE + WR11 : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC2X3.IFCSURFACESTYLESHADING' IN + TYPEOF(Style) + )) <= 1; + WR12 : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC2X3.IFCSURFACESTYLELIGHTING' IN + TYPEOF(Style) + )) <= 1; + WR13 : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC2X3.IFCSURFACESTYLEREFRACTION' IN + TYPEOF(Style) + )) <= 1; + WR14 : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC2X3.IFCSURFACESTYLEWITHTEXTURES' IN + TYPEOF(Style) + )) <= 1; + WR15 : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC2X3.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN + TYPEOF(Style) + )) <= 1; +END_ENTITY; + +ENTITY IfcSurfaceStyleLighting; + DiffuseTransmissionColour : IfcColourRgb; + DiffuseReflectionColour : IfcColourRgb; + TransmissionColour : IfcColourRgb; + ReflectanceColour : IfcColourRgb; +END_ENTITY; + +ENTITY IfcSurfaceStyleRefraction; + RefractionIndex : OPTIONAL IfcReal; + DispersionFactor : OPTIONAL IfcReal; +END_ENTITY; + +ENTITY IfcSurfaceStyleRendering + SUBTYPE OF (IfcSurfaceStyleShading); + Transparency : OPTIONAL IfcNormalisedRatioMeasure; + DiffuseColour : OPTIONAL IfcColourOrFactor; + TransmissionColour : OPTIONAL IfcColourOrFactor; + DiffuseTransmissionColour : OPTIONAL IfcColourOrFactor; + ReflectionColour : OPTIONAL IfcColourOrFactor; + SpecularColour : OPTIONAL IfcColourOrFactor; + SpecularHighlight : OPTIONAL IfcSpecularHighlightSelect; + ReflectanceMethod : IfcReflectanceMethodEnum; +END_ENTITY; + +ENTITY IfcSurfaceStyleShading + SUPERTYPE OF (ONEOF + (IfcSurfaceStyleRendering)); + SurfaceColour : IfcColourRgb; +END_ENTITY; + +ENTITY IfcSurfaceStyleWithTextures; + Textures : LIST [1:?] OF IfcSurfaceTexture; +END_ENTITY; + +ENTITY IfcSurfaceTexture + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBlobTexture + ,IfcImageTexture + ,IfcPixelTexture)); + RepeatS : BOOLEAN; + RepeatT : BOOLEAN; + TextureType : IfcSurfaceTextureEnum; + TextureTransform : OPTIONAL IfcCartesianTransformationOperator2D; +END_ENTITY; + +ENTITY IfcSweptAreaSolid + ABSTRACT SUPERTYPE OF (ONEOF + (IfcExtrudedAreaSolid + ,IfcRevolvedAreaSolid + ,IfcSurfaceCurveSweptAreaSolid)) + SUBTYPE OF (IfcSolidModel); + SweptArea : IfcProfileDef; + Position : IfcAxis2Placement3D; + WHERE + WR22 : SweptArea.ProfileType = IfcProfileTypeEnum.Area; +END_ENTITY; + +ENTITY IfcSweptDiskSolid + SUBTYPE OF (IfcSolidModel); + Directrix : IfcCurve; + Radius : IfcPositiveLengthMeasure; + InnerRadius : OPTIONAL IfcPositiveLengthMeasure; + StartParam : IfcParameterValue; + EndParam : IfcParameterValue; + WHERE + WR1 : Directrix.Dim = 3; + WR2 : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius); +END_ENTITY; + +ENTITY IfcSweptSurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcSurfaceOfLinearExtrusion + ,IfcSurfaceOfRevolution)) + SUBTYPE OF (IfcSurface); + SweptCurve : IfcProfileDef; + Position : IfcAxis2Placement3D; + DERIVE + Dim : IfcDimensionCount := Position.Dim; + WHERE + WR1 : NOT('IFC2X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptCurve)); + WR2 : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve; +END_ENTITY; + +ENTITY IfcSwitchingDeviceType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcSwitchingDeviceTypeEnum; +END_ENTITY; + +ENTITY IfcSymbolStyle + SUBTYPE OF (IfcPresentationStyle); + StyleOfSymbol : IfcSymbolStyleSelect; +END_ENTITY; + +ENTITY IfcSystem + SUPERTYPE OF (ONEOF + (IfcElectricalCircuit + ,IfcStructuralAnalysisModel)) + SUBTYPE OF (IfcGroup); + INVERSE + ServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem; +END_ENTITY; + +ENTITY IfcSystemFurnitureElementType + SUBTYPE OF (IfcFurnishingElementType); +END_ENTITY; + +ENTITY IfcTShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + FlangeWidth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcPositiveLengthMeasure; + FlangeEdgeRadius : OPTIONAL IfcPositiveLengthMeasure; + WebEdgeRadius : OPTIONAL IfcPositiveLengthMeasure; + WebSlope : OPTIONAL IfcPlaneAngleMeasure; + FlangeSlope : OPTIONAL IfcPlaneAngleMeasure; + CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR1 : FlangeThickness < Depth; + WR2 : WebThickness < FlangeWidth; +END_ENTITY; + +ENTITY IfcTable; + Name : STRING; + Rows : LIST [1:?] OF IfcTableRow; + DERIVE + NumberOfCellsInRow : INTEGER := HIINDEX(Rows[1].RowCells); + NumberOfHeadings : INTEGER := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading)); + NumberOfDataRows : INTEGER := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading))); + WHERE + WR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0; + WR2 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0; + WR3 : { 0 <= NumberOfHeadings <= 1 }; +END_ENTITY; + +ENTITY IfcTableRow; + RowCells : LIST [1:?] OF IfcValue; + IsHeading : BOOLEAN; + INVERSE + OfTable : IfcTable FOR Rows; +END_ENTITY; + +ENTITY IfcTankType + SUBTYPE OF (IfcFlowStorageDeviceType); + PredefinedType : IfcTankTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTask + SUPERTYPE OF (ONEOF + (IfcMove + ,IfcOrderAction)) + SUBTYPE OF (IfcProcess); + TaskId : IfcIdentifier; + Status : OPTIONAL IfcLabel; + WorkMethod : OPTIONAL IfcLabel; + IsMilestone : BOOLEAN; + Priority : OPTIONAL INTEGER; + WHERE + WR1 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0; + WR2 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0; + WR3 : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcTelecomAddress + SUBTYPE OF (IfcAddress); + TelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel; + FacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel; + PagerNumber : OPTIONAL IfcLabel; + ElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel; + WWWHomePageURL : OPTIONAL IfcLabel; + WHERE + WR1 : EXISTS (TelephoneNumbers) OR + EXISTS (PagerNumber) OR + EXISTS (FacsimileNumbers) OR + EXISTS (ElectronicMailAddresses) OR + EXISTS (WWWHomePageURL); +END_ENTITY; + +ENTITY IfcTendon + SUBTYPE OF (IfcReinforcingElement); + PredefinedType : IfcTendonTypeEnum; + NominalDiameter : IfcPositiveLengthMeasure; + CrossSectionArea : IfcAreaMeasure; + TensionForce : OPTIONAL IfcForceMeasure; + PreStress : OPTIONAL IfcPressureMeasure; + FrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure; + AnchorageSlip : OPTIONAL IfcPositiveLengthMeasure; + MinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR1 : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcTendonAnchor + SUBTYPE OF (IfcReinforcingElement); +END_ENTITY; + +ENTITY IfcTerminatorSymbol + SUPERTYPE OF (ONEOF + (IfcDimensionCurveTerminator)) + SUBTYPE OF (IfcAnnotationSymbolOccurrence); + AnnotatedCurve : IfcAnnotationCurveOccurrence; +END_ENTITY; + +ENTITY IfcTextLiteral + SUPERTYPE OF (ONEOF + (IfcTextLiteralWithExtent)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Literal : IfcPresentableText; + Placement : IfcAxis2Placement; + Path : IfcTextPath; +END_ENTITY; + +ENTITY IfcTextLiteralWithExtent + SUBTYPE OF (IfcTextLiteral); + Extent : IfcPlanarExtent; + BoxAlignment : IfcBoxAlignment; + WHERE + WR31 : NOT('IFC2X3.IFCPLANARBOX' IN TYPEOF(Extent)); +END_ENTITY; + +ENTITY IfcTextStyle + SUBTYPE OF (IfcPresentationStyle); + TextCharacterAppearance : OPTIONAL IfcCharacterStyleSelect; + TextStyle : OPTIONAL IfcTextStyleSelect; + TextFontStyle : IfcTextFontSelect; +END_ENTITY; + +ENTITY IfcTextStyleFontModel + SUBTYPE OF (IfcPreDefinedTextFont); + FontFamily : OPTIONAL LIST [1:?] OF IfcTextFontName; + FontStyle : OPTIONAL IfcFontStyle; + FontVariant : OPTIONAL IfcFontVariant; + FontWeight : OPTIONAL IfcFontWeight; + FontSize : IfcSizeSelect; + WHERE + WR31 : ('IFC2X3.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND + (SELF.FontSize > 0.); +END_ENTITY; + +ENTITY IfcTextStyleForDefinedFont; + Colour : IfcColour; + BackgroundColour : OPTIONAL IfcColour; +END_ENTITY; + +ENTITY IfcTextStyleTextModel; + TextIndent : OPTIONAL IfcSizeSelect; + TextAlign : OPTIONAL IfcTextAlignment; + TextDecoration : OPTIONAL IfcTextDecoration; + LetterSpacing : OPTIONAL IfcSizeSelect; + WordSpacing : OPTIONAL IfcSizeSelect; + TextTransform : OPTIONAL IfcTextTransformation; + LineHeight : OPTIONAL IfcSizeSelect; +END_ENTITY; + +ENTITY IfcTextStyleWithBoxCharacteristics; + BoxHeight : OPTIONAL IfcPositiveLengthMeasure; + BoxWidth : OPTIONAL IfcPositiveLengthMeasure; + BoxSlantAngle : OPTIONAL IfcPlaneAngleMeasure; + BoxRotateAngle : OPTIONAL IfcPlaneAngleMeasure; + CharacterSpacing : OPTIONAL IfcSizeSelect; +END_ENTITY; + +ENTITY IfcTextureCoordinate + ABSTRACT SUPERTYPE OF (ONEOF + (IfcTextureCoordinateGenerator + ,IfcTextureMap)); + INVERSE + AnnotatedSurface : SET [1:1] OF IfcAnnotationSurface FOR TextureCoordinates; +END_ENTITY; + +ENTITY IfcTextureCoordinateGenerator + SUBTYPE OF (IfcTextureCoordinate); + Mode : IfcLabel; + Parameter : LIST [1:?] OF IfcSimpleValue; +END_ENTITY; + +ENTITY IfcTextureMap + SUBTYPE OF (IfcTextureCoordinate); + TextureMaps : SET [1:?] OF IfcVertexBasedTextureMap; + WHERE + WR11 : SIZEOF([ + 'IFC2X3.IFCSHELLBASEDSURFACEMODEL', + 'IFC2X3.IFCFACEBASEDSURFACEMODEL', + 'IFC2X3.IFCFACETEDBREP', + 'IFC2X3.IFCFACETEDBREPWITHVOIDS'] + * TYPEOF(SELF\IfcTextureCoordinate.AnnotatedSurface[1].Item) + ) >= 1; +END_ENTITY; + +ENTITY IfcTextureVertex; + Coordinates : LIST [2:2] OF IfcParameterValue; +END_ENTITY; + +ENTITY IfcThermalMaterialProperties + SUBTYPE OF (IfcMaterialProperties); + SpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure; + BoilingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure; + FreezingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure; + ThermalConductivity : OPTIONAL IfcThermalConductivityMeasure; + UNIQUE + UR11 : Material; +END_ENTITY; + +ENTITY IfcTimeSeries + ABSTRACT SUPERTYPE OF (ONEOF + (IfcIrregularTimeSeries + ,IfcRegularTimeSeries)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + StartTime : IfcDateTimeSelect; + EndTime : IfcDateTimeSelect; + TimeSeriesDataType : IfcTimeSeriesDataTypeEnum; + DataOrigin : IfcDataOriginEnum; + UserDefinedDataOrigin : OPTIONAL IfcLabel; + Unit : OPTIONAL IfcUnit; + INVERSE + DocumentedBy : SET [0:1] OF IfcTimeSeriesReferenceRelationship FOR ReferencedTimeSeries; +END_ENTITY; + +ENTITY IfcTimeSeriesReferenceRelationship; + ReferencedTimeSeries : IfcTimeSeries; + TimeSeriesReferences : SET [1:?] OF IfcDocumentSelect; +END_ENTITY; + +ENTITY IfcTimeSeriesSchedule + SUBTYPE OF (IfcControl); + ApplicableDates : OPTIONAL LIST [1:?] OF IfcDateTimeSelect; + TimeSeriesScheduleType : IfcTimeSeriesScheduleTypeEnum; + TimeSeries : IfcTimeSeries; + WHERE + WR41 : NOT(TimeSeriesScheduleType=IfcTimeSeriesScheduleTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcTimeSeriesValue; + ListValues : LIST [1:?] OF IfcValue; +END_ENTITY; + +ENTITY IfcTopologicalRepresentationItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConnectedFaceSet + ,IfcEdge + ,IfcFace + ,IfcFaceBound + ,IfcLoop + ,IfcPath + ,IfcVertex)) + SUBTYPE OF (IfcRepresentationItem); +END_ENTITY; + +ENTITY IfcTopologyRepresentation + SUBTYPE OF (IfcShapeModel); + WHERE + WR21 : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | + NOT('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) + )) = 0; + WR22 : EXISTS(SELF\IfcRepresentation.RepresentationType); + WR23 : IfcTopologyRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); +END_ENTITY; + +ENTITY IfcTransformerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcTransformerTypeEnum; +END_ENTITY; + +ENTITY IfcTransportElement + SUBTYPE OF (IfcElement); + OperationType : OPTIONAL IfcTransportElementTypeEnum; + CapacityByWeight : OPTIONAL IfcMassMeasure; + CapacityByNumber : OPTIONAL IfcCountMeasure; +END_ENTITY; + +ENTITY IfcTransportElementType + SUBTYPE OF (IfcElementType); + PredefinedType : IfcTransportElementTypeEnum; +END_ENTITY; + +ENTITY IfcTrapeziumProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + BottomXDim : IfcPositiveLengthMeasure; + TopXDim : IfcPositiveLengthMeasure; + YDim : IfcPositiveLengthMeasure; + TopXOffset : IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcTrimmedCurve + SUBTYPE OF (IfcBoundedCurve); + BasisCurve : IfcCurve; + Trim1 : SET [1:2] OF IfcTrimmingSelect; + Trim2 : SET [1:2] OF IfcTrimmingSelect; + SenseAgreement : BOOLEAN; + MasterRepresentation : IfcTrimmingPreference; + WHERE + WR41 : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2])); + WR42 : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2])); + WR43 : NOT('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve)); +END_ENTITY; + +ENTITY IfcTubeBundleType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcTubeBundleTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTwoDirectionRepeatFactor + SUBTYPE OF (IfcOneDirectionRepeatFactor); + SecondRepeatFactor : IfcVector; +END_ENTITY; + +ENTITY IfcTypeObject + SUPERTYPE OF (ONEOF + (IfcTypeProduct)) + SUBTYPE OF (IfcObjectDefinition); + ApplicableOccurrence : OPTIONAL IfcLabel; + HasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition; + INVERSE + ObjectTypeOf : SET [0:1] OF IfcRelDefinesByType FOR RelatingType; + WHERE + WR1 : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcTypeProduct + SUPERTYPE OF (ONEOF + (IfcDoorStyle + ,IfcElementType + ,IfcWindowStyle)) + SUBTYPE OF (IfcTypeObject); + RepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap; + Tag : OPTIONAL IfcLabel; + WHERE + WR41 : NOT(EXISTS(SELF\IfcTypeObject.ObjectTypeOf[1])) OR + (SIZEOF(QUERY(temp <* SELF\IfcTypeObject.ObjectTypeOf[1].RelatedObjects | + NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp))) + ) = 0); +END_ENTITY; + +ENTITY IfcUShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + FlangeWidth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcPositiveLengthMeasure; + EdgeRadius : OPTIONAL IfcPositiveLengthMeasure; + FlangeSlope : OPTIONAL IfcPlaneAngleMeasure; + CentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR21 : FlangeThickness < (Depth / 2.); + WR22 : WebThickness < FlangeWidth; +END_ENTITY; + +ENTITY IfcUnitAssignment; + Units : SET [1:?] OF IfcUnit; + WHERE + WR01 : IfcCorrectUnitAssignment(Units); +END_ENTITY; + +ENTITY IfcUnitaryEquipmentType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcUnitaryEquipmentTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcValveType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcValveTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcVector + SUBTYPE OF (IfcGeometricRepresentationItem); + Orientation : IfcDirection; + Magnitude : IfcLengthMeasure; + DERIVE + Dim : IfcDimensionCount := Orientation.Dim; + WHERE + WR1 : Magnitude >= 0.0; +END_ENTITY; + +ENTITY IfcVertex + SUPERTYPE OF (ONEOF + (IfcVertexPoint)) + SUBTYPE OF (IfcTopologicalRepresentationItem); +END_ENTITY; + +ENTITY IfcVertexBasedTextureMap; + TextureVertices : LIST [3:?] OF IfcTextureVertex; + TexturePoints : LIST [3:?] OF IfcCartesianPoint; +END_ENTITY; + +ENTITY IfcVertexLoop + SUBTYPE OF (IfcLoop); + LoopVertex : IfcVertex; +END_ENTITY; + +ENTITY IfcVertexPoint + SUBTYPE OF (IfcVertex); + VertexGeometry : IfcPoint; +END_ENTITY; + +ENTITY IfcVibrationIsolatorType + SUBTYPE OF (IfcDiscreteAccessoryType); + PredefinedType : IfcVibrationIsolatorTypeEnum; + WHERE + WR1 : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcVirtualElement + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcVirtualGridIntersection; + IntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis; + OffsetDistances : LIST [2:3] OF IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcWall + SUPERTYPE OF (ONEOF + (IfcWallStandardCase)) + SUBTYPE OF (IfcBuildingElement); + WHERE + WR1 : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | + 'IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) + )) <= 1; +END_ENTITY; + +ENTITY IfcWallStandardCase + SUBTYPE OF (IfcWall); + WHERE + WR1 : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X3.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC2X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + )) = 1; +END_ENTITY; + +ENTITY IfcWallType + SUBTYPE OF (IfcBuildingElementType); + PredefinedType : IfcWallTypeEnum; +END_ENTITY; + +ENTITY IfcWasteTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcWasteTerminalTypeEnum; +END_ENTITY; + +ENTITY IfcWaterProperties + SUBTYPE OF (IfcMaterialProperties); + IsPotable : OPTIONAL BOOLEAN; + Hardness : OPTIONAL IfcIonConcentrationMeasure; + AlkalinityConcentration : OPTIONAL IfcIonConcentrationMeasure; + AcidityConcentration : OPTIONAL IfcIonConcentrationMeasure; + ImpuritiesContent : OPTIONAL IfcNormalisedRatioMeasure; + PHLevel : OPTIONAL IfcPHMeasure; + DissolvedSolidsContent : OPTIONAL IfcNormalisedRatioMeasure; + UNIQUE + UR11 : Material; +END_ENTITY; + +ENTITY IfcWindow + SUBTYPE OF (IfcBuildingElement); + OverallHeight : OPTIONAL IfcPositiveLengthMeasure; + OverallWidth : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcWindowLiningProperties + SUBTYPE OF (IfcPropertySetDefinition); + LiningDepth : OPTIONAL IfcPositiveLengthMeasure; + LiningThickness : OPTIONAL IfcPositiveLengthMeasure; + TransomThickness : OPTIONAL IfcPositiveLengthMeasure; + MullionThickness : OPTIONAL IfcPositiveLengthMeasure; + FirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure; + SecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure; + FirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure; + SecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; + WHERE + WR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness)); + WR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset)); + WR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset)); + WR34 : EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1]) AND + ('IFC2X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])); +END_ENTITY; + +ENTITY IfcWindowPanelProperties + SUBTYPE OF (IfcPropertySetDefinition); + OperationType : IfcWindowPanelOperationEnum; + PanelPosition : IfcWindowPanelPositionEnum; + FrameDepth : OPTIONAL IfcPositiveLengthMeasure; + FrameThickness : OPTIONAL IfcPositiveLengthMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; +END_ENTITY; + +ENTITY IfcWindowStyle + SUBTYPE OF (IfcTypeProduct); + ConstructionType : IfcWindowStyleConstructionEnum; + OperationType : IfcWindowStyleOperationEnum; + ParameterTakesPrecedence : BOOLEAN; + Sizeable : BOOLEAN; +END_ENTITY; + +ENTITY IfcWorkControl + ABSTRACT SUPERTYPE OF (ONEOF + (IfcWorkPlan + ,IfcWorkSchedule)) + SUBTYPE OF (IfcControl); + Identifier : IfcIdentifier; + CreationDate : IfcDateTimeSelect; + Creators : OPTIONAL SET [1:?] OF IfcPerson; + Purpose : OPTIONAL IfcLabel; + Duration : OPTIONAL IfcTimeMeasure; + TotalFloat : OPTIONAL IfcTimeMeasure; + StartTime : IfcDateTimeSelect; + FinishTime : OPTIONAL IfcDateTimeSelect; + WorkControlType : OPTIONAL IfcWorkControlTypeEnum; + UserDefinedControlType : OPTIONAL IfcLabel; + WHERE + WR1 : (WorkControlType <> IfcWorkControlTypeEnum.USERDEFINED) OR + ((WorkControlType = IfcWorkControlTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcWorkControl.UserDefinedControlType)); +END_ENTITY; + +ENTITY IfcWorkPlan + SUBTYPE OF (IfcWorkControl); +END_ENTITY; + +ENTITY IfcWorkSchedule + SUBTYPE OF (IfcWorkControl); +END_ENTITY; + +ENTITY IfcZShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + FlangeWidth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcPositiveLengthMeasure; + EdgeRadius : OPTIONAL IfcPositiveLengthMeasure; + WHERE + WR21 : FlangeThickness < (Depth / 2.); +END_ENTITY; + +ENTITY IfcZone + SUBTYPE OF (IfcGroup); + WHERE + WR1 : SIZEOF (QUERY (temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects | NOT(('IFC2X3.IFCZONE' IN TYPEOF(temp)) OR ('IFC2X3.IFCSPACE' IN TYPEOF(temp))) )) = 0; +END_ENTITY; + +FUNCTION IfcAddToBeginOfList + (AScalar : GENERIC; + AList : LIST OF GENERIC:AL) + : LIST[1:?] OF GENERIC:AL; + + LOCAL + Result : LIST OF GENERIC:AL := []; + END_LOCAL; + + IF NOT(EXISTS(AScalar)) THEN + Result := AList; + ELSE + Result := Result + AScalar; + IF (HIINDEX(AList) >= 1) THEN + REPEAT i:=1 TO HIINDEX(AList); + Result[i+1] := AList[i]; + END_REPEAT; + END_IF; + END_IF; + RETURN(Result); +END_FUNCTION; + +FUNCTION IfcBaseAxis + (Dim : INTEGER; + Axis1, Axis2, Axis3 : IfcDirection) + : LIST [2:3] OF IfcDirection; + + LOCAL + U : LIST [2:3] OF IfcDirection; + Factor : REAL; + D1, D2 : IfcDirection; + END_LOCAL; + + IF (Dim = 3) THEN + D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0])); + D2 := IfcFirstProjAxis(D1, Axis1); + U := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1]; + ELSE + IF EXISTS(Axis1) THEN + D1 := IfcNormalise(Axis1); + U := [D1, IfcOrthogonalComplement(D1)]; + IF EXISTS(Axis2) THEN + Factor := IfcDotProduct(Axis2, U[2]); + IF (Factor < 0.0) THEN + U[2].DirectionRatios[1] := -U[2].DirectionRatios[1]; + U[2].DirectionRatios[2] := -U[2].DirectionRatios[2]; + END_IF; + END_IF; + ELSE + IF EXISTS(Axis2) THEN + D1 := IfcNormalise(Axis2); + U := [IfcOrthogonalComplement(D1), D1]; + U[1].DirectionRatios[1] := -U[1].DirectionRatios[1]; + U[1].DirectionRatios[2] := -U[1].DirectionRatios[2]; + ELSE + U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), + IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])]; + END_IF; + END_IF; + END_IF; + RETURN(U); +END_FUNCTION; + +FUNCTION IfcBooleanChoose + (B : BOOLEAN ; + Choice1, Choice2 : Generic : Item) + : Generic : Item; + IF B THEN + RETURN (Choice1); + ELSE + RETURN (Choice2); + END_IF; +END_FUNCTION; + +FUNCTION IfcBuild2Axes + (RefDirection : IfcDirection) + : LIST [2:2] OF IfcDirection; + LOCAL + D : IfcDirection := NVL(IfcNormalise(RefDirection), + IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0])); + END_LOCAL; + RETURN([D, IfcOrthogonalComplement(D)]); +END_FUNCTION; + +FUNCTION IfcBuildAxes + (Axis, RefDirection : IfcDirection) + : LIST [3:3] OF IfcDirection; + LOCAL + D1, D2 : IfcDirection; + END_LOCAL; + D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0])); + D2 := IfcFirstProjAxis(D1, RefDirection); + RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2)).Orientation, D1]); +END_FUNCTION; + +FUNCTION IfcCorrectDimensions + (m : IfcUnitEnum; Dim : IfcDimensionalExponents) + : LOGICAL; + CASE m OF + LENGTHUNIT : IF + Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + MASSUNIT : IF + Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + TIMEUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ELECTRICCURRENTUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + THERMODYNAMICTEMPERATUREUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + AMOUNTOFSUBSTANCEUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + LUMINOUSINTENSITYUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + PLANEANGLEUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + SOLIDANGLEUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + AREAUNIT : IF + Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + VOLUMEUNIT : IF + Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + + ABSORBEDDOSEUNIT : IF + Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + RADIOACTIVITYUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ELECTRICCAPACITANCEUNIT : IF + Dim = (IfcDimensionalExponents (-2, 1, 4, 1, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + DOSEEQUIVALENTUNIT : IF + Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ELECTRICCHARGEUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ELECTRICCONDUCTANCEUNIT : IF + Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ELECTRICVOLTAGEUNIT : IF + Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ELECTRICRESISTANCEUNIT : IF + Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ENERGYUNIT : IF + Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + FORCEUNIT : IF + Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + FREQUENCYUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + INDUCTANCEUNIT : IF + Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + ILLUMINANCEUNIT : IF + Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + LUMINOUSFLUXUNIT : IF + Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + MAGNETICFLUXUNIT : IF + Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + MAGNETICFLUXDENSITYUNIT : IF + Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + POWERUNIT : IF + Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + PRESSUREUNIT : IF + Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0)) + THEN RETURN(TRUE); + ELSE RETURN(FALSE); + END_IF; + + OTHERWISE : + RETURN (UNKNOWN); + END_CASE; +END_FUNCTION; + +FUNCTION IfcCorrectLocalPlacement + (AxisPlacement:IfcAxis2Placement; + RelPlacement : IfcObjectPlacement) + : LOGICAL; + + IF (EXISTS(RelPlacement)) THEN + IF ('IFC2X3.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN + RETURN(?); + END_IF; + IF ('IFC2X3.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN + IF ('IFC2X3.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN + RETURN(TRUE); + END_IF; + IF ('IFC2X3.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN + IF (RelPlacement.RelativePlacement.Dim = 3) THEN + RETURN(TRUE); + ELSE + RETURN(FALSE); + END_IF; + END_IF; + END_IF; + ELSE + RETURN(TRUE); + END_IF; + RETURN(?); +END_FUNCTION; + +FUNCTION IfcCorrectObjectAssignment + (Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition) + : LOGICAL; + + LOCAL + Count : INTEGER := 0; + END_LOCAL; + + IF NOT(EXISTS(Constraint)) THEN + RETURN(TRUE); + END_IF; + + CASE Constraint OF + IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE); + IfcObjectTypeEnum.PRODUCT : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.PROCESS : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROCESS' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.CONTROL : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCCONTROL' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.RESOURCE : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCRESOURCE' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.ACTOR : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCACTOR' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.GROUP : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCGROUP' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.PROJECT : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROJECT' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + OTHERWISE : RETURN(?); + END_CASE; +END_FUNCTION; + +FUNCTION IfcCorrectUnitAssignment + (Units : SET [1:?] OF IfcUnit) + : LOGICAL; + + LOCAL + NamedUnitNumber : INTEGER := 0; + DerivedUnitNumber : INTEGER := 0; + MonetaryUnitNumber : INTEGER := 0; + NamedUnitNames : SET OF IfcUnitEnum := []; + DerivedUnitNames : SET OF IfcDerivedUnitEnum := []; + END_LOCAL; + + NamedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp.UnitType = IfcUnitEnum.USERDEFINED))); + DerivedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp.UnitType = IfcDerivedUnitEnum.USERDEFINED))); + MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units | 'IFC2X3.IFCMONETARYUNIT' IN TYPEOF(temp))); + + REPEAT i := 1 TO SIZEOF(Units); + IF (('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i].UnitType = IfcUnitEnum.USERDEFINED)) THEN + NamedUnitNames := NamedUnitNames + Units[i].UnitType; + END_IF; + IF (('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i].UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN + DerivedUnitNames := DerivedUnitNames + Units[i].UnitType; + END_IF; + END_REPEAT; + + RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1)); +END_FUNCTION; + +FUNCTION IfcCrossProduct + (Arg1, Arg2 : IfcDirection) + : IfcVector; + LOCAL + Mag : REAL; + Res : IfcDirection; + V1,V2 : LIST[3:3] OF REAL; + Result : IfcVector; + END_LOCAL; + + IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN + RETURN(?); + ELSE + BEGIN + V1 := IfcNormalise(Arg1).DirectionRatios; + V2 := IfcNormalise(Arg2).DirectionRatios; + Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () + || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]); + Mag := 0.0; + REPEAT i := 1 TO 3; + Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i]; + END_REPEAT; + IF (Mag > 0.0) THEN + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag)); + ELSE + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0); + END_IF; + RETURN(Result); + END; + END_IF; +END_FUNCTION; + +FUNCTION IfcCurveDim + (Curve : IfcCurve) + : IfcDimensionCount; + + IF ('IFC2X3.IFCLINE' IN TYPEOF(Curve)) + THEN RETURN(Curve.Pnt.Dim); + END_IF; + IF ('IFC2X3.IFCCONIC' IN TYPEOF(Curve)) + THEN RETURN(Curve.Position.Dim); + END_IF; + IF ('IFC2X3.IFCPOLYLINE' IN TYPEOF(Curve)) + THEN RETURN(Curve.Points[1].Dim); + END_IF; + IF ('IFC2X3.IFCTRIMMEDCURVE' IN TYPEOF(Curve)) + THEN RETURN(IfcCurveDim(Curve.BasisCurve)); + END_IF; + IF ('IFC2X3.IFCCOMPOSITECURVE' IN TYPEOF(Curve)) + THEN RETURN(Curve.Segments[1].Dim); + END_IF; + IF ('IFC2X3.IFCBSPLINECURVE' IN TYPEOF(Curve)) + THEN RETURN(Curve.ControlPointsList[1].Dim); + END_IF; + IF ('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(Curve)) + THEN RETURN(2); + END_IF; + IF ('IFC2X3.IFCOFFSETCURVE3D' IN TYPEOF(Curve)) + THEN RETURN(3); + END_IF; + RETURN (?); +END_FUNCTION; + +FUNCTION IfcCurveWeightsPositive + (B: IfcRationalBezierCurve) + : BOOLEAN; + LOCAL + Result : BOOLEAN := TRUE; + END_LOCAL; + + REPEAT i := 0 TO B.UpperIndexOnControlPoints; + IF B.Weights[i] <= 0.0 THEN + Result := FALSE; + RETURN(Result); + END_IF; + END_REPEAT; + RETURN(Result); +END_FUNCTION; + +FUNCTION IfcDeriveDimensionalExponents + (x : IfcUnit) + : IfcDimensionalExponents; + LOCAL + Result : IfcDimensionalExponents := + IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0); + END_LOCAL; + IF 'IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(x) THEN + REPEAT i := LOINDEX(x.Elements) TO HIINDEX(x.Elements); + Result.LengthExponent := Result.LengthExponent + + (x.Elements[i].Exponent * + x.Elements[i].Unit.Dimensions.LengthExponent); + Result.MassExponent := Result.MassExponent + + (x.Elements[i].Exponent * + x.Elements[i].Unit.Dimensions.MassExponent); + Result.TimeExponent := Result.TimeExponent + + (x.Elements[i].Exponent * + x.Elements[i].Unit.Dimensions.TimeExponent); + Result.ElectricCurrentExponent := Result.ElectricCurrentExponent + + (x.Elements[i].Exponent * + x.Elements[i].Unit.Dimensions.ElectricCurrentExponent); + Result.ThermodynamicTemperatureExponent := + Result.ThermodynamicTemperatureExponent + + (x.Elements[i].Exponent * + x.Elements[i].Unit.Dimensions.ThermodynamicTemperatureExponent); + Result.AmountOfSubstanceExponent := + Result.AmountOfSubstanceExponent + (x.Elements[i].Exponent * + x.Elements[i].Unit.Dimensions.AmountOfSubstanceExponent); + Result.LuminousIntensityExponent := + Result.LuminousIntensityExponent + (x.Elements[i].Exponent * + x.Elements[i].Unit.Dimensions.LuminousIntensityExponent); + END_REPEAT; + ELSE + Result := x.Dimensions; + END_IF; + RETURN (Result); +END_FUNCTION; + +FUNCTION IfcDimensionsForSiUnit + (n : IfcSiUnitName ) + : IfcDimensionalExponents; + CASE n OF + METRE : RETURN (IfcDimensionalExponents + (1, 0, 0, 0, 0, 0, 0)); + SQUARE_METRE : RETURN (IfcDimensionalExponents + (2, 0, 0, 0, 0, 0, 0)); + CUBIC_METRE : RETURN (IfcDimensionalExponents + (3, 0, 0, 0, 0, 0, 0)); + GRAM : RETURN (IfcDimensionalExponents + (0, 1, 0, 0, 0, 0, 0)); + SECOND : RETURN (IfcDimensionalExponents + (0, 0, 1, 0, 0, 0, 0)); + AMPERE : RETURN (IfcDimensionalExponents + (0, 0, 0, 1, 0, 0, 0)); + KELVIN : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 1, 0, 0)); + MOLE : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 0, 1, 0)); + CANDELA : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 0, 0, 1)); + RADIAN : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 0, 0, 0)); + STERADIAN : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 0, 0, 0)); + HERTZ : RETURN (IfcDimensionalExponents + (0, 0, -1, 0, 0, 0, 0)); + NEWTON : RETURN (IfcDimensionalExponents + (1, 1, -2, 0, 0, 0, 0)); + PASCAL : RETURN (IfcDimensionalExponents + (-1, 1, -2, 0, 0, 0, 0)); + JOULE : RETURN (IfcDimensionalExponents + (2, 1, -2, 0, 0, 0, 0)); + WATT : RETURN (IfcDimensionalExponents + (2, 1, -3, 0, 0, 0, 0)); + COULOMB : RETURN (IfcDimensionalExponents + (0, 0, 1, 1, 0, 0, 0)); + VOLT : RETURN (IfcDimensionalExponents + (2, 1, -3, -1, 0, 0, 0)); + FARAD : RETURN (IfcDimensionalExponents + (-2, -1, 4, 1, 0, 0, 0)); + OHM : RETURN (IfcDimensionalExponents + (2, 1, -3, -2, 0, 0, 0)); + SIEMENS : RETURN (IfcDimensionalExponents + (-2, -1, 3, 2, 0, 0, 0)); + WEBER : RETURN (IfcDimensionalExponents + (2, 1, -2, -1, 0, 0, 0)); + TESLA : RETURN (IfcDimensionalExponents + (0, 1, -2, -1, 0, 0, 0)); + HENRY : RETURN (IfcDimensionalExponents + (2, 1, -2, -2, 0, 0, 0)); + DEGREE_CELSIUS : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 1, 0, 0)); + LUMEN : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 0, 0, 1)); + LUX : RETURN (IfcDimensionalExponents + (-2, 0, 0, 0, 0, 0, 1)); + BECQUEREL : RETURN (IfcDimensionalExponents + (0, 0, -1, 0, 0, 0, 0)); + GRAY : RETURN (IfcDimensionalExponents + (2, 0, -2, 0, 0, 0, 0)); + SIEVERT : RETURN (IfcDimensionalExponents + (2, 0, -2, 0, 0, 0, 0)); + OTHERWISE : RETURN (IfcDimensionalExponents + (0, 0, 0, 0, 0, 0, 0)); + END_CASE; +END_FUNCTION; + +FUNCTION IfcDotProduct + (Arg1, Arg2 : IfcDirection) + : REAL; + LOCAL + Scalar : REAL; + Vec1, Vec2 : IfcDirection; + Ndim : INTEGER; + END_LOCAL; + + IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN + Scalar := ?; + ELSE + IF (Arg1.Dim <> Arg2.Dim) THEN + Scalar := ?; + ELSE + BEGIN + Vec1 := IfcNormalise(Arg1); + Vec2 := IfcNormalise(Arg2); + Ndim := Arg1.Dim; + Scalar := 0.0; + REPEAT i := 1 TO Ndim; + Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i]; + END_REPEAT; + END; + END_IF; + END_IF; + RETURN (Scalar); +END_FUNCTION; + +FUNCTION IfcFirstProjAxis + (ZAxis, Arg : IfcDirection) + : IfcDirection; + LOCAL + XAxis : IfcDirection; + V : IfcDirection; + Z : IfcDirection; + XVec : IfcVector; + END_LOCAL; + + IF (NOT EXISTS(ZAxis)) THEN + RETURN (?) ; + ELSE + Z := IfcNormalise(ZAxis); + IF NOT EXISTS(Arg) THEN + IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN + V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]); + ELSE + V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]); + END_IF; + ELSE + IF (Arg.Dim <> 3) THEN + RETURN (?) ; + END_IF; + IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN + RETURN (?); + ELSE + V := IfcNormalise(Arg); + END_IF; + END_IF; + XVec := IfcScalarTimesVector(IfcDotProduct(V, Z), Z); + XAxis := IfcVectorDifference(V, XVec).Orientation; + XAxis := IfcNormalise(XAxis); + END_IF; + RETURN(XAxis); +END_FUNCTION; + +FUNCTION IfcLeapYear + (Year : IfcYearNumber) + : BOOLEAN; + + IF ((((Year MOD 4) = 0) AND ((Year MOD 100) <> 0)) OR + ((Year MOD 400) = 0)) THEN + RETURN(TRUE); + ELSE + RETURN(FALSE); + END_IF; +END_FUNCTION; + +FUNCTION IfcListToArray + (Lis : LIST [0:?] OF GENERIC : T; + Low,U : INTEGER) + : ARRAY OF GENERIC : T; + LOCAL + N : INTEGER; + Res : ARRAY [Low:U] OF GENERIC : T; + END_LOCAL; + + N := SIZEOF(Lis); + IF (N <> (U-Low +1)) THEN + RETURN(?); + ELSE + Res := [Lis[1] : N]; + REPEAT i := 2 TO N; + Res[Low+i-1] := Lis[i]; + END_REPEAT; + RETURN(Res); + END_IF; +END_FUNCTION; + +FUNCTION IfcLoopHeadToTail + (ALoop : IfcEdgeLoop) + : LOGICAL; + LOCAL + N : INTEGER; + P : LOGICAL := TRUE; + END_LOCAL; + + N := SIZEOF (ALoop.EdgeList); + REPEAT i := 2 TO N; + P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=: + ALoop.EdgeList[i].EdgeStart); + END_REPEAT; + RETURN (P); +END_FUNCTION; + +FUNCTION IfcMlsTotalThickness + (LayerSet : IfcMaterialLayerSet) + : IfcLengthMeasure; + LOCAL + Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness; + END_LOCAL; + + IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN + REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers); + Max := Max + LayerSet.MaterialLayers[i].LayerThickness; + END_REPEAT; + END_IF; + RETURN (Max); +END_FUNCTION; + +FUNCTION IfcNoOfLayers + (Element : IfcElement ) + : INTEGER; + + LOCAL + Association : BAG OF IfcRelAssociates := []; + MaterialAssociation : SET OF IfcRelAssociatesMaterial := []; + END_LOCAL; + + Association := USEDIN(Element, 'IFC2X3.IFCRELASSOCIATES.RELATEDOBJECTS'); + + IF SIZEOF (Association) > 0 THEN + REPEAT i := 1 TO HIINDEX(Association); + IF ('IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(Association[i])) THEN + MaterialAssociation := MaterialAssociation + Association[i]; + END_IF; + END_REPEAT; + END_IF; + + IF (SIZEOF(MaterialAssociation) <> 1) THEN + RETURN (?); + ELSE + IF 'IFC2X3.IFCMATERIAL' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN + RETURN (1); + END_IF; + IF 'IFC2X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN + RETURN (SIZEOF(MaterialAssociation[1].RelatingMaterial.ForLayerSet.MaterialLayers)); + END_IF; + IF 'IFC2X3.IFCMATERIALLIST' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN + RETURN (?); + END_IF; + END_IF; + + RETURN (?); +END_FUNCTION; + +FUNCTION IfcNormalise + (Arg : IfcVectorOrDirection) + : IfcVectorOrDirection; + LOCAL + Ndim : INTEGER; + V : IfcDirection + := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); + Vec : IfcVector + := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector ( + IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.); + Mag : REAL; + Result : IfcVectorOrDirection + := V; + END_LOCAL; + + IF NOT EXISTS (Arg) THEN + RETURN (?); + ELSE + Ndim := Arg.Dim; + IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg) THEN + BEGIN + V.DirectionRatios := Arg.Orientation.DirectionRatios; + Vec.Magnitude := Arg.Magnitude; + Vec.Orientation := V; + IF Arg.Magnitude = 0.0 THEN + RETURN(?); + ELSE + Vec.Magnitude := 1.0; + END_IF; + END; + ELSE + V.DirectionRatios := Arg.DirectionRatios; + END_IF; + Mag := 0.0; + REPEAT i := 1 TO Ndim; + Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i]; + END_REPEAT; + IF Mag > 0.0 THEN + Mag := SQRT(Mag); + REPEAT i := 1 TO Ndim; + V.DirectionRatios[i] := V.DirectionRatios[i]/Mag; + END_REPEAT; + IF 'IFC2X3.IFCVECTOR' IN TYPEOF(arg) THEN + Vec.Orientation := V; + Result := Vec; + ELSE + Result := V; + END_IF; + ELSE + RETURN(?); + END_IF; + END_IF; + RETURN (Result); +END_FUNCTION; + +FUNCTION IfcOrthogonalComplement + (Vec : IfcDirection) + : IfcDirection; + LOCAL + Result : IfcDirection ; + END_LOCAL; + IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN + RETURN(?); + ELSE + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]); + RETURN(Result); + END_IF; +END_FUNCTION; + +FUNCTION IfcPathHeadToTail + (APath : IfcPath) + : LOGICAL; + LOCAL + N : INTEGER := 0; + P : LOGICAL := UNKNOWN; + END_LOCAL; + N := SIZEOF (APath.EdgeList); + REPEAT i := 2 TO N; + P := P AND (APath.EdgeList[i-1].EdgeEnd :=: + APath.EdgeList[i].EdgeStart); + END_REPEAT; + RETURN (P); +END_FUNCTION; + +FUNCTION IfcSameAxis2Placement + (ap1, ap2 : IfcAxis2Placement; Epsilon : REAL) + : LOGICAL; + + RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND + IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND + IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon)); +END_FUNCTION; + +FUNCTION IfcSameCartesianPoint + (cp1, cp2 : IfcCartesianPoint; Epsilon : REAL) + : LOGICAL; + + LOCAL + cp1x : REAL := cp1.Coordinates[1]; + cp1y : REAL := cp1.Coordinates[2]; + cp1z : REAL := 0; + cp2x : REAL := cp2.Coordinates[1]; + cp2y : REAL := cp2.Coordinates[2]; + cp2z : REAL := 0; + END_LOCAL; + + IF (SIZEOF(cp1.Coordinates) > 2) THEN + cp1z := cp1.Coordinates[3]; + END_IF; + + IF (SIZEOF(cp2.Coordinates) > 2) THEN + cp2z := cp2.Coordinates[3]; + END_IF; + + RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND + IfcSameValue(cp1y,cp2y,Epsilon) AND + IfcSameValue(cp1z,cp2z,Epsilon)); +END_FUNCTION; + +FUNCTION IfcSameDirection + (dir1, dir2 : IfcDirection; Epsilon : REAL) + : LOGICAL; + LOCAL + dir1x : REAL := dir1.DirectionRatios[1]; + dir1y : REAL := dir1.DirectionRatios[2]; + dir1z : REAL := 0; + dir2x : REAL := dir2.DirectionRatios[1]; + dir2y : REAL := dir2.DirectionRatios[2]; + dir2z : REAL := 0; + END_LOCAL; + + IF (SIZEOF(dir1.DirectionRatios) > 2) THEN + dir1z := dir1.DirectionRatios[3]; + END_IF; + + IF (SIZEOF(dir2.DirectionRatios) > 2) THEN + dir2z := dir2.DirectionRatios[3]; + END_IF; + + RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND + IfcSameValue(dir1y,dir2y,Epsilon) AND + IfcSameValue(dir1z,dir2z,Epsilon)); +END_FUNCTION; + +FUNCTION IfcSameValidPrecision + (Epsilon1, Epsilon2 : REAL) + : LOGICAL; + LOCAL + ValidEps1, ValidEps2 : REAL; + DefaultEps : REAL := 0.000001; + DerivationOfEps : REAL := 1.001; + UpperEps : REAL := 1.0; + END_LOCAL; + + ValidEps1 := NVL(Epsilon1, DefaultEps); + ValidEps2 := NVL(Epsilon2, DefaultEps); + RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND + (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps)); +END_FUNCTION; + +FUNCTION IfcSameValue + (Value1, Value2 : REAL; Epsilon : REAL) + : LOGICAL; + LOCAL + ValidEps : REAL; + DefaultEps : REAL := 0.000001; + END_LOCAL; + + ValidEps := NVL(Epsilon, DefaultEps); + RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps)); +END_FUNCTION; + +FUNCTION IfcScalarTimesVector + (Scalar : REAL; Vec : IfcVectorOrDirection) + : IfcVector; + LOCAL + V : IfcDirection; + Mag : REAL; + Result : IfcVector; + END_LOCAL; + + IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN + RETURN (?) ; + ELSE + IF 'IFC2X3.IFCVECTOR' IN TYPEOF (Vec) THEN + V := Vec.Orientation; + Mag := Scalar * Vec.Magnitude; + ELSE + V := Vec; + Mag := Scalar; + END_IF; + IF (Mag < 0.0 ) THEN + REPEAT i := 1 TO SIZEOF(V.DirectionRatios); + V.DirectionRatios[i] := -V.DirectionRatios[i]; + END_REPEAT; + Mag := -Mag; + END_IF; + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag); + END_IF; + RETURN (Result); +END_FUNCTION; + +FUNCTION IfcSecondProjAxis + (ZAxis, XAxis, Arg: IfcDirection) + : IfcDirection; + LOCAL + YAxis : IfcVector; + V : IfcDirection; + Temp : IfcVector; + END_LOCAL; + + IF NOT EXISTS(Arg) THEN + V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]); + ELSE + V := Arg; + END_IF; + Temp := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis); + YAxis := IfcVectorDifference(V, Temp); + Temp := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis); + YAxis := IfcVectorDifference(YAxis, Temp); + YAxis := IfcNormalise(YAxis); + RETURN(YAxis.Orientation); +END_FUNCTION; + +FUNCTION IfcShapeRepresentationTypes + (RepType : IfcLabel; Items : SET OF IfcRepresentationItem) + : LOGICAL; + + LOCAL + Count : INTEGER := 0; + END_LOCAL; + + CASE RepType OF + 'Curve2D' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCCURVE' IN TYPEOF(temp)) + AND (temp.Dim = 2))); + END; + 'Annotation2D' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ( + SIZEOF(TYPEOF(temp) * [ + 'IFC2X3.IFCPOINT', + 'IFC2X3.IFCCURVE', + 'IFC2X3.IFCGEOMETRICCURVESET', + 'IFC2X3.IFCANNOTATIONFILLAREA', + 'IFC2X3.IFCDEFINEDSYMBOL', + 'IFC2X3.IFCTEXTLITERAL', + 'IFC2X3.IFCDRAUGHTINGCALLOUT']) = 1) + )); + END; + 'GeometricSet' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp)) + OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp)) + OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp)) + OR ('IFC2X3.IFCSURFACE' IN TYPEOF(temp)))); + END; + 'GeometricCurveSet' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICCURVESET' IN TYPEOF(temp)) + OR ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp)) + OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp)) + OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp)))); + REPEAT i:=1 TO HIINDEX(Items); + IF ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(Items[i])) + THEN + IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC2X3.IFCSURFACE' IN TYPEOF(temp))) > 0) + THEN + Count := Count - 1; + END_IF; + END_IF; + END_REPEAT; + END; + 'SurfaceModel' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ + 'IFC2X3.IFCSHELLBASEDSURFACEMODEL', + 'IFC2X3.IFCFACEBASEDSURFACEMODEL', + 'IFC2X3.IFCFACETEDBREP', + 'IFC2X3.IFCFACETEDBREPWITHVOIDS'] * TYPEOF(temp)) >= 1 + )); + END; + 'SolidModel' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSOLIDMODEL' IN TYPEOF(temp)))); + END; + 'SweptSolid' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(temp)))); + END; + 'CSG' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANRESULT' IN TYPEOF(temp)))); + END; + 'Clipping' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp)))); + END; + 'AdvancedSweptSolid' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSURFACECURVESWEPTAREASOLID' IN TYPEOF(temp)) + OR ('IFC2X3.IFCSWEPTDISKSOLID' IN TYPEOF(temp)))); + END; + 'Brep' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCFACETEDBREP' IN TYPEOF(temp)) + OR ('IFC2X3.IFCFACETEDBREPWITHVOIDS' IN TYPEOF(temp)))); + END; + 'BoundingBox' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOUNDINGBOX' IN TYPEOF(temp)))); + IF (SIZEOF(Items) > 1) + THEN + Count := 0; + END_IF; + END; + 'SectionedSpine' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSECTIONEDSPINE' IN TYPEOF(temp)))); + END; + 'MappedRepresentation' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCMAPPEDITEM' IN TYPEOF(temp)))); + END; + OTHERWISE : RETURN(?); + END_CASE; + RETURN (Count = SIZEOF(Items)); +END_FUNCTION; + +FUNCTION IfcTopologyRepresentationTypes + (RepType : IfcLabel; Items : SET OF IfcRepresentationItem) + : LOGICAL; + + LOCAL + Count : INTEGER := 0; + END_LOCAL; + + CASE RepType OF + 'Vertex' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC2X3.IFCVERTEX' IN TYPEOF(temp)))); + END; + 'Edge' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC2X3.IFCEDGE' IN TYPEOF(temp)))); + END; + 'Path' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC2X3.IFCPATH' IN TYPEOF(temp)))); + END; + 'Face' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC2X3.IFCFACE' IN TYPEOF(temp)))); + END; + 'Shell' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC2X3.IFCOPENSHELL' IN TYPEOF(temp)) + OR ('IFC2X3.IFCCLOSEDSHELL' IN TYPEOF(temp)))); + END; + 'Undefined': RETURN(TRUE); + OTHERWISE : RETURN(?); + END_CASE; + RETURN (Count = SIZEOF(Items)); +END_FUNCTION; + +FUNCTION IfcUniquePropertyName + (Properties : SET [1:?] OF IfcProperty) + : LOGICAL; + + LOCAL + Names : SET OF IfcIdentifier := []; + END_LOCAL; + + REPEAT i:=1 TO HIINDEX(Properties); + Names := Names + Properties[i].Name; + END_REPEAT; + RETURN (SIZEOF(Names) = SIZEOF(Properties)); +END_FUNCTION; + +FUNCTION IfcValidCalendarDate + (Date : IfcCalendarDate) + : LOGICAL; + IF NOT ({1 <= Date.DayComponent <= 31}) THEN + RETURN(FALSE); + END_IF; + CASE Date.MonthComponent OF + 4 : RETURN({ 1<= Date.DayComponent <= 30}); + 6 : RETURN({ 1<= Date.DayComponent <= 30}); + 9 : RETURN({ 1<= Date.DayComponent <= 30}); + 11 : RETURN({ 1<= Date.DayComponent <= 30}); + 2 : + BEGIN + IF (IfcLeapYear(Date.YearComponent)) THEN + RETURN({ 1<= Date.DayComponent <= 29}); + ELSE + RETURN({ 1<= Date.DayComponent <= 28}); + END_IF; + END; + OTHERWISE : RETURN(TRUE); + END_CASE; +END_FUNCTION; + +FUNCTION IfcValidTime + (Time: IfcLocalTime) + : BOOLEAN; + IF EXISTS (Time.SecondComponent) THEN + RETURN (EXISTS (Time.MinuteComponent)); + ELSE + RETURN (TRUE); + END_IF; +END_FUNCTION; + +FUNCTION IfcVectorDifference + (Arg1, Arg2 : IfcVectorOrDirection) + : IfcVector; + LOCAL + Result : IfcVector; + Res, Vec1, Vec2 : IfcDirection; + Mag, Mag1, Mag2 : REAL; + Ndim : INTEGER; + END_LOCAL; + + IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN + RETURN (?) ; + ELSE + BEGIN + IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN + Mag1 := Arg1.Magnitude; + Vec1 := Arg1.Orientation; + ELSE + Mag1 := 1.0; + Vec1 := Arg1; + END_IF; + IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN + Mag2 := Arg2.Magnitude; + Vec2 := Arg2.Orientation; + ELSE + Mag2 := 1.0; + Vec2 := Arg2; + END_IF; + Vec1 := IfcNormalise (Vec1); + Vec2 := IfcNormalise (Vec2); + Ndim := SIZEOF(Vec1.DirectionRatios); + Mag := 0.0; + Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]); + + REPEAT i := 1 TO Ndim; + Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i]; + Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]); + END_REPEAT; + + IF (Mag > 0.0 ) THEN + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag)); + ELSE + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0); + END_IF; + END; + END_IF; + RETURN (Result); +END_FUNCTION; + +FUNCTION IfcVectorSum + (Arg1, Arg2 : IfcVectorOrDirection) + : IfcVector; + LOCAL + Result : IfcVector; + Res, Vec1, Vec2 : IfcDirection; + Mag, Mag1, Mag2 : REAL; + Ndim : INTEGER; + END_LOCAL; + + IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN + RETURN (?) ; + ELSE + BEGIN + IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN + Mag1 := Arg1.Magnitude; + Vec1 := Arg1.Orientation; + ELSE + Mag1 := 1.0; + Vec1 := Arg1; + END_IF; + IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN + Mag2 := Arg2.Magnitude; + Vec2 := Arg2.Orientation; + ELSE + Mag2 := 1.0; + Vec2 := Arg2; + END_IF; + Vec1 := IfcNormalise (Vec1); + Vec2 := IfcNormalise (Vec2); + Ndim := SIZEOF(Vec1.DirectionRatios); + Mag := 0.0; + Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]); + + REPEAT i := 1 TO Ndim; + Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i]; + Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]); + END_REPEAT; + + IF (Mag > 0.0 ) THEN + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag)); + ELSE + Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0); + END_IF; + END; + END_IF; + RETURN (Result); +END_FUNCTION; + +RULE IfcRepresentationContextSameWCS FOR + (IfcGeometricRepresentationContext); + LOCAL + IsDifferent : LOGICAL := FALSE; + END_LOCAL; + IF (SIZEOF(IfcGeometricRepresentationContext) > 1) + THEN + REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext); + IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem) + THEN + IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision, + IfcGeometricRepresentationContext[i].Precision))) + OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem, + IfcGeometricRepresentationContext[i].WorldCoordinateSystem, + IfcGeometricRepresentationContext[1].Precision))); + IF (IsDifferent = TRUE) THEN + ESCAPE; + END_IF; + END_IF; + END_REPEAT; + END_IF; + WHERE + WR1 : IsDifferent = FALSE; +END_RULE; + +RULE IfcSingleProjectInstance FOR + (IfcProject); + WHERE + WR1 : SIZEOF(IfcProject) <= 1; +END_RULE; + +END_SCHEMA; From 55ca72e1c8bd08fd69f028edc735fe1565c1dc59 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 13 Apr 2015 21:38:36 +0200 Subject: [PATCH 159/166] Make order of classes in generated IFC parsing code deterministic. --- scripts/IFCImporter/ExpressReader.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/IFCImporter/ExpressReader.py b/scripts/IFCImporter/ExpressReader.py index 4318347cf..d3dd980c7 100644 --- a/scripts/IFCImporter/ExpressReader.py +++ b/scripts/IFCImporter/ExpressReader.py @@ -44,6 +44,7 @@ entities and data types contained""" import sys, os, re +from collections import OrderedDict re_match_entity = re.compile(r""" ENTITY\s+(\w+)\s* # 'ENTITY foo' @@ -68,8 +69,8 @@ re_match_field = re.compile(r""" class Schema: def __init__(self): - self.entities = {} - self.types = {} + self.entities = OrderedDict() + self.types = OrderedDict() class Entity: def __init__(self,name,parent,members): From b3a3558da3e26bcd4f5690a723cffbe87673707d Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 13 Apr 2015 21:42:50 +0200 Subject: [PATCH 160/166] Re-gen IFC parsing code with alphabetic order of types. This hopefully gives a stable diff base for the future. --- code/IFCReaderGen.cpp | 7692 ++++++++++++++++++++--------------------- code/IFCReaderGen.h | 7582 ++++++++++++++++++++-------------------- 2 files changed, 7637 insertions(+), 7637 deletions(-) diff --git a/code/IFCReaderGen.cpp b/code/IFCReaderGen.cpp index 5e551eec2..411ee1fc3 100644 --- a/code/IFCReaderGen.cpp +++ b/code/IFCReaderGen.cpp @@ -52,986 +52,986 @@ namespace { typedef EXPRESS::ConversionSchema::SchemaEntry SchemaEntry; const SchemaEntry schema_raw[] = { - SchemaEntry("ifcsiprefix",NULL ) -, SchemaEntry("ifccolour",NULL ) -, SchemaEntry("ifcevaporativecoolertypeenum",NULL ) -, SchemaEntry("ifcmetricvalueselect",NULL ) -, SchemaEntry("ifccurtainwalltypeenum",NULL ) -, SchemaEntry("ifcvolumetricflowratemeasure",NULL ) -, SchemaEntry("ifcphmeasure",NULL ) -, SchemaEntry("ifctimestamp",NULL ) -, SchemaEntry("ifcsoundpressuremeasure",NULL ) -, SchemaEntry("ifcarithmeticoperatorenum",NULL ) -, SchemaEntry("ifcoutlettypeenum",NULL ) -, SchemaEntry("ifclamptypeenum",NULL ) -, SchemaEntry("ifcobjectreferenceselect",NULL ) -, SchemaEntry("ifcdatetimeselect",NULL ) -, SchemaEntry("ifcelectricgeneratortypeenum",NULL ) -, SchemaEntry("ifcmoisturediffusivitymeasure",NULL ) -, SchemaEntry("ifccompoundplaneanglemeasure",NULL ) -, SchemaEntry("ifcderivedunitenum",NULL ) -, SchemaEntry("ifcrotationalstiffnessmeasure",NULL ) -, SchemaEntry("ifcpipefittingtypeenum",NULL ) -, SchemaEntry("ifcshearmodulusmeasure",NULL ) -, SchemaEntry("ifccontextdependentmeasure",NULL ) -, SchemaEntry("ifclightfixturetypeenum",NULL ) -, SchemaEntry("ifcresourceconsumptionenum",NULL ) -, SchemaEntry("ifcdistributionchamberelementtypeenum",NULL ) -, SchemaEntry("ifcplaneanglemeasure",NULL ) -, SchemaEntry("ifcslabtypeenum",NULL ) -, SchemaEntry("ifccharacterstyleselect",NULL ) -, SchemaEntry("ifcdimensionextentusage",NULL ) -, SchemaEntry("ifcdynamicviscositymeasure",NULL ) -, SchemaEntry("ifcpropertysourceenum",NULL ) -, SchemaEntry("ifcconstraintenum",NULL ) -, SchemaEntry("ifclayersetdirectionenum",NULL ) -, SchemaEntry("ifcfontvariant",NULL ) -, SchemaEntry("ifcmodulusofelasticitymeasure",NULL ) -, SchemaEntry("ifcdoorpanelpositionenum",NULL ) -, SchemaEntry("ifcwindowstyleconstructionenum",NULL ) -, SchemaEntry("ifcamountofsubstancemeasure",NULL ) -, SchemaEntry("ifccurvaturemeasure",NULL ) -, SchemaEntry("ifccablecarrierfittingtypeenum",NULL ) -, SchemaEntry("ifcminuteinhour",NULL ) -, SchemaEntry("ifcpressuremeasure",NULL ) -, SchemaEntry("ifcelectricconductancemeasure",NULL ) -, SchemaEntry("ifcisothermalmoisturecapacitymeasure",NULL ) -, SchemaEntry("ifcfantypeenum",NULL ) -, SchemaEntry("ifccurveoredgecurve",NULL ) -, SchemaEntry("ifcpipesegmenttypeenum",NULL ) -, SchemaEntry("ifcevaporatortypeenum",NULL ) -, SchemaEntry("ifcelectriccapacitancemeasure",NULL ) -, SchemaEntry("ifcelementassemblytypeenum",NULL ) -, SchemaEntry("ifcelectriccurrentmeasure",NULL ) -, SchemaEntry("ifcthermaladmittancemeasure",NULL ) -, SchemaEntry("ifclibraryselect",NULL ) -, SchemaEntry("ifcsanitaryterminaltypeenum",NULL ) -, SchemaEntry("ifcvalue",NULL ) -, SchemaEntry("ifcroleenum",NULL ) -, SchemaEntry("ifcmodulusofrotationalsubgradereactionmeasure",NULL ) -, SchemaEntry("ifcwindowstyleoperationenum",NULL ) -, SchemaEntry("ifcdayinmonthnumber",NULL ) -, SchemaEntry("ifcdirectionsenseenum",NULL ) -, SchemaEntry("ifcmotorconnectiontypeenum",NULL ) -, SchemaEntry("ifcmassdensitymeasure",NULL ) -, SchemaEntry("ifcspacetypeenum",NULL ) -, SchemaEntry("ifctextalignment",NULL ) -, SchemaEntry("ifcabsorbeddosemeasure",NULL ) -, SchemaEntry("ifcobjectiveenum",NULL ) -, SchemaEntry("ifcsoundscaleenum",NULL ) -, SchemaEntry("ifcilluminancemeasure",NULL ) -, SchemaEntry("ifcdoseequivalentmeasure",NULL ) -, SchemaEntry("ifcpowermeasure",NULL ) -, SchemaEntry("ifcelectricvoltagemeasure",NULL ) -, SchemaEntry("ifcfootingtypeenum",NULL ) -, SchemaEntry("ifcfontstyle",NULL ) -, SchemaEntry("ifcshell",NULL ) -, SchemaEntry("ifcpermeablecoveringoperationenum",NULL ) -, SchemaEntry("ifcwarpingmomentmeasure",NULL ) -, SchemaEntry("ifcsectionalareaintegralmeasure",NULL ) -, SchemaEntry("ifcmodulusofsubgradereactionmeasure",NULL ) -, SchemaEntry("ifcrotationalfrequencymeasure",NULL ) -, SchemaEntry("ifcfillareastyletileshapeselect",NULL ) -, SchemaEntry("ifcloadgrouptypeenum",NULL ) -, SchemaEntry("ifcsolidanglemeasure",NULL ) -, SchemaEntry("ifccolourorfactor",NULL ) -, SchemaEntry("ifchourinday",NULL ) -, SchemaEntry("ifclinearstiffnessmeasure",NULL ) -, SchemaEntry("ifctimemeasure",NULL ) -, SchemaEntry("ifcboxalignment",NULL ) -, SchemaEntry("ifcelectricflowstoragedevicetypeenum",NULL ) -, SchemaEntry("ifcorientationselect",NULL ) -, SchemaEntry("ifcsecondinminute",NULL ) -, SchemaEntry("ifcworkcontroltypeenum",NULL ) -, SchemaEntry("ifcheatfluxdensitymeasure",NULL ) -, SchemaEntry("ifcsizeselect",NULL ) -, SchemaEntry("ifcdimensioncount",NULL ) -, SchemaEntry("ifcvalvetypeenum",NULL ) -, SchemaEntry("ifctransportelementtypeenum",NULL ) -, SchemaEntry("ifcinductancemeasure",NULL ) -, SchemaEntry("ifcyearnumber",NULL ) -, SchemaEntry("ifcdoorstyleconstructionenum",NULL ) -, SchemaEntry("ifcthermalexpansioncoefficientmeasure",NULL ) -, SchemaEntry("ifccompressortypeenum",NULL ) -, SchemaEntry("ifcaxis2placement",NULL ) -, SchemaEntry("ifcswitchingdevicetypeenum",NULL ) -, SchemaEntry("ifcdocumentconfidentialityenum",NULL ) -, SchemaEntry("ifcgasterminaltypeenum",NULL ) -, SchemaEntry("ifcservicelifetypeenum",NULL ) -, SchemaEntry("ifcintegercountratemeasure",NULL ) -, SchemaEntry("ifcdocumentstatusenum",NULL ) -, SchemaEntry("ifcspaceheatertypeenum",NULL ) -, SchemaEntry("ifcwasteterminaltypeenum",NULL ) -, SchemaEntry("ifcairterminaltypeenum",NULL ) -, SchemaEntry("ifcprojectedortruelengthenum",NULL ) -, SchemaEntry("ifcductfittingtypeenum",NULL ) -, SchemaEntry("ifclabel",NULL ) -, SchemaEntry("ifctextfontselect",NULL ) -, SchemaEntry("ifcanalysistheorytypeenum",NULL ) -, SchemaEntry("ifcprojectorderrecordtypeenum",NULL ) -, SchemaEntry("ifcunit",NULL ) -, SchemaEntry("ifcwindowpanelpositionenum",NULL ) -, SchemaEntry("ifcsymbolstyleselect",NULL ) -, SchemaEntry("ifcwalltypeenum",NULL ) -, SchemaEntry("ifclightemissionsourceenum",NULL ) -, SchemaEntry("ifcmodulusoflinearsubgradereactionmeasure",NULL ) -, SchemaEntry("ifcspecularroughness",NULL ) -, SchemaEntry("ifctendontypeenum",NULL ) -, SchemaEntry("ifcelectricmotortypeenum",NULL ) -, SchemaEntry("ifccurvestylefontselect",NULL ) -, SchemaEntry("ifcplanarforcemeasure",NULL ) -, SchemaEntry("ifccoiltypeenum",NULL ) -, SchemaEntry("ifcsimplevalue",NULL ) -, SchemaEntry("ifclogicaloperatorenum",NULL ) -, SchemaEntry("ifctransformertypeenum",NULL ) -, SchemaEntry("ifcvaporpermeabilitymeasure",NULL ) -, SchemaEntry("ifcmassflowratemeasure",NULL ) -, SchemaEntry("ifcbooleanoperator",NULL ) -, SchemaEntry("ifcradioactivitymeasure",NULL ) -, SchemaEntry("ifcsurfaceside",NULL ) -, SchemaEntry("ifcribplatedirectionenum",NULL ) -, SchemaEntry("ifcgeometricsetselect",NULL ) -, SchemaEntry("ifcvolumemeasure",NULL ) -, SchemaEntry("ifcdoorpaneloperationenum",NULL ) -, SchemaEntry("ifcelectricheatertypeenum",NULL ) -, SchemaEntry("ifcmagneticfluxmeasure",NULL ) -, SchemaEntry("ifcthermaltransmittancemeasure",NULL ) -, SchemaEntry("ifcstructuralcurvetypeenum",NULL ) -, SchemaEntry("ifcmonetarymeasure",NULL ) -, SchemaEntry("ifcassemblyplaceenum",NULL ) -, SchemaEntry("ifcreinforcingbarsurfaceenum",NULL ) -, SchemaEntry("ifcpointorvertexpoint",NULL ) -, SchemaEntry("ifcspecificheatcapacitymeasure",NULL ) -, SchemaEntry("ifcchangeactionenum",NULL ) -, SchemaEntry("ifcelectricdistributionpointfunctionenum",NULL ) -, SchemaEntry("ifcbuildingelementproxytypeenum",NULL ) -, SchemaEntry("ifcsequenceenum",NULL ) -, SchemaEntry("ifcaheadorbehind",NULL ) -, SchemaEntry("ifcprojectordertypeenum",NULL ) -, SchemaEntry("ifctextstyleselect",NULL ) -, SchemaEntry("ifccooledbeamtypeenum",NULL ) -, SchemaEntry("ifcconnectiontypeenum",NULL ) -, SchemaEntry("ifcsensortypeenum",NULL ) -, SchemaEntry("ifctrimmingpreference",NULL ) -, SchemaEntry("ifcstructuralsurfacetypeenum",NULL ) -, SchemaEntry("ifccostscheduletypeenum",NULL ) -, SchemaEntry("ifcsoundpowermeasure",NULL ) -, SchemaEntry("ifcstairflighttypeenum",NULL ) -, SchemaEntry("ifcductsegmenttypeenum",NULL ) -, SchemaEntry("ifcservicelifefactortypeenum",NULL ) -, SchemaEntry("ifcbsplinecurveform",NULL ) -, SchemaEntry("ifcluminousintensitymeasure",NULL ) -, SchemaEntry("ifccoolingtowertypeenum",NULL ) -, SchemaEntry("ifcunitenum",NULL ) -, SchemaEntry("ifcpositiveplaneanglemeasure",NULL ) -, SchemaEntry("ifclightdistributiondatasourceselect",NULL ) -, SchemaEntry("ifckinematicviscositymeasure",NULL ) -, SchemaEntry("ifcdampertypeenum",NULL ) -, SchemaEntry("ifcvectorordirection",NULL ) -, SchemaEntry("ifcjunctionboxtypeenum",NULL ) -, SchemaEntry("ifcactorselect",NULL ) -, SchemaEntry("ifcelectricappliancetypeenum",NULL ) -, SchemaEntry("ifcthermodynamictemperaturemeasure",NULL ) -, SchemaEntry("ifcmomentofinertiameasure",NULL ) -, SchemaEntry("ifcmonthinyearnumber",NULL ) -, SchemaEntry("ifcstairtypeenum",NULL ) -, SchemaEntry("ifcprotectivedevicetypeenum",NULL ) -, SchemaEntry("ifctextdecoration",NULL ) -, SchemaEntry("ifcunitaryequipmenttypeenum",NULL ) -, SchemaEntry("ifcelementcompositionenum",NULL ) -, SchemaEntry("ifccurvefontorscaledcurvefontselect",NULL ) -, SchemaEntry("ifcdescriptivemeasure",NULL ) -, SchemaEntry("ifcprofiletypeenum",NULL ) -, SchemaEntry("ifcdoorstyleoperationenum",NULL ) -, SchemaEntry("ifctorquemeasure",NULL ) -, SchemaEntry("ifcdaylightsavinghour",NULL ) -, SchemaEntry("ifcrotationalmassmeasure",NULL ) -, SchemaEntry("ifcnullstyle",NULL ) -, SchemaEntry("ifcfiresuppressionterminaltypeenum",NULL ) -, SchemaEntry("ifcheatingvaluemeasure",NULL ) -, SchemaEntry("ifcrampflighttypeenum",NULL ) -, SchemaEntry("ifcspecularhighlightselect",NULL ) -, SchemaEntry("ifcthermalloadtypeenum",NULL ) -, SchemaEntry("ifcvibrationisolatortypeenum",NULL ) -, SchemaEntry("ifcfillstyleselect",NULL ) -, SchemaEntry("ifcobjecttypeenum",NULL ) -, SchemaEntry("ifchatchlinedistanceselect",NULL ) -, SchemaEntry("ifcpresentabletext",NULL ) -, SchemaEntry("ifcanalysismodeltypeenum",NULL ) -, SchemaEntry("ifcangularvelocitymeasure",NULL ) + SchemaEntry("ifcabsorbeddosemeasure",NULL ) , SchemaEntry("ifcaccelerationmeasure",NULL ) -, SchemaEntry("ifcthermalloadsourceenum",NULL ) -, SchemaEntry("ifcflowdirectionenum",NULL ) -, SchemaEntry("ifctanktypeenum",NULL ) -, SchemaEntry("ifcsurfacetextureenum",NULL ) -, SchemaEntry("ifctimeseriesdatatypeenum",NULL ) -, SchemaEntry("ifcphysicalorvirtualenum",NULL ) -, SchemaEntry("ifcdraughtingcalloutelement",NULL ) -, SchemaEntry("ifcdocumentselect",NULL ) -, SchemaEntry("ifcthermalresistancemeasure",NULL ) -, SchemaEntry("ifctemperaturegradientmeasure",NULL ) +, SchemaEntry("ifcamountofsubstancemeasure",NULL ) +, SchemaEntry("ifcangularvelocitymeasure",NULL ) +, SchemaEntry("ifcareameasure",NULL ) +, SchemaEntry("ifcboolean",NULL ) +, SchemaEntry("ifcboxalignment",NULL ) , SchemaEntry("ifccomplexnumber",NULL ) +, SchemaEntry("ifccompoundplaneanglemeasure",NULL ) +, SchemaEntry("ifccontextdependentmeasure",NULL ) +, SchemaEntry("ifccountmeasure",NULL ) +, SchemaEntry("ifccurvaturemeasure",NULL ) +, SchemaEntry("ifcdayinmonthnumber",NULL ) +, SchemaEntry("ifcdaylightsavinghour",NULL ) +, SchemaEntry("ifcdescriptivemeasure",NULL ) +, SchemaEntry("ifcdimensioncount",NULL ) +, SchemaEntry("ifcdoseequivalentmeasure",NULL ) +, SchemaEntry("ifcdynamicviscositymeasure",NULL ) +, SchemaEntry("ifcelectriccapacitancemeasure",NULL ) +, SchemaEntry("ifcelectricchargemeasure",NULL ) +, SchemaEntry("ifcelectricconductancemeasure",NULL ) +, SchemaEntry("ifcelectriccurrentmeasure",NULL ) +, SchemaEntry("ifcelectricresistancemeasure",NULL ) +, SchemaEntry("ifcelectricvoltagemeasure",NULL ) +, SchemaEntry("ifcenergymeasure",NULL ) +, SchemaEntry("ifcfontstyle",NULL ) +, SchemaEntry("ifcfontvariant",NULL ) +, SchemaEntry("ifcfontweight",NULL ) +, SchemaEntry("ifcforcemeasure",NULL ) +, SchemaEntry("ifcfrequencymeasure",NULL ) +, SchemaEntry("ifcgloballyuniqueid",NULL ) +, SchemaEntry("ifcheatfluxdensitymeasure",NULL ) +, SchemaEntry("ifcheatingvaluemeasure",NULL ) +, SchemaEntry("ifchourinday",NULL ) +, SchemaEntry("ifcidentifier",NULL ) +, SchemaEntry("ifcilluminancemeasure",NULL ) +, SchemaEntry("ifcinductancemeasure",NULL ) +, SchemaEntry("ifcinteger",NULL ) +, SchemaEntry("ifcintegercountratemeasure",NULL ) +, SchemaEntry("ifcionconcentrationmeasure",NULL ) +, SchemaEntry("ifcisothermalmoisturecapacitymeasure",NULL ) +, SchemaEntry("ifckinematicviscositymeasure",NULL ) +, SchemaEntry("ifclabel",NULL ) +, SchemaEntry("ifclengthmeasure",NULL ) +, SchemaEntry("ifclinearforcemeasure",NULL ) +, SchemaEntry("ifclinearmomentmeasure",NULL ) +, SchemaEntry("ifclinearstiffnessmeasure",NULL ) +, SchemaEntry("ifclinearvelocitymeasure",NULL ) +, SchemaEntry("ifclogical",NULL ) +, SchemaEntry("ifcluminousfluxmeasure",NULL ) +, SchemaEntry("ifcluminousintensitydistributionmeasure",NULL ) +, SchemaEntry("ifcluminousintensitymeasure",NULL ) +, SchemaEntry("ifcmagneticfluxdensitymeasure",NULL ) +, SchemaEntry("ifcmagneticfluxmeasure",NULL ) +, SchemaEntry("ifcmassdensitymeasure",NULL ) +, SchemaEntry("ifcmassflowratemeasure",NULL ) +, SchemaEntry("ifcmassmeasure",NULL ) +, SchemaEntry("ifcmassperlengthmeasure",NULL ) +, SchemaEntry("ifcminuteinhour",NULL ) +, SchemaEntry("ifcmodulusofelasticitymeasure",NULL ) +, SchemaEntry("ifcmodulusoflinearsubgradereactionmeasure",NULL ) +, SchemaEntry("ifcmodulusofrotationalsubgradereactionmeasure",NULL ) +, SchemaEntry("ifcmodulusofsubgradereactionmeasure",NULL ) +, SchemaEntry("ifcmoisturediffusivitymeasure",NULL ) +, SchemaEntry("ifcmolecularweightmeasure",NULL ) +, SchemaEntry("ifcmomentofinertiameasure",NULL ) +, SchemaEntry("ifcmonetarymeasure",NULL ) +, SchemaEntry("ifcmonthinyearnumber",NULL ) +, SchemaEntry("ifcnormalisedratiomeasure",NULL ) +, SchemaEntry("ifcnumericmeasure",NULL ) +, SchemaEntry("ifcphmeasure",NULL ) +, SchemaEntry("ifcparametervalue",NULL ) +, SchemaEntry("ifcplanarforcemeasure",NULL ) +, SchemaEntry("ifcplaneanglemeasure",NULL ) +, SchemaEntry("ifcpositivelengthmeasure",NULL ) +, SchemaEntry("ifcpositiveplaneanglemeasure",NULL ) +, SchemaEntry("ifcpositiveratiomeasure",NULL ) +, SchemaEntry("ifcpowermeasure",NULL ) +, SchemaEntry("ifcpresentabletext",NULL ) +, SchemaEntry("ifcpressuremeasure",NULL ) +, SchemaEntry("ifcradioactivitymeasure",NULL ) +, SchemaEntry("ifcratiomeasure",NULL ) +, SchemaEntry("ifcreal",NULL ) +, SchemaEntry("ifcrotationalfrequencymeasure",NULL ) +, SchemaEntry("ifcrotationalmassmeasure",NULL ) +, SchemaEntry("ifcrotationalstiffnessmeasure",NULL ) +, SchemaEntry("ifcsecondinminute",NULL ) +, SchemaEntry("ifcsectionmodulusmeasure",NULL ) +, SchemaEntry("ifcsectionalareaintegralmeasure",NULL ) +, SchemaEntry("ifcshearmodulusmeasure",NULL ) +, SchemaEntry("ifcsolidanglemeasure",NULL ) +, SchemaEntry("ifcsoundpowermeasure",NULL ) +, SchemaEntry("ifcsoundpressuremeasure",NULL ) +, SchemaEntry("ifcspecificheatcapacitymeasure",NULL ) +, SchemaEntry("ifcspecularexponent",NULL ) +, SchemaEntry("ifcspecularroughness",NULL ) +, SchemaEntry("ifctemperaturegradientmeasure",NULL ) +, SchemaEntry("ifctext",NULL ) +, SchemaEntry("ifctextalignment",NULL ) +, SchemaEntry("ifctextdecoration",NULL ) +, SchemaEntry("ifctextfontname",NULL ) +, SchemaEntry("ifctexttransformation",NULL ) +, SchemaEntry("ifcthermaladmittancemeasure",NULL ) +, SchemaEntry("ifcthermalconductivitymeasure",NULL ) +, SchemaEntry("ifcthermalexpansioncoefficientmeasure",NULL ) +, SchemaEntry("ifcthermalresistancemeasure",NULL ) +, SchemaEntry("ifcthermaltransmittancemeasure",NULL ) +, SchemaEntry("ifcthermodynamictemperaturemeasure",NULL ) +, SchemaEntry("ifctimemeasure",NULL ) +, SchemaEntry("ifctimestamp",NULL ) +, SchemaEntry("ifctorquemeasure",NULL ) +, SchemaEntry("ifcvaporpermeabilitymeasure",NULL ) +, SchemaEntry("ifcvolumemeasure",NULL ) +, SchemaEntry("ifcvolumetricflowratemeasure",NULL ) +, SchemaEntry("ifcwarpingconstantmeasure",NULL ) +, SchemaEntry("ifcwarpingmomentmeasure",NULL ) +, SchemaEntry("ifcyearnumber",NULL ) +, SchemaEntry("ifcactionsourcetypeenum",NULL ) +, SchemaEntry("ifcactiontypeenum",NULL ) +, SchemaEntry("ifcactuatortypeenum",NULL ) +, SchemaEntry("ifcaddresstypeenum",NULL ) +, SchemaEntry("ifcaheadorbehind",NULL ) +, SchemaEntry("ifcairterminalboxtypeenum",NULL ) +, SchemaEntry("ifcairterminaltypeenum",NULL ) +, SchemaEntry("ifcairtoairheatrecoverytypeenum",NULL ) +, SchemaEntry("ifcalarmtypeenum",NULL ) +, SchemaEntry("ifcanalysismodeltypeenum",NULL ) +, SchemaEntry("ifcanalysistheorytypeenum",NULL ) +, SchemaEntry("ifcarithmeticoperatorenum",NULL ) +, SchemaEntry("ifcassemblyplaceenum",NULL ) +, SchemaEntry("ifcbsplinecurveform",NULL ) +, SchemaEntry("ifcbeamtypeenum",NULL ) +, SchemaEntry("ifcbenchmarkenum",NULL ) +, SchemaEntry("ifcboilertypeenum",NULL ) +, SchemaEntry("ifcbooleanoperator",NULL ) +, SchemaEntry("ifcbuildingelementproxytypeenum",NULL ) +, SchemaEntry("ifccablecarrierfittingtypeenum",NULL ) +, SchemaEntry("ifccablecarriersegmenttypeenum",NULL ) +, SchemaEntry("ifccablesegmenttypeenum",NULL ) +, SchemaEntry("ifcchangeactionenum",NULL ) +, SchemaEntry("ifcchillertypeenum",NULL ) +, SchemaEntry("ifccoiltypeenum",NULL ) +, SchemaEntry("ifccolumntypeenum",NULL ) +, SchemaEntry("ifccompressortypeenum",NULL ) +, SchemaEntry("ifccondensertypeenum",NULL ) +, SchemaEntry("ifcconnectiontypeenum",NULL ) +, SchemaEntry("ifcconstraintenum",NULL ) +, SchemaEntry("ifccontrollertypeenum",NULL ) +, SchemaEntry("ifccooledbeamtypeenum",NULL ) +, SchemaEntry("ifccoolingtowertypeenum",NULL ) +, SchemaEntry("ifccostscheduletypeenum",NULL ) +, SchemaEntry("ifccoveringtypeenum",NULL ) +, SchemaEntry("ifccurrencyenum",NULL ) +, SchemaEntry("ifccurtainwalltypeenum",NULL ) +, SchemaEntry("ifcdampertypeenum",NULL ) +, SchemaEntry("ifcdataoriginenum",NULL ) +, SchemaEntry("ifcderivedunitenum",NULL ) +, SchemaEntry("ifcdimensionextentusage",NULL ) +, SchemaEntry("ifcdirectionsenseenum",NULL ) +, SchemaEntry("ifcdistributionchamberelementtypeenum",NULL ) +, SchemaEntry("ifcdocumentconfidentialityenum",NULL ) +, SchemaEntry("ifcdocumentstatusenum",NULL ) +, SchemaEntry("ifcdoorpaneloperationenum",NULL ) +, SchemaEntry("ifcdoorpanelpositionenum",NULL ) +, SchemaEntry("ifcdoorstyleconstructionenum",NULL ) +, SchemaEntry("ifcdoorstyleoperationenum",NULL ) +, SchemaEntry("ifcductfittingtypeenum",NULL ) +, SchemaEntry("ifcductsegmenttypeenum",NULL ) +, SchemaEntry("ifcductsilencertypeenum",NULL ) +, SchemaEntry("ifcelectricappliancetypeenum",NULL ) +, SchemaEntry("ifcelectriccurrentenum",NULL ) +, SchemaEntry("ifcelectricdistributionpointfunctionenum",NULL ) +, SchemaEntry("ifcelectricflowstoragedevicetypeenum",NULL ) +, SchemaEntry("ifcelectricgeneratortypeenum",NULL ) +, SchemaEntry("ifcelectricheatertypeenum",NULL ) +, SchemaEntry("ifcelectricmotortypeenum",NULL ) +, SchemaEntry("ifcelectrictimecontroltypeenum",NULL ) +, SchemaEntry("ifcelementassemblytypeenum",NULL ) +, SchemaEntry("ifcelementcompositionenum",NULL ) +, SchemaEntry("ifcenergysequenceenum",NULL ) +, SchemaEntry("ifcenvironmentalimpactcategoryenum",NULL ) +, SchemaEntry("ifcevaporativecoolertypeenum",NULL ) +, SchemaEntry("ifcevaporatortypeenum",NULL ) +, SchemaEntry("ifcfantypeenum",NULL ) +, SchemaEntry("ifcfiltertypeenum",NULL ) +, SchemaEntry("ifcfiresuppressionterminaltypeenum",NULL ) +, SchemaEntry("ifcflowdirectionenum",NULL ) +, SchemaEntry("ifcflowinstrumenttypeenum",NULL ) +, SchemaEntry("ifcflowmetertypeenum",NULL ) +, SchemaEntry("ifcfootingtypeenum",NULL ) +, SchemaEntry("ifcgasterminaltypeenum",NULL ) , SchemaEntry("ifcgeometricprojectionenum",NULL ) , SchemaEntry("ifcglobalorlocalenum",NULL ) -, SchemaEntry("ifcareameasure",NULL ) -, SchemaEntry("ifccsgselect",NULL ) -, SchemaEntry("ifcoccupanttypeenum",NULL ) -, SchemaEntry("ifcenergysequenceenum",NULL ) -, SchemaEntry("ifcflowmetertypeenum",NULL ) -, SchemaEntry("ifcsectionmodulusmeasure",NULL ) -, SchemaEntry("ifcairterminalboxtypeenum",NULL ) -, SchemaEntry("ifcidentifier",NULL ) -, SchemaEntry("ifcinteger",NULL ) -, SchemaEntry("ifcproceduretypeenum",NULL ) -, SchemaEntry("ifcbenchmarkenum",NULL ) -, SchemaEntry("ifcwindowpaneloperationenum",NULL ) -, SchemaEntry("ifctrimmingselect",NULL ) -, SchemaEntry("ifcreal",NULL ) -, SchemaEntry("ifcsurfacestyleelementselect",NULL ) -, SchemaEntry("ifcairtoairheatrecoverytypeenum",NULL ) -, SchemaEntry("ifcnormalisedratiomeasure",NULL ) -, SchemaEntry("ifccablesegmenttypeenum",NULL ) -, SchemaEntry("ifcbeamtypeenum",NULL ) -, SchemaEntry("ifcbooleanoperand",NULL ) -, SchemaEntry("ifcfrequencymeasure",NULL ) -, SchemaEntry("ifcdataoriginenum",NULL ) -, SchemaEntry("ifcalarmtypeenum",NULL ) -, SchemaEntry("ifcmassmeasure",NULL ) -, SchemaEntry("ifcstateenum",NULL ) -, SchemaEntry("ifcstackterminaltypeenum",NULL ) -, SchemaEntry("ifcreinforcingbarroleenum",NULL ) -, SchemaEntry("ifcelectrictimecontroltypeenum",NULL ) -, SchemaEntry("ifcinternalorexternalenum",NULL ) -, SchemaEntry("ifcductsilencertypeenum",NULL ) -, SchemaEntry("ifcconditioncriterionselect",NULL ) -, SchemaEntry("ifchumidifiertypeenum",NULL ) -, SchemaEntry("ifcforcemeasure",NULL ) -, SchemaEntry("ifcmembertypeenum",NULL ) -, SchemaEntry("ifcionconcentrationmeasure",NULL ) -, SchemaEntry("ifcchillertypeenum",NULL ) -, SchemaEntry("ifcmassperlengthmeasure",NULL ) -, SchemaEntry("ifctimeseriesscheduletypeenum",NULL ) -, SchemaEntry("ifcfiltertypeenum",NULL ) -, SchemaEntry("ifclogical",NULL ) -, SchemaEntry("ifcinventorytypeenum",NULL ) -, SchemaEntry("ifcclassificationnotationselect",NULL ) -, SchemaEntry("ifcaddresstypeenum",NULL ) -, SchemaEntry("ifcpositivelengthmeasure",NULL ) -, SchemaEntry("ifcratiomeasure",NULL ) -, SchemaEntry("ifcramptypeenum",NULL ) -, SchemaEntry("ifcmaterialselect",NULL ) -, SchemaEntry("ifccoveringtypeenum",NULL ) -, SchemaEntry("ifcpiletypeenum",NULL ) -, SchemaEntry("ifctransitioncode",NULL ) -, SchemaEntry("ifcparametervalue",NULL ) -, SchemaEntry("ifccondensertypeenum",NULL ) -, SchemaEntry("ifctextpath",NULL ) -, SchemaEntry("ifcelectriccurrentenum",NULL ) -, SchemaEntry("ifccolumntypeenum",NULL ) -, SchemaEntry("ifcluminousfluxmeasure",NULL ) -, SchemaEntry("ifcplatetypeenum",NULL ) -, SchemaEntry("ifcpileconstructionenum",NULL ) -, SchemaEntry("ifcactionsourcetypeenum",NULL ) -, SchemaEntry("ifcmagneticfluxdensitymeasure",NULL ) -, SchemaEntry("ifcsurfaceorfacesurface",NULL ) -, SchemaEntry("ifcpresentationstyleselect",NULL ) -, SchemaEntry("ifcgloballyuniqueid",NULL ) -, SchemaEntry("ifclinearmomentmeasure",NULL ) , SchemaEntry("ifcheatexchangertypeenum",NULL ) -, SchemaEntry("ifcpumptypeenum",NULL ) -, SchemaEntry("ifcspecularexponent",NULL ) -, SchemaEntry("ifcelectricresistancemeasure",NULL ) -, SchemaEntry("ifcthermalconductivitymeasure",NULL ) -, SchemaEntry("ifcreflectancemethodenum",NULL ) -, SchemaEntry("ifctubebundletypeenum",NULL ) -, SchemaEntry("ifcactuatortypeenum",NULL ) -, SchemaEntry("ifccontrollertypeenum",NULL ) +, SchemaEntry("ifchumidifiertypeenum",NULL ) +, SchemaEntry("ifcinternalorexternalenum",NULL ) +, SchemaEntry("ifcinventorytypeenum",NULL ) +, SchemaEntry("ifcjunctionboxtypeenum",NULL ) +, SchemaEntry("ifclamptypeenum",NULL ) +, SchemaEntry("ifclayersetdirectionenum",NULL ) , SchemaEntry("ifclightdistributioncurveenum",NULL ) -, SchemaEntry("ifcpositiveratiomeasure",NULL ) -, SchemaEntry("ifcelectricchargemeasure",NULL ) -, SchemaEntry("ifcnumericmeasure",NULL ) -, SchemaEntry("ifcstructuralactivityassignmentselect",NULL ) -, SchemaEntry("ifcluminousintensitydistributionmeasure",NULL ) -, SchemaEntry("ifcmolecularweightmeasure",NULL ) -, SchemaEntry("ifclayereditem",NULL ) -, SchemaEntry("ifclengthmeasure",NULL ) -, SchemaEntry("ifcwarpingconstantmeasure",NULL ) -, SchemaEntry("ifcboilertypeenum",NULL ) -, SchemaEntry("ifccablecarriersegmenttypeenum",NULL ) -, SchemaEntry("ifcfontweight",NULL ) -, SchemaEntry("ifctextfontname",NULL ) -, SchemaEntry("ifcenvironmentalimpactcategoryenum",NULL ) -, SchemaEntry("ifcactiontypeenum",NULL ) -, SchemaEntry("ifcdefinedsymbolselect",NULL ) -, SchemaEntry("ifctexttransformation",NULL ) -, SchemaEntry("ifcappliedvalueselect",NULL ) -, SchemaEntry("ifcenergymeasure",NULL ) -, SchemaEntry("ifcflowinstrumenttypeenum",NULL ) -, SchemaEntry("ifccountmeasure",NULL ) -, SchemaEntry("ifccurrencyenum",NULL ) -, SchemaEntry("ifcsectiontypeenum",NULL ) -, SchemaEntry("ifclinearforcemeasure",NULL ) -, SchemaEntry("ifcderivedmeasurevalue",NULL ) +, SchemaEntry("ifclightemissionsourceenum",NULL ) +, SchemaEntry("ifclightfixturetypeenum",NULL ) +, SchemaEntry("ifcloadgrouptypeenum",NULL ) +, SchemaEntry("ifclogicaloperatorenum",NULL ) +, SchemaEntry("ifcmembertypeenum",NULL ) +, SchemaEntry("ifcmotorconnectiontypeenum",NULL ) +, SchemaEntry("ifcnullstyle",NULL ) +, SchemaEntry("ifcobjecttypeenum",NULL ) +, SchemaEntry("ifcobjectiveenum",NULL ) +, SchemaEntry("ifcoccupanttypeenum",NULL ) +, SchemaEntry("ifcoutlettypeenum",NULL ) +, SchemaEntry("ifcpermeablecoveringoperationenum",NULL ) +, SchemaEntry("ifcphysicalorvirtualenum",NULL ) +, SchemaEntry("ifcpileconstructionenum",NULL ) +, SchemaEntry("ifcpiletypeenum",NULL ) +, SchemaEntry("ifcpipefittingtypeenum",NULL ) +, SchemaEntry("ifcpipesegmenttypeenum",NULL ) +, SchemaEntry("ifcplatetypeenum",NULL ) +, SchemaEntry("ifcproceduretypeenum",NULL ) +, SchemaEntry("ifcprofiletypeenum",NULL ) +, SchemaEntry("ifcprojectorderrecordtypeenum",NULL ) +, SchemaEntry("ifcprojectordertypeenum",NULL ) +, SchemaEntry("ifcprojectedortruelengthenum",NULL ) +, SchemaEntry("ifcpropertysourceenum",NULL ) +, SchemaEntry("ifcprotectivedevicetypeenum",NULL ) +, SchemaEntry("ifcpumptypeenum",NULL ) , SchemaEntry("ifcrailingtypeenum",NULL ) -, SchemaEntry("ifcsiunitname",NULL ) -, SchemaEntry("ifcmeasurevalue",NULL ) +, SchemaEntry("ifcrampflighttypeenum",NULL ) +, SchemaEntry("ifcramptypeenum",NULL ) +, SchemaEntry("ifcreflectancemethodenum",NULL ) +, SchemaEntry("ifcreinforcingbarroleenum",NULL ) +, SchemaEntry("ifcreinforcingbarsurfaceenum",NULL ) +, SchemaEntry("ifcresourceconsumptionenum",NULL ) +, SchemaEntry("ifcribplatedirectionenum",NULL ) +, SchemaEntry("ifcroleenum",NULL ) , SchemaEntry("ifcrooftypeenum",NULL ) -, SchemaEntry("ifctext",NULL ) -, SchemaEntry("ifclinearvelocitymeasure",NULL ) -, SchemaEntry("ifcboolean",NULL ) +, SchemaEntry("ifcsiprefix",NULL ) +, SchemaEntry("ifcsiunitname",NULL ) +, SchemaEntry("ifcsanitaryterminaltypeenum",NULL ) +, SchemaEntry("ifcsectiontypeenum",NULL ) +, SchemaEntry("ifcsensortypeenum",NULL ) +, SchemaEntry("ifcsequenceenum",NULL ) +, SchemaEntry("ifcservicelifefactortypeenum",NULL ) +, SchemaEntry("ifcservicelifetypeenum",NULL ) +, SchemaEntry("ifcslabtypeenum",NULL ) +, SchemaEntry("ifcsoundscaleenum",NULL ) +, SchemaEntry("ifcspaceheatertypeenum",NULL ) +, SchemaEntry("ifcspacetypeenum",NULL ) +, SchemaEntry("ifcstackterminaltypeenum",NULL ) +, SchemaEntry("ifcstairflighttypeenum",NULL ) +, SchemaEntry("ifcstairtypeenum",NULL ) +, SchemaEntry("ifcstateenum",NULL ) +, SchemaEntry("ifcstructuralcurvetypeenum",NULL ) +, SchemaEntry("ifcstructuralsurfacetypeenum",NULL ) +, SchemaEntry("ifcsurfaceside",NULL ) +, SchemaEntry("ifcsurfacetextureenum",NULL ) +, SchemaEntry("ifcswitchingdevicetypeenum",NULL ) +, SchemaEntry("ifctanktypeenum",NULL ) +, SchemaEntry("ifctendontypeenum",NULL ) +, SchemaEntry("ifctextpath",NULL ) +, SchemaEntry("ifcthermalloadsourceenum",NULL ) +, SchemaEntry("ifcthermalloadtypeenum",NULL ) +, SchemaEntry("ifctimeseriesdatatypeenum",NULL ) +, SchemaEntry("ifctimeseriesscheduletypeenum",NULL ) +, SchemaEntry("ifctransformertypeenum",NULL ) +, SchemaEntry("ifctransitioncode",NULL ) +, SchemaEntry("ifctransportelementtypeenum",NULL ) +, SchemaEntry("ifctrimmingpreference",NULL ) +, SchemaEntry("ifctubebundletypeenum",NULL ) +, SchemaEntry("ifcunitenum",NULL ) +, SchemaEntry("ifcunitaryequipmenttypeenum",NULL ) +, SchemaEntry("ifcvalvetypeenum",NULL ) +, SchemaEntry("ifcvibrationisolatortypeenum",NULL ) +, SchemaEntry("ifcwalltypeenum",NULL ) +, SchemaEntry("ifcwasteterminaltypeenum",NULL ) +, SchemaEntry("ifcwindowpaneloperationenum",NULL ) +, SchemaEntry("ifcwindowpanelpositionenum",NULL ) +, SchemaEntry("ifcwindowstyleconstructionenum",NULL ) +, SchemaEntry("ifcwindowstyleoperationenum",NULL ) +, SchemaEntry("ifcworkcontroltypeenum",NULL ) +, SchemaEntry("ifcactorselect",NULL ) +, SchemaEntry("ifcappliedvalueselect",NULL ) +, SchemaEntry("ifcaxis2placement",NULL ) +, SchemaEntry("ifcbooleanoperand",NULL ) +, SchemaEntry("ifccharacterstyleselect",NULL ) +, SchemaEntry("ifcclassificationnotationselect",NULL ) +, SchemaEntry("ifccolour",NULL ) +, SchemaEntry("ifccolourorfactor",NULL ) +, SchemaEntry("ifcconditioncriterionselect",NULL ) +, SchemaEntry("ifccsgselect",NULL ) +, SchemaEntry("ifccurvefontorscaledcurvefontselect",NULL ) +, SchemaEntry("ifccurveoredgecurve",NULL ) +, SchemaEntry("ifccurvestylefontselect",NULL ) +, SchemaEntry("ifcdatetimeselect",NULL ) +, SchemaEntry("ifcdefinedsymbolselect",NULL ) +, SchemaEntry("ifcderivedmeasurevalue",NULL ) +, SchemaEntry("ifcdocumentselect",NULL ) +, SchemaEntry("ifcdraughtingcalloutelement",NULL ) +, SchemaEntry("ifcfillareastyletileshapeselect",NULL ) +, SchemaEntry("ifcfillstyleselect",NULL ) +, SchemaEntry("ifcgeometricsetselect",NULL ) +, SchemaEntry("ifchatchlinedistanceselect",NULL ) +, SchemaEntry("ifclayereditem",NULL ) +, SchemaEntry("ifclibraryselect",NULL ) +, SchemaEntry("ifclightdistributiondatasourceselect",NULL ) +, SchemaEntry("ifcmaterialselect",NULL ) +, SchemaEntry("ifcmeasurevalue",NULL ) +, SchemaEntry("ifcmetricvalueselect",NULL ) +, SchemaEntry("ifcobjectreferenceselect",NULL ) +, SchemaEntry("ifcorientationselect",NULL ) +, SchemaEntry("ifcpointorvertexpoint",NULL ) +, SchemaEntry("ifcpresentationstyleselect",NULL ) +, SchemaEntry("ifcshell",NULL ) +, SchemaEntry("ifcsimplevalue",NULL ) +, SchemaEntry("ifcsizeselect",NULL ) +, SchemaEntry("ifcspecularhighlightselect",NULL ) +, SchemaEntry("ifcstructuralactivityassignmentselect",NULL ) +, SchemaEntry("ifcsurfaceorfacesurface",NULL ) +, SchemaEntry("ifcsurfacestyleelementselect",NULL ) +, SchemaEntry("ifcsymbolstyleselect",NULL ) +, SchemaEntry("ifctextfontselect",NULL ) +, SchemaEntry("ifctextstyleselect",NULL ) +, SchemaEntry("ifctrimmingselect",NULL ) +, SchemaEntry("ifcunit",NULL ) +, SchemaEntry("ifcvalue",NULL ) +, SchemaEntry("ifcvectorordirection",NULL ) , SchemaEntry("ifcrepresentationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctopologicalrepresentationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedge",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternalreference",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentreference",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcgeometricrepresentationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompositecurvesegment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundedcurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompositecurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifc2dcompositecurve",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcroot",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcobjectdefinition",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcobject",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproduct",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralsurfaceconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapprovalactorrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertexbasedtexturemap",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpresentationstyleassignment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurtainwall",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturecoordinate",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturecoordinategenerator",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproxy",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedtextfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstylefontmodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstyleditem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationsymboloccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcterminatorsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensioncurveterminator",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccontrol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactionrequest",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactorrole",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifctypeobject",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifctypeproduct",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcelementtype",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcdistributionelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfeatureelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfeatureelementsubtraction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcopeningelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpresentationstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastyletilesymbolwithstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapplication",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnects",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsstructuralelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralmember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralsurfacemember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmateriallist",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator3d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionflowelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsanitaryterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenergyconversiondevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricgeneratortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstructionresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcequipmentstandard",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalsteelmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricappliancetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifchygroscopicmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurniturestandard",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcirregulartimeseriesvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdefinedsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolourspecification",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcline",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelaxation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproperty",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccomplexproperty",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccovering",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundedcurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbsplinecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcnamedunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsubcontractresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralconnectioncondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcobjectplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgridplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfailureconnectioncondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcphysicalquantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcphysicalsimplequantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertydefinition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertysetdefinition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindowliningproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpoint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesianpoint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacebound",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundarycondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundaryfacecondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedgecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclibraryinformation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifconedirectionrepeatfactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctwodirectionrepeatfactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectselements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectspathelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassigns",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyconstraintrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourceambient",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowcontrollertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowmetertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationcurveoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclocaltime",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociates",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesapproval",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompositeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsubedge",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowstoragedevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctanktype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementcomponent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementpart",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshapemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshaperepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrailing",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralload",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadstatic",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingleforce",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingleforcewarping",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstylemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstyledrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolourrgb",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementcomponenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdiscreteaccessorytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvibrationisolatortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprocess",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprocedure",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfeatureelementaddition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedgefeature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctrimmedcurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelcoversbldgelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextliteral",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccranerailashapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementcomponent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccsgprimitive3d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcblock",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrailingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralpointconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowmovingdevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpumptype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralcurvemember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralcurvemembervarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcingelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcingmesh",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplanarextent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplanarbox",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccooledbeamtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantityarea",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingcalloutrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensioncalloutrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectorderrecord",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpointonsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpointoncurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelcontainedinspatialstructure",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsimpleproperty",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertylistvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingstorey",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcunitaryequipmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoutlettype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfastenertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsystem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralanalysismodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcslabtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoproduct",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassification",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionflowelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpolyline",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantityvolume",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingcallout",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcaddress",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralsurfacemembervarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmotorconnectiontype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcairtoairheatrecoverytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplatetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsolidmodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccsgsolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalfastenertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldecomposes",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricalelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolumntype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectangularpyramid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactionrequest",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralactivity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralreaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralpointreaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertydependencyrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedterminatorsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructurallinearaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructurallinearactionvarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccrewresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcchamferedgefeature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstraintrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompositecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifc2dcompositecurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgrid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctendon",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectangleprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcroundedrectangleprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbeamtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclamptype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseriesreferencerelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacetexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcimagetexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcegoniometric",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproductrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterialdefinitionrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpermit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeneralmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccontextdependentunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowmovingdevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccolumn",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstocontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoprojectorder",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributioncontrolelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprotectivedevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturemap",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowsegment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccompressortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeneralprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcappliedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctrapeziumprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldefines",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldefinesbytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctask",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmove",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundaryedgecondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcedirectional",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccondensertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctablerow",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesappliedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconic",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcellipse",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesclassification",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproductsofcombustionproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcdistributioncontrolelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsensortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationfillareaoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwall",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantityweight",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurnishingelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurnituretype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccontrollertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowfitting",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelnests",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccalendardate",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightdistributiondata",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcphysicalcomplexquantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentelectronicformat",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrepresentationcontext",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcderivedunitelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindowpanelproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrepresentationmap",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsstructuralmember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterialclassificationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdirection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcactuatortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcaddress",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionflowelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowcontrollertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcairterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenergyconversiondevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcairtoairheatrecoverytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcalarmtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingcallout",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcdimensioncurvedirectedcallout",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcangulardimension",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcworkcontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcworkplan",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspatialstructureelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspacetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcslippageconnectioncondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcport",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionport",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorderaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoorpanelproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbeam",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsectionreinforcementproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmanifoldsolidbrep",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacetedbrep",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcopticalmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylewithtextures",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectswitheccentricity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifchumidifiertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpolyloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowfittingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastyletiles",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctexturevertex",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertex",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproduct",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstyleditem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationcurveoccurrence",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcannotationfillarea",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplate",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrightcircularcone",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundedsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclibraryreference",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstraintclassificationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadgroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometricrepresentationcontext",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctubebundletype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralplanaraction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundarynodecondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcheatexchangertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelschedulescostitems",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfaceouterbound",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsphere",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcepositional",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowsegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfiresuppressionterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertysinglevalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspacethermalloadproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcperson",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstylefordefinedfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacebasedsurfacemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcaxis2placement3d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralresultgroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestylefont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifchalfspacesolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgasterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsoundvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentinformation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmember",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmateriallayersetusage",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccondition",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyenumeratedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpermeablecoveringproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionchamberelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextliteralwithextent",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowcontroller",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricdistributionpoint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctransportelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcasset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpersonandorganization",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsweptareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrevolvedareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenergyconversiondevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsoundproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestyleshading",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylerendering",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboilertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementproxy",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclocalplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifczone",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstair",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwallstandardcase",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdiameterdimension",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcductsegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseries",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcirregulartimeseries",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcjunctionboxtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator3dnonuniform",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationfillareaoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationsymboloccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcannotationtextoccurrence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapplication",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcappliedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcappliedvaluerelationship",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcapproval",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestylefontandscaling",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcinventory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantitylength",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconditioncriterion",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectedfaceset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcopenshell",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralsteelprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbeziercurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapprovalactorrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapprovalpropertyrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcapprovalrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcarbitraryopenprofiledef",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcarbitraryprofiledefwithvoids",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmaterial",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbooleanresult",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstackterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefineddimensionsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcasset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcishapeprofiledef",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcasymmetricishapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcequipmentelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationreference",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedcurvefont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshapeaspect",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationnotationfacet",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdoorliningproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingledisplacement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesmaterial",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundarynodeconditionwarping",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoordinateduniversaltimeoffset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclosedshell",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalconcretematerialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmateriallayerset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcellipseprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyboundedvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoveringtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelcoversspaces",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcclassificationitemrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactuatortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoffsetcurve2d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectiongeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectionsurfacegeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdistributionchamberelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestylefontpattern",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoffsetcurve3d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfooting",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmappeditem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpostaladdress",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelspaceboundary",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctransformertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrightcircularcylinder",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspaceprogram",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcthermalmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectanglehollowprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometricset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometriccurveset",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcarbitraryopenprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdocumentinformationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacetedbrepwithvoids",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvector",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedsurfacestyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcservicelife",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurveboundedplane",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccircle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfuelproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertexloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcservicelifefactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyenumeration",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacecurvesweptareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstructionequipmentresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsectionedspine",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreferencesvaluedocument",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertyreferencevalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelservicesbuildings",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsite",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcperformancehistory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedtextfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpropertytablevalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenvironmentalimpactvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurvestyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctransportelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpolygonalboundedhalfspace",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectionportgeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelflowcontrolelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapprovalpropertyrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelreferencedinspatialstructure",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcaxis2placement2d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfillareastylehatching",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfastener",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcscheduletimecontrol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricmotortype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseriesschedule",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctable",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpipesegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowterminal",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcementdefinitionproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwalltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoiltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadsingledisplacementdistortion",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfurnishingelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstylewithboxcharacteristics",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwasteterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindow",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactorrole",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricflowstoragedevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcderivedunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcramp",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingpredefinedcurvefont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclineardimension",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementarysurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstructionproductresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccablesegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdraughtingpredefinedtextfont",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpath",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctextstyletextmodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorganizationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmonetaryunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcactor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcoccupant",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcswitchingdevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsweptsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfaceoflinearextrusion",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcshellbasedsurfacemodel",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsymbolstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcaxis2placement3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbsplinecurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbeam",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbeamtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbeziercurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacetexture",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcblobtexture",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccsgprimitive3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcblock",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboilertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbooleanresult",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbooleanclippingresult",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundarycondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundaryedgecondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundaryfacecondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundarynodecondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundarynodeconditionwarping",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundedsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboundingbox",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifchalfspacesolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcboxedhalfspace",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcbuilding",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsiunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdiscreteaccessory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpredefinedpointmarkersymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccostvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcownerhistory",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsystemfurnitureelementtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementassembly",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccoolingtowertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadlinearforce",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpresentationlayerassignment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpresentationlayerwithstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightsourcespot",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcextendedmaterialproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpixeltexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensionalexponents",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcevaporatortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementcomponent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementpart",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementproxy",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingelementproxytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcbuildingstorey",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowfittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccablecarrierfittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowsegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccablecarriersegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccablesegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccalendardate",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpoint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesianpoint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator2dnonuniform",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccartesiantransformationoperator3dnonuniform",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccenterlineprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfeatureelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfeatureelementsubtraction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedgefeature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcchamferedgefeature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcchillertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconic",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccircle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccircleprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccirclehollowprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassification",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationitemrelationship",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadplanarforce",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspaceheatertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelementquantity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurrencyrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrampflight",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconversionbasedunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcextrudedareasolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectorder",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationnotationfacet",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternalreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclassificationreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctopologicalrepresentationitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectedfaceset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcclosedshell",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoiltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolourspecification",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolourrgb",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolumn",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccolumntype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproperty",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccomplexproperty",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompositecurvesegment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompositeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowmovingdevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccompressortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccondensertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconditioncriterion",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectiongeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectioncurvegeometry",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcconnectionpointgeometry",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcconnectionpointeccentricity",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconstraintaggregationrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensionpair",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbooleanclippingresult",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectionportgeometry",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconnectionsurfacegeometry",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcconstraint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralloadtemperature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesconstraint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcingbar",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccenterlineprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboundingbox",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwindowstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcblobtexture",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmembertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclightfixturetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowstoragedevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctopologyrepresentation",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreldefinesbyproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreloverridesproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstairflighttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccircleprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsweptdisksolid",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedsymbol",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcregulartimeseries",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralplanaractionvarying",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvalvetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcunitassignment",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcconnectioncurvegeometry",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorganization",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvirtualelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantitycount",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructuralcurveconnection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcairterminaltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowtreatmentdevicetype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcroof",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsectionproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctimeseriesvalue",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstogroup",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectrictimecontroltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpile",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccostschedule",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrampflighttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcderivedprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccostitem",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcevaporativecoolertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcchillertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmateriallayer",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcboxedhalfspace",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccurtainwalltype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgeometricrepresentationsubcontext",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdimensioncurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcplane",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectioncurve",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdampertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylerefraction",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcribplateprofileproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcwaterproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmechanicalfastener",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcductsilencertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociatesdocument",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreinforcementbarproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclaborresource",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfantype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcenergyproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcprojectionelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelinteractionrequirements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccranerailfshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcapprovalrelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproject",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelvoidselement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmetric",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricalcircuit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifclshapeprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelsequence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcflowtreatmentdevice",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcannotationtextoccurrence",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfiltertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcquantitytime",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcedgeloop",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccirclehollowprofiledef",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstructureddimensioncallout",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricalbaseproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccablecarriersegmenttype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcappliedvaluerelationship",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcductfittingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcexternallydefinedhatchstyle",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassociateslibrary",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrectangulartrimmedsurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcproductdefinitionshape",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcstairflight",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcslab",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcpipefittingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcspace",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcdateandtime",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcobjective",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcvirtualgridintersection",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcbuildingelementproxytype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstoprocess",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcalarmtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccablecarrierfittingtype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcroundededgefeature",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctelecomaddress",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsporttoelement",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelassignstasks",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfacesurface",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcreloccupiesspaces",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcgridaxis",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifctendonanchor",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcfluidflowproperties",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcworkschedule",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfaceofrevolution",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcsurfacestylelighting",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcelectricheatertype",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcmeasurewithunit",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcorientededge",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifccartesiantransformationoperator2dnonuniform",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectswithrealizingelements",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelconnectsports",&STEP::ObjectHelper::Construct ) -, SchemaEntry("ifcrelfillselement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstraintaggregationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstraintclassificationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstraintrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstructionresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstructionequipmentresource",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcconstructionmaterialresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconstructionproductresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcnamedunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccontextdependentunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccontrollertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcconversionbasedunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccooledbeamtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoolingtowertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoordinateduniversaltimeoffset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccostitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccostschedule",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccostvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccovering",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccoveringtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccranerailashapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccranerailfshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccrewresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsolidmodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccsgsolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurrencyrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurtainwall",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurtainwalltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurveboundedplane",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpresentationstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestylefont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestylefontandscaling",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifccurvestylefontpattern",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdampertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdateandtime",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdefinedsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcderivedprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcderivedunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcderivedunitelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdiameterdimension",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingcalloutrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensioncalloutrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensioncurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcterminatorsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensioncurveterminator",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensionpair",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdimensionalexponents",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdirection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementcomponent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdiscreteaccessory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementcomponenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdiscreteaccessorytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionflowelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionchamberelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionchamberelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributioncontrolelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcport",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdistributionport",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentelectronicformat",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentinformation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentinformationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdocumentreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertydefinition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertysetdefinition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoorliningproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoorpanelproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedcurvefont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingpredefinedcurvefont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedtextfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcdraughtingpredefinedtextfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcductfittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcductsegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowtreatmentdevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcductsilencertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedge",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedgecurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcedgeloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricappliancetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowcontroller",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricdistributionpoint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowstoragedevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricflowstoragedevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricgeneratortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricheatertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricmotortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectrictimecontroltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenergyproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricalbaseproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsystem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricalcircuit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelectricalelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementassembly",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementquantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcelementarysurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcellipse",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcellipseprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenergyconversiondevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcenvironmentalimpactvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcequipmentelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcequipmentstandard",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcevaporativecoolertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcevaporatortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcextendedmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedhatchstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedsurfacestyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcexternallydefinedtextfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsweptareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcextrudedareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacebasedsurfacemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacebound",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfaceouterbound",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacesurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmanifoldsolidbrep",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacetedbrep",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfacetedbrepwithvoids",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralconnectioncondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfailureconnectioncondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfantype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfastener",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfastenertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfeatureelementaddition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastylehatching",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastyletilesymbolwithstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfillareastyletiles",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfiltertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfiresuppressionterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowfitting",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowmetertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowmovingdevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowsegment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowstoragedevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowterminal",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcflowtreatmentdevice",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfluidflowproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfooting",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfuelproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurnishingelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurnishingelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurniturestandard",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcfurnituretype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgasterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeneralmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeneralprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometricset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometriccurveset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrepresentationcontext",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometricrepresentationcontext",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgeometricrepresentationsubcontext",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgrid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgridaxis",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcobjectplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcgridplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcheatexchangertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifchumidifiertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifchygroscopicmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcimagetexture",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcinventory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseries",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcirregulartimeseries",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcirregulartimeseriesvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcjunctionboxtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclaborresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclamptype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclibraryinformation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclibraryreference",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightdistributiondata",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightfixturetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourceambient",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcedirectional",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcegoniometric",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcepositional",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclightsourcespot",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcline",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclineardimension",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclocalplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifclocaltime",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmappeditem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterial",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterialclassificationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproductrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmaterialdefinitionrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmateriallayer",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmateriallayerset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmateriallayersetusage",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmateriallist",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmeasurewithunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalconcretematerialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalfastener",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalfastenertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmechanicalsteelmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmembertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmetric",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmonetaryunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmotorconnectiontype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprocess",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctask",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcmove",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcobjective",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoccupant",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoffsetcurve2d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoffsetcurve3d",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifconedirectionrepeatfactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcopenshell",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcopeningelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcopticalmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorderaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorganization",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorganizationrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcorientededge",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcoutlettype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcownerhistory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpath",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcperformancehistory",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpermeablecoveringproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpermit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcperson",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpersonandorganization",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcphysicalquantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcphysicalcomplexquantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcphysicalsimplequantity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpile",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpipefittingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpipesegmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpixeltexture",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplanarextent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplanarbox",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplane",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplate",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcplatetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpointoncurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpointonsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpolyloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpolygonalboundedhalfspace",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpolyline",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpostaladdress",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefineddimensionsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedpointmarkersymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpredefinedterminatorsymbol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpresentationlayerassignment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpresentationlayerwithstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpresentationstyleassignment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprocedure",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproductdefinitionshape",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproductsofcombustionproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproject",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectorder",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectorderrecord",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectioncurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprojectionelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsimpleproperty",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyboundedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyconstraintrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertydependencyrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyenumeratedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyenumeration",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertylistvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyreferencevalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertyset",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertysinglevalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpropertytablevalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcprotectivedevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcproxy",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcpumptype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantityarea",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantitycount",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantitylength",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantitytime",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantityvolume",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcquantityweight",&STEP::ObjectHelper::Construct ) , SchemaEntry("ifcradiusdimension",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrailing",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrailingtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcramp",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrampflight",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrampflighttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectangleprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectanglehollowprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectangularpyramid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrectangulartrimmedsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreferencesvaluedocument",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcregulartimeseries",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcementbarproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcementdefinitionproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcingelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcingbar",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreinforcingmesh",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldecomposes",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassigns",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstocontrol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstasks",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstogroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoprocess",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoproduct",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoprojectorder",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassignstoresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociates",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesappliedvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesapproval",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesclassification",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesconstraint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesdocument",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociateslibrary",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesmaterial",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelassociatesprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnects",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectselements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectspathelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsporttoelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsports",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsstructuralelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectsstructuralmember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectswitheccentricity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelconnectswithrealizingelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelcontainedinspatialstructure",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelcoversbldgelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelcoversspaces",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldefines",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldefinesbyproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreldefinesbytype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelfillselement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelflowcontrolelements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelinteractionrequirements",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelnests",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreloccupiesspaces",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcreloverridesproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelreferencedinspatialstructure",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelschedulescostitems",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelsequence",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelservicesbuildings",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelspaceboundary",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelvoidselement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrelaxation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrepresentationmap",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrevolvedareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcribplateprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrightcircularcone",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcrightcircularcylinder",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcroof",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcroundededgefeature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcroundedrectangleprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsiunit",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsanitaryterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcscheduletimecontrol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsectionproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsectionreinforcementproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsectionedspine",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsensortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcservicelife",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcservicelifefactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshapeaspect",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshapemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshaperepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcshellbasedsurfacemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsite",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcslab",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcslabtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcslippageconnectioncondition",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsoundproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsoundvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspace",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspaceheatertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspaceprogram",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspacethermalloadproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspatialstructureelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcspacetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsphere",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstackterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstair",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstairflight",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstairflighttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralactivity",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralanalysismodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralitem",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralcurveconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralmember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralcurvemember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralcurvemembervarying",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructurallinearaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructurallinearactionvarying",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralload",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadgroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadstatic",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadlinearforce",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadplanarforce",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingledisplacement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingledisplacementdistortion",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingleforce",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadsingleforcewarping",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralloadtemperature",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralplanaraction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralplanaractionvarying",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralpointconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralreaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralpointreaction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralresultgroup",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralsteelprofileproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralsurfaceconnection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralsurfacemember",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructuralsurfacemembervarying",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstructureddimensioncallout",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstylemodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcstyledrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsubcontractresource",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsubedge",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacecurvesweptareasolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsweptsurface",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfaceoflinearextrusion",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfaceofrevolution",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylelighting",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylerefraction",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestyleshading",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylerendering",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsurfacestylewithtextures",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsweptdisksolid",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcswitchingdevicetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsymbolstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcsystemfurnitureelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctable",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctablerow",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctanktype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctelecomaddress",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctendon",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctendonanchor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextliteral",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextliteralwithextent",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstylefontmodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstylefordefinedfont",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstyletextmodel",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctextstylewithboxcharacteristics",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturecoordinate",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturecoordinategenerator",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturemap",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctexturevertex",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcthermalmaterialproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseriesreferencerelationship",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseriesschedule",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctimeseriesvalue",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctopologyrepresentation",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctransformertype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctransportelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctransportelementtype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctrapeziumprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctrimmedcurve",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctubebundletype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifctwodirectionrepeatfactor",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcunitassignment",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcunitaryequipmenttype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvalvetype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvector",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertex",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertexbasedtexturemap",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertexloop",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvibrationisolatortype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvirtualelement",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcvirtualgridintersection",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwall",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwallstandardcase",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwalltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwasteterminaltype",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwaterproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindow",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindowliningproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindowpanelproperties",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcwindowstyle",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcworkcontrol",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcworkplan",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifcworkschedule",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper::Construct ) +, SchemaEntry("ifczone",&STEP::ObjectHelper::Construct ) }; } @@ -1059,46 +1059,49 @@ template <> size_t GenericFill(const DB& db, const LIST& return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologicalRepresentationItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdge* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationItem* in) { size_t base = GenericFill(db,params,static_cast(in)); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurveSegment* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurve* in) { size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcCompositeCurveSegment"); } do { // convert the 'Transition' argument + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCompositeCurve"); } do { // convert the 'Segments' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Transition, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurveSegment to be a `IfcTransitionCode`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Segments, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurve to be a `LIST [1:?] OF IfcCompositeCurveSegment`")); } } while(0); - do { // convert the 'SameSense' argument + do { // convert the 'SelfIntersect' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SameSense, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurveSegment to be a `BOOLEAN`")); } - } while(0); - do { // convert the 'ParentCurve' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ParentCurve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCompositeCurveSegment to be a `IfcCurve`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->SelfIntersect, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurve to be a `LOGICAL`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, Ifc2DCompositeCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoot* in) { size_t base = 0; @@ -1150,6 +1153,146 @@ template <> size_t GenericFill(const DB& db, const LIST& params, IfcO return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcControl* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcActionRequest* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcActor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTypeObject* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTypeProduct* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcActuatorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionFlowElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowControllerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalBoxType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirToAirHeatRecoveryType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAlarmType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDraughtingCallout* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveDirectedCallout* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAngularDimension* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcProduct* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -1170,69 +1313,10 @@ template <> size_t GenericFill(const DB& db, const LIST& params, Ifc return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralItem* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotation* in) { size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralConnection* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceConnection* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyleAssignment* in) -{ - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyleAssignment"); } do { // convert the 'Styles' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Styles, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyleAssignment to be a `SET [1:?] OF IfcPresentationStyleSelect`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcElement"); } do { // convert the 'Tag' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Tag, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcElement to be a `IfcIdentifier`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcBuildingElement"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWall* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProxy* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcAnnotation"); } return base; } // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyledItem* in) @@ -1268,6 +1352,41 @@ template <> size_t GenericFill(const DB& db, const LIST return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationCurveOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillArea* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillAreaOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurfaceOccurrence* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSymbolOccurrence* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -1275,347 +1394,191 @@ template <> size_t GenericFill(const DB& db, cons return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTerminatorSymbol* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationTextOccurrence* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveTerminator* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTypeObject* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTypeProduct* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElement"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementSubtraction* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElementSubtraction"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpeningElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcOpeningElement"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyle* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProfileDef* in) { size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyle"); } do { // convert the 'Name' argument + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->ProfileType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); } + } while(0); + do { // convert the 'ProfileName' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyle to be a `IfcLabel`")); } + try { GenericConvert( in->ProfileName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyle* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryClosedProfileDef* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcSurfaceStyle"); } do { // convert the 'Side' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryClosedProfileDef"); } do { // convert the 'OuterCurve' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Side, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSurfaceStyle to be a `IfcSurfaceSide`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->OuterCurve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryClosedProfileDef to be a `IfcCurve`")); } } while(0); - do { // convert the 'Styles' argument + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryOpenProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryOpenProfileDef"); } do { // convert the 'Curve' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Styles, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSurfaceStyle to be a `SET [1:5] OF IfcSurfaceStyleElementSelect`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Curve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryOpenProfileDef to be a `IfcBoundedCurve`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTileSymbolWithStyle* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryProfileDefWithVoids* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelationship* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelationship"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelConnects* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelConnects"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralMember* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMember* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCartesianTransformationOperator"); } do { // convert the 'Axis1' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcArbitraryProfileDefWithVoids"); } do { // convert the 'InnerCurves' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Axis1, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCartesianTransformationOperator to be a `IfcDirection`")); } - } while(0); - do { // convert the 'Axis2' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Axis2, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCartesianTransformationOperator to be a `IfcDirection`")); } - } while(0); - do { // convert the 'LocalOrigin' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - try { GenericConvert( in->LocalOrigin, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCartesianTransformationOperator to be a `IfcCartesianPoint`")); } - } while(0); - do { // convert the 'Scale' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Scale, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCartesianTransformationOperator to be a `REAL`")); } + try { GenericConvert( in->InnerCurves, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcArbitraryProfileDefWithVoids to be a `SET [1:?] OF IfcCurve`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator3D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCartesianTransformationOperator3D"); } do { // convert the 'Axis3' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Axis3, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCartesianTransformationOperator3D to be a `IfcDirection`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionFlowElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSanitaryTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricGeneratorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcResource* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGroup* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionResource* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsset* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcControl* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcParameterizedProfileDef* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcIShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcIShapeProfileDef"); } do { // convert the 'OverallWidth' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->OverallWidth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'OverallDepth' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->OverallDepth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'WebThickness' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + try { GenericConvert( in->WebThickness, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'FlangeThickness' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } + try { GenericConvert( in->FlangeThickness, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'FilletRadius' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[4]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->FilletRadius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsymmetricIShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentStandard* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricApplianceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnitureStandard* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDefinedSymbol* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlacement* in) { size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlacement"); } do { // convert the 'Location' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Location, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPlacement to be a `IfcCartesianPoint`")); } + } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcColourSpecification* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis1Placement* in) { - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis1Placement"); } do { // convert the 'Axis' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); } + try { GenericConvert( in->Axis, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis1Placement to be a `IfcDirection`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurve* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement2D* in) { - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLine* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLine"); } do { // convert the 'Pnt' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis2Placement2D"); } do { // convert the 'RefDirection' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Pnt, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLine to be a `IfcCartesianPoint`")); } - } while(0); - do { // convert the 'Dir' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Dir, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLine to be a `IfcVector`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLoop* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProperty* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProperty"); } do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProperty to be a `IfcIdentifier`")); } - } while(0); - do { // convert the 'Description' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Description, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProperty to be a `IfcText`")); } + try { GenericConvert( in->RefDirection, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement2D to be a `IfcDirection`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcComplexProperty* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement3D* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcComplexProperty"); } do { // convert the 'UsageName' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcAxis2Placement3D"); } do { // convert the 'Axis' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->UsageName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcComplexProperty to be a `IfcIdentifier`")); } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Axis, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement3D to be a `IfcDirection`")); } } while(0); - do { // convert the 'HasProperties' argument + do { // convert the 'RefDirection' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->HasProperties, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcComplexProperty to be a `SET [1:?] OF IfcProperty`")); } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefDirection, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcAxis2Placement3D to be a `IfcDirection`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCovering* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcBSplineCurve* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -1652,54 +1615,286 @@ template <> size_t GenericFill(const DB& db, const LIST& params return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcNamedUnit* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElement* in) { - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcNamedUnit"); } do { // convert the 'Dimensions' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcElement"); } do { // convert the 'Tag' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Dimensions, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcNamedUnit to be a `IfcDimensionalExponents`")); } - } while(0); - do { // convert the 'UnitType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->UnitType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcNamedUnit to be a `IfcUnitEnum`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Tag, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcElement to be a `IfcIdentifier`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubContractResource* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElement* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcBuildingElement"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeam* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcObjectPlacement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementType* in) { - size_t base = 0; - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGridPlacement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyDefinition* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeamType* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyDefinition"); } return base; + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySetDefinition* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBezierCurve* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySetDefinition"); } return base; + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgPrimitive3D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBlock* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoilerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanResult* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanResult"); } do { // convert the 'Operator' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Operator, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBooleanResult to be a `IfcBooleanOperator`")); } + } while(0); + do { // convert the 'FirstOperand' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->FirstOperand, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBooleanResult to be a `IfcBooleanOperand`")); } + } while(0); + do { // convert the 'SecondOperand' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + try { GenericConvert( in->SecondOperand, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBooleanResult to be a `IfcBooleanOperand`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanClippingResult* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanClippingResult"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundingBox* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcBoundingBox"); } do { // convert the 'Corner' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Corner, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBoundingBox to be a `IfcCartesianPoint`")); } + } while(0); + do { // convert the 'XDim' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->XDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'YDim' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->YDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'ZDim' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ZDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcHalfSpaceSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcHalfSpaceSolid"); } do { // convert the 'BaseSurface' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->BaseSurface, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcHalfSpaceSolid to be a `IfcSurface`")); } + } while(0); + do { // convert the 'AgreementFlag' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->AgreementFlag, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcHalfSpaceSolid to be a `BOOLEAN`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoxedHalfSpace* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcSpatialStructureElement"); } do { // convert the 'LongName' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->LongName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcSpatialStructureElement to be a `IfcLabel`")); } + } while(0); + do { // convert the 'CompositionType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->CompositionType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcSpatialStructureElement to be a `IfcElementCompositionEnum`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuilding* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 12) { throw STEP::TypeError("expected 12 arguments to IfcBuilding"); } do { // convert the 'ElevationOfRefHeight' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ElevationOfRefHeight, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcBuilding to be a `IfcLengthMeasure`")); } + } while(0); + do { // convert the 'ElevationOfTerrain' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ElevationOfTerrain, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcBuilding to be a `IfcLengthMeasure`")); } + } while(0); + do { // convert the 'BuildingAddress' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->BuildingAddress, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcBuilding to be a `IfcPostalAddress`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementComponent* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementPart* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxy* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxyType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingStorey* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFittingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierFittingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; } // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcPoint* in) @@ -1719,239 +1914,214 @@ template <> size_t GenericFill(const DB& db, const LIST& para return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceBound* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCartesianTransformationOperator"); } do { // convert the 'Axis1' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Axis1, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCartesianTransformationOperator to be a `IfcDirection`")); } + } while(0); + do { // convert the 'Axis2' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Axis2, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCartesianTransformationOperator to be a `IfcDirection`")); } + } while(0); + do { // convert the 'LocalOrigin' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + try { GenericConvert( in->LocalOrigin, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCartesianTransformationOperator to be a `IfcCartesianPoint`")); } + } while(0); + do { // convert the 'Scale' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Scale, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCartesianTransformationOperator to be a `REAL`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2DnonUniform* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator3D* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCartesianTransformationOperator3D"); } do { // convert the 'Axis3' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Axis3, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCartesianTransformationOperator3D to be a `IfcDirection`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator3DnonUniform* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcCartesianTransformationOperator3DnonUniform"); } do { // convert the 'Scale2' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Scale2, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } + } while(0); + do { // convert the 'Scale3' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Scale3, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCenterLineProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElement"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementSubtraction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElementSubtraction"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeFeature* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcChamferEdgeFeature* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcChillerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConic* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConic"); } do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConic to be a `IfcAxis2Placement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircle* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCircle"); } do { // convert the 'Radius' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Radius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCircle to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCircleProfileDef"); } do { // convert the 'Radius' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Radius, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCircleProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleHollowProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCircleHollowProfileDef"); } do { // convert the 'WallThickness' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->WallThickness, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCircleHollowProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologicalRepresentationItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConnectedFaceSet* in) { size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceBound"); } do { // convert the 'Bound' argument + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConnectedFaceSet"); } do { // convert the 'CfsFaces' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Bound, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBound to be a `IfcLoop`")); } - } while(0); - do { // convert the 'Orientation' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->Orientation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcFaceBound to be a `BOOLEAN`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->CfsFaces, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConnectedFaceSet to be a `SET [1:?] OF IfcFace`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeCurve* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcClosedShell* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcClosedShell"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoilType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOneDirectionRepeatFactor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTwoDirectionRepeatFactor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceAmbient* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlacement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlacement"); } do { // convert the 'Location' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Location, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPlacement to be a `IfcCartesianPoint`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis1Placement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis1Placement"); } do { // convert the 'Axis' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Axis, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis1Placement to be a `IfcDirection`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurfaceOccurrence* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowControllerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMeterType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationCurveOccurrence* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProfileDef* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcColourSpecification* in) { size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->ProfileType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); } - } while(0); - do { // convert the 'ProfileName' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ProfileName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); } + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubedge* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTankType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementComponent* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementPart* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentation* in) -{ - size_t base = 0; - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRepresentation"); } do { // convert the 'ContextOfItems' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->ContextOfItems, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentation to be a `IfcRepresentationContext`")); } - } while(0); - do { // convert the 'RepresentationIdentifier' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RepresentationIdentifier, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentation to be a `IfcLabel`")); } - } while(0); - do { // convert the 'RepresentationType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RepresentationType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRepresentation to be a `IfcLabel`")); } - } while(0); - do { // convert the 'Items' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } - try { GenericConvert( in->Items, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRepresentation to be a `SET [1:?] OF IfcRepresentationItem`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeRepresentation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailing* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyleModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyledRepresentation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcColourRgb* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -1973,150 +2143,79 @@ template <> size_t GenericFill(const DB& db, const LIST& params, I return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponentType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumn* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessoryType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVibrationIsolatorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcess* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcedure* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementAddition* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeFeature* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTrimmedCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcTrimmedCurve"); } do { // convert the 'BasisCurve' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->BasisCurve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcTrimmedCurve to be a `IfcCurve`")); } - } while(0); - do { // convert the 'Trim1' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Trim1, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } - } while(0); - do { // convert the 'Trim2' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Trim2, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } - } while(0); - do { // convert the 'SenseAgreement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SenseAgreement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcTrimmedCurve to be a `BOOLEAN`")); } - } while(0); - do { // convert the 'MasterRepresentation' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MasterRepresentation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcTrimmedCurve to be a `IfcTrimmingPreference`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteral* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcParameterizedProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailAShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponent* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgPrimitive3D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBlock* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailingType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumnType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointConnection* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProperty* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProperty"); } do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProperty to be a `IfcIdentifier`")); } + } while(0); + do { // convert the 'Description' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Description, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProperty to be a `IfcText`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcComplexProperty* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcComplexProperty"); } do { // convert the 'UsageName' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->UsageName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcComplexProperty to be a `IfcIdentifier`")); } + } while(0); + do { // convert the 'HasProperties' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->HasProperties, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcComplexProperty to be a `SET [1:?] OF IfcProperty`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurveSegment* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcCompositeCurveSegment"); } do { // convert the 'Transition' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Transition, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurveSegment to be a `IfcTransitionCode`")); } + } while(0); + do { // convert the 'SameSense' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SameSense, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurveSegment to be a `BOOLEAN`")); } + } while(0); + do { // convert the 'ParentCurve' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ParentCurve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCompositeCurveSegment to be a `IfcCurve`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -2128,55 +2227,117 @@ template <> size_t GenericFill(const DB& db, const LIST return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPumpType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompressorType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMember* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondenserType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMemberVarying* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondition* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConditionCriterion* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingMesh* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcResource* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarExtent* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionResource* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarBox* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionEquipmentResource* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionMaterialResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionProductResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcNamedUnit* in) +{ + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcNamedUnit"); } do { // convert the 'Dimensions' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Dimensions, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcNamedUnit to be a `IfcDimensionalExponents`")); } + } while(0); + do { // convert the 'UnitType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->UnitType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcNamedUnit to be a `IfcUnitEnum`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcContextDependentUnit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcControllerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcConversionBasedUnit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcConversionBasedUnit"); } do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcConversionBasedUnit to be a `IfcLabel`")); } + } while(0); + do { // convert the 'ConversionFactor' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ConversionFactor, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcConversionBasedUnit to be a `IfcMeasureWithUnit`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcCooledBeamType* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -2184,141 +2345,197 @@ template <> size_t GenericFill(const DB& db, const LIST& para return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrderRecord* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelContainedInSpatialStructure* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelContainedInSpatialStructure"); } do { // convert the 'RelatedElements' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatedElements, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelContainedInSpatialStructure to be a `SET [1:?] OF IfcProduct`")); } - } while(0); - do { // convert the 'RelatingStructure' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatingStructure, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelContainedInSpatialStructure to be a `IfcSpatialStructureElement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSimpleProperty* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSimpleProperty"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyListValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyListValue"); } do { // convert the 'ListValues' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ListValues, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertyListValue to be a `LIST [1:?] OF IfcValue`")); } - } while(0); - do { // convert the 'Unit' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Unit, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertyListValue to be a `IfcUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcSpatialStructureElement"); } do { // convert the 'LongName' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->LongName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcSpatialStructureElement to be a `IfcLabel`")); } - } while(0); - do { // convert the 'CompositionType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->CompositionType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcSpatialStructureElement to be a `IfcElementCompositionEnum`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingStorey* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcUnitaryEquipmentType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoolingTowerType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOutletType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostItem* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastenerType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostSchedule* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGroup* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCovering* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAnalysisModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlabType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoveringType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailAShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailFShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCrewResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSolidModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWall* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWallType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurveBoundedPlane* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyle* in) +{ + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyle"); } do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyle to be a `IfcLabel`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDamperType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDefinedSymbol* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDerivedProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiameterDimension* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTerminatorSymbol* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveTerminator* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDirection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcDirection"); } do { // convert the 'DirectionRatios' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->DirectionRatios, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcDirection to be a `LIST [2:3] OF REAL`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponent* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessory* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementComponentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessoryType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionElement* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -2333,28 +2550,342 @@ template <> size_t GenericFill(const DB& db, const L return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTShapeProfileDef* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPort* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionPort* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 10) { throw STEP::TypeError("expected 10 arguments to IfcDoor"); } do { // convert the 'OverallHeight' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->OverallHeight, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'OverallWidth' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->OverallWidth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyDefinition* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyDefinition"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySetDefinition* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySetDefinition"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoorStyle* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctFittingType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSegmentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSilencerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdge* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLoop* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeLoop* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricApplianceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowController* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricDistributionPoint* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricFlowStorageDeviceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricGeneratorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricHeaterType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricMotorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricTimeControlType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalCircuit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementAssembly* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementQuantity* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcElementQuantity"); } do { // convert the 'MethodOfMeasurement' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->MethodOfMeasurement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcElementQuantity to be a `IfcLabel`")); } + } while(0); + do { // convert the 'Quantities' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Quantities, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcElementQuantity to be a `SET [1:?] OF IfcPhysicalQuantity`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementarySurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcElementarySurface"); } do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcElementarySurface to be a `IfcAxis2Placement3D`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipse* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcEllipse"); } do { // convert the 'SemiAxis1' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SemiAxis1, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } + } while(0); + do { // convert the 'SemiAxis2' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SemiAxis2, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipseProfileDef* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolyline* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDevice* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyline"); } do { // convert the 'Points' argument + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentStandard* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporativeCoolerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporatorType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptAreaSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSweptAreaSolid"); } do { // convert the 'SweptArea' argument boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Points, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyline to be a `LIST [2:?] OF IfcCartesianPoint`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->SweptArea, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptAreaSolid to be a `IfcProfileDef`")); } + } while(0); + do { // convert the 'Position' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptAreaSolid to be a `IfcAxis2Placement3D`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDraughtingCallout* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcExtrudedAreaSolid* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcExtrudedAreaSolid"); } do { // convert the 'ExtrudedDirection' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ExtrudedDirection, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcExtrudedAreaSolid to be a `IfcDirection`")); } + } while(0); + do { // convert the 'Depth' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Depth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcExtrudedAreaSolid to be a `IfcPositiveLengthMeasure`")); } + } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- @@ -2370,177 +2901,304 @@ template <> size_t GenericFill(const DB& db, const LIST& params, IfcFac return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMemberVarying* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMotorConnectionType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirToAirHeatRecoveryType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlateType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSolidModel* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceBasedSurfaceModel* in) { size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFaceBasedSurfaceModel"); } do { // convert the 'FbsmFaces' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->FbsmFaces, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBasedSurfaceModel to be a `SET [1:?] OF IfcConnectedFaceSet`")); } + } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCsgSolid* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceBound* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceBound"); } do { // convert the 'Bound' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Bound, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBound to be a `IfcLoop`")); } + } while(0); + do { // convert the 'Orientation' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->Orientation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcFaceBound to be a `BOOLEAN`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceOuterBound* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceOuterBound"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcManifoldSolidBrep* in) { size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastenerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDecomposes* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDecomposes"); } do { // convert the 'RelatingObject' argument + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcManifoldSolidBrep"); } do { // convert the 'Outer' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->RelatingObject, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDecomposes to be a `IfcObjectDefinition`")); } - } while(0); - do { // convert the 'RelatedObjects' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->RelatedObjects, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDecomposes to be a `SET [1:?] OF IfcObjectDefinition`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->Outer, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcManifoldSolidBrep to be a `IfcClosedShell`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrep* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrepWithVoids* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFanType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastener* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastenerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFeatureElementAddition* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleHatching* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTileSymbolWithStyle* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTiles* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFilterType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFireSuppressionTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFitting* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowInstrumentType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMeterType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMovingDevice* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegment* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDevice* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTerminal* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDevice* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFooting* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElement* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumnType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElementType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularPyramid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcActionRequest* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnitureStandard* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralActivity* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnitureType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralReaction* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGasTerminalType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointReaction* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricSet* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAction* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricCurveSet* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearAction* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationContext* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearActionVarying* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCrewResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcChamferEdgeFeature* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompositeCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCompositeCurve"); } do { // convert the 'Segments' argument + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationContext"); } do { // convert the 'ContextIdentifier' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Segments, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurve to be a `LIST [1:?] OF IfcCompositeCurveSegment`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ContextIdentifier, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationContext to be a `IfcLabel`")); } } while(0); - do { // convert the 'SelfIntersect' argument + do { // convert the 'ContextType' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->SelfIntersect, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurve to be a `LOGICAL`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ContextType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationContext to be a `IfcLabel`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, Ifc2DCompositeCurve* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationContext* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcGeometricRepresentationContext"); } do { // convert the 'CoordinateSpaceDimension' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->CoordinateSpaceDimension, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcGeometricRepresentationContext to be a `IfcDimensionCount`")); } + } while(0); + do { // convert the 'Precision' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Precision, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcGeometricRepresentationContext to be a `REAL`")); } + } while(0); + do { // convert the 'WorldCoordinateSystem' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + try { GenericConvert( in->WorldCoordinateSystem, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcGeometricRepresentationContext to be a `IfcAxis2Placement`")); } + } while(0); + do { // convert the 'TrueNorth' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->TrueNorth, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcGeometricRepresentationContext to be a `IfcDirection`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationSubContext* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -2552,41 +3210,57 @@ template <> size_t GenericFill(const DB& db, const LIST& params, IfcGri return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendon* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcObjectPlacement* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = 0; + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcGridPlacement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleProfileDef* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcHeatExchangerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcHumidifierType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcInventory* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcJunctionBoxType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLShapeProfileDef* in) { size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRectangleProfileDef"); } do { // convert the 'XDim' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->XDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'YDim' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->YDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedRectangleProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeamType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLaborResource* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -2598,6 +3272,34 @@ template <> size_t GenericFill(const DB& db, const LIST& params, If return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightFixtureType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceAmbient* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceDirectional* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceGoniometric* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -2605,6 +3307,76 @@ template <> size_t GenericFill(const DB& db, const LI return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourcePositional* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceSpot* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLine* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLine"); } do { // convert the 'Pnt' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Pnt, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLine to be a `IfcCartesianPoint`")); } + } while(0); + do { // convert the 'Dir' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Dir, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLine to be a `IfcVector`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLinearDimension* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcLocalPlacement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLocalPlacement"); } do { // convert the 'PlacementRelTo' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->PlacementRelTo, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLocalPlacement to be a `IfcObjectPlacement`")); } + } while(0); + do { // convert the 'RelativePlacement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelativePlacement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLocalPlacement to be a `IfcAxis2Placement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMappedItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMappedItem"); } do { // convert the 'MappingSource' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappingSource, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMappedItem to be a `IfcRepresentationMap`")); } + } while(0); + do { // convert the 'MappingTarget' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappingTarget, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMappedItem to be a `IfcCartesianTransformationOperator`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcProductRepresentation* in) { size_t base = 0; @@ -2638,88 +3410,64 @@ template <> size_t GenericFill(const DB& db return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPermit* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMeasureWithUnit* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMeasureWithUnit"); } do { // convert the 'ValueComponent' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ValueComponent, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMeasureWithUnit to be a `IfcValue`")); } + } while(0); + do { // convert the 'UnitComponent' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->UnitComponent, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMeasureWithUnit to be a `IfcUnit`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastener* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcContextDependentUnit* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastenerType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowMovingDevice* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcColumn* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMember* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMemberType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProtectiveDeviceType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcMotorConnectionType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegment* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcess* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCompressorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTrapeziumProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefines* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRelDefines"); } do { // convert the 'RelatedObjects' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->RelatedObjects, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDefines to be a `SET [1:?] OF IfcObject`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcTask* in) { size_t base = GenericFill(db,params,static_cast(in)); @@ -2734,212 +3482,45 @@ template <> size_t GenericFill(const DB& db, const LIST& params, IfcMov return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceDirectional* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOccupant* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondenserType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConic* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve2D* in) { size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConic"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConic to be a `IfcAxis2Placement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipse* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcEllipse"); } do { // convert the 'SemiAxis1' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SemiAxis1, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'SemiAxis2' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SemiAxis2, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoorStyle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionControlElementType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve3D* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSensorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillAreaOccurrence* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWall* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnitureType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcControllerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFitting* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationContext* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationContext"); } do { // convert the 'ContextIdentifier' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ContextIdentifier, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationContext to be a `IfcLabel`")); } - } while(0); - do { // convert the 'ContextType' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ContextType, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationContext to be a `IfcLabel`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationMap* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationMap"); } do { // convert the 'MappingOrigin' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappingOrigin, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationMap to be a `IfcAxis2Placement`")); } - } while(0); - do { // convert the 'MappedRepresentation' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappedRepresentation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationMap to be a `IfcRepresentation`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDirection* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOneDirectionRepeatFactor* in) { size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcDirection"); } do { // convert the 'DirectionRatios' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->DirectionRatios, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcDirection to be a `LIST [2:3] OF REAL`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurveDirectedCallout* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAngularDimension* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpenShell* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkControl* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpeningElement* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkPlan* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPort* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionPort* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcOpeningElement"); } return base; } // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcOrderAction* in) @@ -2949,58 +3530,106 @@ template <> size_t GenericFill(const DB& db, const LIST& params, return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBeam* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOrientedEdge* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcOutletType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPath* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPerformanceHistory* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPermit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPile* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcManifoldSolidBrep* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeFittingType* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcManifoldSolidBrep"); } do { // convert the 'Outer' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Outer, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcManifoldSolidBrep to be a `IfcClosedShell`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrep* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleWithTextures* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeSegmentType* in) { - size_t base = 0; - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleWithTextures"); } do { // convert the 'Textures' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Textures, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleWithTextures to be a `LIST [1:?] OF IfcSurfaceTexture`")); } - } while(0); + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryClosedProfileDef* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarExtent* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryClosedProfileDef"); } do { // convert the 'OuterCurve' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->OuterCurve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryClosedProfileDef to be a `IfcCurve`")); } - } while(0); + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcHumidifierType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlanarBox* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlane* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlane"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlate* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlateType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPointOnSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -3016,159 +3645,166 @@ template <> size_t GenericFill(const DB& db, const LIST& params, If return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowFittingType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolygonalBoundedHalfSpace* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleTiles* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertex* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationFillArea* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlate* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCone* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundedSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLoadGroup* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationContext* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcGeometricRepresentationContext"); } do { // convert the 'CoordinateSpaceDimension' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPolygonalBoundedHalfSpace"); } do { // convert the 'Position' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->CoordinateSpaceDimension, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcGeometricRepresentationContext to be a `IfcDimensionCount`")); } + try { GenericConvert( in->Position, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPolygonalBoundedHalfSpace to be a `IfcAxis2Placement3D`")); } } while(0); - do { // convert the 'Precision' argument + do { // convert the 'PolygonalBoundary' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->PolygonalBoundary, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPolygonalBoundedHalfSpace to be a `IfcBoundedCurve`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolyline* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyline"); } do { // convert the 'Points' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Points, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyline to be a `LIST [2:?] OF IfcCartesianPoint`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPresentationStyleAssignment* in) +{ + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyleAssignment"); } do { // convert the 'Styles' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Styles, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyleAssignment to be a `SET [1:?] OF IfcPresentationStyleSelect`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProcedure* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProductDefinitionShape* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProject* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcProject"); } do { // convert the 'LongName' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Precision, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcGeometricRepresentationContext to be a `REAL`")); } + try { GenericConvert( in->LongName, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProject to be a `IfcLabel`")); } } while(0); - do { // convert the 'WorldCoordinateSystem' argument + do { // convert the 'Phase' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - try { GenericConvert( in->WorldCoordinateSystem, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcGeometricRepresentationContext to be a `IfcAxis2Placement`")); } - } while(0); - do { // convert the 'TrueNorth' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->TrueNorth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcGeometricRepresentationContext to be a `IfcDirection`")); } + try { GenericConvert( in->Phase, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProject to be a `IfcLabel`")); } + } while(0); + do { // convert the 'RepresentationContexts' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RepresentationContexts, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcProject to be a `SET [1:?] OF IfcRepresentationContext`")); } + } while(0); + do { // convert the 'UnitsInContext' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->UnitsInContext, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcProject to be a `IfcUnitAssignment`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTubeBundleType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrder* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarAction* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrderRecord* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcHeatExchangerType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionCurve* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceOuterBound* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionElement* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceOuterBound"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSphere* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourcePositional* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSimpleProperty* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSimpleProperty"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyBoundedValue* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointAction* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyEnumeratedValue* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowSegmentType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyListValue* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyListValue"); } do { // convert the 'ListValues' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->ListValues, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertyListValue to be a `LIST [1:?] OF IfcValue`")); } + } while(0); + do { // convert the 'Unit' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Unit, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertyListValue to be a `IfcUnit`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyReferenceValue* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFireSuppressionTerminalType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySet* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcPropertySet"); } do { // convert the 'HasProperties' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->HasProperties, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcPropertySet to be a `SET [1:?] OF IfcProperty`")); } + } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- @@ -3190,155 +3826,302 @@ template <> size_t GenericFill(const DB& db, const LIST& return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceBasedSurfaceModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFaceBasedSurfaceModel"); } do { // convert the 'FbsmFaces' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->FbsmFaces, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBasedSurfaceModel to be a `SET [1:?] OF IfcConnectedFaceSet`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement3D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcAxis2Placement3D"); } do { // convert the 'Axis' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Axis, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement3D to be a `IfcDirection`")); } - } while(0); - do { // convert the 'RefDirection' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefDirection, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcAxis2Placement3D to be a `IfcDirection`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralResultGroup* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcHalfSpaceSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcHalfSpaceSolid"); } do { // convert the 'BaseSurface' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->BaseSurface, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcHalfSpaceSolid to be a `IfcSurface`")); } - } while(0); - do { // convert the 'AgreementFlag' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->AgreementFlag, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcHalfSpaceSolid to be a `BOOLEAN`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGasTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMember* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertySet* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcPropertySet"); } do { // convert the 'HasProperties' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->HasProperties, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcPropertySet to be a `SET [1:?] OF IfcProperty`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCondition* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyEnumeratedValue* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyTableValue* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElementType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProtectiveDeviceType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteralWithExtent* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcProxy* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowController* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcPumpType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricDistributionPoint* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRadiusDimension* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailing* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsset* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRailingType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptAreaSolid* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRamp* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSweptAreaSolid"); } do { // convert the 'SweptArea' argument + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlight* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlightType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRationalBezierCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRectangleProfileDef"); } do { // convert the 'XDim' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->SweptArea, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptAreaSolid to be a `IfcProfileDef`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->XDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } } while(0); - do { // convert the 'Position' argument + do { // convert the 'YDim' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptAreaSolid to be a `IfcAxis2Placement3D`")); } + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->YDim, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleHollowProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularPyramid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularTrimmedSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingBar* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingMesh* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelationship* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelationship"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDecomposes* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDecomposes"); } do { // convert the 'RelatingObject' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->RelatingObject, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDecomposes to be a `IfcObjectDefinition`")); } + } while(0); + do { // convert the 'RelatedObjects' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + try { GenericConvert( in->RelatedObjects, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDecomposes to be a `SET [1:?] OF IfcObjectDefinition`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelAggregates* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelAggregates"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelConnects* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelConnects"); } return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelContainedInSpatialStructure* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelContainedInSpatialStructure"); } do { // convert the 'RelatedElements' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatedElements, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelContainedInSpatialStructure to be a `SET [1:?] OF IfcProduct`")); } + } while(0); + do { // convert the 'RelatingStructure' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatingStructure, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelContainedInSpatialStructure to be a `IfcSpatialStructureElement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefines* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRelDefines"); } do { // convert the 'RelatedObjects' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->RelatedObjects, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDefines to be a `SET [1:?] OF IfcObject`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefinesByProperties* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDefinesByProperties"); } do { // convert the 'RelatingPropertyDefinition' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->RelatingPropertyDefinition, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDefinesByProperties to be a `IfcPropertySetDefinition`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelFillsElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelFillsElement"); } do { // convert the 'RelatingOpeningElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatingOpeningElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelFillsElement to be a `IfcOpeningElement`")); } + } while(0); + do { // convert the 'RelatedBuildingElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatedBuildingElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelFillsElement to be a `IfcElement`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelOverridesProperties* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelVoidsElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelVoidsElement"); } do { // convert the 'RelatingBuildingElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatingBuildingElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelVoidsElement to be a `IfcElement`")); } + } while(0); + do { // convert the 'RelatedOpeningElement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->RelatedOpeningElement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelVoidsElement to be a `IfcFeatureElementSubtraction`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentation* in) +{ + size_t base = 0; + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRepresentation"); } do { // convert the 'ContextOfItems' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } + try { GenericConvert( in->ContextOfItems, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentation to be a `IfcRepresentationContext`")); } + } while(0); + do { // convert the 'RepresentationIdentifier' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RepresentationIdentifier, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentation to be a `IfcLabel`")); } + } while(0); + do { // convert the 'RepresentationType' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RepresentationType, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRepresentation to be a `IfcLabel`")); } + } while(0); + do { // convert the 'Items' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } + try { GenericConvert( in->Items, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRepresentation to be a `SET [1:?] OF IfcRepresentationItem`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRepresentationMap* in) +{ + size_t base = 0; + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationMap"); } do { // convert the 'MappingOrigin' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappingOrigin, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationMap to be a `IfcAxis2Placement`")); } + } while(0); + do { // convert the 'MappedRepresentation' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MappedRepresentation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationMap to be a `IfcRepresentation`")); } } while(0); return base; } @@ -3359,20 +4142,481 @@ template <> size_t GenericFill(const DB& db, const LIST& p return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowInstrumentType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCone* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCylinder* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoof* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedEdgeFeature* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedRectangleProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSIUnit* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcSIUnit"); } do { // convert the 'Prefix' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->Prefix, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSIUnit to be a `IfcSIPrefix`")); } + } while(0); + do { // convert the 'Name' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Name, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSIUnit to be a `IfcSIUnitName`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSanitaryTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcScheduleTimeControl* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSectionedSpine* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSensorType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEnergyConversionDevice* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcServiceLife* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcShapeRepresentation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcShellBasedSurfaceModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcShellBasedSurfaceModel"); } do { // convert the 'SbsmBoundary' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SbsmBoundary, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcShellBasedSurfaceModel to be a `SET [1:?] OF IfcShell`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSite* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 14) { throw STEP::TypeError("expected 14 arguments to IfcSite"); } do { // convert the 'RefLatitude' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefLatitude, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } + } while(0); + do { // convert the 'RefLongitude' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefLongitude, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } + } while(0); + do { // convert the 'RefElevation' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->RefElevation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcSite to be a `IfcLengthMeasure`")); } + } while(0); + do { // convert the 'LandTitleNumber' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->LandTitleNumber, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 12 to IfcSite to be a `IfcLabel`")); } + } while(0); + do { // convert the 'SiteAddress' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->SiteAddress, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 13 to IfcSite to be a `IfcPostalAddress`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlab* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlabType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpace* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 11) { throw STEP::TypeError("expected 11 arguments to IfcSpace"); } do { // convert the 'InteriorOrExteriorSpace' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->InteriorOrExteriorSpace, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSpace to be a `IfcInternalOrExternalEnum`")); } + } while(0); + do { // convert the 'ElevationWithFlooring' argument + boost::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; + try { GenericConvert( in->ElevationWithFlooring, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSpace to be a `IfcLengthMeasure`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceHeaterType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceProgram* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpatialStructureElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSphere* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStackTerminalType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStair* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlight* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlightType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralActivity* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralAnalysisModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralItem* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralMember* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMember* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveMemberVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearAction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLinearActionVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralLoadGroup* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarAction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarActionVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointAction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralReaction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPointReaction* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralResultGroup* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceConnection* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMember* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralSurfaceMemberVarying* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuredDimensionCallout* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyleModel* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcStyledRepresentation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubContractResource* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSubedge* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceCurveSweptAreaSolid* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptSurface* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfLinearExtrusion* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfRevolution* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyle* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcSurfaceStyle"); } do { // convert the 'Side' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Side, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSurfaceStyle to be a `IfcSurfaceSide`")); } + } while(0); + do { // convert the 'Styles' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Styles, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSurfaceStyle to be a `SET [1:5] OF IfcSurfaceStyleElementSelect`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleShading* in) { size_t base = 0; @@ -3438,1040 +4682,13 @@ template <> size_t GenericFill(const DB& db, const LIS return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoilerType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceStyleWithTextures* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxy* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLocalPlacement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLocalPlacement"); } do { // convert the 'PlacementRelTo' argument + size_t base = 0; + if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleWithTextures"); } do { // convert the 'Textures' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->PlacementRelTo, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLocalPlacement to be a `IfcObjectPlacement`")); } - } while(0); - do { // convert the 'RelativePlacement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelativePlacement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLocalPlacement to be a `IfcAxis2Placement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcZone* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStair* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallStandardCase* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiameterDimension* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcJunctionBoxType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator3DnonUniform* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcCartesianTransformationOperator3DnonUniform"); } do { // convert the 'Scale2' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Scale2, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } - } while(0); - do { // convert the 'Scale3' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Scale3, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcInventory* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConditionCriterion* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConnectedFaceSet* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConnectedFaceSet"); } do { // convert the 'CfsFaces' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->CfsFaces, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConnectedFaceSet to be a `SET [1:?] OF IfcFace`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOpenShell* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDoor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 10) { throw STEP::TypeError("expected 10 arguments to IfcDoor"); } do { // convert the 'OverallHeight' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->OverallHeight, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'OverallWidth' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->OverallWidth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcDoor to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBezierCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRationalBezierCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryProfileDefWithVoids* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcArbitraryProfileDefWithVoids"); } do { // convert the 'InnerCurves' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->InnerCurves, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcArbitraryProfileDefWithVoids to be a `SET [1:?] OF IfcCurve`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanResult* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanResult"); } do { // convert the 'Operator' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Operator, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBooleanResult to be a `IfcBooleanOperator`")); } - } while(0); - do { // convert the 'FirstOperand' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->FirstOperand, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBooleanResult to be a `IfcBooleanOperand`")); } - } while(0); - do { // convert the 'SecondOperand' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - try { GenericConvert( in->SecondOperand, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBooleanResult to be a `IfcBooleanOperand`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStackTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcIShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcIShapeProfileDef"); } do { // convert the 'OverallWidth' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->OverallWidth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'OverallDepth' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[1]=true; break; } - try { GenericConvert( in->OverallDepth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'WebThickness' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[2]=true; break; } - try { GenericConvert( in->WebThickness, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'FlangeThickness' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[3]=true; break; } - try { GenericConvert( in->FlangeThickness, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'FilletRadius' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[4]=true; break; } - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->FilletRadius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAsymmetricIShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEquipmentElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcClosedShell* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcClosedShell"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEllipseProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyBoundedValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoveringType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcActuatorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve2D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcAnnotation"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDistributionChamberElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOffsetCurve3D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFooting* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMappedItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMappedItem"); } do { // convert the 'MappingSource' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappingSource, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMappedItem to be a `IfcRepresentationMap`")); } - } while(0); - do { // convert the 'MappingTarget' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->MappingTarget, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMappedItem to be a `IfcCartesianTransformationOperator`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransformerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRightCircularCylinder* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceProgram* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcZShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangleHollowProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricSet* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricCurveSet* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcArbitraryOpenProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryOpenProfileDef"); } do { // convert the 'Curve' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Curve, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryOpenProfileDef to be a `IfcBoundedCurve`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFacetedBrepWithVoids* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVector* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcVector"); } do { // convert the 'Orientation' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Orientation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcVector to be a `IfcDirection`")); } - } while(0); - do { // convert the 'Magnitude' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Magnitude, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcVector to be a `IfcLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcServiceLife* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurveBoundedPlane* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCircle"); } do { // convert the 'Radius' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Radius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCircle to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertexLoop* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceCurveSweptAreaSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionEquipmentResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSectionedSpine* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyReferenceValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSite* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 14) { throw STEP::TypeError("expected 14 arguments to IfcSite"); } do { // convert the 'RefLatitude' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefLatitude, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } - } while(0); - do { // convert the 'RefLongitude' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefLongitude, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); } - } while(0); - do { // convert the 'RefElevation' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefElevation, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcSite to be a `IfcLengthMeasure`")); } - } while(0); - do { // convert the 'LandTitleNumber' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->LandTitleNumber, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 12 to IfcSite to be a `IfcLabel`")); } - } while(0); - do { // convert the 'SiteAddress' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->SiteAddress, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 13 to IfcSite to be a `IfcPostalAddress`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPerformanceHistory* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPropertyTableValue* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPolygonalBoundedHalfSpace* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPolygonalBoundedHalfSpace"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPolygonalBoundedHalfSpace to be a `IfcAxis2Placement3D`")); } - } while(0); - do { // convert the 'PolygonalBoundary' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->PolygonalBoundary, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPolygonalBoundedHalfSpace to be a `IfcBoundedCurve`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAxis2Placement2D* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis2Placement2D"); } do { // convert the 'RefDirection' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->RefDirection, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement2D to be a `IfcDirection`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFillAreaStyleHatching* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFastener* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcScheduleTimeControl* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricMotorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTimeSeriesSchedule* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTerminal* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoilType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFurnishingElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWasteTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindow* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricFlowStorageDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelAggregates* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelAggregates"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRamp* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLinearDimension* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementarySurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcElementarySurface"); } do { // convert the 'Position' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Position, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcElementarySurface to be a `IfcAxis2Placement3D`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionProductResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPath* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcActor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOccupant* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSwitchingDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSweptSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfLinearExtrusion* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcShellBasedSurfaceModel* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcShellBasedSurfaceModel"); } do { // convert the 'SbsmBoundary' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->SbsmBoundary, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcShellBasedSurfaceModel to be a `SET [1:?] OF IfcShell`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuilding* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 12) { throw STEP::TypeError("expected 12 arguments to IfcBuilding"); } do { // convert the 'ElevationOfRefHeight' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ElevationOfRefHeight, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcBuilding to be a `IfcLengthMeasure`")); } - } while(0); - do { // convert the 'ElevationOfTerrain' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ElevationOfTerrain, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcBuilding to be a `IfcLengthMeasure`")); } - } while(0); - do { // convert the 'BuildingAddress' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->BuildingAddress, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcBuilding to be a `IfcPostalAddress`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSIUnit* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcSIUnit"); } do { // convert the 'Prefix' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Prefix, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSIUnit to be a `IfcSIPrefix`")); } - } while(0); - do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSIUnit to be a `IfcSIUnitName`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDiscreteAccessory* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystemFurnitureElementType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementAssembly* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCoolingTowerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightSourceSpot* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporatorType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpaceHeaterType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElementQuantity* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcElementQuantity"); } do { // convert the 'MethodOfMeasurement' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->MethodOfMeasurement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcElementQuantity to be a `IfcLabel`")); } - } while(0); - do { // convert the 'Quantities' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Quantities, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcElementQuantity to be a `SET [1:?] OF IfcPhysicalQuantity`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlight* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConversionBasedUnit* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcConversionBasedUnit"); } do { // convert the 'Name' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Name, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcConversionBasedUnit to be a `IfcLabel`")); } - } while(0); - do { // convert the 'ConversionFactor' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ConversionFactor, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcConversionBasedUnit to be a `IfcMeasureWithUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcExtrudedAreaSolid* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcExtrudedAreaSolid"); } do { // convert the 'ExtrudedDirection' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ExtrudedDirection, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcExtrudedAreaSolid to be a `IfcDirection`")); } - } while(0); - do { // convert the 'Depth' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Depth, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcExtrudedAreaSolid to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectOrder* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBooleanClippingResult* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanClippingResult"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcReinforcingBar* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCenterLineProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcUShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoundingBox* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcBoundingBox"); } do { // convert the 'Corner' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->Corner, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBoundingBox to be a `IfcCartesianPoint`")); } - } while(0); - do { // convert the 'XDim' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->XDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'YDim' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->YDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } - } while(0); - do { // convert the 'ZDim' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ZDim, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindowStyle* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMemberType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLightFixtureType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowStorageDevice* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologyRepresentation* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelDefinesByProperties* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDefinesByProperties"); } do { // convert the 'RelatingPropertyDefinition' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->RelatingPropertyDefinition, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDefinesByProperties to be a `IfcPropertySetDefinition`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelOverridesProperties* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlightType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCircleProfileDef"); } do { // convert the 'Radius' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } - try { GenericConvert( in->Radius, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCircleProfileDef to be a `IfcPositiveLengthMeasure`")); } + try { GenericConvert( in->Textures, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleWithTextures to be a `LIST [1:?] OF IfcSurfaceTexture`")); } } while(0); return base; } @@ -4508,16 +4725,152 @@ template <> size_t GenericFill(const DB& db, const LIST& para return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralPlanarActionVarying* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSwitchingDeviceType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcValveType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcSystemFurnitureElementType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTankType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendon* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendonAnchor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteral* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTextLiteralWithExtent* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTimeSeriesSchedule* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTopologyRepresentation* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransformerType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElement* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTransportElementType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTrapeziumProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTrimmedCurve* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcTrimmedCurve"); } do { // convert the 'BasisCurve' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->BasisCurve, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcTrimmedCurve to be a `IfcCurve`")); } + } while(0); + do { // convert the 'Trim1' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Trim1, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } + } while(0); + do { // convert the 'Trim2' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->Trim2, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); } + } while(0); + do { // convert the 'SenseAgreement' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->SenseAgreement, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcTrimmedCurve to be a `BOOLEAN`")); } + } while(0); + do { // convert the 'MasterRepresentation' argument + boost::shared_ptr arg = params[base++]; + try { GenericConvert( in->MasterRepresentation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcTrimmedCurve to be a `IfcTrimmingPreference`")); } + } while(0); + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTubeBundleType* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcTwoDirectionRepeatFactor* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); +// this data structure is not used yet, so there is no code generated to fill its members + return base; +} +// ----------------------------------------------------------------------------------------------------------- +template <> size_t GenericFill(const DB& db, const LIST& params, IfcUShapeProfileDef* in) +{ + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -4533,248 +4886,46 @@ template <> size_t GenericFill(const DB& db, const LIST& para return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcVirtualElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuralCurveConnection* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDeviceType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoof* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricTimeControlType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPile* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostSchedule* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRampFlightType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDerivedProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCostItem* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEvaporativeCoolerType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcUnitaryEquipmentType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcChillerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBoxedHalfSpace* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCurtainWallType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcGeometricRepresentationSubContext* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDimensionCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPlane* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlane"); } return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionCurve* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDamperType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcValveType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMechanicalFastener* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVector* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctSilencerType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLaborResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFanType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProjectionElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCraneRailFShapeProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProject* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcProject"); } do { // convert the 'LongName' argument + size_t base = GenericFill(db,params,static_cast(in)); + if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcVector"); } do { // convert the 'Orientation' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->LongName, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProject to be a `IfcLabel`")); } + try { GenericConvert( in->Orientation, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcVector to be a `IfcDirection`")); } } while(0); - do { // convert the 'Phase' argument + do { // convert the 'Magnitude' argument boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->Phase, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProject to be a `IfcLabel`")); } - } while(0); - do { // convert the 'RepresentationContexts' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RepresentationContexts, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcProject to be a `SET [1:?] OF IfcRepresentationContext`")); } - } while(0); - do { // convert the 'UnitsInContext' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->UnitsInContext, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcProject to be a `IfcUnitAssignment`")); } + try { GenericConvert( in->Magnitude, arg, db ); break; } + catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcVector to be a `IfcLengthMeasure`")); } } while(0); return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelVoidsElement* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertex* in) { - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelVoidsElement"); } do { // convert the 'RelatingBuildingElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatingBuildingElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelVoidsElement to be a `IfcElement`")); } - } while(0); - do { // convert the 'RelatedOpeningElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatedOpeningElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelVoidsElement to be a `IfcFeatureElementSubtraction`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricalCircuit* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcLShapeProfileDef* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVertexLoop* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFlowTreatmentDevice* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -4786,163 +4937,72 @@ template <> size_t GenericFill(const DB& db, const LIST& params, return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAnnotationTextOccurrence* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVibrationIsolatorType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFilterType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcVirtualElement* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcEdgeLoop* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCircleHollowProfileDef* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCircleHollowProfileDef"); } do { // convert the 'WallThickness' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->WallThickness, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCircleHollowProfileDef to be a `IfcPositiveLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAirTerminalBoxType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStructuredDimensionCallout* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierSegmentType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcDuctFittingType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRectangularTrimmedSurface* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcProductDefinitionShape* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcStairFlight* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWall* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSlab* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallStandardCase* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcPipeFittingType* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSpace* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 11) { throw STEP::TypeError("expected 11 arguments to IfcSpace"); } do { // convert the 'InteriorOrExteriorSpace' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->InteriorOrExteriorSpace, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSpace to be a `IfcInternalOrExternalEnum`")); } - } while(0); - do { // convert the 'ElevationWithFlooring' argument - boost::shared_ptr arg = params[base++]; - if (dynamic_cast(&*arg)) break; - try { GenericConvert( in->ElevationWithFlooring, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSpace to be a `IfcLengthMeasure`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcBuildingElementProxyType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWallType* in) { size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcAlarmType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWasteTerminalType* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCableCarrierFittingType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindow* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRoundedEdgeFeature* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWindowStyle* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcFaceSurface* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkControl* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2D* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcWorkPlan* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcTendonAnchor* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } @@ -4954,76 +5014,16 @@ template <> size_t GenericFill(const DB& db, const LIST& params return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcSurfaceOfRevolution* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcZShapeProfileDef* in) { - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } // ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcElectricHeaterType* in) +template <> size_t GenericFill(const DB& db, const LIST& params, IfcZone* in) { - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcMeasureWithUnit* in) -{ - size_t base = 0; - if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMeasureWithUnit"); } do { // convert the 'ValueComponent' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->ValueComponent, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMeasureWithUnit to be a `IfcValue`")); } - } while(0); - do { // convert the 'UnitComponent' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->UnitComponent, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMeasureWithUnit to be a `IfcUnit`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcOrientedEdge* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcCartesianTransformationOperator2DnonUniform* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRelFillsElement* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); - if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelFillsElement"); } do { // convert the 'RelatingOpeningElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatingOpeningElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelFillsElement to be a `IfcOpeningElement`")); } - } while(0); - do { // convert the 'RelatedBuildingElement' argument - boost::shared_ptr arg = params[base++]; - try { GenericConvert( in->RelatedBuildingElement, arg, db ); break; } - catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelFillsElement to be a `IfcElement`")); } - } while(0); - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcConstructionMaterialResource* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); -// this data structure is not used yet, so there is no code generated to fill its members - return base; -} -// ----------------------------------------------------------------------------------------------------------- -template <> size_t GenericFill(const DB& db, const LIST& params, IfcRadiusDimension* in) -{ - size_t base = GenericFill(db,params,static_cast(in)); + size_t base = GenericFill(db,params,static_cast(in)); // this data structure is not used yet, so there is no code generated to fill its members return base; } diff --git a/code/IFCReaderGen.h b/code/IFCReaderGen.h index f87cf2b45..642a05f27 100644 --- a/code/IFCReaderGen.h +++ b/code/IFCReaderGen.h @@ -61,658 +61,658 @@ namespace IFC { // ****************************************************************************** - // C++ wrapper type for IfcSIPrefix - typedef ENUMERATION IfcSIPrefix; - // C++ wrapper type for IfcColour - typedef SELECT IfcColour; - // C++ wrapper type for IfcEvaporativeCoolerTypeEnum - typedef ENUMERATION IfcEvaporativeCoolerTypeEnum; - // C++ wrapper type for IfcMetricValueSelect - typedef SELECT IfcMetricValueSelect; - // C++ wrapper type for IfcCurtainWallTypeEnum - typedef ENUMERATION IfcCurtainWallTypeEnum; - // C++ wrapper type for IfcVolumetricFlowRateMeasure - typedef REAL IfcVolumetricFlowRateMeasure; - // C++ wrapper type for IfcPHMeasure - typedef REAL IfcPHMeasure; - // C++ wrapper type for IfcTimeStamp - typedef INTEGER IfcTimeStamp; - // C++ wrapper type for IfcSoundPressureMeasure - typedef REAL IfcSoundPressureMeasure; - // C++ wrapper type for IfcArithmeticOperatorEnum - typedef ENUMERATION IfcArithmeticOperatorEnum; - // C++ wrapper type for IfcOutletTypeEnum - typedef ENUMERATION IfcOutletTypeEnum; - // C++ wrapper type for IfcLampTypeEnum - typedef ENUMERATION IfcLampTypeEnum; - // C++ wrapper type for IfcObjectReferenceSelect - typedef SELECT IfcObjectReferenceSelect; - // C++ wrapper type for IfcDateTimeSelect - typedef SELECT IfcDateTimeSelect; - // C++ wrapper type for IfcElectricGeneratorTypeEnum - typedef ENUMERATION IfcElectricGeneratorTypeEnum; - // C++ wrapper type for IfcMoistureDiffusivityMeasure - typedef REAL IfcMoistureDiffusivityMeasure; - // C++ wrapper type for IfcCompoundPlaneAngleMeasure - typedef ListOf< INTEGER, 3, 3 > IfcCompoundPlaneAngleMeasure; - // C++ wrapper type for IfcDerivedUnitEnum - typedef ENUMERATION IfcDerivedUnitEnum; - // C++ wrapper type for IfcRotationalStiffnessMeasure - typedef REAL IfcRotationalStiffnessMeasure; - // C++ wrapper type for IfcPipeFittingTypeEnum - typedef ENUMERATION IfcPipeFittingTypeEnum; - // C++ wrapper type for IfcShearModulusMeasure - typedef REAL IfcShearModulusMeasure; - // C++ wrapper type for IfcContextDependentMeasure - typedef REAL IfcContextDependentMeasure; - // C++ wrapper type for IfcLightFixtureTypeEnum - typedef ENUMERATION IfcLightFixtureTypeEnum; - // C++ wrapper type for IfcResourceConsumptionEnum - typedef ENUMERATION IfcResourceConsumptionEnum; - // C++ wrapper type for IfcDistributionChamberElementTypeEnum - typedef ENUMERATION IfcDistributionChamberElementTypeEnum; - // C++ wrapper type for IfcPlaneAngleMeasure - typedef REAL IfcPlaneAngleMeasure; - // C++ wrapper type for IfcSlabTypeEnum - typedef ENUMERATION IfcSlabTypeEnum; - // C++ wrapper type for IfcCharacterStyleSelect - typedef SELECT IfcCharacterStyleSelect; - // C++ wrapper type for IfcDimensionExtentUsage - typedef ENUMERATION IfcDimensionExtentUsage; - // C++ wrapper type for IfcDynamicViscosityMeasure - typedef REAL IfcDynamicViscosityMeasure; - // C++ wrapper type for IfcPropertySourceEnum - typedef ENUMERATION IfcPropertySourceEnum; - // C++ wrapper type for IfcConstraintEnum - typedef ENUMERATION IfcConstraintEnum; - // C++ wrapper type for IfcLayerSetDirectionEnum - typedef ENUMERATION IfcLayerSetDirectionEnum; - // C++ wrapper type for IfcFontVariant - typedef STRING IfcFontVariant; - // C++ wrapper type for IfcModulusOfElasticityMeasure - typedef REAL IfcModulusOfElasticityMeasure; - // C++ wrapper type for IfcDoorPanelPositionEnum - typedef ENUMERATION IfcDoorPanelPositionEnum; - // C++ wrapper type for IfcWindowStyleConstructionEnum - typedef ENUMERATION IfcWindowStyleConstructionEnum; - // C++ wrapper type for IfcAmountOfSubstanceMeasure - typedef REAL IfcAmountOfSubstanceMeasure; - // C++ wrapper type for IfcCurvatureMeasure - typedef REAL IfcCurvatureMeasure; - // C++ wrapper type for IfcCableCarrierFittingTypeEnum - typedef ENUMERATION IfcCableCarrierFittingTypeEnum; - // C++ wrapper type for IfcMinuteInHour - typedef INTEGER IfcMinuteInHour; - // C++ wrapper type for IfcPressureMeasure - typedef REAL IfcPressureMeasure; - // C++ wrapper type for IfcElectricConductanceMeasure - typedef REAL IfcElectricConductanceMeasure; - // C++ wrapper type for IfcIsothermalMoistureCapacityMeasure - typedef REAL IfcIsothermalMoistureCapacityMeasure; - // C++ wrapper type for IfcFanTypeEnum - typedef ENUMERATION IfcFanTypeEnum; - // C++ wrapper type for IfcCurveOrEdgeCurve - typedef SELECT IfcCurveOrEdgeCurve; - // C++ wrapper type for IfcPipeSegmentTypeEnum - typedef ENUMERATION IfcPipeSegmentTypeEnum; - // C++ wrapper type for IfcEvaporatorTypeEnum - typedef ENUMERATION IfcEvaporatorTypeEnum; - // C++ wrapper type for IfcElectricCapacitanceMeasure - typedef REAL IfcElectricCapacitanceMeasure; - // C++ wrapper type for IfcElementAssemblyTypeEnum - typedef ENUMERATION IfcElementAssemblyTypeEnum; - // C++ wrapper type for IfcElectricCurrentMeasure - typedef REAL IfcElectricCurrentMeasure; - // C++ wrapper type for IfcThermalAdmittanceMeasure - typedef REAL IfcThermalAdmittanceMeasure; - // C++ wrapper type for IfcLibrarySelect - typedef SELECT IfcLibrarySelect; - // C++ wrapper type for IfcSanitaryTerminalTypeEnum - typedef ENUMERATION IfcSanitaryTerminalTypeEnum; - // C++ wrapper type for IfcValue - typedef SELECT IfcValue; - // C++ wrapper type for IfcRoleEnum - typedef ENUMERATION IfcRoleEnum; - // C++ wrapper type for IfcModulusOfRotationalSubgradeReactionMeasure - typedef REAL IfcModulusOfRotationalSubgradeReactionMeasure; - // C++ wrapper type for IfcWindowStyleOperationEnum - typedef ENUMERATION IfcWindowStyleOperationEnum; - // C++ wrapper type for IfcDayInMonthNumber - typedef INTEGER IfcDayInMonthNumber; - // C++ wrapper type for IfcDirectionSenseEnum - typedef ENUMERATION IfcDirectionSenseEnum; - // C++ wrapper type for IfcMotorConnectionTypeEnum - typedef ENUMERATION IfcMotorConnectionTypeEnum; - // C++ wrapper type for IfcMassDensityMeasure - typedef REAL IfcMassDensityMeasure; - // C++ wrapper type for IfcSpaceTypeEnum - typedef ENUMERATION IfcSpaceTypeEnum; - // C++ wrapper type for IfcTextAlignment - typedef STRING IfcTextAlignment; // C++ wrapper type for IfcAbsorbedDoseMeasure typedef REAL IfcAbsorbedDoseMeasure; - // C++ wrapper type for IfcObjectiveEnum - typedef ENUMERATION IfcObjectiveEnum; - // C++ wrapper type for IfcSoundScaleEnum - typedef ENUMERATION IfcSoundScaleEnum; - // C++ wrapper type for IfcIlluminanceMeasure - typedef REAL IfcIlluminanceMeasure; - // C++ wrapper type for IfcDoseEquivalentMeasure - typedef REAL IfcDoseEquivalentMeasure; - // C++ wrapper type for IfcPowerMeasure - typedef REAL IfcPowerMeasure; - // C++ wrapper type for IfcElectricVoltageMeasure - typedef REAL IfcElectricVoltageMeasure; - // C++ wrapper type for IfcFootingTypeEnum - typedef ENUMERATION IfcFootingTypeEnum; - // C++ wrapper type for IfcFontStyle - typedef STRING IfcFontStyle; - // C++ wrapper type for IfcShell - typedef SELECT IfcShell; - // C++ wrapper type for IfcPermeableCoveringOperationEnum - typedef ENUMERATION IfcPermeableCoveringOperationEnum; - // C++ wrapper type for IfcWarpingMomentMeasure - typedef REAL IfcWarpingMomentMeasure; - // C++ wrapper type for IfcSectionalAreaIntegralMeasure - typedef REAL IfcSectionalAreaIntegralMeasure; - // C++ wrapper type for IfcModulusOfSubgradeReactionMeasure - typedef REAL IfcModulusOfSubgradeReactionMeasure; - // C++ wrapper type for IfcRotationalFrequencyMeasure - typedef REAL IfcRotationalFrequencyMeasure; - // C++ wrapper type for IfcFillAreaStyleTileShapeSelect - typedef SELECT IfcFillAreaStyleTileShapeSelect; - // C++ wrapper type for IfcLoadGroupTypeEnum - typedef ENUMERATION IfcLoadGroupTypeEnum; - // C++ wrapper type for IfcSolidAngleMeasure - typedef REAL IfcSolidAngleMeasure; - // C++ wrapper type for IfcColourOrFactor - typedef SELECT IfcColourOrFactor; - // C++ wrapper type for IfcHourInDay - typedef INTEGER IfcHourInDay; - // C++ wrapper type for IfcLinearStiffnessMeasure - typedef REAL IfcLinearStiffnessMeasure; - // C++ wrapper type for IfcTimeMeasure - typedef REAL IfcTimeMeasure; - // C++ wrapper type for IfcBoxAlignment - typedef STRING IfcBoxAlignment; - // C++ wrapper type for IfcElectricFlowStorageDeviceTypeEnum - typedef ENUMERATION IfcElectricFlowStorageDeviceTypeEnum; - // C++ wrapper type for IfcOrientationSelect - typedef SELECT IfcOrientationSelect; - // C++ wrapper type for IfcSecondInMinute - typedef REAL IfcSecondInMinute; - // C++ wrapper type for IfcWorkControlTypeEnum - typedef ENUMERATION IfcWorkControlTypeEnum; - // C++ wrapper type for IfcHeatFluxDensityMeasure - typedef REAL IfcHeatFluxDensityMeasure; - // C++ wrapper type for IfcSizeSelect - typedef SELECT IfcSizeSelect; - // C++ wrapper type for IfcDimensionCount - typedef INTEGER IfcDimensionCount; - // C++ wrapper type for IfcValveTypeEnum - typedef ENUMERATION IfcValveTypeEnum; - // C++ wrapper type for IfcTransportElementTypeEnum - typedef ENUMERATION IfcTransportElementTypeEnum; - // C++ wrapper type for IfcInductanceMeasure - typedef REAL IfcInductanceMeasure; - // C++ wrapper type for IfcYearNumber - typedef INTEGER IfcYearNumber; - // C++ wrapper type for IfcDoorStyleConstructionEnum - typedef ENUMERATION IfcDoorStyleConstructionEnum; - // C++ wrapper type for IfcThermalExpansionCoefficientMeasure - typedef REAL IfcThermalExpansionCoefficientMeasure; - // C++ wrapper type for IfcCompressorTypeEnum - typedef ENUMERATION IfcCompressorTypeEnum; - // C++ wrapper type for IfcAxis2Placement - typedef SELECT IfcAxis2Placement; - // C++ wrapper type for IfcSwitchingDeviceTypeEnum - typedef ENUMERATION IfcSwitchingDeviceTypeEnum; - // C++ wrapper type for IfcDocumentConfidentialityEnum - typedef ENUMERATION IfcDocumentConfidentialityEnum; - // C++ wrapper type for IfcGasTerminalTypeEnum - typedef ENUMERATION IfcGasTerminalTypeEnum; - // C++ wrapper type for IfcServiceLifeTypeEnum - typedef ENUMERATION IfcServiceLifeTypeEnum; - // C++ wrapper type for IfcIntegerCountRateMeasure - typedef INTEGER IfcIntegerCountRateMeasure; - // C++ wrapper type for IfcDocumentStatusEnum - typedef ENUMERATION IfcDocumentStatusEnum; - // C++ wrapper type for IfcSpaceHeaterTypeEnum - typedef ENUMERATION IfcSpaceHeaterTypeEnum; - // C++ wrapper type for IfcWasteTerminalTypeEnum - typedef ENUMERATION IfcWasteTerminalTypeEnum; - // C++ wrapper type for IfcAirTerminalTypeEnum - typedef ENUMERATION IfcAirTerminalTypeEnum; - // C++ wrapper type for IfcProjectedOrTrueLengthEnum - typedef ENUMERATION IfcProjectedOrTrueLengthEnum; - // C++ wrapper type for IfcDuctFittingTypeEnum - typedef ENUMERATION IfcDuctFittingTypeEnum; - // C++ wrapper type for IfcLabel - typedef STRING IfcLabel; - // C++ wrapper type for IfcTextFontSelect - typedef SELECT IfcTextFontSelect; - // C++ wrapper type for IfcAnalysisTheoryTypeEnum - typedef ENUMERATION IfcAnalysisTheoryTypeEnum; - // C++ wrapper type for IfcProjectOrderRecordTypeEnum - typedef ENUMERATION IfcProjectOrderRecordTypeEnum; - // C++ wrapper type for IfcUnit - typedef SELECT IfcUnit; - // C++ wrapper type for IfcWindowPanelPositionEnum - typedef ENUMERATION IfcWindowPanelPositionEnum; - // C++ wrapper type for IfcSymbolStyleSelect - typedef SELECT IfcSymbolStyleSelect; - // C++ wrapper type for IfcWallTypeEnum - typedef ENUMERATION IfcWallTypeEnum; - // C++ wrapper type for IfcLightEmissionSourceEnum - typedef ENUMERATION IfcLightEmissionSourceEnum; - // C++ wrapper type for IfcModulusOfLinearSubgradeReactionMeasure - typedef REAL IfcModulusOfLinearSubgradeReactionMeasure; - // C++ wrapper type for IfcSpecularRoughness - typedef REAL IfcSpecularRoughness; - // C++ wrapper type for IfcTendonTypeEnum - typedef ENUMERATION IfcTendonTypeEnum; - // C++ wrapper type for IfcElectricMotorTypeEnum - typedef ENUMERATION IfcElectricMotorTypeEnum; - // C++ wrapper type for IfcCurveStyleFontSelect - typedef SELECT IfcCurveStyleFontSelect; - // C++ wrapper type for IfcPlanarForceMeasure - typedef REAL IfcPlanarForceMeasure; - // C++ wrapper type for IfcCoilTypeEnum - typedef ENUMERATION IfcCoilTypeEnum; - // C++ wrapper type for IfcSimpleValue - typedef SELECT IfcSimpleValue; - // C++ wrapper type for IfcLogicalOperatorEnum - typedef ENUMERATION IfcLogicalOperatorEnum; - // C++ wrapper type for IfcTransformerTypeEnum - typedef ENUMERATION IfcTransformerTypeEnum; - // C++ wrapper type for IfcVaporPermeabilityMeasure - typedef REAL IfcVaporPermeabilityMeasure; - // C++ wrapper type for IfcMassFlowRateMeasure - typedef REAL IfcMassFlowRateMeasure; - // C++ wrapper type for IfcBooleanOperator - typedef ENUMERATION IfcBooleanOperator; - // C++ wrapper type for IfcRadioActivityMeasure - typedef REAL IfcRadioActivityMeasure; - // C++ wrapper type for IfcSurfaceSide - typedef ENUMERATION IfcSurfaceSide; - // C++ wrapper type for IfcRibPlateDirectionEnum - typedef ENUMERATION IfcRibPlateDirectionEnum; - // C++ wrapper type for IfcGeometricSetSelect - typedef SELECT IfcGeometricSetSelect; - // C++ wrapper type for IfcVolumeMeasure - typedef REAL IfcVolumeMeasure; - // C++ wrapper type for IfcDoorPanelOperationEnum - typedef ENUMERATION IfcDoorPanelOperationEnum; - // C++ wrapper type for IfcElectricHeaterTypeEnum - typedef ENUMERATION IfcElectricHeaterTypeEnum; - // C++ wrapper type for IfcMagneticFluxMeasure - typedef REAL IfcMagneticFluxMeasure; - // C++ wrapper type for IfcThermalTransmittanceMeasure - typedef REAL IfcThermalTransmittanceMeasure; - // C++ wrapper type for IfcStructuralCurveTypeEnum - typedef ENUMERATION IfcStructuralCurveTypeEnum; - // C++ wrapper type for IfcMonetaryMeasure - typedef REAL IfcMonetaryMeasure; - // C++ wrapper type for IfcAssemblyPlaceEnum - typedef ENUMERATION IfcAssemblyPlaceEnum; - // C++ wrapper type for IfcReinforcingBarSurfaceEnum - typedef ENUMERATION IfcReinforcingBarSurfaceEnum; - // C++ wrapper type for IfcPointOrVertexPoint - typedef SELECT IfcPointOrVertexPoint; - // C++ wrapper type for IfcSpecificHeatCapacityMeasure - typedef REAL IfcSpecificHeatCapacityMeasure; - // C++ wrapper type for IfcChangeActionEnum - typedef ENUMERATION IfcChangeActionEnum; - // C++ wrapper type for IfcElectricDistributionPointFunctionEnum - typedef ENUMERATION IfcElectricDistributionPointFunctionEnum; - // C++ wrapper type for IfcBuildingElementProxyTypeEnum - typedef ENUMERATION IfcBuildingElementProxyTypeEnum; - // C++ wrapper type for IfcSequenceEnum - typedef ENUMERATION IfcSequenceEnum; - // C++ wrapper type for IfcAheadOrBehind - typedef ENUMERATION IfcAheadOrBehind; - // C++ wrapper type for IfcProjectOrderTypeEnum - typedef ENUMERATION IfcProjectOrderTypeEnum; - // C++ wrapper type for IfcTextStyleSelect - typedef SELECT IfcTextStyleSelect; - // C++ wrapper type for IfcCooledBeamTypeEnum - typedef ENUMERATION IfcCooledBeamTypeEnum; - // C++ wrapper type for IfcConnectionTypeEnum - typedef ENUMERATION IfcConnectionTypeEnum; - // C++ wrapper type for IfcSensorTypeEnum - typedef ENUMERATION IfcSensorTypeEnum; - // C++ wrapper type for IfcTrimmingPreference - typedef ENUMERATION IfcTrimmingPreference; - // C++ wrapper type for IfcStructuralSurfaceTypeEnum - typedef ENUMERATION IfcStructuralSurfaceTypeEnum; - // C++ wrapper type for IfcCostScheduleTypeEnum - typedef ENUMERATION IfcCostScheduleTypeEnum; - // C++ wrapper type for IfcSoundPowerMeasure - typedef REAL IfcSoundPowerMeasure; - // C++ wrapper type for IfcStairFlightTypeEnum - typedef ENUMERATION IfcStairFlightTypeEnum; - // C++ wrapper type for IfcDuctSegmentTypeEnum - typedef ENUMERATION IfcDuctSegmentTypeEnum; - // C++ wrapper type for IfcServiceLifeFactorTypeEnum - typedef ENUMERATION IfcServiceLifeFactorTypeEnum; - // C++ wrapper type for IfcBSplineCurveForm - typedef ENUMERATION IfcBSplineCurveForm; - // C++ wrapper type for IfcLuminousIntensityMeasure - typedef REAL IfcLuminousIntensityMeasure; - // C++ wrapper type for IfcCoolingTowerTypeEnum - typedef ENUMERATION IfcCoolingTowerTypeEnum; - // C++ wrapper type for IfcUnitEnum - typedef ENUMERATION IfcUnitEnum; - // C++ wrapper type for IfcPositivePlaneAngleMeasure - typedef REAL IfcPositivePlaneAngleMeasure; - // C++ wrapper type for IfcLightDistributionDataSourceSelect - typedef SELECT IfcLightDistributionDataSourceSelect; - // C++ wrapper type for IfcKinematicViscosityMeasure - typedef REAL IfcKinematicViscosityMeasure; - // C++ wrapper type for IfcDamperTypeEnum - typedef ENUMERATION IfcDamperTypeEnum; - // C++ wrapper type for IfcVectorOrDirection - typedef SELECT IfcVectorOrDirection; - // C++ wrapper type for IfcJunctionBoxTypeEnum - typedef ENUMERATION IfcJunctionBoxTypeEnum; - // C++ wrapper type for IfcActorSelect - typedef SELECT IfcActorSelect; - // C++ wrapper type for IfcElectricApplianceTypeEnum - typedef ENUMERATION IfcElectricApplianceTypeEnum; - // C++ wrapper type for IfcThermodynamicTemperatureMeasure - typedef REAL IfcThermodynamicTemperatureMeasure; - // C++ wrapper type for IfcMomentOfInertiaMeasure - typedef REAL IfcMomentOfInertiaMeasure; - // C++ wrapper type for IfcMonthInYearNumber - typedef INTEGER IfcMonthInYearNumber; - // C++ wrapper type for IfcStairTypeEnum - typedef ENUMERATION IfcStairTypeEnum; - // C++ wrapper type for IfcProtectiveDeviceTypeEnum - typedef ENUMERATION IfcProtectiveDeviceTypeEnum; - // C++ wrapper type for IfcTextDecoration - typedef STRING IfcTextDecoration; - // C++ wrapper type for IfcUnitaryEquipmentTypeEnum - typedef ENUMERATION IfcUnitaryEquipmentTypeEnum; - // C++ wrapper type for IfcElementCompositionEnum - typedef ENUMERATION IfcElementCompositionEnum; - // C++ wrapper type for IfcCurveFontOrScaledCurveFontSelect - typedef SELECT IfcCurveFontOrScaledCurveFontSelect; - // C++ wrapper type for IfcDescriptiveMeasure - typedef STRING IfcDescriptiveMeasure; - // C++ wrapper type for IfcProfileTypeEnum - typedef ENUMERATION IfcProfileTypeEnum; - // C++ wrapper type for IfcDoorStyleOperationEnum - typedef ENUMERATION IfcDoorStyleOperationEnum; - // C++ wrapper type for IfcTorqueMeasure - typedef REAL IfcTorqueMeasure; - // C++ wrapper type for IfcDaylightSavingHour - typedef INTEGER IfcDaylightSavingHour; - // C++ wrapper type for IfcRotationalMassMeasure - typedef REAL IfcRotationalMassMeasure; - // C++ wrapper type for IfcNullStyle - typedef ENUMERATION IfcNullStyle; - // C++ wrapper type for IfcFireSuppressionTerminalTypeEnum - typedef ENUMERATION IfcFireSuppressionTerminalTypeEnum; - // C++ wrapper type for IfcHeatingValueMeasure - typedef REAL IfcHeatingValueMeasure; - // C++ wrapper type for IfcRampFlightTypeEnum - typedef ENUMERATION IfcRampFlightTypeEnum; - // C++ wrapper type for IfcSpecularHighlightSelect - typedef SELECT IfcSpecularHighlightSelect; - // C++ wrapper type for IfcThermalLoadTypeEnum - typedef ENUMERATION IfcThermalLoadTypeEnum; - // C++ wrapper type for IfcVibrationIsolatorTypeEnum - typedef ENUMERATION IfcVibrationIsolatorTypeEnum; - // C++ wrapper type for IfcFillStyleSelect - typedef SELECT IfcFillStyleSelect; - // C++ wrapper type for IfcObjectTypeEnum - typedef ENUMERATION IfcObjectTypeEnum; - // C++ wrapper type for IfcHatchLineDistanceSelect - typedef SELECT IfcHatchLineDistanceSelect; - // C++ wrapper type for IfcPresentableText - typedef STRING IfcPresentableText; - // C++ wrapper type for IfcAnalysisModelTypeEnum - typedef ENUMERATION IfcAnalysisModelTypeEnum; - // C++ wrapper type for IfcAngularVelocityMeasure - typedef REAL IfcAngularVelocityMeasure; // C++ wrapper type for IfcAccelerationMeasure typedef REAL IfcAccelerationMeasure; - // C++ wrapper type for IfcThermalLoadSourceEnum - typedef ENUMERATION IfcThermalLoadSourceEnum; - // C++ wrapper type for IfcFlowDirectionEnum - typedef ENUMERATION IfcFlowDirectionEnum; - // C++ wrapper type for IfcTankTypeEnum - typedef ENUMERATION IfcTankTypeEnum; - // C++ wrapper type for IfcSurfaceTextureEnum - typedef ENUMERATION IfcSurfaceTextureEnum; - // C++ wrapper type for IfcTimeSeriesDataTypeEnum - typedef ENUMERATION IfcTimeSeriesDataTypeEnum; - // C++ wrapper type for IfcPhysicalOrVirtualEnum - typedef ENUMERATION IfcPhysicalOrVirtualEnum; - // C++ wrapper type for IfcDraughtingCalloutElement - typedef SELECT IfcDraughtingCalloutElement; - // C++ wrapper type for IfcDocumentSelect - typedef SELECT IfcDocumentSelect; - // C++ wrapper type for IfcThermalResistanceMeasure - typedef REAL IfcThermalResistanceMeasure; + // C++ wrapper type for IfcAmountOfSubstanceMeasure + typedef REAL IfcAmountOfSubstanceMeasure; + // C++ wrapper type for IfcAngularVelocityMeasure + typedef REAL IfcAngularVelocityMeasure; + // C++ wrapper type for IfcAreaMeasure + typedef REAL IfcAreaMeasure; + // C++ wrapper type for IfcBoolean + typedef BOOLEAN IfcBoolean; + // C++ wrapper type for IfcBoxAlignment + typedef STRING IfcBoxAlignment; + // C++ wrapper type for IfcCompoundPlaneAngleMeasure + typedef ListOf< INTEGER, 3, 3 > IfcCompoundPlaneAngleMeasure; + // C++ wrapper type for IfcContextDependentMeasure + typedef REAL IfcContextDependentMeasure; + // C++ wrapper type for IfcCountMeasure + typedef NUMBER IfcCountMeasure; + // C++ wrapper type for IfcCurvatureMeasure + typedef REAL IfcCurvatureMeasure; + // C++ wrapper type for IfcDayInMonthNumber + typedef INTEGER IfcDayInMonthNumber; + // C++ wrapper type for IfcDaylightSavingHour + typedef INTEGER IfcDaylightSavingHour; + // C++ wrapper type for IfcDescriptiveMeasure + typedef STRING IfcDescriptiveMeasure; + // C++ wrapper type for IfcDimensionCount + typedef INTEGER IfcDimensionCount; + // C++ wrapper type for IfcDoseEquivalentMeasure + typedef REAL IfcDoseEquivalentMeasure; + // C++ wrapper type for IfcDynamicViscosityMeasure + typedef REAL IfcDynamicViscosityMeasure; + // C++ wrapper type for IfcElectricCapacitanceMeasure + typedef REAL IfcElectricCapacitanceMeasure; + // C++ wrapper type for IfcElectricChargeMeasure + typedef REAL IfcElectricChargeMeasure; + // C++ wrapper type for IfcElectricConductanceMeasure + typedef REAL IfcElectricConductanceMeasure; + // C++ wrapper type for IfcElectricCurrentMeasure + typedef REAL IfcElectricCurrentMeasure; + // C++ wrapper type for IfcElectricResistanceMeasure + typedef REAL IfcElectricResistanceMeasure; + // C++ wrapper type for IfcElectricVoltageMeasure + typedef REAL IfcElectricVoltageMeasure; + // C++ wrapper type for IfcEnergyMeasure + typedef REAL IfcEnergyMeasure; + // C++ wrapper type for IfcFontStyle + typedef STRING IfcFontStyle; + // C++ wrapper type for IfcFontVariant + typedef STRING IfcFontVariant; + // C++ wrapper type for IfcFontWeight + typedef STRING IfcFontWeight; + // C++ wrapper type for IfcForceMeasure + typedef REAL IfcForceMeasure; + // C++ wrapper type for IfcFrequencyMeasure + typedef REAL IfcFrequencyMeasure; + // C++ wrapper type for IfcGloballyUniqueId + typedef STRING IfcGloballyUniqueId; + // C++ wrapper type for IfcHeatFluxDensityMeasure + typedef REAL IfcHeatFluxDensityMeasure; + // C++ wrapper type for IfcHeatingValueMeasure + typedef REAL IfcHeatingValueMeasure; + // C++ wrapper type for IfcHourInDay + typedef INTEGER IfcHourInDay; + // C++ wrapper type for IfcIdentifier + typedef STRING IfcIdentifier; + // C++ wrapper type for IfcIlluminanceMeasure + typedef REAL IfcIlluminanceMeasure; + // C++ wrapper type for IfcInductanceMeasure + typedef REAL IfcInductanceMeasure; + // C++ wrapper type for IfcInteger + typedef INTEGER IfcInteger; + // C++ wrapper type for IfcIntegerCountRateMeasure + typedef INTEGER IfcIntegerCountRateMeasure; + // C++ wrapper type for IfcIonConcentrationMeasure + typedef REAL IfcIonConcentrationMeasure; + // C++ wrapper type for IfcIsothermalMoistureCapacityMeasure + typedef REAL IfcIsothermalMoistureCapacityMeasure; + // C++ wrapper type for IfcKinematicViscosityMeasure + typedef REAL IfcKinematicViscosityMeasure; + // C++ wrapper type for IfcLabel + typedef STRING IfcLabel; + // C++ wrapper type for IfcLengthMeasure + typedef REAL IfcLengthMeasure; + // C++ wrapper type for IfcLinearForceMeasure + typedef REAL IfcLinearForceMeasure; + // C++ wrapper type for IfcLinearMomentMeasure + typedef REAL IfcLinearMomentMeasure; + // C++ wrapper type for IfcLinearStiffnessMeasure + typedef REAL IfcLinearStiffnessMeasure; + // C++ wrapper type for IfcLinearVelocityMeasure + typedef REAL IfcLinearVelocityMeasure; + // C++ wrapper type for IfcLogical + typedef LOGICAL IfcLogical; + // C++ wrapper type for IfcLuminousFluxMeasure + typedef REAL IfcLuminousFluxMeasure; + // C++ wrapper type for IfcLuminousIntensityDistributionMeasure + typedef REAL IfcLuminousIntensityDistributionMeasure; + // C++ wrapper type for IfcLuminousIntensityMeasure + typedef REAL IfcLuminousIntensityMeasure; + // C++ wrapper type for IfcMagneticFluxDensityMeasure + typedef REAL IfcMagneticFluxDensityMeasure; + // C++ wrapper type for IfcMagneticFluxMeasure + typedef REAL IfcMagneticFluxMeasure; + // C++ wrapper type for IfcMassDensityMeasure + typedef REAL IfcMassDensityMeasure; + // C++ wrapper type for IfcMassFlowRateMeasure + typedef REAL IfcMassFlowRateMeasure; + // C++ wrapper type for IfcMassMeasure + typedef REAL IfcMassMeasure; + // C++ wrapper type for IfcMassPerLengthMeasure + typedef REAL IfcMassPerLengthMeasure; + // C++ wrapper type for IfcMinuteInHour + typedef INTEGER IfcMinuteInHour; + // C++ wrapper type for IfcModulusOfElasticityMeasure + typedef REAL IfcModulusOfElasticityMeasure; + // C++ wrapper type for IfcModulusOfLinearSubgradeReactionMeasure + typedef REAL IfcModulusOfLinearSubgradeReactionMeasure; + // C++ wrapper type for IfcModulusOfRotationalSubgradeReactionMeasure + typedef REAL IfcModulusOfRotationalSubgradeReactionMeasure; + // C++ wrapper type for IfcModulusOfSubgradeReactionMeasure + typedef REAL IfcModulusOfSubgradeReactionMeasure; + // C++ wrapper type for IfcMoistureDiffusivityMeasure + typedef REAL IfcMoistureDiffusivityMeasure; + // C++ wrapper type for IfcMolecularWeightMeasure + typedef REAL IfcMolecularWeightMeasure; + // C++ wrapper type for IfcMomentOfInertiaMeasure + typedef REAL IfcMomentOfInertiaMeasure; + // C++ wrapper type for IfcMonetaryMeasure + typedef REAL IfcMonetaryMeasure; + // C++ wrapper type for IfcMonthInYearNumber + typedef INTEGER IfcMonthInYearNumber; + // C++ wrapper type for IfcNormalisedRatioMeasure + typedef REAL IfcNormalisedRatioMeasure; + // C++ wrapper type for IfcNumericMeasure + typedef NUMBER IfcNumericMeasure; + // C++ wrapper type for IfcPHMeasure + typedef REAL IfcPHMeasure; + // C++ wrapper type for IfcParameterValue + typedef REAL IfcParameterValue; + // C++ wrapper type for IfcPlanarForceMeasure + typedef REAL IfcPlanarForceMeasure; + // C++ wrapper type for IfcPlaneAngleMeasure + typedef REAL IfcPlaneAngleMeasure; + // C++ wrapper type for IfcPositiveLengthMeasure + typedef REAL IfcPositiveLengthMeasure; + // C++ wrapper type for IfcPositivePlaneAngleMeasure + typedef REAL IfcPositivePlaneAngleMeasure; + // C++ wrapper type for IfcPositiveRatioMeasure + typedef REAL IfcPositiveRatioMeasure; + // C++ wrapper type for IfcPowerMeasure + typedef REAL IfcPowerMeasure; + // C++ wrapper type for IfcPresentableText + typedef STRING IfcPresentableText; + // C++ wrapper type for IfcPressureMeasure + typedef REAL IfcPressureMeasure; + // C++ wrapper type for IfcRadioActivityMeasure + typedef REAL IfcRadioActivityMeasure; + // C++ wrapper type for IfcRatioMeasure + typedef REAL IfcRatioMeasure; + // C++ wrapper type for IfcReal + typedef REAL IfcReal; + // C++ wrapper type for IfcRotationalFrequencyMeasure + typedef REAL IfcRotationalFrequencyMeasure; + // C++ wrapper type for IfcRotationalMassMeasure + typedef REAL IfcRotationalMassMeasure; + // C++ wrapper type for IfcRotationalStiffnessMeasure + typedef REAL IfcRotationalStiffnessMeasure; + // C++ wrapper type for IfcSecondInMinute + typedef REAL IfcSecondInMinute; + // C++ wrapper type for IfcSectionModulusMeasure + typedef REAL IfcSectionModulusMeasure; + // C++ wrapper type for IfcSectionalAreaIntegralMeasure + typedef REAL IfcSectionalAreaIntegralMeasure; + // C++ wrapper type for IfcShearModulusMeasure + typedef REAL IfcShearModulusMeasure; + // C++ wrapper type for IfcSolidAngleMeasure + typedef REAL IfcSolidAngleMeasure; + // C++ wrapper type for IfcSoundPowerMeasure + typedef REAL IfcSoundPowerMeasure; + // C++ wrapper type for IfcSoundPressureMeasure + typedef REAL IfcSoundPressureMeasure; + // C++ wrapper type for IfcSpecificHeatCapacityMeasure + typedef REAL IfcSpecificHeatCapacityMeasure; + // C++ wrapper type for IfcSpecularExponent + typedef REAL IfcSpecularExponent; + // C++ wrapper type for IfcSpecularRoughness + typedef REAL IfcSpecularRoughness; // C++ wrapper type for IfcTemperatureGradientMeasure typedef REAL IfcTemperatureGradientMeasure; + // C++ wrapper type for IfcText + typedef STRING IfcText; + // C++ wrapper type for IfcTextAlignment + typedef STRING IfcTextAlignment; + // C++ wrapper type for IfcTextDecoration + typedef STRING IfcTextDecoration; + // C++ wrapper type for IfcTextFontName + typedef STRING IfcTextFontName; + // C++ wrapper type for IfcTextTransformation + typedef STRING IfcTextTransformation; + // C++ wrapper type for IfcThermalAdmittanceMeasure + typedef REAL IfcThermalAdmittanceMeasure; + // C++ wrapper type for IfcThermalConductivityMeasure + typedef REAL IfcThermalConductivityMeasure; + // C++ wrapper type for IfcThermalExpansionCoefficientMeasure + typedef REAL IfcThermalExpansionCoefficientMeasure; + // C++ wrapper type for IfcThermalResistanceMeasure + typedef REAL IfcThermalResistanceMeasure; + // C++ wrapper type for IfcThermalTransmittanceMeasure + typedef REAL IfcThermalTransmittanceMeasure; + // C++ wrapper type for IfcThermodynamicTemperatureMeasure + typedef REAL IfcThermodynamicTemperatureMeasure; + // C++ wrapper type for IfcTimeMeasure + typedef REAL IfcTimeMeasure; + // C++ wrapper type for IfcTimeStamp + typedef INTEGER IfcTimeStamp; + // C++ wrapper type for IfcTorqueMeasure + typedef REAL IfcTorqueMeasure; + // C++ wrapper type for IfcVaporPermeabilityMeasure + typedef REAL IfcVaporPermeabilityMeasure; + // C++ wrapper type for IfcVolumeMeasure + typedef REAL IfcVolumeMeasure; + // C++ wrapper type for IfcVolumetricFlowRateMeasure + typedef REAL IfcVolumetricFlowRateMeasure; + // C++ wrapper type for IfcWarpingConstantMeasure + typedef REAL IfcWarpingConstantMeasure; + // C++ wrapper type for IfcWarpingMomentMeasure + typedef REAL IfcWarpingMomentMeasure; + // C++ wrapper type for IfcYearNumber + typedef INTEGER IfcYearNumber; + // C++ wrapper type for IfcActionSourceTypeEnum + typedef ENUMERATION IfcActionSourceTypeEnum; + // C++ wrapper type for IfcActionTypeEnum + typedef ENUMERATION IfcActionTypeEnum; + // C++ wrapper type for IfcActuatorTypeEnum + typedef ENUMERATION IfcActuatorTypeEnum; + // C++ wrapper type for IfcAddressTypeEnum + typedef ENUMERATION IfcAddressTypeEnum; + // C++ wrapper type for IfcAheadOrBehind + typedef ENUMERATION IfcAheadOrBehind; + // C++ wrapper type for IfcAirTerminalBoxTypeEnum + typedef ENUMERATION IfcAirTerminalBoxTypeEnum; + // C++ wrapper type for IfcAirTerminalTypeEnum + typedef ENUMERATION IfcAirTerminalTypeEnum; + // C++ wrapper type for IfcAirToAirHeatRecoveryTypeEnum + typedef ENUMERATION IfcAirToAirHeatRecoveryTypeEnum; + // C++ wrapper type for IfcAlarmTypeEnum + typedef ENUMERATION IfcAlarmTypeEnum; + // C++ wrapper type for IfcAnalysisModelTypeEnum + typedef ENUMERATION IfcAnalysisModelTypeEnum; + // C++ wrapper type for IfcAnalysisTheoryTypeEnum + typedef ENUMERATION IfcAnalysisTheoryTypeEnum; + // C++ wrapper type for IfcArithmeticOperatorEnum + typedef ENUMERATION IfcArithmeticOperatorEnum; + // C++ wrapper type for IfcAssemblyPlaceEnum + typedef ENUMERATION IfcAssemblyPlaceEnum; + // C++ wrapper type for IfcBSplineCurveForm + typedef ENUMERATION IfcBSplineCurveForm; + // C++ wrapper type for IfcBeamTypeEnum + typedef ENUMERATION IfcBeamTypeEnum; + // C++ wrapper type for IfcBenchmarkEnum + typedef ENUMERATION IfcBenchmarkEnum; + // C++ wrapper type for IfcBoilerTypeEnum + typedef ENUMERATION IfcBoilerTypeEnum; + // C++ wrapper type for IfcBooleanOperator + typedef ENUMERATION IfcBooleanOperator; + // C++ wrapper type for IfcBuildingElementProxyTypeEnum + typedef ENUMERATION IfcBuildingElementProxyTypeEnum; + // C++ wrapper type for IfcCableCarrierFittingTypeEnum + typedef ENUMERATION IfcCableCarrierFittingTypeEnum; + // C++ wrapper type for IfcCableCarrierSegmentTypeEnum + typedef ENUMERATION IfcCableCarrierSegmentTypeEnum; + // C++ wrapper type for IfcCableSegmentTypeEnum + typedef ENUMERATION IfcCableSegmentTypeEnum; + // C++ wrapper type for IfcChangeActionEnum + typedef ENUMERATION IfcChangeActionEnum; + // C++ wrapper type for IfcChillerTypeEnum + typedef ENUMERATION IfcChillerTypeEnum; + // C++ wrapper type for IfcCoilTypeEnum + typedef ENUMERATION IfcCoilTypeEnum; + // C++ wrapper type for IfcColumnTypeEnum + typedef ENUMERATION IfcColumnTypeEnum; + // C++ wrapper type for IfcCompressorTypeEnum + typedef ENUMERATION IfcCompressorTypeEnum; + // C++ wrapper type for IfcCondenserTypeEnum + typedef ENUMERATION IfcCondenserTypeEnum; + // C++ wrapper type for IfcConnectionTypeEnum + typedef ENUMERATION IfcConnectionTypeEnum; + // C++ wrapper type for IfcConstraintEnum + typedef ENUMERATION IfcConstraintEnum; + // C++ wrapper type for IfcControllerTypeEnum + typedef ENUMERATION IfcControllerTypeEnum; + // C++ wrapper type for IfcCooledBeamTypeEnum + typedef ENUMERATION IfcCooledBeamTypeEnum; + // C++ wrapper type for IfcCoolingTowerTypeEnum + typedef ENUMERATION IfcCoolingTowerTypeEnum; + // C++ wrapper type for IfcCostScheduleTypeEnum + typedef ENUMERATION IfcCostScheduleTypeEnum; + // C++ wrapper type for IfcCoveringTypeEnum + typedef ENUMERATION IfcCoveringTypeEnum; + // C++ wrapper type for IfcCurrencyEnum + typedef ENUMERATION IfcCurrencyEnum; + // C++ wrapper type for IfcCurtainWallTypeEnum + typedef ENUMERATION IfcCurtainWallTypeEnum; + // C++ wrapper type for IfcDamperTypeEnum + typedef ENUMERATION IfcDamperTypeEnum; + // C++ wrapper type for IfcDataOriginEnum + typedef ENUMERATION IfcDataOriginEnum; + // C++ wrapper type for IfcDerivedUnitEnum + typedef ENUMERATION IfcDerivedUnitEnum; + // C++ wrapper type for IfcDimensionExtentUsage + typedef ENUMERATION IfcDimensionExtentUsage; + // C++ wrapper type for IfcDirectionSenseEnum + typedef ENUMERATION IfcDirectionSenseEnum; + // C++ wrapper type for IfcDistributionChamberElementTypeEnum + typedef ENUMERATION IfcDistributionChamberElementTypeEnum; + // C++ wrapper type for IfcDocumentConfidentialityEnum + typedef ENUMERATION IfcDocumentConfidentialityEnum; + // C++ wrapper type for IfcDocumentStatusEnum + typedef ENUMERATION IfcDocumentStatusEnum; + // C++ wrapper type for IfcDoorPanelOperationEnum + typedef ENUMERATION IfcDoorPanelOperationEnum; + // C++ wrapper type for IfcDoorPanelPositionEnum + typedef ENUMERATION IfcDoorPanelPositionEnum; + // C++ wrapper type for IfcDoorStyleConstructionEnum + typedef ENUMERATION IfcDoorStyleConstructionEnum; + // C++ wrapper type for IfcDoorStyleOperationEnum + typedef ENUMERATION IfcDoorStyleOperationEnum; + // C++ wrapper type for IfcDuctFittingTypeEnum + typedef ENUMERATION IfcDuctFittingTypeEnum; + // C++ wrapper type for IfcDuctSegmentTypeEnum + typedef ENUMERATION IfcDuctSegmentTypeEnum; + // C++ wrapper type for IfcDuctSilencerTypeEnum + typedef ENUMERATION IfcDuctSilencerTypeEnum; + // C++ wrapper type for IfcElectricApplianceTypeEnum + typedef ENUMERATION IfcElectricApplianceTypeEnum; + // C++ wrapper type for IfcElectricCurrentEnum + typedef ENUMERATION IfcElectricCurrentEnum; + // C++ wrapper type for IfcElectricDistributionPointFunctionEnum + typedef ENUMERATION IfcElectricDistributionPointFunctionEnum; + // C++ wrapper type for IfcElectricFlowStorageDeviceTypeEnum + typedef ENUMERATION IfcElectricFlowStorageDeviceTypeEnum; + // C++ wrapper type for IfcElectricGeneratorTypeEnum + typedef ENUMERATION IfcElectricGeneratorTypeEnum; + // C++ wrapper type for IfcElectricHeaterTypeEnum + typedef ENUMERATION IfcElectricHeaterTypeEnum; + // C++ wrapper type for IfcElectricMotorTypeEnum + typedef ENUMERATION IfcElectricMotorTypeEnum; + // C++ wrapper type for IfcElectricTimeControlTypeEnum + typedef ENUMERATION IfcElectricTimeControlTypeEnum; + // C++ wrapper type for IfcElementAssemblyTypeEnum + typedef ENUMERATION IfcElementAssemblyTypeEnum; + // C++ wrapper type for IfcElementCompositionEnum + typedef ENUMERATION IfcElementCompositionEnum; + // C++ wrapper type for IfcEnergySequenceEnum + typedef ENUMERATION IfcEnergySequenceEnum; + // C++ wrapper type for IfcEnvironmentalImpactCategoryEnum + typedef ENUMERATION IfcEnvironmentalImpactCategoryEnum; + // C++ wrapper type for IfcEvaporativeCoolerTypeEnum + typedef ENUMERATION IfcEvaporativeCoolerTypeEnum; + // C++ wrapper type for IfcEvaporatorTypeEnum + typedef ENUMERATION IfcEvaporatorTypeEnum; + // C++ wrapper type for IfcFanTypeEnum + typedef ENUMERATION IfcFanTypeEnum; + // C++ wrapper type for IfcFilterTypeEnum + typedef ENUMERATION IfcFilterTypeEnum; + // C++ wrapper type for IfcFireSuppressionTerminalTypeEnum + typedef ENUMERATION IfcFireSuppressionTerminalTypeEnum; + // C++ wrapper type for IfcFlowDirectionEnum + typedef ENUMERATION IfcFlowDirectionEnum; + // C++ wrapper type for IfcFlowInstrumentTypeEnum + typedef ENUMERATION IfcFlowInstrumentTypeEnum; + // C++ wrapper type for IfcFlowMeterTypeEnum + typedef ENUMERATION IfcFlowMeterTypeEnum; + // C++ wrapper type for IfcFootingTypeEnum + typedef ENUMERATION IfcFootingTypeEnum; + // C++ wrapper type for IfcGasTerminalTypeEnum + typedef ENUMERATION IfcGasTerminalTypeEnum; // C++ wrapper type for IfcGeometricProjectionEnum typedef ENUMERATION IfcGeometricProjectionEnum; // C++ wrapper type for IfcGlobalOrLocalEnum typedef ENUMERATION IfcGlobalOrLocalEnum; - // C++ wrapper type for IfcAreaMeasure - typedef REAL IfcAreaMeasure; - // C++ wrapper type for IfcCsgSelect - typedef SELECT IfcCsgSelect; - // C++ wrapper type for IfcOccupantTypeEnum - typedef ENUMERATION IfcOccupantTypeEnum; - // C++ wrapper type for IfcEnergySequenceEnum - typedef ENUMERATION IfcEnergySequenceEnum; - // C++ wrapper type for IfcFlowMeterTypeEnum - typedef ENUMERATION IfcFlowMeterTypeEnum; - // C++ wrapper type for IfcSectionModulusMeasure - typedef REAL IfcSectionModulusMeasure; - // C++ wrapper type for IfcAirTerminalBoxTypeEnum - typedef ENUMERATION IfcAirTerminalBoxTypeEnum; - // C++ wrapper type for IfcIdentifier - typedef STRING IfcIdentifier; - // C++ wrapper type for IfcInteger - typedef INTEGER IfcInteger; - // C++ wrapper type for IfcProcedureTypeEnum - typedef ENUMERATION IfcProcedureTypeEnum; - // C++ wrapper type for IfcBenchmarkEnum - typedef ENUMERATION IfcBenchmarkEnum; - // C++ wrapper type for IfcWindowPanelOperationEnum - typedef ENUMERATION IfcWindowPanelOperationEnum; - // C++ wrapper type for IfcTrimmingSelect - typedef SELECT IfcTrimmingSelect; - // C++ wrapper type for IfcReal - typedef REAL IfcReal; - // C++ wrapper type for IfcSurfaceStyleElementSelect - typedef SELECT IfcSurfaceStyleElementSelect; - // C++ wrapper type for IfcAirToAirHeatRecoveryTypeEnum - typedef ENUMERATION IfcAirToAirHeatRecoveryTypeEnum; - // C++ wrapper type for IfcNormalisedRatioMeasure - typedef REAL IfcNormalisedRatioMeasure; - // C++ wrapper type for IfcCableSegmentTypeEnum - typedef ENUMERATION IfcCableSegmentTypeEnum; - // C++ wrapper type for IfcBeamTypeEnum - typedef ENUMERATION IfcBeamTypeEnum; - // C++ wrapper type for IfcBooleanOperand - typedef SELECT IfcBooleanOperand; - // C++ wrapper type for IfcFrequencyMeasure - typedef REAL IfcFrequencyMeasure; - // C++ wrapper type for IfcDataOriginEnum - typedef ENUMERATION IfcDataOriginEnum; - // C++ wrapper type for IfcAlarmTypeEnum - typedef ENUMERATION IfcAlarmTypeEnum; - // C++ wrapper type for IfcMassMeasure - typedef REAL IfcMassMeasure; - // C++ wrapper type for IfcStateEnum - typedef ENUMERATION IfcStateEnum; - // C++ wrapper type for IfcStackTerminalTypeEnum - typedef ENUMERATION IfcStackTerminalTypeEnum; - // C++ wrapper type for IfcReinforcingBarRoleEnum - typedef ENUMERATION IfcReinforcingBarRoleEnum; - // C++ wrapper type for IfcElectricTimeControlTypeEnum - typedef ENUMERATION IfcElectricTimeControlTypeEnum; - // C++ wrapper type for IfcInternalOrExternalEnum - typedef ENUMERATION IfcInternalOrExternalEnum; - // C++ wrapper type for IfcDuctSilencerTypeEnum - typedef ENUMERATION IfcDuctSilencerTypeEnum; - // C++ wrapper type for IfcConditionCriterionSelect - typedef SELECT IfcConditionCriterionSelect; - // C++ wrapper type for IfcHumidifierTypeEnum - typedef ENUMERATION IfcHumidifierTypeEnum; - // C++ wrapper type for IfcForceMeasure - typedef REAL IfcForceMeasure; - // C++ wrapper type for IfcMemberTypeEnum - typedef ENUMERATION IfcMemberTypeEnum; - // C++ wrapper type for IfcIonConcentrationMeasure - typedef REAL IfcIonConcentrationMeasure; - // C++ wrapper type for IfcChillerTypeEnum - typedef ENUMERATION IfcChillerTypeEnum; - // C++ wrapper type for IfcMassPerLengthMeasure - typedef REAL IfcMassPerLengthMeasure; - // C++ wrapper type for IfcTimeSeriesScheduleTypeEnum - typedef ENUMERATION IfcTimeSeriesScheduleTypeEnum; - // C++ wrapper type for IfcFilterTypeEnum - typedef ENUMERATION IfcFilterTypeEnum; - // C++ wrapper type for IfcLogical - typedef LOGICAL IfcLogical; - // C++ wrapper type for IfcInventoryTypeEnum - typedef ENUMERATION IfcInventoryTypeEnum; - // C++ wrapper type for IfcClassificationNotationSelect - typedef SELECT IfcClassificationNotationSelect; - // C++ wrapper type for IfcAddressTypeEnum - typedef ENUMERATION IfcAddressTypeEnum; - // C++ wrapper type for IfcPositiveLengthMeasure - typedef REAL IfcPositiveLengthMeasure; - // C++ wrapper type for IfcRatioMeasure - typedef REAL IfcRatioMeasure; - // C++ wrapper type for IfcRampTypeEnum - typedef ENUMERATION IfcRampTypeEnum; - // C++ wrapper type for IfcMaterialSelect - typedef SELECT IfcMaterialSelect; - // C++ wrapper type for IfcCoveringTypeEnum - typedef ENUMERATION IfcCoveringTypeEnum; - // C++ wrapper type for IfcPileTypeEnum - typedef ENUMERATION IfcPileTypeEnum; - // C++ wrapper type for IfcTransitionCode - typedef ENUMERATION IfcTransitionCode; - // C++ wrapper type for IfcParameterValue - typedef REAL IfcParameterValue; - // C++ wrapper type for IfcCondenserTypeEnum - typedef ENUMERATION IfcCondenserTypeEnum; - // C++ wrapper type for IfcTextPath - typedef ENUMERATION IfcTextPath; - // C++ wrapper type for IfcElectricCurrentEnum - typedef ENUMERATION IfcElectricCurrentEnum; - // C++ wrapper type for IfcColumnTypeEnum - typedef ENUMERATION IfcColumnTypeEnum; - // C++ wrapper type for IfcLuminousFluxMeasure - typedef REAL IfcLuminousFluxMeasure; - // C++ wrapper type for IfcPlateTypeEnum - typedef ENUMERATION IfcPlateTypeEnum; - // C++ wrapper type for IfcPileConstructionEnum - typedef ENUMERATION IfcPileConstructionEnum; - // C++ wrapper type for IfcActionSourceTypeEnum - typedef ENUMERATION IfcActionSourceTypeEnum; - // C++ wrapper type for IfcMagneticFluxDensityMeasure - typedef REAL IfcMagneticFluxDensityMeasure; - // C++ wrapper type for IfcSurfaceOrFaceSurface - typedef SELECT IfcSurfaceOrFaceSurface; - // C++ wrapper type for IfcPresentationStyleSelect - typedef SELECT IfcPresentationStyleSelect; - // C++ wrapper type for IfcGloballyUniqueId - typedef STRING IfcGloballyUniqueId; - // C++ wrapper type for IfcLinearMomentMeasure - typedef REAL IfcLinearMomentMeasure; // C++ wrapper type for IfcHeatExchangerTypeEnum typedef ENUMERATION IfcHeatExchangerTypeEnum; - // C++ wrapper type for IfcPumpTypeEnum - typedef ENUMERATION IfcPumpTypeEnum; - // C++ wrapper type for IfcSpecularExponent - typedef REAL IfcSpecularExponent; - // C++ wrapper type for IfcElectricResistanceMeasure - typedef REAL IfcElectricResistanceMeasure; - // C++ wrapper type for IfcThermalConductivityMeasure - typedef REAL IfcThermalConductivityMeasure; - // C++ wrapper type for IfcReflectanceMethodEnum - typedef ENUMERATION IfcReflectanceMethodEnum; - // C++ wrapper type for IfcTubeBundleTypeEnum - typedef ENUMERATION IfcTubeBundleTypeEnum; - // C++ wrapper type for IfcActuatorTypeEnum - typedef ENUMERATION IfcActuatorTypeEnum; - // C++ wrapper type for IfcControllerTypeEnum - typedef ENUMERATION IfcControllerTypeEnum; + // C++ wrapper type for IfcHumidifierTypeEnum + typedef ENUMERATION IfcHumidifierTypeEnum; + // C++ wrapper type for IfcInternalOrExternalEnum + typedef ENUMERATION IfcInternalOrExternalEnum; + // C++ wrapper type for IfcInventoryTypeEnum + typedef ENUMERATION IfcInventoryTypeEnum; + // C++ wrapper type for IfcJunctionBoxTypeEnum + typedef ENUMERATION IfcJunctionBoxTypeEnum; + // C++ wrapper type for IfcLampTypeEnum + typedef ENUMERATION IfcLampTypeEnum; + // C++ wrapper type for IfcLayerSetDirectionEnum + typedef ENUMERATION IfcLayerSetDirectionEnum; // C++ wrapper type for IfcLightDistributionCurveEnum typedef ENUMERATION IfcLightDistributionCurveEnum; - // C++ wrapper type for IfcPositiveRatioMeasure - typedef REAL IfcPositiveRatioMeasure; - // C++ wrapper type for IfcElectricChargeMeasure - typedef REAL IfcElectricChargeMeasure; - // C++ wrapper type for IfcNumericMeasure - typedef NUMBER IfcNumericMeasure; - // C++ wrapper type for IfcStructuralActivityAssignmentSelect - typedef SELECT IfcStructuralActivityAssignmentSelect; - // C++ wrapper type for IfcLuminousIntensityDistributionMeasure - typedef REAL IfcLuminousIntensityDistributionMeasure; - // C++ wrapper type for IfcMolecularWeightMeasure - typedef REAL IfcMolecularWeightMeasure; - // C++ wrapper type for IfcLayeredItem - typedef SELECT IfcLayeredItem; - // C++ wrapper type for IfcLengthMeasure - typedef REAL IfcLengthMeasure; - // C++ wrapper type for IfcWarpingConstantMeasure - typedef REAL IfcWarpingConstantMeasure; - // C++ wrapper type for IfcBoilerTypeEnum - typedef ENUMERATION IfcBoilerTypeEnum; - // C++ wrapper type for IfcCableCarrierSegmentTypeEnum - typedef ENUMERATION IfcCableCarrierSegmentTypeEnum; - // C++ wrapper type for IfcFontWeight - typedef STRING IfcFontWeight; - // C++ wrapper type for IfcTextFontName - typedef STRING IfcTextFontName; - // C++ wrapper type for IfcEnvironmentalImpactCategoryEnum - typedef ENUMERATION IfcEnvironmentalImpactCategoryEnum; - // C++ wrapper type for IfcActionTypeEnum - typedef ENUMERATION IfcActionTypeEnum; - // C++ wrapper type for IfcDefinedSymbolSelect - typedef SELECT IfcDefinedSymbolSelect; - // C++ wrapper type for IfcTextTransformation - typedef STRING IfcTextTransformation; - // C++ wrapper type for IfcAppliedValueSelect - typedef SELECT IfcAppliedValueSelect; - // C++ wrapper type for IfcEnergyMeasure - typedef REAL IfcEnergyMeasure; - // C++ wrapper type for IfcFlowInstrumentTypeEnum - typedef ENUMERATION IfcFlowInstrumentTypeEnum; - // C++ wrapper type for IfcCountMeasure - typedef NUMBER IfcCountMeasure; - // C++ wrapper type for IfcCurrencyEnum - typedef ENUMERATION IfcCurrencyEnum; - // C++ wrapper type for IfcSectionTypeEnum - typedef ENUMERATION IfcSectionTypeEnum; - // C++ wrapper type for IfcLinearForceMeasure - typedef REAL IfcLinearForceMeasure; - // C++ wrapper type for IfcDerivedMeasureValue - typedef SELECT IfcDerivedMeasureValue; + // C++ wrapper type for IfcLightEmissionSourceEnum + typedef ENUMERATION IfcLightEmissionSourceEnum; + // C++ wrapper type for IfcLightFixtureTypeEnum + typedef ENUMERATION IfcLightFixtureTypeEnum; + // C++ wrapper type for IfcLoadGroupTypeEnum + typedef ENUMERATION IfcLoadGroupTypeEnum; + // C++ wrapper type for IfcLogicalOperatorEnum + typedef ENUMERATION IfcLogicalOperatorEnum; + // C++ wrapper type for IfcMemberTypeEnum + typedef ENUMERATION IfcMemberTypeEnum; + // C++ wrapper type for IfcMotorConnectionTypeEnum + typedef ENUMERATION IfcMotorConnectionTypeEnum; + // C++ wrapper type for IfcNullStyle + typedef ENUMERATION IfcNullStyle; + // C++ wrapper type for IfcObjectTypeEnum + typedef ENUMERATION IfcObjectTypeEnum; + // C++ wrapper type for IfcObjectiveEnum + typedef ENUMERATION IfcObjectiveEnum; + // C++ wrapper type for IfcOccupantTypeEnum + typedef ENUMERATION IfcOccupantTypeEnum; + // C++ wrapper type for IfcOutletTypeEnum + typedef ENUMERATION IfcOutletTypeEnum; + // C++ wrapper type for IfcPermeableCoveringOperationEnum + typedef ENUMERATION IfcPermeableCoveringOperationEnum; + // C++ wrapper type for IfcPhysicalOrVirtualEnum + typedef ENUMERATION IfcPhysicalOrVirtualEnum; + // C++ wrapper type for IfcPileConstructionEnum + typedef ENUMERATION IfcPileConstructionEnum; + // C++ wrapper type for IfcPileTypeEnum + typedef ENUMERATION IfcPileTypeEnum; + // C++ wrapper type for IfcPipeFittingTypeEnum + typedef ENUMERATION IfcPipeFittingTypeEnum; + // C++ wrapper type for IfcPipeSegmentTypeEnum + typedef ENUMERATION IfcPipeSegmentTypeEnum; + // C++ wrapper type for IfcPlateTypeEnum + typedef ENUMERATION IfcPlateTypeEnum; + // C++ wrapper type for IfcProcedureTypeEnum + typedef ENUMERATION IfcProcedureTypeEnum; + // C++ wrapper type for IfcProfileTypeEnum + typedef ENUMERATION IfcProfileTypeEnum; + // C++ wrapper type for IfcProjectOrderRecordTypeEnum + typedef ENUMERATION IfcProjectOrderRecordTypeEnum; + // C++ wrapper type for IfcProjectOrderTypeEnum + typedef ENUMERATION IfcProjectOrderTypeEnum; + // C++ wrapper type for IfcProjectedOrTrueLengthEnum + typedef ENUMERATION IfcProjectedOrTrueLengthEnum; + // C++ wrapper type for IfcPropertySourceEnum + typedef ENUMERATION IfcPropertySourceEnum; + // C++ wrapper type for IfcProtectiveDeviceTypeEnum + typedef ENUMERATION IfcProtectiveDeviceTypeEnum; + // C++ wrapper type for IfcPumpTypeEnum + typedef ENUMERATION IfcPumpTypeEnum; // C++ wrapper type for IfcRailingTypeEnum typedef ENUMERATION IfcRailingTypeEnum; - // C++ wrapper type for IfcSIUnitName - typedef ENUMERATION IfcSIUnitName; - // C++ wrapper type for IfcMeasureValue - typedef SELECT IfcMeasureValue; + // C++ wrapper type for IfcRampFlightTypeEnum + typedef ENUMERATION IfcRampFlightTypeEnum; + // C++ wrapper type for IfcRampTypeEnum + typedef ENUMERATION IfcRampTypeEnum; + // C++ wrapper type for IfcReflectanceMethodEnum + typedef ENUMERATION IfcReflectanceMethodEnum; + // C++ wrapper type for IfcReinforcingBarRoleEnum + typedef ENUMERATION IfcReinforcingBarRoleEnum; + // C++ wrapper type for IfcReinforcingBarSurfaceEnum + typedef ENUMERATION IfcReinforcingBarSurfaceEnum; + // C++ wrapper type for IfcResourceConsumptionEnum + typedef ENUMERATION IfcResourceConsumptionEnum; + // C++ wrapper type for IfcRibPlateDirectionEnum + typedef ENUMERATION IfcRibPlateDirectionEnum; + // C++ wrapper type for IfcRoleEnum + typedef ENUMERATION IfcRoleEnum; // C++ wrapper type for IfcRoofTypeEnum typedef ENUMERATION IfcRoofTypeEnum; - // C++ wrapper type for IfcText - typedef STRING IfcText; - // C++ wrapper type for IfcLinearVelocityMeasure - typedef REAL IfcLinearVelocityMeasure; - // C++ wrapper type for IfcBoolean - typedef BOOLEAN IfcBoolean; + // C++ wrapper type for IfcSIPrefix + typedef ENUMERATION IfcSIPrefix; + // C++ wrapper type for IfcSIUnitName + typedef ENUMERATION IfcSIUnitName; + // C++ wrapper type for IfcSanitaryTerminalTypeEnum + typedef ENUMERATION IfcSanitaryTerminalTypeEnum; + // C++ wrapper type for IfcSectionTypeEnum + typedef ENUMERATION IfcSectionTypeEnum; + // C++ wrapper type for IfcSensorTypeEnum + typedef ENUMERATION IfcSensorTypeEnum; + // C++ wrapper type for IfcSequenceEnum + typedef ENUMERATION IfcSequenceEnum; + // C++ wrapper type for IfcServiceLifeFactorTypeEnum + typedef ENUMERATION IfcServiceLifeFactorTypeEnum; + // C++ wrapper type for IfcServiceLifeTypeEnum + typedef ENUMERATION IfcServiceLifeTypeEnum; + // C++ wrapper type for IfcSlabTypeEnum + typedef ENUMERATION IfcSlabTypeEnum; + // C++ wrapper type for IfcSoundScaleEnum + typedef ENUMERATION IfcSoundScaleEnum; + // C++ wrapper type for IfcSpaceHeaterTypeEnum + typedef ENUMERATION IfcSpaceHeaterTypeEnum; + // C++ wrapper type for IfcSpaceTypeEnum + typedef ENUMERATION IfcSpaceTypeEnum; + // C++ wrapper type for IfcStackTerminalTypeEnum + typedef ENUMERATION IfcStackTerminalTypeEnum; + // C++ wrapper type for IfcStairFlightTypeEnum + typedef ENUMERATION IfcStairFlightTypeEnum; + // C++ wrapper type for IfcStairTypeEnum + typedef ENUMERATION IfcStairTypeEnum; + // C++ wrapper type for IfcStateEnum + typedef ENUMERATION IfcStateEnum; + // C++ wrapper type for IfcStructuralCurveTypeEnum + typedef ENUMERATION IfcStructuralCurveTypeEnum; + // C++ wrapper type for IfcStructuralSurfaceTypeEnum + typedef ENUMERATION IfcStructuralSurfaceTypeEnum; + // C++ wrapper type for IfcSurfaceSide + typedef ENUMERATION IfcSurfaceSide; + // C++ wrapper type for IfcSurfaceTextureEnum + typedef ENUMERATION IfcSurfaceTextureEnum; + // C++ wrapper type for IfcSwitchingDeviceTypeEnum + typedef ENUMERATION IfcSwitchingDeviceTypeEnum; + // C++ wrapper type for IfcTankTypeEnum + typedef ENUMERATION IfcTankTypeEnum; + // C++ wrapper type for IfcTendonTypeEnum + typedef ENUMERATION IfcTendonTypeEnum; + // C++ wrapper type for IfcTextPath + typedef ENUMERATION IfcTextPath; + // C++ wrapper type for IfcThermalLoadSourceEnum + typedef ENUMERATION IfcThermalLoadSourceEnum; + // C++ wrapper type for IfcThermalLoadTypeEnum + typedef ENUMERATION IfcThermalLoadTypeEnum; + // C++ wrapper type for IfcTimeSeriesDataTypeEnum + typedef ENUMERATION IfcTimeSeriesDataTypeEnum; + // C++ wrapper type for IfcTimeSeriesScheduleTypeEnum + typedef ENUMERATION IfcTimeSeriesScheduleTypeEnum; + // C++ wrapper type for IfcTransformerTypeEnum + typedef ENUMERATION IfcTransformerTypeEnum; + // C++ wrapper type for IfcTransitionCode + typedef ENUMERATION IfcTransitionCode; + // C++ wrapper type for IfcTransportElementTypeEnum + typedef ENUMERATION IfcTransportElementTypeEnum; + // C++ wrapper type for IfcTrimmingPreference + typedef ENUMERATION IfcTrimmingPreference; + // C++ wrapper type for IfcTubeBundleTypeEnum + typedef ENUMERATION IfcTubeBundleTypeEnum; + // C++ wrapper type for IfcUnitEnum + typedef ENUMERATION IfcUnitEnum; + // C++ wrapper type for IfcUnitaryEquipmentTypeEnum + typedef ENUMERATION IfcUnitaryEquipmentTypeEnum; + // C++ wrapper type for IfcValveTypeEnum + typedef ENUMERATION IfcValveTypeEnum; + // C++ wrapper type for IfcVibrationIsolatorTypeEnum + typedef ENUMERATION IfcVibrationIsolatorTypeEnum; + // C++ wrapper type for IfcWallTypeEnum + typedef ENUMERATION IfcWallTypeEnum; + // C++ wrapper type for IfcWasteTerminalTypeEnum + typedef ENUMERATION IfcWasteTerminalTypeEnum; + // C++ wrapper type for IfcWindowPanelOperationEnum + typedef ENUMERATION IfcWindowPanelOperationEnum; + // C++ wrapper type for IfcWindowPanelPositionEnum + typedef ENUMERATION IfcWindowPanelPositionEnum; + // C++ wrapper type for IfcWindowStyleConstructionEnum + typedef ENUMERATION IfcWindowStyleConstructionEnum; + // C++ wrapper type for IfcWindowStyleOperationEnum + typedef ENUMERATION IfcWindowStyleOperationEnum; + // C++ wrapper type for IfcWorkControlTypeEnum + typedef ENUMERATION IfcWorkControlTypeEnum; + // C++ wrapper type for IfcActorSelect + typedef SELECT IfcActorSelect; + // C++ wrapper type for IfcAppliedValueSelect + typedef SELECT IfcAppliedValueSelect; + // C++ wrapper type for IfcAxis2Placement + typedef SELECT IfcAxis2Placement; + // C++ wrapper type for IfcBooleanOperand + typedef SELECT IfcBooleanOperand; + // C++ wrapper type for IfcCharacterStyleSelect + typedef SELECT IfcCharacterStyleSelect; + // C++ wrapper type for IfcClassificationNotationSelect + typedef SELECT IfcClassificationNotationSelect; + // C++ wrapper type for IfcColour + typedef SELECT IfcColour; + // C++ wrapper type for IfcColourOrFactor + typedef SELECT IfcColourOrFactor; + // C++ wrapper type for IfcConditionCriterionSelect + typedef SELECT IfcConditionCriterionSelect; + // C++ wrapper type for IfcCsgSelect + typedef SELECT IfcCsgSelect; + // C++ wrapper type for IfcCurveFontOrScaledCurveFontSelect + typedef SELECT IfcCurveFontOrScaledCurveFontSelect; + // C++ wrapper type for IfcCurveOrEdgeCurve + typedef SELECT IfcCurveOrEdgeCurve; + // C++ wrapper type for IfcCurveStyleFontSelect + typedef SELECT IfcCurveStyleFontSelect; + // C++ wrapper type for IfcDateTimeSelect + typedef SELECT IfcDateTimeSelect; + // C++ wrapper type for IfcDefinedSymbolSelect + typedef SELECT IfcDefinedSymbolSelect; + // C++ wrapper type for IfcDerivedMeasureValue + typedef SELECT IfcDerivedMeasureValue; + // C++ wrapper type for IfcDocumentSelect + typedef SELECT IfcDocumentSelect; + // C++ wrapper type for IfcDraughtingCalloutElement + typedef SELECT IfcDraughtingCalloutElement; + // C++ wrapper type for IfcFillAreaStyleTileShapeSelect + typedef SELECT IfcFillAreaStyleTileShapeSelect; + // C++ wrapper type for IfcFillStyleSelect + typedef SELECT IfcFillStyleSelect; + // C++ wrapper type for IfcGeometricSetSelect + typedef SELECT IfcGeometricSetSelect; + // C++ wrapper type for IfcHatchLineDistanceSelect + typedef SELECT IfcHatchLineDistanceSelect; + // C++ wrapper type for IfcLayeredItem + typedef SELECT IfcLayeredItem; + // C++ wrapper type for IfcLibrarySelect + typedef SELECT IfcLibrarySelect; + // C++ wrapper type for IfcLightDistributionDataSourceSelect + typedef SELECT IfcLightDistributionDataSourceSelect; + // C++ wrapper type for IfcMaterialSelect + typedef SELECT IfcMaterialSelect; + // C++ wrapper type for IfcMeasureValue + typedef SELECT IfcMeasureValue; + // C++ wrapper type for IfcMetricValueSelect + typedef SELECT IfcMetricValueSelect; + // C++ wrapper type for IfcObjectReferenceSelect + typedef SELECT IfcObjectReferenceSelect; + // C++ wrapper type for IfcOrientationSelect + typedef SELECT IfcOrientationSelect; + // C++ wrapper type for IfcPointOrVertexPoint + typedef SELECT IfcPointOrVertexPoint; + // C++ wrapper type for IfcPresentationStyleSelect + typedef SELECT IfcPresentationStyleSelect; + // C++ wrapper type for IfcShell + typedef SELECT IfcShell; + // C++ wrapper type for IfcSimpleValue + typedef SELECT IfcSimpleValue; + // C++ wrapper type for IfcSizeSelect + typedef SELECT IfcSizeSelect; + // C++ wrapper type for IfcSpecularHighlightSelect + typedef SELECT IfcSpecularHighlightSelect; + // C++ wrapper type for IfcStructuralActivityAssignmentSelect + typedef SELECT IfcStructuralActivityAssignmentSelect; + // C++ wrapper type for IfcSurfaceOrFaceSurface + typedef SELECT IfcSurfaceOrFaceSurface; + // C++ wrapper type for IfcSurfaceStyleElementSelect + typedef SELECT IfcSurfaceStyleElementSelect; + // C++ wrapper type for IfcSymbolStyleSelect + typedef SELECT IfcSymbolStyleSelect; + // C++ wrapper type for IfcTextFontSelect + typedef SELECT IfcTextFontSelect; + // C++ wrapper type for IfcTextStyleSelect + typedef SELECT IfcTextStyleSelect; + // C++ wrapper type for IfcTrimmingSelect + typedef SELECT IfcTrimmingSelect; + // C++ wrapper type for IfcUnit + typedef SELECT IfcUnit; + // C++ wrapper type for IfcValue + typedef SELECT IfcValue; + // C++ wrapper type for IfcVectorOrDirection + typedef SELECT IfcVectorOrDirection; // ****************************************************************************** @@ -720,658 +720,658 @@ namespace IFC { // ****************************************************************************** struct IfcRepresentationItem; - struct IfcTopologicalRepresentationItem; - struct IfcEdge; - typedef NotImplemented IfcExternalReference; // (not currently used by Assimp) - typedef NotImplemented IfcDocumentReference; // (not currently used by Assimp) struct IfcGeometricRepresentationItem; - struct IfcCompositeCurveSegment; + struct IfcCurve; + struct IfcBoundedCurve; + struct IfcCompositeCurve; + struct Ifc2DCompositeCurve; struct IfcRoot; struct IfcObjectDefinition; struct IfcObject; - struct IfcProduct; - struct IfcStructuralItem; - struct IfcStructuralConnection; - struct IfcStructuralSurfaceConnection; - typedef NotImplemented IfcApprovalActorRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcVertexBasedTextureMap; // (not currently used by Assimp) - struct IfcPresentationStyleAssignment; - struct IfcElement; - struct IfcBuildingElement; - struct IfcCurtainWall; - typedef NotImplemented IfcTextureCoordinate; // (not currently used by Assimp) - typedef NotImplemented IfcTextureCoordinateGenerator; // (not currently used by Assimp) - struct IfcProxy; - typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedTextFont; // (not currently used by Assimp) - typedef NotImplemented IfcTextStyleFontModel; // (not currently used by Assimp) - struct IfcStyledItem; - struct IfcAnnotationOccurrence; - struct IfcAnnotationSymbolOccurrence; - struct IfcTerminatorSymbol; - struct IfcDimensionCurveTerminator; + struct IfcControl; + struct IfcActionRequest; + struct IfcActor; + typedef NotImplemented IfcActorRole; // (not currently used by Assimp) struct IfcTypeObject; struct IfcTypeProduct; struct IfcElementType; struct IfcDistributionElementType; - struct IfcFeatureElement; - struct IfcFeatureElementSubtraction; - struct IfcOpeningElement; - struct IfcPresentationStyle; - struct IfcSurfaceStyle; - struct IfcFillAreaStyleTileSymbolWithStyle; - typedef NotImplemented IfcApplication; // (not currently used by Assimp) - struct IfcRelationship; - struct IfcRelConnects; - typedef NotImplemented IfcRelConnectsStructuralElement; // (not currently used by Assimp) - struct IfcStructuralMember; - struct IfcStructuralSurfaceMember; - typedef NotImplemented IfcMaterialList; // (not currently used by Assimp) - struct IfcCartesianTransformationOperator; - struct IfcCartesianTransformationOperator3D; - struct IfcDistributionFlowElementType; - struct IfcFlowTerminalType; - struct IfcSanitaryTerminalType; - struct IfcEnergyConversionDeviceType; - struct IfcElectricGeneratorType; - struct IfcResource; - struct IfcConstructionResource; - struct IfcControl; - struct IfcEquipmentStandard; - typedef NotImplemented IfcMaterialProperties; // (not currently used by Assimp) - typedef NotImplemented IfcMechanicalMaterialProperties; // (not currently used by Assimp) - typedef NotImplemented IfcMechanicalSteelMaterialProperties; // (not currently used by Assimp) - struct IfcElectricApplianceType; - typedef NotImplemented IfcHygroscopicMaterialProperties; // (not currently used by Assimp) - struct IfcFurnitureStandard; - typedef NotImplemented IfcIrregularTimeSeriesValue; // (not currently used by Assimp) - struct IfcDefinedSymbol; - struct IfcColourSpecification; - struct IfcCurve; - struct IfcLine; - struct IfcLoop; - typedef NotImplemented IfcRelaxation; // (not currently used by Assimp) - struct IfcProperty; - struct IfcComplexProperty; - struct IfcCovering; - struct IfcBoundedCurve; - struct IfcBSplineCurve; - struct IfcNamedUnit; - struct IfcSubContractResource; - typedef NotImplemented IfcClassificationItem; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralConnectionCondition; // (not currently used by Assimp) - struct IfcObjectPlacement; - struct IfcGridPlacement; - typedef NotImplemented IfcFailureConnectionCondition; // (not currently used by Assimp) - typedef NotImplemented IfcPhysicalQuantity; // (not currently used by Assimp) - typedef NotImplemented IfcPhysicalSimpleQuantity; // (not currently used by Assimp) - struct IfcPropertyDefinition; - struct IfcPropertySetDefinition; - typedef NotImplemented IfcWindowLiningProperties; // (not currently used by Assimp) - struct IfcPoint; - struct IfcCartesianPoint; - struct IfcFaceBound; - typedef NotImplemented IfcBoundaryCondition; // (not currently used by Assimp) - typedef NotImplemented IfcBoundaryFaceCondition; // (not currently used by Assimp) - struct IfcEdgeCurve; - typedef NotImplemented IfcLibraryInformation; // (not currently used by Assimp) - struct IfcOneDirectionRepeatFactor; - struct IfcTwoDirectionRepeatFactor; - typedef NotImplemented IfcRelConnectsElements; // (not currently used by Assimp) - typedef NotImplemented IfcRelConnectsPathElements; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssigns; // (not currently used by Assimp) - typedef NotImplemented IfcPropertyConstraintRelationship; // (not currently used by Assimp) - struct IfcLightSource; - struct IfcLightSourceAmbient; - struct IfcPlacement; - struct IfcAxis1Placement; - struct IfcAnnotationSurfaceOccurrence; - struct IfcFlowControllerType; - struct IfcFlowMeterType; - struct IfcAnnotationCurveOccurrence; - typedef NotImplemented IfcLocalTime; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociates; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesApproval; // (not currently used by Assimp) - struct IfcProfileDef; - struct IfcCompositeProfileDef; - struct IfcSubedge; - struct IfcFlowStorageDeviceType; - struct IfcTankType; - typedef NotImplemented IfcRelAssignsToActor; // (not currently used by Assimp) - struct IfcBuildingElementComponent; - struct IfcBuildingElementPart; - struct IfcRepresentation; - struct IfcShapeModel; - struct IfcShapeRepresentation; - struct IfcRailing; - typedef NotImplemented IfcStructuralLoad; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadStatic; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadSingleForce; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadSingleForceWarping; // (not currently used by Assimp) - struct IfcStyleModel; - struct IfcStyledRepresentation; - struct IfcColourRgb; - struct IfcElementComponentType; - struct IfcDiscreteAccessoryType; - struct IfcVibrationIsolatorType; - struct IfcProcess; - struct IfcProcedure; - struct IfcFeatureElementAddition; - struct IfcEdgeFeature; - struct IfcTrimmedCurve; - typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp) - typedef NotImplemented IfcRelCoversBldgElements; // (not currently used by Assimp) - struct IfcTextLiteral; - struct IfcParameterizedProfileDef; - struct IfcCraneRailAShapeProfileDef; - struct IfcElementComponent; - struct IfcCsgPrimitive3D; - struct IfcBlock; - struct IfcBuildingElementType; - struct IfcRailingType; - struct IfcStructuralPointConnection; - struct IfcFlowMovingDeviceType; - struct IfcPumpType; - struct IfcStructuralCurveMember; - struct IfcStructuralCurveMemberVarying; - struct IfcReinforcingElement; - struct IfcReinforcingMesh; - struct IfcPlanarExtent; - struct IfcPlanarBox; - struct IfcCooledBeamType; - typedef NotImplemented IfcQuantityArea; // (not currently used by Assimp) - typedef NotImplemented IfcDraughtingCalloutRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcDimensionCalloutRelationship; // (not currently used by Assimp) - struct IfcProjectOrderRecord; - struct IfcPointOnSurface; - struct IfcPointOnCurve; - struct IfcRelContainedInSpatialStructure; - struct IfcSimpleProperty; - struct IfcPropertyListValue; - struct IfcSpatialStructureElement; - struct IfcBuildingStorey; - struct IfcUnitaryEquipmentType; - struct IfcOutletType; - struct IfcFastenerType; - struct IfcGroup; - struct IfcSystem; - struct IfcStructuralAnalysisModel; - struct IfcSlabType; - typedef NotImplemented IfcRelAssignsToProduct; // (not currently used by Assimp) - typedef NotImplemented IfcClassification; // (not currently used by Assimp) - struct IfcDistributionElement; - struct IfcDistributionFlowElement; - struct IfcTShapeProfileDef; - struct IfcPolyline; - typedef NotImplemented IfcQuantityVolume; // (not currently used by Assimp) - struct IfcDraughtingCallout; - struct IfcFace; - typedef NotImplemented IfcAddress; // (not currently used by Assimp) - struct IfcStructuralSurfaceMemberVarying; - struct IfcMotorConnectionType; - struct IfcAirToAirHeatRecoveryType; - struct IfcPlateType; - struct IfcSolidModel; - struct IfcCsgSolid; - struct IfcMechanicalFastenerType; - struct IfcRelDecomposes; - struct IfcElectricalElement; - struct IfcColumnType; - struct IfcRectangularPyramid; - struct IfcActionRequest; - struct IfcStructuralActivity; - struct IfcStructuralReaction; - struct IfcStructuralPointReaction; - typedef NotImplemented IfcPropertyDependencyRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedTerminatorSymbol; // (not currently used by Assimp) - struct IfcStructuralAction; - struct IfcStructuralLinearAction; - struct IfcStructuralLinearActionVarying; - struct IfcCrewResource; - struct IfcChamferEdgeFeature; - typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp) - typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp) - typedef NotImplemented IfcConstraintRelationship; // (not currently used by Assimp) - struct IfcCompositeCurve; - struct Ifc2DCompositeCurve; - struct IfcGrid; - struct IfcTendon; - struct IfcRectangleProfileDef; - struct IfcRoundedRectangleProfileDef; - struct IfcBeamType; - struct IfcLampType; - typedef NotImplemented IfcTimeSeriesReferenceRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcSurfaceTexture; // (not currently used by Assimp) - typedef NotImplemented IfcImageTexture; // (not currently used by Assimp) - struct IfcLightSourceGoniometric; - struct IfcProductRepresentation; - struct IfcMaterialDefinitionRepresentation; - struct IfcPermit; - typedef NotImplemented IfcGeneralMaterialProperties; // (not currently used by Assimp) - struct IfcContextDependentUnit; - struct IfcFlowMovingDevice; - struct IfcColumn; - typedef NotImplemented IfcRelAssignsToControl; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssignsToProjectOrder; // (not currently used by Assimp) - struct IfcDistributionControlElement; - struct IfcProtectiveDeviceType; - typedef NotImplemented IfcTextureMap; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssignsToResource; // (not currently used by Assimp) - struct IfcFlowSegment; - struct IfcCompressorType; - typedef NotImplemented IfcProfileProperties; // (not currently used by Assimp) - typedef NotImplemented IfcGeneralProfileProperties; // (not currently used by Assimp) - struct IfcCShapeProfileDef; - typedef NotImplemented IfcAppliedValue; // (not currently used by Assimp) - struct IfcTrapeziumProfileDef; - struct IfcRelDefines; - typedef NotImplemented IfcRelDefinesByType; // (not currently used by Assimp) - struct IfcTask; - struct IfcMove; - typedef NotImplemented IfcBoundaryEdgeCondition; // (not currently used by Assimp) - struct IfcLightSourceDirectional; - struct IfcCondenserType; - typedef NotImplemented IfcTableRow; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesAppliedValue; // (not currently used by Assimp) - struct IfcConic; - struct IfcEllipse; - typedef NotImplemented IfcRelAssociatesClassification; // (not currently used by Assimp) - typedef NotImplemented IfcProductsOfCombustionProperties; // (not currently used by Assimp) - struct IfcDoorStyle; struct IfcDistributionControlElementType; - struct IfcSensorType; - struct IfcAnnotationFillAreaOccurrence; - struct IfcWall; - typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp) - typedef NotImplemented IfcQuantityWeight; // (not currently used by Assimp) - struct IfcFurnishingElementType; - struct IfcFurnitureType; - struct IfcControllerType; - struct IfcFlowFitting; - typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp) - typedef NotImplemented IfcRelNests; // (not currently used by Assimp) - typedef NotImplemented IfcCalendarDate; // (not currently used by Assimp) - typedef NotImplemented IfcLightDistributionData; // (not currently used by Assimp) - typedef NotImplemented IfcPhysicalComplexQuantity; // (not currently used by Assimp) - typedef NotImplemented IfcDocumentElectronicFormat; // (not currently used by Assimp) - struct IfcRepresentationContext; - typedef NotImplemented IfcDerivedUnitElement; // (not currently used by Assimp) - typedef NotImplemented IfcWindowPanelProperties; // (not currently used by Assimp) - struct IfcRepresentationMap; - typedef NotImplemented IfcRelConnectsStructuralMember; // (not currently used by Assimp) - typedef NotImplemented IfcMaterialClassificationRelationship; // (not currently used by Assimp) - struct IfcDirection; + struct IfcActuatorType; + typedef NotImplemented IfcAddress; // (not currently used by Assimp) + struct IfcDistributionFlowElementType; + struct IfcFlowControllerType; + struct IfcAirTerminalBoxType; + struct IfcFlowTerminalType; + struct IfcAirTerminalType; + struct IfcEnergyConversionDeviceType; + struct IfcAirToAirHeatRecoveryType; + struct IfcAlarmType; + struct IfcDraughtingCallout; struct IfcDimensionCurveDirectedCallout; struct IfcAngularDimension; - struct IfcWorkControl; - struct IfcWorkPlan; - struct IfcSpatialStructureElementType; - struct IfcSpaceType; - typedef NotImplemented IfcSlippageConnectionCondition; // (not currently used by Assimp) - struct IfcPort; - struct IfcDistributionPort; - struct IfcOrderAction; - typedef NotImplemented IfcDoorPanelProperties; // (not currently used by Assimp) - struct IfcBeam; - typedef NotImplemented IfcSectionReinforcementProperties; // (not currently used by Assimp) - struct IfcManifoldSolidBrep; - struct IfcFacetedBrep; - typedef NotImplemented IfcOpticalMaterialProperties; // (not currently used by Assimp) - struct IfcSurfaceStyleWithTextures; - typedef NotImplemented IfcRelConnectsWithEccentricity; // (not currently used by Assimp) - struct IfcArbitraryClosedProfileDef; - struct IfcHumidifierType; - struct IfcPolyLoop; - struct IfcFlowFittingType; - struct IfcFillAreaStyleTiles; - typedef NotImplemented IfcTextureVertex; // (not currently used by Assimp) - struct IfcVertex; + struct IfcProduct; + struct IfcAnnotation; + struct IfcStyledItem; + struct IfcAnnotationOccurrence; + struct IfcAnnotationCurveOccurrence; struct IfcAnnotationFillArea; - struct IfcPlate; - struct IfcRightCircularCone; - struct IfcSurface; - struct IfcBoundedSurface; - typedef NotImplemented IfcLibraryReference; // (not currently used by Assimp) - typedef NotImplemented IfcConstraintClassificationRelationship; // (not currently used by Assimp) - struct IfcStructuralLoadGroup; - struct IfcGeometricRepresentationContext; - struct IfcTubeBundleType; - struct IfcStructuralPlanarAction; - typedef NotImplemented IfcBoundaryNodeCondition; // (not currently used by Assimp) - struct IfcHeatExchangerType; - typedef NotImplemented IfcRelSchedulesCostItems; // (not currently used by Assimp) - struct IfcFaceOuterBound; - struct IfcSphere; - struct IfcLightSourcePositional; - struct IfcStructuralPointAction; - struct IfcFlowSegmentType; - struct IfcFireSuppressionTerminalType; - struct IfcPropertySingleValue; - typedef NotImplemented IfcSpaceThermalLoadProperties; // (not currently used by Assimp) - typedef NotImplemented IfcPerson; // (not currently used by Assimp) - typedef NotImplemented IfcTextStyleForDefinedFont; // (not currently used by Assimp) - struct IfcFaceBasedSurfaceModel; - struct IfcAxis2Placement3D; - struct IfcStructuralResultGroup; - typedef NotImplemented IfcCurveStyleFont; // (not currently used by Assimp) - struct IfcHalfSpaceSolid; - struct IfcGasTerminalType; - typedef NotImplemented IfcSoundValue; // (not currently used by Assimp) - typedef NotImplemented IfcDocumentInformation; // (not currently used by Assimp) - struct IfcMember; - typedef NotImplemented IfcMaterialLayerSetUsage; // (not currently used by Assimp) - struct IfcPropertySet; - struct IfcCondition; - struct IfcPropertyEnumeratedValue; - typedef NotImplemented IfcTextStyle; // (not currently used by Assimp) - typedef NotImplemented IfcPermeableCoveringProperties; // (not currently used by Assimp) - typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp) - struct IfcDistributionChamberElementType; - struct IfcTextLiteralWithExtent; - struct IfcFlowController; - struct IfcElectricDistributionPoint; - struct IfcTransportElement; - struct IfcAsset; - typedef NotImplemented IfcPersonAndOrganization; // (not currently used by Assimp) - struct IfcSweptAreaSolid; - struct IfcRevolvedAreaSolid; - struct IfcFlowInstrumentType; - struct IfcEnergyConversionDevice; - typedef NotImplemented IfcSoundProperties; // (not currently used by Assimp) - struct IfcSurfaceStyleShading; - struct IfcSurfaceStyleRendering; - struct IfcBoilerType; - struct IfcBuildingElementProxy; - struct IfcLocalPlacement; - struct IfcZone; - struct IfcStair; - struct IfcWallStandardCase; - struct IfcDiameterDimension; - struct IfcDuctSegmentType; - typedef NotImplemented IfcTimeSeries; // (not currently used by Assimp) - typedef NotImplemented IfcIrregularTimeSeries; // (not currently used by Assimp) - struct IfcJunctionBoxType; - struct IfcCartesianTransformationOperator3DnonUniform; + struct IfcAnnotationFillAreaOccurrence; + struct IfcAnnotationSurface; + struct IfcAnnotationSurfaceOccurrence; + struct IfcAnnotationSymbolOccurrence; + struct IfcAnnotationTextOccurrence; + typedef NotImplemented IfcApplication; // (not currently used by Assimp) + typedef NotImplemented IfcAppliedValue; // (not currently used by Assimp) + typedef NotImplemented IfcAppliedValueRelationship; // (not currently used by Assimp) typedef NotImplemented IfcApproval; // (not currently used by Assimp) - typedef NotImplemented IfcCurveStyleFontAndScaling; // (not currently used by Assimp) - struct IfcInventory; - typedef NotImplemented IfcQuantityLength; // (not currently used by Assimp) - struct IfcConditionCriterion; - struct IfcConnectedFaceSet; - struct IfcOpenShell; - typedef NotImplemented IfcStructuralProfileProperties; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralSteelProfileProperties; // (not currently used by Assimp) - struct IfcDoor; - struct IfcBezierCurve; - struct IfcRationalBezierCurve; + typedef NotImplemented IfcApprovalActorRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcApprovalPropertyRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcApprovalRelationship; // (not currently used by Assimp) + struct IfcProfileDef; + struct IfcArbitraryClosedProfileDef; + struct IfcArbitraryOpenProfileDef; struct IfcArbitraryProfileDefWithVoids; - typedef NotImplemented IfcMaterial; // (not currently used by Assimp) - struct IfcBooleanResult; - struct IfcStackTerminalType; - typedef NotImplemented IfcPreDefinedDimensionSymbol; // (not currently used by Assimp) + struct IfcGroup; + struct IfcAsset; + struct IfcParameterizedProfileDef; struct IfcIShapeProfileDef; struct IfcAsymmetricIShapeProfileDef; - struct IfcEquipmentElement; - typedef NotImplemented IfcClassificationReference; // (not currently used by Assimp) - typedef NotImplemented IfcPreDefinedCurveFont; // (not currently used by Assimp) - typedef NotImplemented IfcShapeAspect; // (not currently used by Assimp) - typedef NotImplemented IfcClassificationNotationFacet; // (not currently used by Assimp) - typedef NotImplemented IfcDoorLiningProperties; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadSingleDisplacement; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesMaterial; // (not currently used by Assimp) - typedef NotImplemented IfcBoundaryNodeConditionWarping; // (not currently used by Assimp) - typedef NotImplemented IfcCoordinatedUniversalTimeOffset; // (not currently used by Assimp) - struct IfcClosedShell; - typedef NotImplemented IfcMechanicalConcreteMaterialProperties; // (not currently used by Assimp) - typedef NotImplemented IfcMaterialLayerSet; // (not currently used by Assimp) - struct IfcEllipseProfileDef; - struct IfcPropertyBoundedValue; - struct IfcCoveringType; - typedef NotImplemented IfcRelCoversSpaces; // (not currently used by Assimp) - typedef NotImplemented IfcClassificationItemRelationship; // (not currently used by Assimp) - struct IfcActuatorType; - struct IfcOffsetCurve2D; - typedef NotImplemented IfcConnectionGeometry; // (not currently used by Assimp) - typedef NotImplemented IfcConnectionSurfaceGeometry; // (not currently used by Assimp) - struct IfcAnnotation; - struct IfcDistributionChamberElement; - typedef NotImplemented IfcCurveStyleFontPattern; // (not currently used by Assimp) - struct IfcOffsetCurve3D; - struct IfcFooting; - struct IfcMappedItem; - typedef NotImplemented IfcPostalAddress; // (not currently used by Assimp) - typedef NotImplemented IfcRelSpaceBoundary; // (not currently used by Assimp) - struct IfcTransformerType; - struct IfcRightCircularCylinder; - struct IfcSpaceProgram; - typedef NotImplemented IfcThermalMaterialProperties; // (not currently used by Assimp) - struct IfcAnnotationSurface; - struct IfcZShapeProfileDef; - struct IfcRectangleHollowProfileDef; - struct IfcGeometricSet; - struct IfcGeometricCurveSet; - struct IfcArbitraryOpenProfileDef; - typedef NotImplemented IfcDocumentInformationRelationship; // (not currently used by Assimp) - struct IfcFacetedBrepWithVoids; - struct IfcVector; - typedef NotImplemented IfcExternallyDefinedSurfaceStyle; // (not currently used by Assimp) - struct IfcServiceLife; - struct IfcCurveBoundedPlane; - struct IfcCircle; - typedef NotImplemented IfcFuelProperties; // (not currently used by Assimp) - struct IfcVertexLoop; - typedef NotImplemented IfcServiceLifeFactor; // (not currently used by Assimp) - typedef NotImplemented IfcPropertyEnumeration; // (not currently used by Assimp) - struct IfcSurfaceCurveSweptAreaSolid; - struct IfcConstructionEquipmentResource; - struct IfcSectionedSpine; - typedef NotImplemented IfcReferencesValueDocument; // (not currently used by Assimp) - struct IfcPropertyReferenceValue; - typedef NotImplemented IfcRelServicesBuildings; // (not currently used by Assimp) - struct IfcSite; - struct IfcPerformanceHistory; - typedef NotImplemented IfcExternallyDefinedTextFont; // (not currently used by Assimp) - struct IfcPropertyTableValue; - typedef NotImplemented IfcEnvironmentalImpactValue; // (not currently used by Assimp) - typedef NotImplemented IfcCurveStyle; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesProfileProperties; // (not currently used by Assimp) - struct IfcTransportElementType; - struct IfcPolygonalBoundedHalfSpace; - typedef NotImplemented IfcConnectionPortGeometry; // (not currently used by Assimp) - typedef NotImplemented IfcRelFlowControlElements; // (not currently used by Assimp) - typedef NotImplemented IfcApprovalPropertyRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcRelReferencedInSpatialStructure; // (not currently used by Assimp) + struct IfcPlacement; + struct IfcAxis1Placement; struct IfcAxis2Placement2D; - struct IfcFillAreaStyleHatching; - struct IfcFastener; - struct IfcScheduleTimeControl; - struct IfcElectricMotorType; - struct IfcTimeSeriesSchedule; - typedef NotImplemented IfcTable; // (not currently used by Assimp) - struct IfcPipeSegmentType; - struct IfcFlowTerminal; - typedef NotImplemented IfcReinforcementDefinitionProperties; // (not currently used by Assimp) - struct IfcWallType; - struct IfcCoilType; - typedef NotImplemented IfcStructuralLoadSingleDisplacementDistortion; // (not currently used by Assimp) - struct IfcFurnishingElement; - typedef NotImplemented IfcTextStyleWithBoxCharacteristics; // (not currently used by Assimp) - struct IfcWasteTerminalType; - struct IfcWindow; - typedef NotImplemented IfcActorRole; // (not currently used by Assimp) - struct IfcElectricFlowStorageDeviceType; - struct IfcRelAggregates; - typedef NotImplemented IfcDerivedUnit; // (not currently used by Assimp) - struct IfcRamp; - typedef NotImplemented IfcDraughtingPreDefinedCurveFont; // (not currently used by Assimp) - struct IfcLinearDimension; - struct IfcElementarySurface; - struct IfcConstructionProductResource; - struct IfcCableSegmentType; - typedef NotImplemented IfcDraughtingPreDefinedTextFont; // (not currently used by Assimp) - struct IfcPath; - typedef NotImplemented IfcTextStyleTextModel; // (not currently used by Assimp) - typedef NotImplemented IfcOrganizationRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcMonetaryUnit; // (not currently used by Assimp) - struct IfcActor; - struct IfcOccupant; - struct IfcSwitchingDeviceType; - struct IfcSweptSurface; - struct IfcSurfaceOfLinearExtrusion; - struct IfcShellBasedSurfaceModel; - typedef NotImplemented IfcSymbolStyle; // (not currently used by Assimp) + struct IfcAxis2Placement3D; + struct IfcBSplineCurve; + struct IfcElement; + struct IfcBuildingElement; + struct IfcBeam; + struct IfcBuildingElementType; + struct IfcBeamType; + struct IfcBezierCurve; + typedef NotImplemented IfcSurfaceTexture; // (not currently used by Assimp) + typedef NotImplemented IfcBlobTexture; // (not currently used by Assimp) + struct IfcCsgPrimitive3D; + struct IfcBlock; + struct IfcBoilerType; + struct IfcBooleanResult; + struct IfcBooleanClippingResult; + typedef NotImplemented IfcBoundaryCondition; // (not currently used by Assimp) + typedef NotImplemented IfcBoundaryEdgeCondition; // (not currently used by Assimp) + typedef NotImplemented IfcBoundaryFaceCondition; // (not currently used by Assimp) + typedef NotImplemented IfcBoundaryNodeCondition; // (not currently used by Assimp) + typedef NotImplemented IfcBoundaryNodeConditionWarping; // (not currently used by Assimp) + struct IfcSurface; + struct IfcBoundedSurface; + struct IfcBoundingBox; + struct IfcHalfSpaceSolid; + struct IfcBoxedHalfSpace; + struct IfcSpatialStructureElement; struct IfcBuilding; - struct IfcSIUnit; - struct IfcDiscreteAccessory; - typedef NotImplemented IfcPreDefinedPointMarkerSymbol; // (not currently used by Assimp) - typedef NotImplemented IfcCostValue; // (not currently used by Assimp) - typedef NotImplemented IfcOwnerHistory; // (not currently used by Assimp) - struct IfcSystemFurnitureElementType; - struct IfcElementAssembly; - struct IfcCoolingTowerType; - typedef NotImplemented IfcStructuralLoadLinearForce; // (not currently used by Assimp) - typedef NotImplemented IfcPresentationLayerAssignment; // (not currently used by Assimp) - typedef NotImplemented IfcPresentationLayerWithStyle; // (not currently used by Assimp) - struct IfcLightSourceSpot; - typedef NotImplemented IfcExtendedMaterialProperties; // (not currently used by Assimp) - typedef NotImplemented IfcPixelTexture; // (not currently used by Assimp) - typedef NotImplemented IfcDimensionalExponents; // (not currently used by Assimp) - struct IfcEvaporatorType; + struct IfcBuildingElementComponent; + struct IfcBuildingElementPart; + struct IfcBuildingElementProxy; + struct IfcBuildingElementProxyType; + struct IfcBuildingStorey; + struct IfcCShapeProfileDef; + struct IfcFlowFittingType; + struct IfcCableCarrierFittingType; + struct IfcFlowSegmentType; + struct IfcCableCarrierSegmentType; + struct IfcCableSegmentType; + typedef NotImplemented IfcCalendarDate; // (not currently used by Assimp) + struct IfcPoint; + struct IfcCartesianPoint; + struct IfcCartesianTransformationOperator; + struct IfcCartesianTransformationOperator2D; + struct IfcCartesianTransformationOperator2DnonUniform; + struct IfcCartesianTransformationOperator3D; + struct IfcCartesianTransformationOperator3DnonUniform; + struct IfcCenterLineProfileDef; + struct IfcFeatureElement; + struct IfcFeatureElementSubtraction; + struct IfcEdgeFeature; + struct IfcChamferEdgeFeature; + struct IfcChillerType; + struct IfcConic; + struct IfcCircle; + struct IfcCircleProfileDef; + struct IfcCircleHollowProfileDef; + typedef NotImplemented IfcClassification; // (not currently used by Assimp) + typedef NotImplemented IfcClassificationItem; // (not currently used by Assimp) + typedef NotImplemented IfcClassificationItemRelationship; // (not currently used by Assimp) typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadPlanarForce; // (not currently used by Assimp) - struct IfcSpaceHeaterType; - struct IfcElementQuantity; - typedef NotImplemented IfcCurrencyRelationship; // (not currently used by Assimp) - struct IfcRampFlight; - struct IfcConversionBasedUnit; - struct IfcExtrudedAreaSolid; - struct IfcProjectOrder; + typedef NotImplemented IfcClassificationNotationFacet; // (not currently used by Assimp) + typedef NotImplemented IfcExternalReference; // (not currently used by Assimp) + typedef NotImplemented IfcClassificationReference; // (not currently used by Assimp) + struct IfcTopologicalRepresentationItem; + struct IfcConnectedFaceSet; + struct IfcClosedShell; + struct IfcCoilType; + struct IfcColourSpecification; + struct IfcColourRgb; + struct IfcColumn; + struct IfcColumnType; + struct IfcProperty; + struct IfcComplexProperty; + struct IfcCompositeCurveSegment; + struct IfcCompositeProfileDef; + struct IfcFlowMovingDeviceType; + struct IfcCompressorType; + struct IfcCondenserType; + struct IfcCondition; + struct IfcConditionCriterion; + typedef NotImplemented IfcConnectionGeometry; // (not currently used by Assimp) + typedef NotImplemented IfcConnectionCurveGeometry; // (not currently used by Assimp) typedef NotImplemented IfcConnectionPointGeometry; // (not currently used by Assimp) typedef NotImplemented IfcConnectionPointEccentricity; // (not currently used by Assimp) - typedef NotImplemented IfcConstraintAggregationRelationship; // (not currently used by Assimp) - typedef NotImplemented IfcDimensionPair; // (not currently used by Assimp) - struct IfcBooleanClippingResult; + typedef NotImplemented IfcConnectionPortGeometry; // (not currently used by Assimp) + typedef NotImplemented IfcConnectionSurfaceGeometry; // (not currently used by Assimp) typedef NotImplemented IfcConstraint; // (not currently used by Assimp) - typedef NotImplemented IfcStructuralLoadTemperature; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesConstraint; // (not currently used by Assimp) - struct IfcReinforcingBar; - struct IfcCenterLineProfileDef; - struct IfcUShapeProfileDef; - struct IfcBoundingBox; - struct IfcWindowStyle; - typedef NotImplemented IfcBlobTexture; // (not currently used by Assimp) - struct IfcMemberType; - struct IfcLightFixtureType; - struct IfcFlowStorageDevice; - struct IfcTopologyRepresentation; - struct IfcRelDefinesByProperties; - struct IfcRelOverridesProperties; - struct IfcStairFlightType; - struct IfcCircleProfileDef; - struct IfcSweptDiskSolid; - typedef NotImplemented IfcExternallyDefinedSymbol; // (not currently used by Assimp) - typedef NotImplemented IfcRegularTimeSeries; // (not currently used by Assimp) - struct IfcStructuralPlanarActionVarying; - struct IfcValveType; - struct IfcUnitAssignment; - typedef NotImplemented IfcConnectionCurveGeometry; // (not currently used by Assimp) - typedef NotImplemented IfcOrganization; // (not currently used by Assimp) - struct IfcVirtualElement; - typedef NotImplemented IfcQuantityCount; // (not currently used by Assimp) - struct IfcStructuralCurveConnection; - struct IfcAirTerminalType; - struct IfcFlowTreatmentDeviceType; - struct IfcRoof; - typedef NotImplemented IfcSectionProperties; // (not currently used by Assimp) - typedef NotImplemented IfcTimeSeriesValue; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssignsToGroup; // (not currently used by Assimp) - struct IfcElectricTimeControlType; - struct IfcPile; - struct IfcCostSchedule; - struct IfcRampFlightType; - struct IfcDerivedProfileDef; - struct IfcCostItem; - struct IfcEvaporativeCoolerType; - struct IfcChillerType; - typedef NotImplemented IfcMaterialLayer; // (not currently used by Assimp) - struct IfcBoxedHalfSpace; - struct IfcCurtainWallType; - struct IfcGeometricRepresentationSubContext; - struct IfcDimensionCurve; - struct IfcPlane; - struct IfcProjectionCurve; - struct IfcDamperType; - typedef NotImplemented IfcSurfaceStyleRefraction; // (not currently used by Assimp) - typedef NotImplemented IfcRibPlateProfileProperties; // (not currently used by Assimp) - typedef NotImplemented IfcWaterProperties; // (not currently used by Assimp) - struct IfcMechanicalFastener; - struct IfcDuctSilencerType; - typedef NotImplemented IfcRelAssociatesDocument; // (not currently used by Assimp) - typedef NotImplemented IfcReinforcementBarProperties; // (not currently used by Assimp) - struct IfcLaborResource; - struct IfcFanType; - typedef NotImplemented IfcEnergyProperties; // (not currently used by Assimp) - struct IfcProjectionElement; - typedef NotImplemented IfcRelInteractionRequirements; // (not currently used by Assimp) - struct IfcCraneRailFShapeProfileDef; - typedef NotImplemented IfcApprovalRelationship; // (not currently used by Assimp) - struct IfcProject; - struct IfcRelVoidsElement; - typedef NotImplemented IfcMetric; // (not currently used by Assimp) - struct IfcElectricalCircuit; - struct IfcLShapeProfileDef; - typedef NotImplemented IfcRelSequence; // (not currently used by Assimp) - struct IfcFlowTreatmentDevice; - struct IfcVertexPoint; - struct IfcAnnotationTextOccurrence; - struct IfcFilterType; - typedef NotImplemented IfcQuantityTime; // (not currently used by Assimp) - struct IfcEdgeLoop; - struct IfcCircleHollowProfileDef; - struct IfcAirTerminalBoxType; - struct IfcStructuredDimensionCallout; - typedef NotImplemented IfcElectricalBaseProperties; // (not currently used by Assimp) - struct IfcCableCarrierSegmentType; - typedef NotImplemented IfcAppliedValueRelationship; // (not currently used by Assimp) - struct IfcDuctFittingType; - typedef NotImplemented IfcExternallyDefinedHatchStyle; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssociatesLibrary; // (not currently used by Assimp) - struct IfcRectangularTrimmedSurface; - struct IfcProductDefinitionShape; - struct IfcStairFlight; - struct IfcSlab; - struct IfcPipeFittingType; - struct IfcSpace; - typedef NotImplemented IfcDateAndTime; // (not currently used by Assimp) - typedef NotImplemented IfcObjective; // (not currently used by Assimp) - typedef NotImplemented IfcVirtualGridIntersection; // (not currently used by Assimp) - struct IfcBuildingElementProxyType; - typedef NotImplemented IfcRelAssignsToProcess; // (not currently used by Assimp) - struct IfcAlarmType; - struct IfcCableCarrierFittingType; - struct IfcRoundedEdgeFeature; - typedef NotImplemented IfcTelecomAddress; // (not currently used by Assimp) - typedef NotImplemented IfcRelConnectsPortToElement; // (not currently used by Assimp) - typedef NotImplemented IfcRelAssignsTasks; // (not currently used by Assimp) - struct IfcFaceSurface; - typedef NotImplemented IfcRelOccupiesSpaces; // (not currently used by Assimp) - struct IfcCartesianTransformationOperator2D; - typedef NotImplemented IfcGridAxis; // (not currently used by Assimp) - struct IfcTendonAnchor; - typedef NotImplemented IfcFluidFlowProperties; // (not currently used by Assimp) - struct IfcWorkSchedule; - struct IfcSurfaceOfRevolution; - typedef NotImplemented IfcSurfaceStyleLighting; // (not currently used by Assimp) - struct IfcElectricHeaterType; - struct IfcMeasureWithUnit; - struct IfcOrientedEdge; - struct IfcCartesianTransformationOperator2DnonUniform; - typedef NotImplemented IfcRelConnectsWithRealizingElements; // (not currently used by Assimp) - typedef NotImplemented IfcRelConnectsPorts; // (not currently used by Assimp) - struct IfcRelFillsElement; + typedef NotImplemented IfcConstraintAggregationRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcConstraintClassificationRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcConstraintRelationship; // (not currently used by Assimp) + struct IfcResource; + struct IfcConstructionResource; + struct IfcConstructionEquipmentResource; struct IfcConstructionMaterialResource; + struct IfcConstructionProductResource; + struct IfcNamedUnit; + struct IfcContextDependentUnit; + struct IfcControllerType; + struct IfcConversionBasedUnit; + struct IfcCooledBeamType; + struct IfcCoolingTowerType; + typedef NotImplemented IfcCoordinatedUniversalTimeOffset; // (not currently used by Assimp) + struct IfcCostItem; + struct IfcCostSchedule; + typedef NotImplemented IfcCostValue; // (not currently used by Assimp) + struct IfcCovering; + struct IfcCoveringType; + struct IfcCraneRailAShapeProfileDef; + struct IfcCraneRailFShapeProfileDef; + struct IfcCrewResource; + struct IfcSolidModel; + struct IfcCsgSolid; + typedef NotImplemented IfcCurrencyRelationship; // (not currently used by Assimp) + struct IfcCurtainWall; + struct IfcCurtainWallType; + struct IfcCurveBoundedPlane; + struct IfcPresentationStyle; + typedef NotImplemented IfcCurveStyle; // (not currently used by Assimp) + typedef NotImplemented IfcCurveStyleFont; // (not currently used by Assimp) + typedef NotImplemented IfcCurveStyleFontAndScaling; // (not currently used by Assimp) + typedef NotImplemented IfcCurveStyleFontPattern; // (not currently used by Assimp) + struct IfcDamperType; + typedef NotImplemented IfcDateAndTime; // (not currently used by Assimp) + struct IfcDefinedSymbol; + struct IfcDerivedProfileDef; + typedef NotImplemented IfcDerivedUnit; // (not currently used by Assimp) + typedef NotImplemented IfcDerivedUnitElement; // (not currently used by Assimp) + struct IfcDiameterDimension; + typedef NotImplemented IfcDraughtingCalloutRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcDimensionCalloutRelationship; // (not currently used by Assimp) + struct IfcDimensionCurve; + struct IfcTerminatorSymbol; + struct IfcDimensionCurveTerminator; + typedef NotImplemented IfcDimensionPair; // (not currently used by Assimp) + typedef NotImplemented IfcDimensionalExponents; // (not currently used by Assimp) + struct IfcDirection; + struct IfcElementComponent; + struct IfcDiscreteAccessory; + struct IfcElementComponentType; + struct IfcDiscreteAccessoryType; + struct IfcDistributionElement; + struct IfcDistributionFlowElement; + struct IfcDistributionChamberElement; + struct IfcDistributionChamberElementType; + struct IfcDistributionControlElement; + struct IfcPort; + struct IfcDistributionPort; + typedef NotImplemented IfcDocumentElectronicFormat; // (not currently used by Assimp) + typedef NotImplemented IfcDocumentInformation; // (not currently used by Assimp) + typedef NotImplemented IfcDocumentInformationRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcDocumentReference; // (not currently used by Assimp) + struct IfcDoor; + struct IfcPropertyDefinition; + struct IfcPropertySetDefinition; + typedef NotImplemented IfcDoorLiningProperties; // (not currently used by Assimp) + typedef NotImplemented IfcDoorPanelProperties; // (not currently used by Assimp) + struct IfcDoorStyle; + typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp) + typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedCurveFont; // (not currently used by Assimp) + typedef NotImplemented IfcDraughtingPreDefinedCurveFont; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedTextFont; // (not currently used by Assimp) + typedef NotImplemented IfcDraughtingPreDefinedTextFont; // (not currently used by Assimp) + struct IfcDuctFittingType; + struct IfcDuctSegmentType; + struct IfcFlowTreatmentDeviceType; + struct IfcDuctSilencerType; + struct IfcEdge; + struct IfcEdgeCurve; + struct IfcLoop; + struct IfcEdgeLoop; + struct IfcElectricApplianceType; + struct IfcFlowController; + struct IfcElectricDistributionPoint; + struct IfcFlowStorageDeviceType; + struct IfcElectricFlowStorageDeviceType; + struct IfcElectricGeneratorType; + struct IfcElectricHeaterType; + struct IfcElectricMotorType; + struct IfcElectricTimeControlType; + typedef NotImplemented IfcEnergyProperties; // (not currently used by Assimp) + typedef NotImplemented IfcElectricalBaseProperties; // (not currently used by Assimp) + struct IfcSystem; + struct IfcElectricalCircuit; + struct IfcElectricalElement; + struct IfcElementAssembly; + struct IfcElementQuantity; + struct IfcElementarySurface; + struct IfcEllipse; + struct IfcEllipseProfileDef; + struct IfcEnergyConversionDevice; + typedef NotImplemented IfcEnvironmentalImpactValue; // (not currently used by Assimp) + struct IfcEquipmentElement; + struct IfcEquipmentStandard; + struct IfcEvaporativeCoolerType; + struct IfcEvaporatorType; + typedef NotImplemented IfcMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcExtendedMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcExternallyDefinedHatchStyle; // (not currently used by Assimp) + typedef NotImplemented IfcExternallyDefinedSurfaceStyle; // (not currently used by Assimp) + typedef NotImplemented IfcExternallyDefinedSymbol; // (not currently used by Assimp) + typedef NotImplemented IfcExternallyDefinedTextFont; // (not currently used by Assimp) + struct IfcSweptAreaSolid; + struct IfcExtrudedAreaSolid; + struct IfcFace; + struct IfcFaceBasedSurfaceModel; + struct IfcFaceBound; + struct IfcFaceOuterBound; + struct IfcFaceSurface; + struct IfcManifoldSolidBrep; + struct IfcFacetedBrep; + struct IfcFacetedBrepWithVoids; + typedef NotImplemented IfcStructuralConnectionCondition; // (not currently used by Assimp) + typedef NotImplemented IfcFailureConnectionCondition; // (not currently used by Assimp) + struct IfcFanType; + struct IfcFastener; + struct IfcFastenerType; + struct IfcFeatureElementAddition; + typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp) + struct IfcFillAreaStyleHatching; + struct IfcFillAreaStyleTileSymbolWithStyle; + struct IfcFillAreaStyleTiles; + struct IfcFilterType; + struct IfcFireSuppressionTerminalType; + struct IfcFlowFitting; + struct IfcFlowInstrumentType; + struct IfcFlowMeterType; + struct IfcFlowMovingDevice; + struct IfcFlowSegment; + struct IfcFlowStorageDevice; + struct IfcFlowTerminal; + struct IfcFlowTreatmentDevice; + typedef NotImplemented IfcFluidFlowProperties; // (not currently used by Assimp) + struct IfcFooting; + typedef NotImplemented IfcFuelProperties; // (not currently used by Assimp) + struct IfcFurnishingElement; + struct IfcFurnishingElementType; + struct IfcFurnitureStandard; + struct IfcFurnitureType; + struct IfcGasTerminalType; + typedef NotImplemented IfcGeneralMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcProfileProperties; // (not currently used by Assimp) + typedef NotImplemented IfcGeneralProfileProperties; // (not currently used by Assimp) + struct IfcGeometricSet; + struct IfcGeometricCurveSet; + struct IfcRepresentationContext; + struct IfcGeometricRepresentationContext; + struct IfcGeometricRepresentationSubContext; + struct IfcGrid; + typedef NotImplemented IfcGridAxis; // (not currently used by Assimp) + struct IfcObjectPlacement; + struct IfcGridPlacement; + struct IfcHeatExchangerType; + struct IfcHumidifierType; + typedef NotImplemented IfcHygroscopicMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcImageTexture; // (not currently used by Assimp) + struct IfcInventory; + typedef NotImplemented IfcTimeSeries; // (not currently used by Assimp) + typedef NotImplemented IfcIrregularTimeSeries; // (not currently used by Assimp) + typedef NotImplemented IfcIrregularTimeSeriesValue; // (not currently used by Assimp) + struct IfcJunctionBoxType; + struct IfcLShapeProfileDef; + struct IfcLaborResource; + struct IfcLampType; + typedef NotImplemented IfcLibraryInformation; // (not currently used by Assimp) + typedef NotImplemented IfcLibraryReference; // (not currently used by Assimp) + typedef NotImplemented IfcLightDistributionData; // (not currently used by Assimp) + struct IfcLightFixtureType; + typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp) + struct IfcLightSource; + struct IfcLightSourceAmbient; + struct IfcLightSourceDirectional; + struct IfcLightSourceGoniometric; + struct IfcLightSourcePositional; + struct IfcLightSourceSpot; + struct IfcLine; + struct IfcLinearDimension; + struct IfcLocalPlacement; + typedef NotImplemented IfcLocalTime; // (not currently used by Assimp) + struct IfcMappedItem; + typedef NotImplemented IfcMaterial; // (not currently used by Assimp) + typedef NotImplemented IfcMaterialClassificationRelationship; // (not currently used by Assimp) + struct IfcProductRepresentation; + struct IfcMaterialDefinitionRepresentation; + typedef NotImplemented IfcMaterialLayer; // (not currently used by Assimp) + typedef NotImplemented IfcMaterialLayerSet; // (not currently used by Assimp) + typedef NotImplemented IfcMaterialLayerSetUsage; // (not currently used by Assimp) + typedef NotImplemented IfcMaterialList; // (not currently used by Assimp) + struct IfcMeasureWithUnit; + typedef NotImplemented IfcMechanicalMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcMechanicalConcreteMaterialProperties; // (not currently used by Assimp) + struct IfcMechanicalFastener; + struct IfcMechanicalFastenerType; + typedef NotImplemented IfcMechanicalSteelMaterialProperties; // (not currently used by Assimp) + struct IfcMember; + struct IfcMemberType; + typedef NotImplemented IfcMetric; // (not currently used by Assimp) + typedef NotImplemented IfcMonetaryUnit; // (not currently used by Assimp) + struct IfcMotorConnectionType; + struct IfcProcess; + struct IfcTask; + struct IfcMove; + typedef NotImplemented IfcObjective; // (not currently used by Assimp) + struct IfcOccupant; + struct IfcOffsetCurve2D; + struct IfcOffsetCurve3D; + struct IfcOneDirectionRepeatFactor; + struct IfcOpenShell; + struct IfcOpeningElement; + typedef NotImplemented IfcOpticalMaterialProperties; // (not currently used by Assimp) + struct IfcOrderAction; + typedef NotImplemented IfcOrganization; // (not currently used by Assimp) + typedef NotImplemented IfcOrganizationRelationship; // (not currently used by Assimp) + struct IfcOrientedEdge; + struct IfcOutletType; + typedef NotImplemented IfcOwnerHistory; // (not currently used by Assimp) + struct IfcPath; + struct IfcPerformanceHistory; + typedef NotImplemented IfcPermeableCoveringProperties; // (not currently used by Assimp) + struct IfcPermit; + typedef NotImplemented IfcPerson; // (not currently used by Assimp) + typedef NotImplemented IfcPersonAndOrganization; // (not currently used by Assimp) + typedef NotImplemented IfcPhysicalQuantity; // (not currently used by Assimp) + typedef NotImplemented IfcPhysicalComplexQuantity; // (not currently used by Assimp) + typedef NotImplemented IfcPhysicalSimpleQuantity; // (not currently used by Assimp) + struct IfcPile; + struct IfcPipeFittingType; + struct IfcPipeSegmentType; + typedef NotImplemented IfcPixelTexture; // (not currently used by Assimp) + struct IfcPlanarExtent; + struct IfcPlanarBox; + struct IfcPlane; + struct IfcPlate; + struct IfcPlateType; + struct IfcPointOnCurve; + struct IfcPointOnSurface; + struct IfcPolyLoop; + struct IfcPolygonalBoundedHalfSpace; + struct IfcPolyline; + typedef NotImplemented IfcPostalAddress; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedDimensionSymbol; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedPointMarkerSymbol; // (not currently used by Assimp) + typedef NotImplemented IfcPreDefinedTerminatorSymbol; // (not currently used by Assimp) + typedef NotImplemented IfcPresentationLayerAssignment; // (not currently used by Assimp) + typedef NotImplemented IfcPresentationLayerWithStyle; // (not currently used by Assimp) + struct IfcPresentationStyleAssignment; + struct IfcProcedure; + struct IfcProductDefinitionShape; + typedef NotImplemented IfcProductsOfCombustionProperties; // (not currently used by Assimp) + struct IfcProject; + struct IfcProjectOrder; + struct IfcProjectOrderRecord; + struct IfcProjectionCurve; + struct IfcProjectionElement; + struct IfcSimpleProperty; + struct IfcPropertyBoundedValue; + typedef NotImplemented IfcPropertyConstraintRelationship; // (not currently used by Assimp) + typedef NotImplemented IfcPropertyDependencyRelationship; // (not currently used by Assimp) + struct IfcPropertyEnumeratedValue; + typedef NotImplemented IfcPropertyEnumeration; // (not currently used by Assimp) + struct IfcPropertyListValue; + struct IfcPropertyReferenceValue; + struct IfcPropertySet; + struct IfcPropertySingleValue; + struct IfcPropertyTableValue; + struct IfcProtectiveDeviceType; + struct IfcProxy; + struct IfcPumpType; + typedef NotImplemented IfcQuantityArea; // (not currently used by Assimp) + typedef NotImplemented IfcQuantityCount; // (not currently used by Assimp) + typedef NotImplemented IfcQuantityLength; // (not currently used by Assimp) + typedef NotImplemented IfcQuantityTime; // (not currently used by Assimp) + typedef NotImplemented IfcQuantityVolume; // (not currently used by Assimp) + typedef NotImplemented IfcQuantityWeight; // (not currently used by Assimp) struct IfcRadiusDimension; + struct IfcRailing; + struct IfcRailingType; + struct IfcRamp; + struct IfcRampFlight; + struct IfcRampFlightType; + struct IfcRationalBezierCurve; + struct IfcRectangleProfileDef; + struct IfcRectangleHollowProfileDef; + struct IfcRectangularPyramid; + struct IfcRectangularTrimmedSurface; + typedef NotImplemented IfcReferencesValueDocument; // (not currently used by Assimp) + typedef NotImplemented IfcRegularTimeSeries; // (not currently used by Assimp) + typedef NotImplemented IfcReinforcementBarProperties; // (not currently used by Assimp) + typedef NotImplemented IfcReinforcementDefinitionProperties; // (not currently used by Assimp) + struct IfcReinforcingElement; + struct IfcReinforcingBar; + struct IfcReinforcingMesh; + struct IfcRelationship; + struct IfcRelDecomposes; + struct IfcRelAggregates; + typedef NotImplemented IfcRelAssigns; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToControl; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsTasks; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToActor; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToGroup; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToProcess; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToProduct; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToProjectOrder; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssignsToResource; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociates; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesAppliedValue; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesApproval; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesClassification; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesConstraint; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesDocument; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesLibrary; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesMaterial; // (not currently used by Assimp) + typedef NotImplemented IfcRelAssociatesProfileProperties; // (not currently used by Assimp) + struct IfcRelConnects; + typedef NotImplemented IfcRelConnectsElements; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsPathElements; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsPortToElement; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsPorts; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsStructuralElement; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsStructuralMember; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsWithEccentricity; // (not currently used by Assimp) + typedef NotImplemented IfcRelConnectsWithRealizingElements; // (not currently used by Assimp) + struct IfcRelContainedInSpatialStructure; + typedef NotImplemented IfcRelCoversBldgElements; // (not currently used by Assimp) + typedef NotImplemented IfcRelCoversSpaces; // (not currently used by Assimp) + struct IfcRelDefines; + struct IfcRelDefinesByProperties; + typedef NotImplemented IfcRelDefinesByType; // (not currently used by Assimp) + struct IfcRelFillsElement; + typedef NotImplemented IfcRelFlowControlElements; // (not currently used by Assimp) + typedef NotImplemented IfcRelInteractionRequirements; // (not currently used by Assimp) + typedef NotImplemented IfcRelNests; // (not currently used by Assimp) + typedef NotImplemented IfcRelOccupiesSpaces; // (not currently used by Assimp) + struct IfcRelOverridesProperties; + typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp) + typedef NotImplemented IfcRelReferencedInSpatialStructure; // (not currently used by Assimp) + typedef NotImplemented IfcRelSchedulesCostItems; // (not currently used by Assimp) + typedef NotImplemented IfcRelSequence; // (not currently used by Assimp) + typedef NotImplemented IfcRelServicesBuildings; // (not currently used by Assimp) + typedef NotImplemented IfcRelSpaceBoundary; // (not currently used by Assimp) + struct IfcRelVoidsElement; + typedef NotImplemented IfcRelaxation; // (not currently used by Assimp) + struct IfcRepresentation; + struct IfcRepresentationMap; + struct IfcRevolvedAreaSolid; + typedef NotImplemented IfcRibPlateProfileProperties; // (not currently used by Assimp) + struct IfcRightCircularCone; + struct IfcRightCircularCylinder; + struct IfcRoof; + struct IfcRoundedEdgeFeature; + struct IfcRoundedRectangleProfileDef; + struct IfcSIUnit; + struct IfcSanitaryTerminalType; + struct IfcScheduleTimeControl; + typedef NotImplemented IfcSectionProperties; // (not currently used by Assimp) + typedef NotImplemented IfcSectionReinforcementProperties; // (not currently used by Assimp) + struct IfcSectionedSpine; + struct IfcSensorType; + struct IfcServiceLife; + typedef NotImplemented IfcServiceLifeFactor; // (not currently used by Assimp) + typedef NotImplemented IfcShapeAspect; // (not currently used by Assimp) + struct IfcShapeModel; + struct IfcShapeRepresentation; + struct IfcShellBasedSurfaceModel; + struct IfcSite; + struct IfcSlab; + struct IfcSlabType; + typedef NotImplemented IfcSlippageConnectionCondition; // (not currently used by Assimp) + typedef NotImplemented IfcSoundProperties; // (not currently used by Assimp) + typedef NotImplemented IfcSoundValue; // (not currently used by Assimp) + struct IfcSpace; + struct IfcSpaceHeaterType; + struct IfcSpaceProgram; + typedef NotImplemented IfcSpaceThermalLoadProperties; // (not currently used by Assimp) + struct IfcSpatialStructureElementType; + struct IfcSpaceType; + struct IfcSphere; + struct IfcStackTerminalType; + struct IfcStair; + struct IfcStairFlight; + struct IfcStairFlightType; + struct IfcStructuralActivity; + struct IfcStructuralAction; + struct IfcStructuralAnalysisModel; + struct IfcStructuralItem; + struct IfcStructuralConnection; + struct IfcStructuralCurveConnection; + struct IfcStructuralMember; + struct IfcStructuralCurveMember; + struct IfcStructuralCurveMemberVarying; + struct IfcStructuralLinearAction; + struct IfcStructuralLinearActionVarying; + typedef NotImplemented IfcStructuralLoad; // (not currently used by Assimp) + struct IfcStructuralLoadGroup; + typedef NotImplemented IfcStructuralLoadStatic; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadLinearForce; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadPlanarForce; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadSingleDisplacement; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadSingleDisplacementDistortion; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadSingleForce; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadSingleForceWarping; // (not currently used by Assimp) + typedef NotImplemented IfcStructuralLoadTemperature; // (not currently used by Assimp) + struct IfcStructuralPlanarAction; + struct IfcStructuralPlanarActionVarying; + struct IfcStructuralPointAction; + struct IfcStructuralPointConnection; + struct IfcStructuralReaction; + struct IfcStructuralPointReaction; + typedef NotImplemented IfcStructuralProfileProperties; // (not currently used by Assimp) + struct IfcStructuralResultGroup; + typedef NotImplemented IfcStructuralSteelProfileProperties; // (not currently used by Assimp) + struct IfcStructuralSurfaceConnection; + struct IfcStructuralSurfaceMember; + struct IfcStructuralSurfaceMemberVarying; + struct IfcStructuredDimensionCallout; + struct IfcStyleModel; + struct IfcStyledRepresentation; + struct IfcSubContractResource; + struct IfcSubedge; + struct IfcSurfaceCurveSweptAreaSolid; + struct IfcSweptSurface; + struct IfcSurfaceOfLinearExtrusion; + struct IfcSurfaceOfRevolution; + struct IfcSurfaceStyle; + typedef NotImplemented IfcSurfaceStyleLighting; // (not currently used by Assimp) + typedef NotImplemented IfcSurfaceStyleRefraction; // (not currently used by Assimp) + struct IfcSurfaceStyleShading; + struct IfcSurfaceStyleRendering; + struct IfcSurfaceStyleWithTextures; + struct IfcSweptDiskSolid; + struct IfcSwitchingDeviceType; + typedef NotImplemented IfcSymbolStyle; // (not currently used by Assimp) + struct IfcSystemFurnitureElementType; + struct IfcTShapeProfileDef; + typedef NotImplemented IfcTable; // (not currently used by Assimp) + typedef NotImplemented IfcTableRow; // (not currently used by Assimp) + struct IfcTankType; + typedef NotImplemented IfcTelecomAddress; // (not currently used by Assimp) + struct IfcTendon; + struct IfcTendonAnchor; + struct IfcTextLiteral; + struct IfcTextLiteralWithExtent; + typedef NotImplemented IfcTextStyle; // (not currently used by Assimp) + typedef NotImplemented IfcTextStyleFontModel; // (not currently used by Assimp) + typedef NotImplemented IfcTextStyleForDefinedFont; // (not currently used by Assimp) + typedef NotImplemented IfcTextStyleTextModel; // (not currently used by Assimp) + typedef NotImplemented IfcTextStyleWithBoxCharacteristics; // (not currently used by Assimp) + typedef NotImplemented IfcTextureCoordinate; // (not currently used by Assimp) + typedef NotImplemented IfcTextureCoordinateGenerator; // (not currently used by Assimp) + typedef NotImplemented IfcTextureMap; // (not currently used by Assimp) + typedef NotImplemented IfcTextureVertex; // (not currently used by Assimp) + typedef NotImplemented IfcThermalMaterialProperties; // (not currently used by Assimp) + typedef NotImplemented IfcTimeSeriesReferenceRelationship; // (not currently used by Assimp) + struct IfcTimeSeriesSchedule; + typedef NotImplemented IfcTimeSeriesValue; // (not currently used by Assimp) + struct IfcTopologyRepresentation; + struct IfcTransformerType; + struct IfcTransportElement; + struct IfcTransportElementType; + struct IfcTrapeziumProfileDef; + struct IfcTrimmedCurve; + struct IfcTubeBundleType; + struct IfcTwoDirectionRepeatFactor; + struct IfcUShapeProfileDef; + struct IfcUnitAssignment; + struct IfcUnitaryEquipmentType; + struct IfcValveType; + struct IfcVector; + struct IfcVertex; + typedef NotImplemented IfcVertexBasedTextureMap; // (not currently used by Assimp) + struct IfcVertexLoop; + struct IfcVertexPoint; + struct IfcVibrationIsolatorType; + struct IfcVirtualElement; + typedef NotImplemented IfcVirtualGridIntersection; // (not currently used by Assimp) + struct IfcWall; + struct IfcWallStandardCase; + struct IfcWallType; + struct IfcWasteTerminalType; + typedef NotImplemented IfcWaterProperties; // (not currently used by Assimp) + struct IfcWindow; + typedef NotImplemented IfcWindowLiningProperties; // (not currently used by Assimp) + typedef NotImplemented IfcWindowPanelProperties; // (not currently used by Assimp) + struct IfcWindowStyle; + struct IfcWorkControl; + struct IfcWorkPlan; + struct IfcWorkSchedule; + struct IfcZShapeProfileDef; + struct IfcZone; @@ -1380,27 +1380,30 @@ namespace IFC { }; - // C++ wrapper for IfcTopologicalRepresentationItem - struct IfcTopologicalRepresentationItem : IfcRepresentationItem, ObjectHelper { IfcTopologicalRepresentationItem() : Object("IfcTopologicalRepresentationItem") {} - - }; - - // C++ wrapper for IfcEdge - struct IfcEdge : IfcTopologicalRepresentationItem, ObjectHelper { IfcEdge() : Object("IfcEdge") {} - Lazy< IfcVertex > EdgeStart; - Lazy< IfcVertex > EdgeEnd; - }; - // C++ wrapper for IfcGeometricRepresentationItem struct IfcGeometricRepresentationItem : IfcRepresentationItem, ObjectHelper { IfcGeometricRepresentationItem() : Object("IfcGeometricRepresentationItem") {} }; - // C++ wrapper for IfcCompositeCurveSegment - struct IfcCompositeCurveSegment : IfcGeometricRepresentationItem, ObjectHelper { IfcCompositeCurveSegment() : Object("IfcCompositeCurveSegment") {} - IfcTransitionCode::Out Transition; - BOOLEAN::Out SameSense; - Lazy< IfcCurve > ParentCurve; + // C++ wrapper for IfcCurve + struct IfcCurve : IfcGeometricRepresentationItem, ObjectHelper { IfcCurve() : Object("IfcCurve") {} + + }; + + // C++ wrapper for IfcBoundedCurve + struct IfcBoundedCurve : IfcCurve, ObjectHelper { IfcBoundedCurve() : Object("IfcBoundedCurve") {} + + }; + + // C++ wrapper for IfcCompositeCurve + struct IfcCompositeCurve : IfcBoundedCurve, ObjectHelper { IfcCompositeCurve() : Object("IfcCompositeCurve") {} + ListOf< Lazy< IfcCompositeCurveSegment >, 1, 0 > Segments; + LOGICAL::Out SelfIntersect; + }; + + // C++ wrapper for Ifc2DCompositeCurve + struct Ifc2DCompositeCurve : IfcCompositeCurve, ObjectHelper { Ifc2DCompositeCurve() : Object("Ifc2DCompositeCurve") {} + }; // C++ wrapper for IfcRoot @@ -1421,78 +1424,19 @@ namespace IFC { Maybe< IfcLabel::Out > ObjectType; }; - // C++ wrapper for IfcProduct - struct IfcProduct : IfcObject, ObjectHelper { IfcProduct() : Object("IfcProduct") {} - Maybe< Lazy< IfcObjectPlacement > > ObjectPlacement; - Maybe< Lazy< IfcProductRepresentation > > Representation; - }; - - // C++ wrapper for IfcStructuralItem - struct IfcStructuralItem : IfcProduct, ObjectHelper { IfcStructuralItem() : Object("IfcStructuralItem") {} + // C++ wrapper for IfcControl + struct IfcControl : IfcObject, ObjectHelper { IfcControl() : Object("IfcControl") {} }; - // C++ wrapper for IfcStructuralConnection - struct IfcStructuralConnection : IfcStructuralItem, ObjectHelper { IfcStructuralConnection() : Object("IfcStructuralConnection") {} - Maybe< Lazy< NotImplemented > > AppliedCondition; + // C++ wrapper for IfcActionRequest + struct IfcActionRequest : IfcControl, ObjectHelper { IfcActionRequest() : Object("IfcActionRequest") {} + IfcIdentifier::Out RequestID; }; - // C++ wrapper for IfcStructuralSurfaceConnection - struct IfcStructuralSurfaceConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralSurfaceConnection() : Object("IfcStructuralSurfaceConnection") {} - - }; - - // C++ wrapper for IfcPresentationStyleAssignment - struct IfcPresentationStyleAssignment : ObjectHelper { IfcPresentationStyleAssignment() : Object("IfcPresentationStyleAssignment") {} - ListOf< IfcPresentationStyleSelect, 1, 0 >::Out Styles; - }; - - // C++ wrapper for IfcElement - struct IfcElement : IfcProduct, ObjectHelper { IfcElement() : Object("IfcElement") {} - Maybe< IfcIdentifier::Out > Tag; - }; - - // C++ wrapper for IfcBuildingElement - struct IfcBuildingElement : IfcElement, ObjectHelper { IfcBuildingElement() : Object("IfcBuildingElement") {} - - }; - - // C++ wrapper for IfcCurtainWall - struct IfcCurtainWall : IfcBuildingElement, ObjectHelper { IfcCurtainWall() : Object("IfcCurtainWall") {} - - }; - - // C++ wrapper for IfcProxy - struct IfcProxy : IfcProduct, ObjectHelper { IfcProxy() : Object("IfcProxy") {} - IfcObjectTypeEnum::Out ProxyType; - Maybe< IfcLabel::Out > Tag; - }; - - // C++ wrapper for IfcStyledItem - struct IfcStyledItem : IfcRepresentationItem, ObjectHelper { IfcStyledItem() : Object("IfcStyledItem") {} - Maybe< Lazy< IfcRepresentationItem > > Item; - ListOf< Lazy< IfcPresentationStyleAssignment >, 1, 0 > Styles; - Maybe< IfcLabel::Out > Name; - }; - - // C++ wrapper for IfcAnnotationOccurrence - struct IfcAnnotationOccurrence : IfcStyledItem, ObjectHelper { IfcAnnotationOccurrence() : Object("IfcAnnotationOccurrence") {} - - }; - - // C++ wrapper for IfcAnnotationSymbolOccurrence - struct IfcAnnotationSymbolOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSymbolOccurrence() : Object("IfcAnnotationSymbolOccurrence") {} - - }; - - // C++ wrapper for IfcTerminatorSymbol - struct IfcTerminatorSymbol : IfcAnnotationSymbolOccurrence, ObjectHelper { IfcTerminatorSymbol() : Object("IfcTerminatorSymbol") {} - Lazy< IfcAnnotationCurveOccurrence > AnnotatedCurve; - }; - - // C++ wrapper for IfcDimensionCurveTerminator - struct IfcDimensionCurveTerminator : IfcTerminatorSymbol, ObjectHelper { IfcDimensionCurveTerminator() : Object("IfcDimensionCurveTerminator") {} - IfcDimensionExtentUsage::Out Role; + // C++ wrapper for IfcActor + struct IfcActor : IfcObject, ObjectHelper { IfcActor() : Object("IfcActor") {} + IfcActorSelect::Out TheActor; }; // C++ wrapper for IfcTypeObject @@ -1517,69 +1461,14 @@ namespace IFC { }; - // C++ wrapper for IfcFeatureElement - struct IfcFeatureElement : IfcElement, ObjectHelper { IfcFeatureElement() : Object("IfcFeatureElement") {} + // C++ wrapper for IfcDistributionControlElementType + struct IfcDistributionControlElementType : IfcDistributionElementType, ObjectHelper { IfcDistributionControlElementType() : Object("IfcDistributionControlElementType") {} }; - // C++ wrapper for IfcFeatureElementSubtraction - struct IfcFeatureElementSubtraction : IfcFeatureElement, ObjectHelper { IfcFeatureElementSubtraction() : Object("IfcFeatureElementSubtraction") {} - - }; - - // C++ wrapper for IfcOpeningElement - struct IfcOpeningElement : IfcFeatureElementSubtraction, ObjectHelper { IfcOpeningElement() : Object("IfcOpeningElement") {} - - }; - - // C++ wrapper for IfcPresentationStyle - struct IfcPresentationStyle : ObjectHelper { IfcPresentationStyle() : Object("IfcPresentationStyle") {} - Maybe< IfcLabel::Out > Name; - }; - - // C++ wrapper for IfcSurfaceStyle - struct IfcSurfaceStyle : IfcPresentationStyle, ObjectHelper { IfcSurfaceStyle() : Object("IfcSurfaceStyle") {} - IfcSurfaceSide::Out Side; - ListOf< IfcSurfaceStyleElementSelect, 1, 5 >::Out Styles; - }; - - // C++ wrapper for IfcFillAreaStyleTileSymbolWithStyle - struct IfcFillAreaStyleTileSymbolWithStyle : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTileSymbolWithStyle() : Object("IfcFillAreaStyleTileSymbolWithStyle") {} - Lazy< IfcAnnotationSymbolOccurrence > Symbol; - }; - - // C++ wrapper for IfcRelationship - struct IfcRelationship : IfcRoot, ObjectHelper { IfcRelationship() : Object("IfcRelationship") {} - - }; - - // C++ wrapper for IfcRelConnects - struct IfcRelConnects : IfcRelationship, ObjectHelper { IfcRelConnects() : Object("IfcRelConnects") {} - - }; - - // C++ wrapper for IfcStructuralMember - struct IfcStructuralMember : IfcStructuralItem, ObjectHelper { IfcStructuralMember() : Object("IfcStructuralMember") {} - - }; - - // C++ wrapper for IfcStructuralSurfaceMember - struct IfcStructuralSurfaceMember : IfcStructuralMember, ObjectHelper { IfcStructuralSurfaceMember() : Object("IfcStructuralSurfaceMember") {} - IfcStructuralSurfaceTypeEnum::Out PredefinedType; - Maybe< IfcPositiveLengthMeasure::Out > Thickness; - }; - - // C++ wrapper for IfcCartesianTransformationOperator - struct IfcCartesianTransformationOperator : IfcGeometricRepresentationItem, ObjectHelper { IfcCartesianTransformationOperator() : Object("IfcCartesianTransformationOperator") {} - Maybe< Lazy< IfcDirection > > Axis1; - Maybe< Lazy< IfcDirection > > Axis2; - Lazy< IfcCartesianPoint > LocalOrigin; - Maybe< REAL::Out > Scale; - }; - - // C++ wrapper for IfcCartesianTransformationOperator3D - struct IfcCartesianTransformationOperator3D : IfcCartesianTransformationOperator, ObjectHelper { IfcCartesianTransformationOperator3D() : Object("IfcCartesianTransformationOperator3D") {} - Maybe< Lazy< IfcDirection > > Axis3; + // C++ wrapper for IfcActuatorType + struct IfcActuatorType : IfcDistributionControlElementType, ObjectHelper { IfcActuatorType() : Object("IfcActuatorType") {} + IfcActuatorTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcDistributionFlowElementType @@ -1587,594 +1476,29 @@ namespace IFC { }; - // C++ wrapper for IfcFlowTerminalType - struct IfcFlowTerminalType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowTerminalType() : Object("IfcFlowTerminalType") {} - - }; - - // C++ wrapper for IfcSanitaryTerminalType - struct IfcSanitaryTerminalType : IfcFlowTerminalType, ObjectHelper { IfcSanitaryTerminalType() : Object("IfcSanitaryTerminalType") {} - IfcSanitaryTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcEnergyConversionDeviceType - struct IfcEnergyConversionDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcEnergyConversionDeviceType() : Object("IfcEnergyConversionDeviceType") {} - - }; - - // C++ wrapper for IfcElectricGeneratorType - struct IfcElectricGeneratorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricGeneratorType() : Object("IfcElectricGeneratorType") {} - IfcElectricGeneratorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcResource - struct IfcResource : IfcObject, ObjectHelper { IfcResource() : Object("IfcResource") {} - - }; - - // C++ wrapper for IfcConstructionResource - struct IfcConstructionResource : IfcResource, ObjectHelper { IfcConstructionResource() : Object("IfcConstructionResource") {} - Maybe< IfcIdentifier::Out > ResourceIdentifier; - Maybe< IfcLabel::Out > ResourceGroup; - Maybe< IfcResourceConsumptionEnum::Out > ResourceConsumption; - Maybe< Lazy< IfcMeasureWithUnit > > BaseQuantity; - }; - - // C++ wrapper for IfcControl - struct IfcControl : IfcObject, ObjectHelper { IfcControl() : Object("IfcControl") {} - - }; - - // C++ wrapper for IfcEquipmentStandard - struct IfcEquipmentStandard : IfcControl, ObjectHelper { IfcEquipmentStandard() : Object("IfcEquipmentStandard") {} - - }; - - // C++ wrapper for IfcElectricApplianceType - struct IfcElectricApplianceType : IfcFlowTerminalType, ObjectHelper { IfcElectricApplianceType() : Object("IfcElectricApplianceType") {} - IfcElectricApplianceTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFurnitureStandard - struct IfcFurnitureStandard : IfcControl, ObjectHelper { IfcFurnitureStandard() : Object("IfcFurnitureStandard") {} - - }; - - // C++ wrapper for IfcDefinedSymbol - struct IfcDefinedSymbol : IfcGeometricRepresentationItem, ObjectHelper { IfcDefinedSymbol() : Object("IfcDefinedSymbol") {} - IfcDefinedSymbolSelect::Out Definition; - Lazy< IfcCartesianTransformationOperator2D > Target; - }; - - // C++ wrapper for IfcColourSpecification - struct IfcColourSpecification : ObjectHelper { IfcColourSpecification() : Object("IfcColourSpecification") {} - Maybe< IfcLabel::Out > Name; - }; - - // C++ wrapper for IfcCurve - struct IfcCurve : IfcGeometricRepresentationItem, ObjectHelper { IfcCurve() : Object("IfcCurve") {} - - }; - - // C++ wrapper for IfcLine - struct IfcLine : IfcCurve, ObjectHelper { IfcLine() : Object("IfcLine") {} - Lazy< IfcCartesianPoint > Pnt; - Lazy< IfcVector > Dir; - }; - - // C++ wrapper for IfcLoop - struct IfcLoop : IfcTopologicalRepresentationItem, ObjectHelper { IfcLoop() : Object("IfcLoop") {} - - }; - - // C++ wrapper for IfcProperty - struct IfcProperty : ObjectHelper { IfcProperty() : Object("IfcProperty") {} - IfcIdentifier::Out Name; - Maybe< IfcText::Out > Description; - }; - - // C++ wrapper for IfcComplexProperty - struct IfcComplexProperty : IfcProperty, ObjectHelper { IfcComplexProperty() : Object("IfcComplexProperty") {} - IfcIdentifier::Out UsageName; - ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; - }; - - // C++ wrapper for IfcCovering - struct IfcCovering : IfcBuildingElement, ObjectHelper { IfcCovering() : Object("IfcCovering") {} - Maybe< IfcCoveringTypeEnum::Out > PredefinedType; - }; - - // C++ wrapper for IfcBoundedCurve - struct IfcBoundedCurve : IfcCurve, ObjectHelper { IfcBoundedCurve() : Object("IfcBoundedCurve") {} - - }; - - // C++ wrapper for IfcBSplineCurve - struct IfcBSplineCurve : IfcBoundedCurve, ObjectHelper { IfcBSplineCurve() : Object("IfcBSplineCurve") {} - INTEGER::Out Degree; - ListOf< Lazy< IfcCartesianPoint >, 2, 0 > ControlPointsList; - IfcBSplineCurveForm::Out CurveForm; - LOGICAL::Out ClosedCurve; - LOGICAL::Out SelfIntersect; - }; - - // C++ wrapper for IfcNamedUnit - struct IfcNamedUnit : ObjectHelper { IfcNamedUnit() : Object("IfcNamedUnit") {} - Lazy< NotImplemented > Dimensions; - IfcUnitEnum::Out UnitType; - }; - - // C++ wrapper for IfcSubContractResource - struct IfcSubContractResource : IfcConstructionResource, ObjectHelper { IfcSubContractResource() : Object("IfcSubContractResource") {} - Maybe< IfcActorSelect::Out > SubContractor; - Maybe< IfcText::Out > JobDescription; - }; - - // C++ wrapper for IfcObjectPlacement - struct IfcObjectPlacement : ObjectHelper { IfcObjectPlacement() : Object("IfcObjectPlacement") {} - - }; - - // C++ wrapper for IfcGridPlacement - struct IfcGridPlacement : IfcObjectPlacement, ObjectHelper { IfcGridPlacement() : Object("IfcGridPlacement") {} - Lazy< NotImplemented > PlacementLocation; - Maybe< Lazy< NotImplemented > > PlacementRefDirection; - }; - - // C++ wrapper for IfcPropertyDefinition - struct IfcPropertyDefinition : IfcRoot, ObjectHelper { IfcPropertyDefinition() : Object("IfcPropertyDefinition") {} - - }; - - // C++ wrapper for IfcPropertySetDefinition - struct IfcPropertySetDefinition : IfcPropertyDefinition, ObjectHelper { IfcPropertySetDefinition() : Object("IfcPropertySetDefinition") {} - - }; - - // C++ wrapper for IfcPoint - struct IfcPoint : IfcGeometricRepresentationItem, ObjectHelper { IfcPoint() : Object("IfcPoint") {} - - }; - - // C++ wrapper for IfcCartesianPoint - struct IfcCartesianPoint : IfcPoint, ObjectHelper { IfcCartesianPoint() : Object("IfcCartesianPoint") {} - ListOf< IfcLengthMeasure, 1, 3 >::Out Coordinates; - }; - - // C++ wrapper for IfcFaceBound - struct IfcFaceBound : IfcTopologicalRepresentationItem, ObjectHelper { IfcFaceBound() : Object("IfcFaceBound") {} - Lazy< IfcLoop > Bound; - BOOLEAN::Out Orientation; - }; - - // C++ wrapper for IfcEdgeCurve - struct IfcEdgeCurve : IfcEdge, ObjectHelper { IfcEdgeCurve() : Object("IfcEdgeCurve") {} - Lazy< IfcCurve > EdgeGeometry; - BOOLEAN::Out SameSense; - }; - - // C++ wrapper for IfcOneDirectionRepeatFactor - struct IfcOneDirectionRepeatFactor : IfcGeometricRepresentationItem, ObjectHelper { IfcOneDirectionRepeatFactor() : Object("IfcOneDirectionRepeatFactor") {} - Lazy< IfcVector > RepeatFactor; - }; - - // C++ wrapper for IfcTwoDirectionRepeatFactor - struct IfcTwoDirectionRepeatFactor : IfcOneDirectionRepeatFactor, ObjectHelper { IfcTwoDirectionRepeatFactor() : Object("IfcTwoDirectionRepeatFactor") {} - Lazy< IfcVector > SecondRepeatFactor; - }; - - // C++ wrapper for IfcLightSource - struct IfcLightSource : IfcGeometricRepresentationItem, ObjectHelper { IfcLightSource() : Object("IfcLightSource") {} - Maybe< IfcLabel::Out > Name; - Lazy< IfcColourRgb > LightColour; - Maybe< IfcNormalisedRatioMeasure::Out > AmbientIntensity; - Maybe< IfcNormalisedRatioMeasure::Out > Intensity; - }; - - // C++ wrapper for IfcLightSourceAmbient - struct IfcLightSourceAmbient : IfcLightSource, ObjectHelper { IfcLightSourceAmbient() : Object("IfcLightSourceAmbient") {} - - }; - - // C++ wrapper for IfcPlacement - struct IfcPlacement : IfcGeometricRepresentationItem, ObjectHelper { IfcPlacement() : Object("IfcPlacement") {} - Lazy< IfcCartesianPoint > Location; - }; - - // C++ wrapper for IfcAxis1Placement - struct IfcAxis1Placement : IfcPlacement, ObjectHelper { IfcAxis1Placement() : Object("IfcAxis1Placement") {} - Maybe< Lazy< IfcDirection > > Axis; - }; - - // C++ wrapper for IfcAnnotationSurfaceOccurrence - struct IfcAnnotationSurfaceOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSurfaceOccurrence() : Object("IfcAnnotationSurfaceOccurrence") {} - - }; - // C++ wrapper for IfcFlowControllerType struct IfcFlowControllerType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowControllerType() : Object("IfcFlowControllerType") {} }; - // C++ wrapper for IfcFlowMeterType - struct IfcFlowMeterType : IfcFlowControllerType, ObjectHelper { IfcFlowMeterType() : Object("IfcFlowMeterType") {} - IfcFlowMeterTypeEnum::Out PredefinedType; + // C++ wrapper for IfcAirTerminalBoxType + struct IfcAirTerminalBoxType : IfcFlowControllerType, ObjectHelper { IfcAirTerminalBoxType() : Object("IfcAirTerminalBoxType") {} + IfcAirTerminalBoxTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcAnnotationCurveOccurrence - struct IfcAnnotationCurveOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationCurveOccurrence() : Object("IfcAnnotationCurveOccurrence") {} + // C++ wrapper for IfcFlowTerminalType + struct IfcFlowTerminalType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowTerminalType() : Object("IfcFlowTerminalType") {} }; - // C++ wrapper for IfcProfileDef - struct IfcProfileDef : ObjectHelper { IfcProfileDef() : Object("IfcProfileDef") {} - IfcProfileTypeEnum::Out ProfileType; - Maybe< IfcLabel::Out > ProfileName; + // C++ wrapper for IfcAirTerminalType + struct IfcAirTerminalType : IfcFlowTerminalType, ObjectHelper { IfcAirTerminalType() : Object("IfcAirTerminalType") {} + IfcAirTerminalTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcCompositeProfileDef - struct IfcCompositeProfileDef : IfcProfileDef, ObjectHelper { IfcCompositeProfileDef() : Object("IfcCompositeProfileDef") {} - ListOf< Lazy< IfcProfileDef >, 2, 0 > Profiles; - Maybe< IfcLabel::Out > Label; - }; + // C++ wrapper for IfcEnergyConversionDeviceType + struct IfcEnergyConversionDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcEnergyConversionDeviceType() : Object("IfcEnergyConversionDeviceType") {} - // C++ wrapper for IfcSubedge - struct IfcSubedge : IfcEdge, ObjectHelper { IfcSubedge() : Object("IfcSubedge") {} - Lazy< IfcEdge > ParentEdge; - }; - - // C++ wrapper for IfcFlowStorageDeviceType - struct IfcFlowStorageDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowStorageDeviceType() : Object("IfcFlowStorageDeviceType") {} - - }; - - // C++ wrapper for IfcTankType - struct IfcTankType : IfcFlowStorageDeviceType, ObjectHelper { IfcTankType() : Object("IfcTankType") {} - IfcTankTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcBuildingElementComponent - struct IfcBuildingElementComponent : IfcBuildingElement, ObjectHelper { IfcBuildingElementComponent() : Object("IfcBuildingElementComponent") {} - - }; - - // C++ wrapper for IfcBuildingElementPart - struct IfcBuildingElementPart : IfcBuildingElementComponent, ObjectHelper { IfcBuildingElementPart() : Object("IfcBuildingElementPart") {} - - }; - - // C++ wrapper for IfcRepresentation - struct IfcRepresentation : ObjectHelper { IfcRepresentation() : Object("IfcRepresentation") {} - Lazy< IfcRepresentationContext > ContextOfItems; - Maybe< IfcLabel::Out > RepresentationIdentifier; - Maybe< IfcLabel::Out > RepresentationType; - ListOf< Lazy< IfcRepresentationItem >, 1, 0 > Items; - }; - - // C++ wrapper for IfcShapeModel - struct IfcShapeModel : IfcRepresentation, ObjectHelper { IfcShapeModel() : Object("IfcShapeModel") {} - - }; - - // C++ wrapper for IfcShapeRepresentation - struct IfcShapeRepresentation : IfcShapeModel, ObjectHelper { IfcShapeRepresentation() : Object("IfcShapeRepresentation") {} - - }; - - // C++ wrapper for IfcRailing - struct IfcRailing : IfcBuildingElement, ObjectHelper { IfcRailing() : Object("IfcRailing") {} - Maybe< IfcRailingTypeEnum::Out > PredefinedType; - }; - - // C++ wrapper for IfcStyleModel - struct IfcStyleModel : IfcRepresentation, ObjectHelper { IfcStyleModel() : Object("IfcStyleModel") {} - - }; - - // C++ wrapper for IfcStyledRepresentation - struct IfcStyledRepresentation : IfcStyleModel, ObjectHelper { IfcStyledRepresentation() : Object("IfcStyledRepresentation") {} - - }; - - // C++ wrapper for IfcColourRgb - struct IfcColourRgb : IfcColourSpecification, ObjectHelper { IfcColourRgb() : Object("IfcColourRgb") {} - IfcNormalisedRatioMeasure::Out Red; - IfcNormalisedRatioMeasure::Out Green; - IfcNormalisedRatioMeasure::Out Blue; - }; - - // C++ wrapper for IfcElementComponentType - struct IfcElementComponentType : IfcElementType, ObjectHelper { IfcElementComponentType() : Object("IfcElementComponentType") {} - - }; - - // C++ wrapper for IfcDiscreteAccessoryType - struct IfcDiscreteAccessoryType : IfcElementComponentType, ObjectHelper { IfcDiscreteAccessoryType() : Object("IfcDiscreteAccessoryType") {} - - }; - - // C++ wrapper for IfcVibrationIsolatorType - struct IfcVibrationIsolatorType : IfcDiscreteAccessoryType, ObjectHelper { IfcVibrationIsolatorType() : Object("IfcVibrationIsolatorType") {} - IfcVibrationIsolatorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcProcess - struct IfcProcess : IfcObject, ObjectHelper { IfcProcess() : Object("IfcProcess") {} - - }; - - // C++ wrapper for IfcProcedure - struct IfcProcedure : IfcProcess, ObjectHelper { IfcProcedure() : Object("IfcProcedure") {} - IfcIdentifier::Out ProcedureID; - IfcProcedureTypeEnum::Out ProcedureType; - Maybe< IfcLabel::Out > UserDefinedProcedureType; - }; - - // C++ wrapper for IfcFeatureElementAddition - struct IfcFeatureElementAddition : IfcFeatureElement, ObjectHelper { IfcFeatureElementAddition() : Object("IfcFeatureElementAddition") {} - - }; - - // C++ wrapper for IfcEdgeFeature - struct IfcEdgeFeature : IfcFeatureElementSubtraction, ObjectHelper { IfcEdgeFeature() : Object("IfcEdgeFeature") {} - Maybe< IfcPositiveLengthMeasure::Out > FeatureLength; - }; - - // C++ wrapper for IfcTrimmedCurve - struct IfcTrimmedCurve : IfcBoundedCurve, ObjectHelper { IfcTrimmedCurve() : Object("IfcTrimmedCurve") {} - Lazy< IfcCurve > BasisCurve; - ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim1; - ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim2; - BOOLEAN::Out SenseAgreement; - IfcTrimmingPreference::Out MasterRepresentation; - }; - - // C++ wrapper for IfcTextLiteral - struct IfcTextLiteral : IfcGeometricRepresentationItem, ObjectHelper { IfcTextLiteral() : Object("IfcTextLiteral") {} - IfcPresentableText::Out Literal; - IfcAxis2Placement::Out Placement; - IfcTextPath::Out Path; - }; - - // C++ wrapper for IfcParameterizedProfileDef - struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {} - Lazy< IfcAxis2Placement2D > Position; - }; - - // C++ wrapper for IfcCraneRailAShapeProfileDef - struct IfcCraneRailAShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCraneRailAShapeProfileDef() : Object("IfcCraneRailAShapeProfileDef") {} - IfcPositiveLengthMeasure::Out OverallHeight; - IfcPositiveLengthMeasure::Out BaseWidth2; - Maybe< IfcPositiveLengthMeasure::Out > Radius; - IfcPositiveLengthMeasure::Out HeadWidth; - IfcPositiveLengthMeasure::Out HeadDepth2; - IfcPositiveLengthMeasure::Out HeadDepth3; - IfcPositiveLengthMeasure::Out WebThickness; - IfcPositiveLengthMeasure::Out BaseWidth4; - IfcPositiveLengthMeasure::Out BaseDepth1; - IfcPositiveLengthMeasure::Out BaseDepth2; - IfcPositiveLengthMeasure::Out BaseDepth3; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; - }; - - // C++ wrapper for IfcElementComponent - struct IfcElementComponent : IfcElement, ObjectHelper { IfcElementComponent() : Object("IfcElementComponent") {} - - }; - - // C++ wrapper for IfcCsgPrimitive3D - struct IfcCsgPrimitive3D : IfcGeometricRepresentationItem, ObjectHelper { IfcCsgPrimitive3D() : Object("IfcCsgPrimitive3D") {} - Lazy< IfcAxis2Placement3D > Position; - }; - - // C++ wrapper for IfcBlock - struct IfcBlock : IfcCsgPrimitive3D, ObjectHelper { IfcBlock() : Object("IfcBlock") {} - IfcPositiveLengthMeasure::Out XLength; - IfcPositiveLengthMeasure::Out YLength; - IfcPositiveLengthMeasure::Out ZLength; - }; - - // C++ wrapper for IfcBuildingElementType - struct IfcBuildingElementType : IfcElementType, ObjectHelper { IfcBuildingElementType() : Object("IfcBuildingElementType") {} - - }; - - // C++ wrapper for IfcRailingType - struct IfcRailingType : IfcBuildingElementType, ObjectHelper { IfcRailingType() : Object("IfcRailingType") {} - IfcRailingTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcStructuralPointConnection - struct IfcStructuralPointConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralPointConnection() : Object("IfcStructuralPointConnection") {} - - }; - - // C++ wrapper for IfcFlowMovingDeviceType - struct IfcFlowMovingDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowMovingDeviceType() : Object("IfcFlowMovingDeviceType") {} - - }; - - // C++ wrapper for IfcPumpType - struct IfcPumpType : IfcFlowMovingDeviceType, ObjectHelper { IfcPumpType() : Object("IfcPumpType") {} - IfcPumpTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcStructuralCurveMember - struct IfcStructuralCurveMember : IfcStructuralMember, ObjectHelper { IfcStructuralCurveMember() : Object("IfcStructuralCurveMember") {} - IfcStructuralCurveTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcStructuralCurveMemberVarying - struct IfcStructuralCurveMemberVarying : IfcStructuralCurveMember, ObjectHelper { IfcStructuralCurveMemberVarying() : Object("IfcStructuralCurveMemberVarying") {} - - }; - - // C++ wrapper for IfcReinforcingElement - struct IfcReinforcingElement : IfcBuildingElementComponent, ObjectHelper { IfcReinforcingElement() : Object("IfcReinforcingElement") {} - Maybe< IfcLabel::Out > SteelGrade; - }; - - // C++ wrapper for IfcReinforcingMesh - struct IfcReinforcingMesh : IfcReinforcingElement, ObjectHelper { IfcReinforcingMesh() : Object("IfcReinforcingMesh") {} - Maybe< IfcPositiveLengthMeasure::Out > MeshLength; - Maybe< IfcPositiveLengthMeasure::Out > MeshWidth; - IfcPositiveLengthMeasure::Out LongitudinalBarNominalDiameter; - IfcPositiveLengthMeasure::Out TransverseBarNominalDiameter; - IfcAreaMeasure::Out LongitudinalBarCrossSectionArea; - IfcAreaMeasure::Out TransverseBarCrossSectionArea; - IfcPositiveLengthMeasure::Out LongitudinalBarSpacing; - IfcPositiveLengthMeasure::Out TransverseBarSpacing; - }; - - // C++ wrapper for IfcPlanarExtent - struct IfcPlanarExtent : IfcGeometricRepresentationItem, ObjectHelper { IfcPlanarExtent() : Object("IfcPlanarExtent") {} - IfcLengthMeasure::Out SizeInX; - IfcLengthMeasure::Out SizeInY; - }; - - // C++ wrapper for IfcPlanarBox - struct IfcPlanarBox : IfcPlanarExtent, ObjectHelper { IfcPlanarBox() : Object("IfcPlanarBox") {} - IfcAxis2Placement::Out Placement; - }; - - // C++ wrapper for IfcCooledBeamType - struct IfcCooledBeamType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCooledBeamType() : Object("IfcCooledBeamType") {} - IfcCooledBeamTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcProjectOrderRecord - struct IfcProjectOrderRecord : IfcControl, ObjectHelper { IfcProjectOrderRecord() : Object("IfcProjectOrderRecord") {} - ListOf< Lazy< NotImplemented >, 1, 0 > Records; - IfcProjectOrderRecordTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPointOnSurface - struct IfcPointOnSurface : IfcPoint, ObjectHelper { IfcPointOnSurface() : Object("IfcPointOnSurface") {} - Lazy< IfcSurface > BasisSurface; - IfcParameterValue::Out PointParameterU; - IfcParameterValue::Out PointParameterV; - }; - - // C++ wrapper for IfcPointOnCurve - struct IfcPointOnCurve : IfcPoint, ObjectHelper { IfcPointOnCurve() : Object("IfcPointOnCurve") {} - Lazy< IfcCurve > BasisCurve; - IfcParameterValue::Out PointParameter; - }; - - // C++ wrapper for IfcRelContainedInSpatialStructure - struct IfcRelContainedInSpatialStructure : IfcRelConnects, ObjectHelper { IfcRelContainedInSpatialStructure() : Object("IfcRelContainedInSpatialStructure") {} - ListOf< Lazy< IfcProduct >, 1, 0 > RelatedElements; - Lazy< IfcSpatialStructureElement > RelatingStructure; - }; - - // C++ wrapper for IfcSimpleProperty - struct IfcSimpleProperty : IfcProperty, ObjectHelper { IfcSimpleProperty() : Object("IfcSimpleProperty") {} - - }; - - // C++ wrapper for IfcPropertyListValue - struct IfcPropertyListValue : IfcSimpleProperty, ObjectHelper { IfcPropertyListValue() : Object("IfcPropertyListValue") {} - ListOf< IfcValue, 1, 0 >::Out ListValues; - Maybe< IfcUnit::Out > Unit; - }; - - // C++ wrapper for IfcSpatialStructureElement - struct IfcSpatialStructureElement : IfcProduct, ObjectHelper { IfcSpatialStructureElement() : Object("IfcSpatialStructureElement") {} - Maybe< IfcLabel::Out > LongName; - IfcElementCompositionEnum::Out CompositionType; - }; - - // C++ wrapper for IfcBuildingStorey - struct IfcBuildingStorey : IfcSpatialStructureElement, ObjectHelper { IfcBuildingStorey() : Object("IfcBuildingStorey") {} - Maybe< IfcLengthMeasure::Out > Elevation; - }; - - // C++ wrapper for IfcUnitaryEquipmentType - struct IfcUnitaryEquipmentType : IfcEnergyConversionDeviceType, ObjectHelper { IfcUnitaryEquipmentType() : Object("IfcUnitaryEquipmentType") {} - IfcUnitaryEquipmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcOutletType - struct IfcOutletType : IfcFlowTerminalType, ObjectHelper { IfcOutletType() : Object("IfcOutletType") {} - IfcOutletTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFastenerType - struct IfcFastenerType : IfcElementComponentType, ObjectHelper { IfcFastenerType() : Object("IfcFastenerType") {} - - }; - - // C++ wrapper for IfcGroup - struct IfcGroup : IfcObject, ObjectHelper { IfcGroup() : Object("IfcGroup") {} - - }; - - // C++ wrapper for IfcSystem - struct IfcSystem : IfcGroup, ObjectHelper { IfcSystem() : Object("IfcSystem") {} - - }; - - // C++ wrapper for IfcStructuralAnalysisModel - struct IfcStructuralAnalysisModel : IfcSystem, ObjectHelper { IfcStructuralAnalysisModel() : Object("IfcStructuralAnalysisModel") {} - IfcAnalysisModelTypeEnum::Out PredefinedType; - Maybe< Lazy< IfcAxis2Placement3D > > OrientationOf2DPlane; - Maybe< ListOf< Lazy< IfcStructuralLoadGroup >, 1, 0 > > LoadedBy; - Maybe< ListOf< Lazy< IfcStructuralResultGroup >, 1, 0 > > HasResults; - }; - - // C++ wrapper for IfcSlabType - struct IfcSlabType : IfcBuildingElementType, ObjectHelper { IfcSlabType() : Object("IfcSlabType") {} - IfcSlabTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDistributionElement - struct IfcDistributionElement : IfcElement, ObjectHelper { IfcDistributionElement() : Object("IfcDistributionElement") {} - - }; - - // C++ wrapper for IfcDistributionFlowElement - struct IfcDistributionFlowElement : IfcDistributionElement, ObjectHelper { IfcDistributionFlowElement() : Object("IfcDistributionFlowElement") {} - - }; - - // C++ wrapper for IfcTShapeProfileDef - struct IfcTShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcTShapeProfileDef() : Object("IfcTShapeProfileDef") {} - IfcPositiveLengthMeasure::Out Depth; - IfcPositiveLengthMeasure::Out FlangeWidth; - IfcPositiveLengthMeasure::Out WebThickness; - IfcPositiveLengthMeasure::Out FlangeThickness; - Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > FlangeEdgeRadius; - Maybe< IfcPositiveLengthMeasure::Out > WebEdgeRadius; - Maybe< IfcPlaneAngleMeasure::Out > WebSlope; - Maybe< IfcPlaneAngleMeasure::Out > FlangeSlope; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; - }; - - // C++ wrapper for IfcPolyline - struct IfcPolyline : IfcBoundedCurve, ObjectHelper { IfcPolyline() : Object("IfcPolyline") {} - ListOf< Lazy< IfcCartesianPoint >, 2, 0 > Points; - }; - - // C++ wrapper for IfcDraughtingCallout - struct IfcDraughtingCallout : IfcGeometricRepresentationItem, ObjectHelper { IfcDraughtingCallout() : Object("IfcDraughtingCallout") {} - ListOf< IfcDraughtingCalloutElement, 1, 0 >::Out Contents; - }; - - // C++ wrapper for IfcFace - struct IfcFace : IfcTopologicalRepresentationItem, ObjectHelper { IfcFace() : Object("IfcFace") {} - ListOf< Lazy< IfcFaceBound >, 1, 0 > Bounds; - }; - - // C++ wrapper for IfcStructuralSurfaceMemberVarying - struct IfcStructuralSurfaceMemberVarying : IfcStructuralSurfaceMember, ObjectHelper { IfcStructuralSurfaceMemberVarying() : Object("IfcStructuralSurfaceMemberVarying") {} - ListOf< IfcPositiveLengthMeasure, 2, 0 >::Out SubsequentThickness; - Lazy< NotImplemented > VaryingThicknessLocation; - }; - - // C++ wrapper for IfcMotorConnectionType - struct IfcMotorConnectionType : IfcEnergyConversionDeviceType, ObjectHelper { IfcMotorConnectionType() : Object("IfcMotorConnectionType") {} - IfcMotorConnectionTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcAirToAirHeatRecoveryType @@ -2182,335 +1506,14 @@ namespace IFC { IfcAirToAirHeatRecoveryTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcPlateType - struct IfcPlateType : IfcBuildingElementType, ObjectHelper { IfcPlateType() : Object("IfcPlateType") {} - IfcPlateTypeEnum::Out PredefinedType; + // C++ wrapper for IfcAlarmType + struct IfcAlarmType : IfcDistributionControlElementType, ObjectHelper { IfcAlarmType() : Object("IfcAlarmType") {} + IfcAlarmTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcSolidModel - struct IfcSolidModel : IfcGeometricRepresentationItem, ObjectHelper { IfcSolidModel() : Object("IfcSolidModel") {} - - }; - - // C++ wrapper for IfcCsgSolid - struct IfcCsgSolid : IfcSolidModel, ObjectHelper { IfcCsgSolid() : Object("IfcCsgSolid") {} - IfcCsgSelect::Out TreeRootExpression; - }; - - // C++ wrapper for IfcMechanicalFastenerType - struct IfcMechanicalFastenerType : IfcFastenerType, ObjectHelper { IfcMechanicalFastenerType() : Object("IfcMechanicalFastenerType") {} - - }; - - // C++ wrapper for IfcRelDecomposes - struct IfcRelDecomposes : IfcRelationship, ObjectHelper { IfcRelDecomposes() : Object("IfcRelDecomposes") {} - Lazy< IfcObjectDefinition > RelatingObject; - ListOf< Lazy< IfcObjectDefinition >, 1, 0 > RelatedObjects; - }; - - // C++ wrapper for IfcElectricalElement - struct IfcElectricalElement : IfcElement, ObjectHelper { IfcElectricalElement() : Object("IfcElectricalElement") {} - - }; - - // C++ wrapper for IfcColumnType - struct IfcColumnType : IfcBuildingElementType, ObjectHelper { IfcColumnType() : Object("IfcColumnType") {} - IfcColumnTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRectangularPyramid - struct IfcRectangularPyramid : IfcCsgPrimitive3D, ObjectHelper { IfcRectangularPyramid() : Object("IfcRectangularPyramid") {} - IfcPositiveLengthMeasure::Out XLength; - IfcPositiveLengthMeasure::Out YLength; - IfcPositiveLengthMeasure::Out Height; - }; - - // C++ wrapper for IfcActionRequest - struct IfcActionRequest : IfcControl, ObjectHelper { IfcActionRequest() : Object("IfcActionRequest") {} - IfcIdentifier::Out RequestID; - }; - - // C++ wrapper for IfcStructuralActivity - struct IfcStructuralActivity : IfcProduct, ObjectHelper { IfcStructuralActivity() : Object("IfcStructuralActivity") {} - Lazy< NotImplemented > AppliedLoad; - IfcGlobalOrLocalEnum::Out GlobalOrLocal; - }; - - // C++ wrapper for IfcStructuralReaction - struct IfcStructuralReaction : IfcStructuralActivity, ObjectHelper { IfcStructuralReaction() : Object("IfcStructuralReaction") {} - - }; - - // C++ wrapper for IfcStructuralPointReaction - struct IfcStructuralPointReaction : IfcStructuralReaction, ObjectHelper { IfcStructuralPointReaction() : Object("IfcStructuralPointReaction") {} - - }; - - // C++ wrapper for IfcStructuralAction - struct IfcStructuralAction : IfcStructuralActivity, ObjectHelper { IfcStructuralAction() : Object("IfcStructuralAction") {} - BOOLEAN::Out DestabilizingLoad; - Maybe< Lazy< IfcStructuralReaction > > CausedBy; - }; - - // C++ wrapper for IfcStructuralLinearAction - struct IfcStructuralLinearAction : IfcStructuralAction, ObjectHelper { IfcStructuralLinearAction() : Object("IfcStructuralLinearAction") {} - IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; - }; - - // C++ wrapper for IfcStructuralLinearActionVarying - struct IfcStructuralLinearActionVarying : IfcStructuralLinearAction, ObjectHelper { IfcStructuralLinearActionVarying() : Object("IfcStructuralLinearActionVarying") {} - Lazy< NotImplemented > VaryingAppliedLoadLocation; - ListOf< Lazy< NotImplemented >, 1, 0 > SubsequentAppliedLoads; - }; - - // C++ wrapper for IfcCrewResource - struct IfcCrewResource : IfcConstructionResource, ObjectHelper { IfcCrewResource() : Object("IfcCrewResource") {} - - }; - - // C++ wrapper for IfcChamferEdgeFeature - struct IfcChamferEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcChamferEdgeFeature() : Object("IfcChamferEdgeFeature") {} - Maybe< IfcPositiveLengthMeasure::Out > Width; - Maybe< IfcPositiveLengthMeasure::Out > Height; - }; - - // C++ wrapper for IfcCompositeCurve - struct IfcCompositeCurve : IfcBoundedCurve, ObjectHelper { IfcCompositeCurve() : Object("IfcCompositeCurve") {} - ListOf< Lazy< IfcCompositeCurveSegment >, 1, 0 > Segments; - LOGICAL::Out SelfIntersect; - }; - - // C++ wrapper for Ifc2DCompositeCurve - struct Ifc2DCompositeCurve : IfcCompositeCurve, ObjectHelper { Ifc2DCompositeCurve() : Object("Ifc2DCompositeCurve") {} - - }; - - // C++ wrapper for IfcGrid - struct IfcGrid : IfcProduct, ObjectHelper { IfcGrid() : Object("IfcGrid") {} - ListOf< Lazy< NotImplemented >, 1, 0 > UAxes; - ListOf< Lazy< NotImplemented >, 1, 0 > VAxes; - Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > WAxes; - }; - - // C++ wrapper for IfcTendon - struct IfcTendon : IfcReinforcingElement, ObjectHelper { IfcTendon() : Object("IfcTendon") {} - IfcTendonTypeEnum::Out PredefinedType; - IfcPositiveLengthMeasure::Out NominalDiameter; - IfcAreaMeasure::Out CrossSectionArea; - Maybe< IfcForceMeasure::Out > TensionForce; - Maybe< IfcPressureMeasure::Out > PreStress; - Maybe< IfcNormalisedRatioMeasure::Out > FrictionCoefficient; - Maybe< IfcPositiveLengthMeasure::Out > AnchorageSlip; - Maybe< IfcPositiveLengthMeasure::Out > MinCurvatureRadius; - }; - - // C++ wrapper for IfcRectangleProfileDef - struct IfcRectangleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcRectangleProfileDef() : Object("IfcRectangleProfileDef") {} - IfcPositiveLengthMeasure::Out XDim; - IfcPositiveLengthMeasure::Out YDim; - }; - - // C++ wrapper for IfcRoundedRectangleProfileDef - struct IfcRoundedRectangleProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRoundedRectangleProfileDef() : Object("IfcRoundedRectangleProfileDef") {} - IfcPositiveLengthMeasure::Out RoundingRadius; - }; - - // C++ wrapper for IfcBeamType - struct IfcBeamType : IfcBuildingElementType, ObjectHelper { IfcBeamType() : Object("IfcBeamType") {} - IfcBeamTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcLampType - struct IfcLampType : IfcFlowTerminalType, ObjectHelper { IfcLampType() : Object("IfcLampType") {} - IfcLampTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcLightSourceGoniometric - struct IfcLightSourceGoniometric : IfcLightSource, ObjectHelper { IfcLightSourceGoniometric() : Object("IfcLightSourceGoniometric") {} - Lazy< IfcAxis2Placement3D > Position; - Maybe< Lazy< IfcColourRgb > > ColourAppearance; - IfcThermodynamicTemperatureMeasure::Out ColourTemperature; - IfcLuminousFluxMeasure::Out LuminousFlux; - IfcLightEmissionSourceEnum::Out LightEmissionSource; - IfcLightDistributionDataSourceSelect::Out LightDistributionDataSource; - }; - - // C++ wrapper for IfcProductRepresentation - struct IfcProductRepresentation : ObjectHelper { IfcProductRepresentation() : Object("IfcProductRepresentation") {} - Maybe< IfcLabel::Out > Name; - Maybe< IfcText::Out > Description; - ListOf< Lazy< IfcRepresentation >, 1, 0 > Representations; - }; - - // C++ wrapper for IfcMaterialDefinitionRepresentation - struct IfcMaterialDefinitionRepresentation : IfcProductRepresentation, ObjectHelper { IfcMaterialDefinitionRepresentation() : Object("IfcMaterialDefinitionRepresentation") {} - Lazy< NotImplemented > RepresentedMaterial; - }; - - // C++ wrapper for IfcPermit - struct IfcPermit : IfcControl, ObjectHelper { IfcPermit() : Object("IfcPermit") {} - IfcIdentifier::Out PermitID; - }; - - // C++ wrapper for IfcContextDependentUnit - struct IfcContextDependentUnit : IfcNamedUnit, ObjectHelper { IfcContextDependentUnit() : Object("IfcContextDependentUnit") {} - IfcLabel::Out Name; - }; - - // C++ wrapper for IfcFlowMovingDevice - struct IfcFlowMovingDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowMovingDevice() : Object("IfcFlowMovingDevice") {} - - }; - - // C++ wrapper for IfcColumn - struct IfcColumn : IfcBuildingElement, ObjectHelper { IfcColumn() : Object("IfcColumn") {} - - }; - - // C++ wrapper for IfcDistributionControlElement - struct IfcDistributionControlElement : IfcDistributionElement, ObjectHelper { IfcDistributionControlElement() : Object("IfcDistributionControlElement") {} - Maybe< IfcIdentifier::Out > ControlElementId; - }; - - // C++ wrapper for IfcProtectiveDeviceType - struct IfcProtectiveDeviceType : IfcFlowControllerType, ObjectHelper { IfcProtectiveDeviceType() : Object("IfcProtectiveDeviceType") {} - IfcProtectiveDeviceTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFlowSegment - struct IfcFlowSegment : IfcDistributionFlowElement, ObjectHelper { IfcFlowSegment() : Object("IfcFlowSegment") {} - - }; - - // C++ wrapper for IfcCompressorType - struct IfcCompressorType : IfcFlowMovingDeviceType, ObjectHelper { IfcCompressorType() : Object("IfcCompressorType") {} - IfcCompressorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcCShapeProfileDef - struct IfcCShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCShapeProfileDef() : Object("IfcCShapeProfileDef") {} - IfcPositiveLengthMeasure::Out Depth; - IfcPositiveLengthMeasure::Out Width; - IfcPositiveLengthMeasure::Out WallThickness; - IfcPositiveLengthMeasure::Out Girth; - Maybe< IfcPositiveLengthMeasure::Out > InternalFilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; - }; - - // C++ wrapper for IfcTrapeziumProfileDef - struct IfcTrapeziumProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcTrapeziumProfileDef() : Object("IfcTrapeziumProfileDef") {} - IfcPositiveLengthMeasure::Out BottomXDim; - IfcPositiveLengthMeasure::Out TopXDim; - IfcPositiveLengthMeasure::Out YDim; - IfcLengthMeasure::Out TopXOffset; - }; - - // C++ wrapper for IfcRelDefines - struct IfcRelDefines : IfcRelationship, ObjectHelper { IfcRelDefines() : Object("IfcRelDefines") {} - ListOf< Lazy< IfcObject >, 1, 0 > RelatedObjects; - }; - - // C++ wrapper for IfcTask - struct IfcTask : IfcProcess, ObjectHelper { IfcTask() : Object("IfcTask") {} - IfcIdentifier::Out TaskId; - Maybe< IfcLabel::Out > Status; - Maybe< IfcLabel::Out > WorkMethod; - BOOLEAN::Out IsMilestone; - Maybe< INTEGER::Out > Priority; - }; - - // C++ wrapper for IfcMove - struct IfcMove : IfcTask, ObjectHelper { IfcMove() : Object("IfcMove") {} - Lazy< IfcSpatialStructureElement > MoveFrom; - Lazy< IfcSpatialStructureElement > MoveTo; - Maybe< ListOf< IfcText, 1, 0 >::Out > PunchList; - }; - - // C++ wrapper for IfcLightSourceDirectional - struct IfcLightSourceDirectional : IfcLightSource, ObjectHelper { IfcLightSourceDirectional() : Object("IfcLightSourceDirectional") {} - Lazy< IfcDirection > Orientation; - }; - - // C++ wrapper for IfcCondenserType - struct IfcCondenserType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCondenserType() : Object("IfcCondenserType") {} - IfcCondenserTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcConic - struct IfcConic : IfcCurve, ObjectHelper { IfcConic() : Object("IfcConic") {} - IfcAxis2Placement::Out Position; - }; - - // C++ wrapper for IfcEllipse - struct IfcEllipse : IfcConic, ObjectHelper { IfcEllipse() : Object("IfcEllipse") {} - IfcPositiveLengthMeasure::Out SemiAxis1; - IfcPositiveLengthMeasure::Out SemiAxis2; - }; - - // C++ wrapper for IfcDoorStyle - struct IfcDoorStyle : IfcTypeProduct, ObjectHelper { IfcDoorStyle() : Object("IfcDoorStyle") {} - IfcDoorStyleOperationEnum::Out OperationType; - IfcDoorStyleConstructionEnum::Out ConstructionType; - BOOLEAN::Out ParameterTakesPrecedence; - BOOLEAN::Out Sizeable; - }; - - // C++ wrapper for IfcDistributionControlElementType - struct IfcDistributionControlElementType : IfcDistributionElementType, ObjectHelper { IfcDistributionControlElementType() : Object("IfcDistributionControlElementType") {} - - }; - - // C++ wrapper for IfcSensorType - struct IfcSensorType : IfcDistributionControlElementType, ObjectHelper { IfcSensorType() : Object("IfcSensorType") {} - IfcSensorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcAnnotationFillAreaOccurrence - struct IfcAnnotationFillAreaOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationFillAreaOccurrence() : Object("IfcAnnotationFillAreaOccurrence") {} - Maybe< Lazy< IfcPoint > > FillStyleTarget; - Maybe< IfcGlobalOrLocalEnum::Out > GlobalOrLocal; - }; - - // C++ wrapper for IfcWall - struct IfcWall : IfcBuildingElement, ObjectHelper { IfcWall() : Object("IfcWall") {} - - }; - - // C++ wrapper for IfcFurnishingElementType - struct IfcFurnishingElementType : IfcElementType, ObjectHelper { IfcFurnishingElementType() : Object("IfcFurnishingElementType") {} - - }; - - // C++ wrapper for IfcFurnitureType - struct IfcFurnitureType : IfcFurnishingElementType, ObjectHelper { IfcFurnitureType() : Object("IfcFurnitureType") {} - IfcAssemblyPlaceEnum::Out AssemblyPlace; - }; - - // C++ wrapper for IfcControllerType - struct IfcControllerType : IfcDistributionControlElementType, ObjectHelper { IfcControllerType() : Object("IfcControllerType") {} - IfcControllerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFlowFitting - struct IfcFlowFitting : IfcDistributionFlowElement, ObjectHelper { IfcFlowFitting() : Object("IfcFlowFitting") {} - - }; - - // C++ wrapper for IfcRepresentationContext - struct IfcRepresentationContext : ObjectHelper { IfcRepresentationContext() : Object("IfcRepresentationContext") {} - Maybe< IfcLabel::Out > ContextIdentifier; - Maybe< IfcLabel::Out > ContextType; - }; - - // C++ wrapper for IfcRepresentationMap - struct IfcRepresentationMap : ObjectHelper { IfcRepresentationMap() : Object("IfcRepresentationMap") {} - IfcAxis2Placement::Out MappingOrigin; - Lazy< IfcRepresentation > MappedRepresentation; - }; - - // C++ wrapper for IfcDirection - struct IfcDirection : IfcGeometricRepresentationItem, ObjectHelper { IfcDirection() : Object("IfcDirection") {} - ListOf< REAL, 2, 3 >::Out DirectionRatios; + // C++ wrapper for IfcDraughtingCallout + struct IfcDraughtingCallout : IfcGeometricRepresentationItem, ObjectHelper { IfcDraughtingCallout() : Object("IfcDraughtingCallout") {} + ListOf< IfcDraughtingCalloutElement, 1, 0 >::Out Contents; }; // C++ wrapper for IfcDimensionCurveDirectedCallout @@ -2523,99 +1526,31 @@ namespace IFC { }; - // C++ wrapper for IfcWorkControl - struct IfcWorkControl : IfcControl, ObjectHelper { IfcWorkControl() : Object("IfcWorkControl") {} - IfcIdentifier::Out Identifier; - IfcDateTimeSelect::Out CreationDate; - Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > Creators; - Maybe< IfcLabel::Out > Purpose; - Maybe< IfcTimeMeasure::Out > Duration; - Maybe< IfcTimeMeasure::Out > TotalFloat; - IfcDateTimeSelect::Out StartTime; - Maybe< IfcDateTimeSelect::Out > FinishTime; - Maybe< IfcWorkControlTypeEnum::Out > WorkControlType; - Maybe< IfcLabel::Out > UserDefinedControlType; + // C++ wrapper for IfcProduct + struct IfcProduct : IfcObject, ObjectHelper { IfcProduct() : Object("IfcProduct") {} + Maybe< Lazy< IfcObjectPlacement > > ObjectPlacement; + Maybe< Lazy< IfcProductRepresentation > > Representation; }; - // C++ wrapper for IfcWorkPlan - struct IfcWorkPlan : IfcWorkControl, ObjectHelper { IfcWorkPlan() : Object("IfcWorkPlan") {} + // C++ wrapper for IfcAnnotation + struct IfcAnnotation : IfcProduct, ObjectHelper { IfcAnnotation() : Object("IfcAnnotation") {} }; - // C++ wrapper for IfcSpatialStructureElementType - struct IfcSpatialStructureElementType : IfcElementType, ObjectHelper { IfcSpatialStructureElementType() : Object("IfcSpatialStructureElementType") {} + // C++ wrapper for IfcStyledItem + struct IfcStyledItem : IfcRepresentationItem, ObjectHelper { IfcStyledItem() : Object("IfcStyledItem") {} + Maybe< Lazy< IfcRepresentationItem > > Item; + ListOf< Lazy< IfcPresentationStyleAssignment >, 1, 0 > Styles; + Maybe< IfcLabel::Out > Name; + }; + + // C++ wrapper for IfcAnnotationOccurrence + struct IfcAnnotationOccurrence : IfcStyledItem, ObjectHelper { IfcAnnotationOccurrence() : Object("IfcAnnotationOccurrence") {} }; - // C++ wrapper for IfcSpaceType - struct IfcSpaceType : IfcSpatialStructureElementType, ObjectHelper { IfcSpaceType() : Object("IfcSpaceType") {} - IfcSpaceTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPort - struct IfcPort : IfcProduct, ObjectHelper { IfcPort() : Object("IfcPort") {} - - }; - - // C++ wrapper for IfcDistributionPort - struct IfcDistributionPort : IfcPort, ObjectHelper { IfcDistributionPort() : Object("IfcDistributionPort") {} - Maybe< IfcFlowDirectionEnum::Out > FlowDirection; - }; - - // C++ wrapper for IfcOrderAction - struct IfcOrderAction : IfcTask, ObjectHelper { IfcOrderAction() : Object("IfcOrderAction") {} - IfcIdentifier::Out ActionID; - }; - - // C++ wrapper for IfcBeam - struct IfcBeam : IfcBuildingElement, ObjectHelper { IfcBeam() : Object("IfcBeam") {} - - }; - - // C++ wrapper for IfcManifoldSolidBrep - struct IfcManifoldSolidBrep : IfcSolidModel, ObjectHelper { IfcManifoldSolidBrep() : Object("IfcManifoldSolidBrep") {} - Lazy< IfcClosedShell > Outer; - }; - - // C++ wrapper for IfcFacetedBrep - struct IfcFacetedBrep : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrep() : Object("IfcFacetedBrep") {} - - }; - - // C++ wrapper for IfcSurfaceStyleWithTextures - struct IfcSurfaceStyleWithTextures : ObjectHelper { IfcSurfaceStyleWithTextures() : Object("IfcSurfaceStyleWithTextures") {} - ListOf< Lazy< NotImplemented >, 1, 0 > Textures; - }; - - // C++ wrapper for IfcArbitraryClosedProfileDef - struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {} - Lazy< IfcCurve > OuterCurve; - }; - - // C++ wrapper for IfcHumidifierType - struct IfcHumidifierType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHumidifierType() : Object("IfcHumidifierType") {} - IfcHumidifierTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPolyLoop - struct IfcPolyLoop : IfcLoop, ObjectHelper { IfcPolyLoop() : Object("IfcPolyLoop") {} - ListOf< Lazy< IfcCartesianPoint >, 3, 0 > Polygon; - }; - - // C++ wrapper for IfcFlowFittingType - struct IfcFlowFittingType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowFittingType() : Object("IfcFlowFittingType") {} - - }; - - // C++ wrapper for IfcFillAreaStyleTiles - struct IfcFillAreaStyleTiles : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTiles() : Object("IfcFillAreaStyleTiles") {} - Lazy< IfcOneDirectionRepeatFactor > TilingPattern; - ListOf< IfcFillAreaStyleTileShapeSelect, 1, 0 >::Out Tiles; - IfcPositiveRatioMeasure::Out TilingScale; - }; - - // C++ wrapper for IfcVertex - struct IfcVertex : IfcTopologicalRepresentationItem, ObjectHelper { IfcVertex() : Object("IfcVertex") {} + // C++ wrapper for IfcAnnotationCurveOccurrence + struct IfcAnnotationCurveOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationCurveOccurrence() : Object("IfcAnnotationCurveOccurrence") {} }; @@ -2625,176 +1560,57 @@ namespace IFC { Maybe< ListOf< Lazy< IfcCurve >, 1, 0 > > InnerBoundaries; }; - // C++ wrapper for IfcPlate - struct IfcPlate : IfcBuildingElement, ObjectHelper { IfcPlate() : Object("IfcPlate") {} + // C++ wrapper for IfcAnnotationFillAreaOccurrence + struct IfcAnnotationFillAreaOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationFillAreaOccurrence() : Object("IfcAnnotationFillAreaOccurrence") {} + Maybe< Lazy< IfcPoint > > FillStyleTarget; + Maybe< IfcGlobalOrLocalEnum::Out > GlobalOrLocal; + }; + + // C++ wrapper for IfcAnnotationSurface + struct IfcAnnotationSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcAnnotationSurface() : Object("IfcAnnotationSurface") {} + Lazy< IfcGeometricRepresentationItem > Item; + Maybe< Lazy< NotImplemented > > TextureCoordinates; + }; + + // C++ wrapper for IfcAnnotationSurfaceOccurrence + struct IfcAnnotationSurfaceOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSurfaceOccurrence() : Object("IfcAnnotationSurfaceOccurrence") {} }; - // C++ wrapper for IfcRightCircularCone - struct IfcRightCircularCone : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCone() : Object("IfcRightCircularCone") {} - IfcPositiveLengthMeasure::Out Height; - IfcPositiveLengthMeasure::Out BottomRadius; - }; - - // C++ wrapper for IfcSurface - struct IfcSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcSurface() : Object("IfcSurface") {} + // C++ wrapper for IfcAnnotationSymbolOccurrence + struct IfcAnnotationSymbolOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationSymbolOccurrence() : Object("IfcAnnotationSymbolOccurrence") {} }; - // C++ wrapper for IfcBoundedSurface - struct IfcBoundedSurface : IfcSurface, ObjectHelper { IfcBoundedSurface() : Object("IfcBoundedSurface") {} + // C++ wrapper for IfcAnnotationTextOccurrence + struct IfcAnnotationTextOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationTextOccurrence() : Object("IfcAnnotationTextOccurrence") {} }; - // C++ wrapper for IfcStructuralLoadGroup - struct IfcStructuralLoadGroup : IfcGroup, ObjectHelper { IfcStructuralLoadGroup() : Object("IfcStructuralLoadGroup") {} - IfcLoadGroupTypeEnum::Out PredefinedType; - IfcActionTypeEnum::Out ActionType; - IfcActionSourceTypeEnum::Out ActionSource; - Maybe< IfcPositiveRatioMeasure::Out > Coefficient; - Maybe< IfcLabel::Out > Purpose; + // C++ wrapper for IfcProfileDef + struct IfcProfileDef : ObjectHelper { IfcProfileDef() : Object("IfcProfileDef") {} + IfcProfileTypeEnum::Out ProfileType; + Maybe< IfcLabel::Out > ProfileName; }; - // C++ wrapper for IfcGeometricRepresentationContext - struct IfcGeometricRepresentationContext : IfcRepresentationContext, ObjectHelper { IfcGeometricRepresentationContext() : Object("IfcGeometricRepresentationContext") {} - IfcDimensionCount::Out CoordinateSpaceDimension; - Maybe< REAL::Out > Precision; - IfcAxis2Placement::Out WorldCoordinateSystem; - Maybe< Lazy< IfcDirection > > TrueNorth; + // C++ wrapper for IfcArbitraryClosedProfileDef + struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {} + Lazy< IfcCurve > OuterCurve; }; - // C++ wrapper for IfcTubeBundleType - struct IfcTubeBundleType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTubeBundleType() : Object("IfcTubeBundleType") {} - IfcTubeBundleTypeEnum::Out PredefinedType; + // C++ wrapper for IfcArbitraryOpenProfileDef + struct IfcArbitraryOpenProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryOpenProfileDef() : Object("IfcArbitraryOpenProfileDef") {} + Lazy< IfcBoundedCurve > Curve; }; - // C++ wrapper for IfcStructuralPlanarAction - struct IfcStructuralPlanarAction : IfcStructuralAction, ObjectHelper { IfcStructuralPlanarAction() : Object("IfcStructuralPlanarAction") {} - IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; + // C++ wrapper for IfcArbitraryProfileDefWithVoids + struct IfcArbitraryProfileDefWithVoids : IfcArbitraryClosedProfileDef, ObjectHelper { IfcArbitraryProfileDefWithVoids() : Object("IfcArbitraryProfileDefWithVoids") {} + ListOf< Lazy< IfcCurve >, 1, 0 > InnerCurves; }; - // C++ wrapper for IfcHeatExchangerType - struct IfcHeatExchangerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHeatExchangerType() : Object("IfcHeatExchangerType") {} - IfcHeatExchangerTypeEnum::Out PredefinedType; - }; + // C++ wrapper for IfcGroup + struct IfcGroup : IfcObject, ObjectHelper { IfcGroup() : Object("IfcGroup") {} - // C++ wrapper for IfcFaceOuterBound - struct IfcFaceOuterBound : IfcFaceBound, ObjectHelper { IfcFaceOuterBound() : Object("IfcFaceOuterBound") {} - - }; - - // C++ wrapper for IfcSphere - struct IfcSphere : IfcCsgPrimitive3D, ObjectHelper { IfcSphere() : Object("IfcSphere") {} - IfcPositiveLengthMeasure::Out Radius; - }; - - // C++ wrapper for IfcLightSourcePositional - struct IfcLightSourcePositional : IfcLightSource, ObjectHelper { IfcLightSourcePositional() : Object("IfcLightSourcePositional") {} - Lazy< IfcCartesianPoint > Position; - IfcPositiveLengthMeasure::Out Radius; - IfcReal::Out ConstantAttenuation; - IfcReal::Out DistanceAttenuation; - IfcReal::Out QuadricAttenuation; - }; - - // C++ wrapper for IfcStructuralPointAction - struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {} - - }; - - // C++ wrapper for IfcFlowSegmentType - struct IfcFlowSegmentType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowSegmentType() : Object("IfcFlowSegmentType") {} - - }; - - // C++ wrapper for IfcFireSuppressionTerminalType - struct IfcFireSuppressionTerminalType : IfcFlowTerminalType, ObjectHelper { IfcFireSuppressionTerminalType() : Object("IfcFireSuppressionTerminalType") {} - IfcFireSuppressionTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPropertySingleValue - struct IfcPropertySingleValue : IfcSimpleProperty, ObjectHelper { IfcPropertySingleValue() : Object("IfcPropertySingleValue") {} - Maybe< IfcValue::Out > NominalValue; - Maybe< IfcUnit::Out > Unit; - }; - - // C++ wrapper for IfcFaceBasedSurfaceModel - struct IfcFaceBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcFaceBasedSurfaceModel() : Object("IfcFaceBasedSurfaceModel") {} - ListOf< Lazy< IfcConnectedFaceSet >, 1, 0 > FbsmFaces; - }; - - // C++ wrapper for IfcAxis2Placement3D - struct IfcAxis2Placement3D : IfcPlacement, ObjectHelper { IfcAxis2Placement3D() : Object("IfcAxis2Placement3D") {} - Maybe< Lazy< IfcDirection > > Axis; - Maybe< Lazy< IfcDirection > > RefDirection; - }; - - // C++ wrapper for IfcStructuralResultGroup - struct IfcStructuralResultGroup : IfcGroup, ObjectHelper { IfcStructuralResultGroup() : Object("IfcStructuralResultGroup") {} - IfcAnalysisTheoryTypeEnum::Out TheoryType; - Maybe< Lazy< IfcStructuralLoadGroup > > ResultForLoadGroup; - BOOLEAN::Out IsLinear; - }; - - // C++ wrapper for IfcHalfSpaceSolid - struct IfcHalfSpaceSolid : IfcGeometricRepresentationItem, ObjectHelper { IfcHalfSpaceSolid() : Object("IfcHalfSpaceSolid") {} - Lazy< IfcSurface > BaseSurface; - BOOLEAN::Out AgreementFlag; - }; - - // C++ wrapper for IfcGasTerminalType - struct IfcGasTerminalType : IfcFlowTerminalType, ObjectHelper { IfcGasTerminalType() : Object("IfcGasTerminalType") {} - IfcGasTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcMember - struct IfcMember : IfcBuildingElement, ObjectHelper { IfcMember() : Object("IfcMember") {} - - }; - - // C++ wrapper for IfcPropertySet - struct IfcPropertySet : IfcPropertySetDefinition, ObjectHelper { IfcPropertySet() : Object("IfcPropertySet") {} - ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; - }; - - // C++ wrapper for IfcCondition - struct IfcCondition : IfcGroup, ObjectHelper { IfcCondition() : Object("IfcCondition") {} - - }; - - // C++ wrapper for IfcPropertyEnumeratedValue - struct IfcPropertyEnumeratedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyEnumeratedValue() : Object("IfcPropertyEnumeratedValue") {} - ListOf< IfcValue, 1, 0 >::Out EnumerationValues; - Maybe< Lazy< NotImplemented > > EnumerationReference; - }; - - // C++ wrapper for IfcDistributionChamberElementType - struct IfcDistributionChamberElementType : IfcDistributionFlowElementType, ObjectHelper { IfcDistributionChamberElementType() : Object("IfcDistributionChamberElementType") {} - IfcDistributionChamberElementTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcTextLiteralWithExtent - struct IfcTextLiteralWithExtent : IfcTextLiteral, ObjectHelper { IfcTextLiteralWithExtent() : Object("IfcTextLiteralWithExtent") {} - Lazy< IfcPlanarExtent > Extent; - IfcBoxAlignment::Out BoxAlignment; - }; - - // C++ wrapper for IfcFlowController - struct IfcFlowController : IfcDistributionFlowElement, ObjectHelper { IfcFlowController() : Object("IfcFlowController") {} - - }; - - // C++ wrapper for IfcElectricDistributionPoint - struct IfcElectricDistributionPoint : IfcFlowController, ObjectHelper { IfcElectricDistributionPoint() : Object("IfcElectricDistributionPoint") {} - IfcElectricDistributionPointFunctionEnum::Out DistributionPointFunction; - Maybe< IfcLabel::Out > UserDefinedFunction; - }; - - // C++ wrapper for IfcTransportElement - struct IfcTransportElement : IfcElement, ObjectHelper { IfcTransportElement() : Object("IfcTransportElement") {} - Maybe< IfcTransportElementTypeEnum::Out > OperationType; - Maybe< IfcMassMeasure::Out > CapacityByWeight; - Maybe< IfcCountMeasure::Out > CapacityByNumber; }; // C++ wrapper for IfcAsset @@ -2810,154 +1626,9 @@ namespace IFC { Lazy< NotImplemented > DepreciatedValue; }; - // C++ wrapper for IfcSweptAreaSolid - struct IfcSweptAreaSolid : IfcSolidModel, ObjectHelper { IfcSweptAreaSolid() : Object("IfcSweptAreaSolid") {} - Lazy< IfcProfileDef > SweptArea; - Lazy< IfcAxis2Placement3D > Position; - }; - - // C++ wrapper for IfcRevolvedAreaSolid - struct IfcRevolvedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcRevolvedAreaSolid() : Object("IfcRevolvedAreaSolid") {} - Lazy< IfcAxis1Placement > Axis; - IfcPlaneAngleMeasure::Out Angle; - }; - - // C++ wrapper for IfcFlowInstrumentType - struct IfcFlowInstrumentType : IfcDistributionControlElementType, ObjectHelper { IfcFlowInstrumentType() : Object("IfcFlowInstrumentType") {} - IfcFlowInstrumentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcEnergyConversionDevice - struct IfcEnergyConversionDevice : IfcDistributionFlowElement, ObjectHelper { IfcEnergyConversionDevice() : Object("IfcEnergyConversionDevice") {} - - }; - - // C++ wrapper for IfcSurfaceStyleShading - struct IfcSurfaceStyleShading : ObjectHelper { IfcSurfaceStyleShading() : Object("IfcSurfaceStyleShading") {} - Lazy< IfcColourRgb > SurfaceColour; - }; - - // C++ wrapper for IfcSurfaceStyleRendering - struct IfcSurfaceStyleRendering : IfcSurfaceStyleShading, ObjectHelper { IfcSurfaceStyleRendering() : Object("IfcSurfaceStyleRendering") {} - Maybe< IfcNormalisedRatioMeasure::Out > Transparency; - Maybe< IfcColourOrFactor::Out > DiffuseColour; - Maybe< IfcColourOrFactor::Out > TransmissionColour; - Maybe< IfcColourOrFactor::Out > DiffuseTransmissionColour; - Maybe< IfcColourOrFactor::Out > ReflectionColour; - Maybe< IfcColourOrFactor::Out > SpecularColour; - Maybe< IfcSpecularHighlightSelect::Out > SpecularHighlight; - IfcReflectanceMethodEnum::Out ReflectanceMethod; - }; - - // C++ wrapper for IfcBoilerType - struct IfcBoilerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcBoilerType() : Object("IfcBoilerType") {} - IfcBoilerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcBuildingElementProxy - struct IfcBuildingElementProxy : IfcBuildingElement, ObjectHelper { IfcBuildingElementProxy() : Object("IfcBuildingElementProxy") {} - Maybe< IfcElementCompositionEnum::Out > CompositionType; - }; - - // C++ wrapper for IfcLocalPlacement - struct IfcLocalPlacement : IfcObjectPlacement, ObjectHelper { IfcLocalPlacement() : Object("IfcLocalPlacement") {} - Maybe< Lazy< IfcObjectPlacement > > PlacementRelTo; - IfcAxis2Placement::Out RelativePlacement; - }; - - // C++ wrapper for IfcZone - struct IfcZone : IfcGroup, ObjectHelper { IfcZone() : Object("IfcZone") {} - - }; - - // C++ wrapper for IfcStair - struct IfcStair : IfcBuildingElement, ObjectHelper { IfcStair() : Object("IfcStair") {} - IfcStairTypeEnum::Out ShapeType; - }; - - // C++ wrapper for IfcWallStandardCase - struct IfcWallStandardCase : IfcWall, ObjectHelper { IfcWallStandardCase() : Object("IfcWallStandardCase") {} - - }; - - // C++ wrapper for IfcDiameterDimension - struct IfcDiameterDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcDiameterDimension() : Object("IfcDiameterDimension") {} - - }; - - // C++ wrapper for IfcDuctSegmentType - struct IfcDuctSegmentType : IfcFlowSegmentType, ObjectHelper { IfcDuctSegmentType() : Object("IfcDuctSegmentType") {} - IfcDuctSegmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcJunctionBoxType - struct IfcJunctionBoxType : IfcFlowFittingType, ObjectHelper { IfcJunctionBoxType() : Object("IfcJunctionBoxType") {} - IfcJunctionBoxTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcCartesianTransformationOperator3DnonUniform - struct IfcCartesianTransformationOperator3DnonUniform : IfcCartesianTransformationOperator3D, ObjectHelper { IfcCartesianTransformationOperator3DnonUniform() : Object("IfcCartesianTransformationOperator3DnonUniform") {} - Maybe< REAL::Out > Scale2; - Maybe< REAL::Out > Scale3; - }; - - // C++ wrapper for IfcInventory - struct IfcInventory : IfcGroup, ObjectHelper { IfcInventory() : Object("IfcInventory") {} - IfcInventoryTypeEnum::Out InventoryType; - IfcActorSelect::Out Jurisdiction; - ListOf< Lazy< NotImplemented >, 1, 0 > ResponsiblePersons; - Lazy< NotImplemented > LastUpdateDate; - Maybe< Lazy< NotImplemented > > CurrentValue; - Maybe< Lazy< NotImplemented > > OriginalValue; - }; - - // C++ wrapper for IfcConditionCriterion - struct IfcConditionCriterion : IfcControl, ObjectHelper { IfcConditionCriterion() : Object("IfcConditionCriterion") {} - IfcConditionCriterionSelect::Out Criterion; - IfcDateTimeSelect::Out CriterionDateTime; - }; - - // C++ wrapper for IfcConnectedFaceSet - struct IfcConnectedFaceSet : IfcTopologicalRepresentationItem, ObjectHelper { IfcConnectedFaceSet() : Object("IfcConnectedFaceSet") {} - ListOf< Lazy< IfcFace >, 1, 0 > CfsFaces; - }; - - // C++ wrapper for IfcOpenShell - struct IfcOpenShell : IfcConnectedFaceSet, ObjectHelper { IfcOpenShell() : Object("IfcOpenShell") {} - - }; - - // C++ wrapper for IfcDoor - struct IfcDoor : IfcBuildingElement, ObjectHelper { IfcDoor() : Object("IfcDoor") {} - Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; - Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; - }; - - // C++ wrapper for IfcBezierCurve - struct IfcBezierCurve : IfcBSplineCurve, ObjectHelper { IfcBezierCurve() : Object("IfcBezierCurve") {} - - }; - - // C++ wrapper for IfcRationalBezierCurve - struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {} - ListOf< REAL, 2, 0 >::Out WeightsData; - }; - - // C++ wrapper for IfcArbitraryProfileDefWithVoids - struct IfcArbitraryProfileDefWithVoids : IfcArbitraryClosedProfileDef, ObjectHelper { IfcArbitraryProfileDefWithVoids() : Object("IfcArbitraryProfileDefWithVoids") {} - ListOf< Lazy< IfcCurve >, 1, 0 > InnerCurves; - }; - - // C++ wrapper for IfcBooleanResult - struct IfcBooleanResult : IfcGeometricRepresentationItem, ObjectHelper { IfcBooleanResult() : Object("IfcBooleanResult") {} - IfcBooleanOperator::Out Operator; - IfcBooleanOperand::Out FirstOperand; - IfcBooleanOperand::Out SecondOperand; - }; - - // C++ wrapper for IfcStackTerminalType - struct IfcStackTerminalType : IfcFlowTerminalType, ObjectHelper { IfcStackTerminalType() : Object("IfcStackTerminalType") {} - IfcStackTerminalTypeEnum::Out PredefinedType; + // C++ wrapper for IfcParameterizedProfileDef + struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {} + Lazy< IfcAxis2Placement2D > Position; }; // C++ wrapper for IfcIShapeProfileDef @@ -2977,9 +1648,295 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcEquipmentElement - struct IfcEquipmentElement : IfcElement, ObjectHelper { IfcEquipmentElement() : Object("IfcEquipmentElement") {} + // C++ wrapper for IfcPlacement + struct IfcPlacement : IfcGeometricRepresentationItem, ObjectHelper { IfcPlacement() : Object("IfcPlacement") {} + Lazy< IfcCartesianPoint > Location; + }; + // C++ wrapper for IfcAxis1Placement + struct IfcAxis1Placement : IfcPlacement, ObjectHelper { IfcAxis1Placement() : Object("IfcAxis1Placement") {} + Maybe< Lazy< IfcDirection > > Axis; + }; + + // C++ wrapper for IfcAxis2Placement2D + struct IfcAxis2Placement2D : IfcPlacement, ObjectHelper { IfcAxis2Placement2D() : Object("IfcAxis2Placement2D") {} + Maybe< Lazy< IfcDirection > > RefDirection; + }; + + // C++ wrapper for IfcAxis2Placement3D + struct IfcAxis2Placement3D : IfcPlacement, ObjectHelper { IfcAxis2Placement3D() : Object("IfcAxis2Placement3D") {} + Maybe< Lazy< IfcDirection > > Axis; + Maybe< Lazy< IfcDirection > > RefDirection; + }; + + // C++ wrapper for IfcBSplineCurve + struct IfcBSplineCurve : IfcBoundedCurve, ObjectHelper { IfcBSplineCurve() : Object("IfcBSplineCurve") {} + INTEGER::Out Degree; + ListOf< Lazy< IfcCartesianPoint >, 2, 0 > ControlPointsList; + IfcBSplineCurveForm::Out CurveForm; + LOGICAL::Out ClosedCurve; + LOGICAL::Out SelfIntersect; + }; + + // C++ wrapper for IfcElement + struct IfcElement : IfcProduct, ObjectHelper { IfcElement() : Object("IfcElement") {} + Maybe< IfcIdentifier::Out > Tag; + }; + + // C++ wrapper for IfcBuildingElement + struct IfcBuildingElement : IfcElement, ObjectHelper { IfcBuildingElement() : Object("IfcBuildingElement") {} + + }; + + // C++ wrapper for IfcBeam + struct IfcBeam : IfcBuildingElement, ObjectHelper { IfcBeam() : Object("IfcBeam") {} + + }; + + // C++ wrapper for IfcBuildingElementType + struct IfcBuildingElementType : IfcElementType, ObjectHelper { IfcBuildingElementType() : Object("IfcBuildingElementType") {} + + }; + + // C++ wrapper for IfcBeamType + struct IfcBeamType : IfcBuildingElementType, ObjectHelper { IfcBeamType() : Object("IfcBeamType") {} + IfcBeamTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcBezierCurve + struct IfcBezierCurve : IfcBSplineCurve, ObjectHelper { IfcBezierCurve() : Object("IfcBezierCurve") {} + + }; + + // C++ wrapper for IfcCsgPrimitive3D + struct IfcCsgPrimitive3D : IfcGeometricRepresentationItem, ObjectHelper { IfcCsgPrimitive3D() : Object("IfcCsgPrimitive3D") {} + Lazy< IfcAxis2Placement3D > Position; + }; + + // C++ wrapper for IfcBlock + struct IfcBlock : IfcCsgPrimitive3D, ObjectHelper { IfcBlock() : Object("IfcBlock") {} + IfcPositiveLengthMeasure::Out XLength; + IfcPositiveLengthMeasure::Out YLength; + IfcPositiveLengthMeasure::Out ZLength; + }; + + // C++ wrapper for IfcBoilerType + struct IfcBoilerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcBoilerType() : Object("IfcBoilerType") {} + IfcBoilerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcBooleanResult + struct IfcBooleanResult : IfcGeometricRepresentationItem, ObjectHelper { IfcBooleanResult() : Object("IfcBooleanResult") {} + IfcBooleanOperator::Out Operator; + IfcBooleanOperand::Out FirstOperand; + IfcBooleanOperand::Out SecondOperand; + }; + + // C++ wrapper for IfcBooleanClippingResult + struct IfcBooleanClippingResult : IfcBooleanResult, ObjectHelper { IfcBooleanClippingResult() : Object("IfcBooleanClippingResult") {} + + }; + + // C++ wrapper for IfcSurface + struct IfcSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcSurface() : Object("IfcSurface") {} + + }; + + // C++ wrapper for IfcBoundedSurface + struct IfcBoundedSurface : IfcSurface, ObjectHelper { IfcBoundedSurface() : Object("IfcBoundedSurface") {} + + }; + + // C++ wrapper for IfcBoundingBox + struct IfcBoundingBox : IfcGeometricRepresentationItem, ObjectHelper { IfcBoundingBox() : Object("IfcBoundingBox") {} + Lazy< IfcCartesianPoint > Corner; + IfcPositiveLengthMeasure::Out XDim; + IfcPositiveLengthMeasure::Out YDim; + IfcPositiveLengthMeasure::Out ZDim; + }; + + // C++ wrapper for IfcHalfSpaceSolid + struct IfcHalfSpaceSolid : IfcGeometricRepresentationItem, ObjectHelper { IfcHalfSpaceSolid() : Object("IfcHalfSpaceSolid") {} + Lazy< IfcSurface > BaseSurface; + BOOLEAN::Out AgreementFlag; + }; + + // C++ wrapper for IfcBoxedHalfSpace + struct IfcBoxedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcBoxedHalfSpace() : Object("IfcBoxedHalfSpace") {} + Lazy< IfcBoundingBox > Enclosure; + }; + + // C++ wrapper for IfcSpatialStructureElement + struct IfcSpatialStructureElement : IfcProduct, ObjectHelper { IfcSpatialStructureElement() : Object("IfcSpatialStructureElement") {} + Maybe< IfcLabel::Out > LongName; + IfcElementCompositionEnum::Out CompositionType; + }; + + // C++ wrapper for IfcBuilding + struct IfcBuilding : IfcSpatialStructureElement, ObjectHelper { IfcBuilding() : Object("IfcBuilding") {} + Maybe< IfcLengthMeasure::Out > ElevationOfRefHeight; + Maybe< IfcLengthMeasure::Out > ElevationOfTerrain; + Maybe< Lazy< NotImplemented > > BuildingAddress; + }; + + // C++ wrapper for IfcBuildingElementComponent + struct IfcBuildingElementComponent : IfcBuildingElement, ObjectHelper { IfcBuildingElementComponent() : Object("IfcBuildingElementComponent") {} + + }; + + // C++ wrapper for IfcBuildingElementPart + struct IfcBuildingElementPart : IfcBuildingElementComponent, ObjectHelper { IfcBuildingElementPart() : Object("IfcBuildingElementPart") {} + + }; + + // C++ wrapper for IfcBuildingElementProxy + struct IfcBuildingElementProxy : IfcBuildingElement, ObjectHelper { IfcBuildingElementProxy() : Object("IfcBuildingElementProxy") {} + Maybe< IfcElementCompositionEnum::Out > CompositionType; + }; + + // C++ wrapper for IfcBuildingElementProxyType + struct IfcBuildingElementProxyType : IfcBuildingElementType, ObjectHelper { IfcBuildingElementProxyType() : Object("IfcBuildingElementProxyType") {} + IfcBuildingElementProxyTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcBuildingStorey + struct IfcBuildingStorey : IfcSpatialStructureElement, ObjectHelper { IfcBuildingStorey() : Object("IfcBuildingStorey") {} + Maybe< IfcLengthMeasure::Out > Elevation; + }; + + // C++ wrapper for IfcCShapeProfileDef + struct IfcCShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCShapeProfileDef() : Object("IfcCShapeProfileDef") {} + IfcPositiveLengthMeasure::Out Depth; + IfcPositiveLengthMeasure::Out Width; + IfcPositiveLengthMeasure::Out WallThickness; + IfcPositiveLengthMeasure::Out Girth; + Maybe< IfcPositiveLengthMeasure::Out > InternalFilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; + }; + + // C++ wrapper for IfcFlowFittingType + struct IfcFlowFittingType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowFittingType() : Object("IfcFlowFittingType") {} + + }; + + // C++ wrapper for IfcCableCarrierFittingType + struct IfcCableCarrierFittingType : IfcFlowFittingType, ObjectHelper { IfcCableCarrierFittingType() : Object("IfcCableCarrierFittingType") {} + IfcCableCarrierFittingTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowSegmentType + struct IfcFlowSegmentType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowSegmentType() : Object("IfcFlowSegmentType") {} + + }; + + // C++ wrapper for IfcCableCarrierSegmentType + struct IfcCableCarrierSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableCarrierSegmentType() : Object("IfcCableCarrierSegmentType") {} + IfcCableCarrierSegmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCableSegmentType + struct IfcCableSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableSegmentType() : Object("IfcCableSegmentType") {} + IfcCableSegmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPoint + struct IfcPoint : IfcGeometricRepresentationItem, ObjectHelper { IfcPoint() : Object("IfcPoint") {} + + }; + + // C++ wrapper for IfcCartesianPoint + struct IfcCartesianPoint : IfcPoint, ObjectHelper { IfcCartesianPoint() : Object("IfcCartesianPoint") {} + ListOf< IfcLengthMeasure, 1, 3 >::Out Coordinates; + }; + + // C++ wrapper for IfcCartesianTransformationOperator + struct IfcCartesianTransformationOperator : IfcGeometricRepresentationItem, ObjectHelper { IfcCartesianTransformationOperator() : Object("IfcCartesianTransformationOperator") {} + Maybe< Lazy< IfcDirection > > Axis1; + Maybe< Lazy< IfcDirection > > Axis2; + Lazy< IfcCartesianPoint > LocalOrigin; + Maybe< REAL::Out > Scale; + }; + + // C++ wrapper for IfcCartesianTransformationOperator2D + struct IfcCartesianTransformationOperator2D : IfcCartesianTransformationOperator, ObjectHelper { IfcCartesianTransformationOperator2D() : Object("IfcCartesianTransformationOperator2D") {} + + }; + + // C++ wrapper for IfcCartesianTransformationOperator2DnonUniform + struct IfcCartesianTransformationOperator2DnonUniform : IfcCartesianTransformationOperator2D, ObjectHelper { IfcCartesianTransformationOperator2DnonUniform() : Object("IfcCartesianTransformationOperator2DnonUniform") {} + Maybe< REAL::Out > Scale2; + }; + + // C++ wrapper for IfcCartesianTransformationOperator3D + struct IfcCartesianTransformationOperator3D : IfcCartesianTransformationOperator, ObjectHelper { IfcCartesianTransformationOperator3D() : Object("IfcCartesianTransformationOperator3D") {} + Maybe< Lazy< IfcDirection > > Axis3; + }; + + // C++ wrapper for IfcCartesianTransformationOperator3DnonUniform + struct IfcCartesianTransformationOperator3DnonUniform : IfcCartesianTransformationOperator3D, ObjectHelper { IfcCartesianTransformationOperator3DnonUniform() : Object("IfcCartesianTransformationOperator3DnonUniform") {} + Maybe< REAL::Out > Scale2; + Maybe< REAL::Out > Scale3; + }; + + // C++ wrapper for IfcCenterLineProfileDef + struct IfcCenterLineProfileDef : IfcArbitraryOpenProfileDef, ObjectHelper { IfcCenterLineProfileDef() : Object("IfcCenterLineProfileDef") {} + IfcPositiveLengthMeasure::Out Thickness; + }; + + // C++ wrapper for IfcFeatureElement + struct IfcFeatureElement : IfcElement, ObjectHelper { IfcFeatureElement() : Object("IfcFeatureElement") {} + + }; + + // C++ wrapper for IfcFeatureElementSubtraction + struct IfcFeatureElementSubtraction : IfcFeatureElement, ObjectHelper { IfcFeatureElementSubtraction() : Object("IfcFeatureElementSubtraction") {} + + }; + + // C++ wrapper for IfcEdgeFeature + struct IfcEdgeFeature : IfcFeatureElementSubtraction, ObjectHelper { IfcEdgeFeature() : Object("IfcEdgeFeature") {} + Maybe< IfcPositiveLengthMeasure::Out > FeatureLength; + }; + + // C++ wrapper for IfcChamferEdgeFeature + struct IfcChamferEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcChamferEdgeFeature() : Object("IfcChamferEdgeFeature") {} + Maybe< IfcPositiveLengthMeasure::Out > Width; + Maybe< IfcPositiveLengthMeasure::Out > Height; + }; + + // C++ wrapper for IfcChillerType + struct IfcChillerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcChillerType() : Object("IfcChillerType") {} + IfcChillerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcConic + struct IfcConic : IfcCurve, ObjectHelper { IfcConic() : Object("IfcConic") {} + IfcAxis2Placement::Out Position; + }; + + // C++ wrapper for IfcCircle + struct IfcCircle : IfcConic, ObjectHelper { IfcCircle() : Object("IfcCircle") {} + IfcPositiveLengthMeasure::Out Radius; + }; + + // C++ wrapper for IfcCircleProfileDef + struct IfcCircleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCircleProfileDef() : Object("IfcCircleProfileDef") {} + IfcPositiveLengthMeasure::Out Radius; + }; + + // C++ wrapper for IfcCircleHollowProfileDef + struct IfcCircleHollowProfileDef : IfcCircleProfileDef, ObjectHelper { IfcCircleHollowProfileDef() : Object("IfcCircleHollowProfileDef") {} + IfcPositiveLengthMeasure::Out WallThickness; + }; + + // C++ wrapper for IfcTopologicalRepresentationItem + struct IfcTopologicalRepresentationItem : IfcRepresentationItem, ObjectHelper { IfcTopologicalRepresentationItem() : Object("IfcTopologicalRepresentationItem") {} + + }; + + // C++ wrapper for IfcConnectedFaceSet + struct IfcConnectedFaceSet : IfcTopologicalRepresentationItem, ObjectHelper { IfcConnectedFaceSet() : Object("IfcConnectedFaceSet") {} + ListOf< Lazy< IfcFace >, 1, 0 > CfsFaces; }; // C++ wrapper for IfcClosedShell @@ -2987,17 +1944,165 @@ namespace IFC { }; - // C++ wrapper for IfcEllipseProfileDef - struct IfcEllipseProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcEllipseProfileDef() : Object("IfcEllipseProfileDef") {} - IfcPositiveLengthMeasure::Out SemiAxis1; - IfcPositiveLengthMeasure::Out SemiAxis2; + // C++ wrapper for IfcCoilType + struct IfcCoilType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoilType() : Object("IfcCoilType") {} + IfcCoilTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcPropertyBoundedValue - struct IfcPropertyBoundedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyBoundedValue() : Object("IfcPropertyBoundedValue") {} - Maybe< IfcValue::Out > UpperBoundValue; - Maybe< IfcValue::Out > LowerBoundValue; - Maybe< IfcUnit::Out > Unit; + // C++ wrapper for IfcColourSpecification + struct IfcColourSpecification : ObjectHelper { IfcColourSpecification() : Object("IfcColourSpecification") {} + Maybe< IfcLabel::Out > Name; + }; + + // C++ wrapper for IfcColourRgb + struct IfcColourRgb : IfcColourSpecification, ObjectHelper { IfcColourRgb() : Object("IfcColourRgb") {} + IfcNormalisedRatioMeasure::Out Red; + IfcNormalisedRatioMeasure::Out Green; + IfcNormalisedRatioMeasure::Out Blue; + }; + + // C++ wrapper for IfcColumn + struct IfcColumn : IfcBuildingElement, ObjectHelper { IfcColumn() : Object("IfcColumn") {} + + }; + + // C++ wrapper for IfcColumnType + struct IfcColumnType : IfcBuildingElementType, ObjectHelper { IfcColumnType() : Object("IfcColumnType") {} + IfcColumnTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcProperty + struct IfcProperty : ObjectHelper { IfcProperty() : Object("IfcProperty") {} + IfcIdentifier::Out Name; + Maybe< IfcText::Out > Description; + }; + + // C++ wrapper for IfcComplexProperty + struct IfcComplexProperty : IfcProperty, ObjectHelper { IfcComplexProperty() : Object("IfcComplexProperty") {} + IfcIdentifier::Out UsageName; + ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; + }; + + // C++ wrapper for IfcCompositeCurveSegment + struct IfcCompositeCurveSegment : IfcGeometricRepresentationItem, ObjectHelper { IfcCompositeCurveSegment() : Object("IfcCompositeCurveSegment") {} + IfcTransitionCode::Out Transition; + BOOLEAN::Out SameSense; + Lazy< IfcCurve > ParentCurve; + }; + + // C++ wrapper for IfcCompositeProfileDef + struct IfcCompositeProfileDef : IfcProfileDef, ObjectHelper { IfcCompositeProfileDef() : Object("IfcCompositeProfileDef") {} + ListOf< Lazy< IfcProfileDef >, 2, 0 > Profiles; + Maybe< IfcLabel::Out > Label; + }; + + // C++ wrapper for IfcFlowMovingDeviceType + struct IfcFlowMovingDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowMovingDeviceType() : Object("IfcFlowMovingDeviceType") {} + + }; + + // C++ wrapper for IfcCompressorType + struct IfcCompressorType : IfcFlowMovingDeviceType, ObjectHelper { IfcCompressorType() : Object("IfcCompressorType") {} + IfcCompressorTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCondenserType + struct IfcCondenserType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCondenserType() : Object("IfcCondenserType") {} + IfcCondenserTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCondition + struct IfcCondition : IfcGroup, ObjectHelper { IfcCondition() : Object("IfcCondition") {} + + }; + + // C++ wrapper for IfcConditionCriterion + struct IfcConditionCriterion : IfcControl, ObjectHelper { IfcConditionCriterion() : Object("IfcConditionCriterion") {} + IfcConditionCriterionSelect::Out Criterion; + IfcDateTimeSelect::Out CriterionDateTime; + }; + + // C++ wrapper for IfcResource + struct IfcResource : IfcObject, ObjectHelper { IfcResource() : Object("IfcResource") {} + + }; + + // C++ wrapper for IfcConstructionResource + struct IfcConstructionResource : IfcResource, ObjectHelper { IfcConstructionResource() : Object("IfcConstructionResource") {} + Maybe< IfcIdentifier::Out > ResourceIdentifier; + Maybe< IfcLabel::Out > ResourceGroup; + Maybe< IfcResourceConsumptionEnum::Out > ResourceConsumption; + Maybe< Lazy< IfcMeasureWithUnit > > BaseQuantity; + }; + + // C++ wrapper for IfcConstructionEquipmentResource + struct IfcConstructionEquipmentResource : IfcConstructionResource, ObjectHelper { IfcConstructionEquipmentResource() : Object("IfcConstructionEquipmentResource") {} + + }; + + // C++ wrapper for IfcConstructionMaterialResource + struct IfcConstructionMaterialResource : IfcConstructionResource, ObjectHelper { IfcConstructionMaterialResource() : Object("IfcConstructionMaterialResource") {} + Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > Suppliers; + Maybe< IfcRatioMeasure::Out > UsageRatio; + }; + + // C++ wrapper for IfcConstructionProductResource + struct IfcConstructionProductResource : IfcConstructionResource, ObjectHelper { IfcConstructionProductResource() : Object("IfcConstructionProductResource") {} + + }; + + // C++ wrapper for IfcNamedUnit + struct IfcNamedUnit : ObjectHelper { IfcNamedUnit() : Object("IfcNamedUnit") {} + Lazy< NotImplemented > Dimensions; + IfcUnitEnum::Out UnitType; + }; + + // C++ wrapper for IfcContextDependentUnit + struct IfcContextDependentUnit : IfcNamedUnit, ObjectHelper { IfcContextDependentUnit() : Object("IfcContextDependentUnit") {} + IfcLabel::Out Name; + }; + + // C++ wrapper for IfcControllerType + struct IfcControllerType : IfcDistributionControlElementType, ObjectHelper { IfcControllerType() : Object("IfcControllerType") {} + IfcControllerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcConversionBasedUnit + struct IfcConversionBasedUnit : IfcNamedUnit, ObjectHelper { IfcConversionBasedUnit() : Object("IfcConversionBasedUnit") {} + IfcLabel::Out Name; + Lazy< IfcMeasureWithUnit > ConversionFactor; + }; + + // C++ wrapper for IfcCooledBeamType + struct IfcCooledBeamType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCooledBeamType() : Object("IfcCooledBeamType") {} + IfcCooledBeamTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCoolingTowerType + struct IfcCoolingTowerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoolingTowerType() : Object("IfcCoolingTowerType") {} + IfcCoolingTowerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCostItem + struct IfcCostItem : IfcControl, ObjectHelper { IfcCostItem() : Object("IfcCostItem") {} + + }; + + // C++ wrapper for IfcCostSchedule + struct IfcCostSchedule : IfcControl, ObjectHelper { IfcCostSchedule() : Object("IfcCostSchedule") {} + Maybe< IfcActorSelect::Out > SubmittedBy; + Maybe< IfcActorSelect::Out > PreparedBy; + Maybe< IfcDateTimeSelect::Out > SubmittedOn; + Maybe< IfcLabel::Out > Status; + Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > TargetUsers; + Maybe< IfcDateTimeSelect::Out > UpdateDate; + IfcIdentifier::Out ID; + IfcCostScheduleTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCovering + struct IfcCovering : IfcBuildingElement, ObjectHelper { IfcCovering() : Object("IfcCovering") {} + Maybe< IfcCoveringTypeEnum::Out > PredefinedType; }; // C++ wrapper for IfcCoveringType @@ -3005,20 +2110,142 @@ namespace IFC { IfcCoveringTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcActuatorType - struct IfcActuatorType : IfcDistributionControlElementType, ObjectHelper { IfcActuatorType() : Object("IfcActuatorType") {} - IfcActuatorTypeEnum::Out PredefinedType; + // C++ wrapper for IfcCraneRailAShapeProfileDef + struct IfcCraneRailAShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCraneRailAShapeProfileDef() : Object("IfcCraneRailAShapeProfileDef") {} + IfcPositiveLengthMeasure::Out OverallHeight; + IfcPositiveLengthMeasure::Out BaseWidth2; + Maybe< IfcPositiveLengthMeasure::Out > Radius; + IfcPositiveLengthMeasure::Out HeadWidth; + IfcPositiveLengthMeasure::Out HeadDepth2; + IfcPositiveLengthMeasure::Out HeadDepth3; + IfcPositiveLengthMeasure::Out WebThickness; + IfcPositiveLengthMeasure::Out BaseWidth4; + IfcPositiveLengthMeasure::Out BaseDepth1; + IfcPositiveLengthMeasure::Out BaseDepth2; + IfcPositiveLengthMeasure::Out BaseDepth3; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcOffsetCurve2D - struct IfcOffsetCurve2D : IfcCurve, ObjectHelper { IfcOffsetCurve2D() : Object("IfcOffsetCurve2D") {} - Lazy< IfcCurve > BasisCurve; - IfcLengthMeasure::Out Distance; - LOGICAL::Out SelfIntersect; + // C++ wrapper for IfcCraneRailFShapeProfileDef + struct IfcCraneRailFShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCraneRailFShapeProfileDef() : Object("IfcCraneRailFShapeProfileDef") {} + IfcPositiveLengthMeasure::Out OverallHeight; + IfcPositiveLengthMeasure::Out HeadWidth; + Maybe< IfcPositiveLengthMeasure::Out > Radius; + IfcPositiveLengthMeasure::Out HeadDepth2; + IfcPositiveLengthMeasure::Out HeadDepth3; + IfcPositiveLengthMeasure::Out WebThickness; + IfcPositiveLengthMeasure::Out BaseDepth1; + IfcPositiveLengthMeasure::Out BaseDepth2; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcAnnotation - struct IfcAnnotation : IfcProduct, ObjectHelper { IfcAnnotation() : Object("IfcAnnotation") {} + // C++ wrapper for IfcCrewResource + struct IfcCrewResource : IfcConstructionResource, ObjectHelper { IfcCrewResource() : Object("IfcCrewResource") {} + + }; + + // C++ wrapper for IfcSolidModel + struct IfcSolidModel : IfcGeometricRepresentationItem, ObjectHelper { IfcSolidModel() : Object("IfcSolidModel") {} + + }; + + // C++ wrapper for IfcCsgSolid + struct IfcCsgSolid : IfcSolidModel, ObjectHelper { IfcCsgSolid() : Object("IfcCsgSolid") {} + IfcCsgSelect::Out TreeRootExpression; + }; + + // C++ wrapper for IfcCurtainWall + struct IfcCurtainWall : IfcBuildingElement, ObjectHelper { IfcCurtainWall() : Object("IfcCurtainWall") {} + + }; + + // C++ wrapper for IfcCurtainWallType + struct IfcCurtainWallType : IfcBuildingElementType, ObjectHelper { IfcCurtainWallType() : Object("IfcCurtainWallType") {} + IfcCurtainWallTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcCurveBoundedPlane + struct IfcCurveBoundedPlane : IfcBoundedSurface, ObjectHelper { IfcCurveBoundedPlane() : Object("IfcCurveBoundedPlane") {} + Lazy< IfcPlane > BasisSurface; + Lazy< IfcCurve > OuterBoundary; + ListOf< Lazy< IfcCurve >, 0, 0 > InnerBoundaries; + }; + + // C++ wrapper for IfcPresentationStyle + struct IfcPresentationStyle : ObjectHelper { IfcPresentationStyle() : Object("IfcPresentationStyle") {} + Maybe< IfcLabel::Out > Name; + }; + + // C++ wrapper for IfcDamperType + struct IfcDamperType : IfcFlowControllerType, ObjectHelper { IfcDamperType() : Object("IfcDamperType") {} + IfcDamperTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcDefinedSymbol + struct IfcDefinedSymbol : IfcGeometricRepresentationItem, ObjectHelper { IfcDefinedSymbol() : Object("IfcDefinedSymbol") {} + IfcDefinedSymbolSelect::Out Definition; + Lazy< IfcCartesianTransformationOperator2D > Target; + }; + + // C++ wrapper for IfcDerivedProfileDef + struct IfcDerivedProfileDef : IfcProfileDef, ObjectHelper { IfcDerivedProfileDef() : Object("IfcDerivedProfileDef") {} + Lazy< IfcProfileDef > ParentProfile; + Lazy< IfcCartesianTransformationOperator2D > Operator; + Maybe< IfcLabel::Out > Label; + }; + + // C++ wrapper for IfcDiameterDimension + struct IfcDiameterDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcDiameterDimension() : Object("IfcDiameterDimension") {} + + }; + + // C++ wrapper for IfcDimensionCurve + struct IfcDimensionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcDimensionCurve() : Object("IfcDimensionCurve") {} + + }; + + // C++ wrapper for IfcTerminatorSymbol + struct IfcTerminatorSymbol : IfcAnnotationSymbolOccurrence, ObjectHelper { IfcTerminatorSymbol() : Object("IfcTerminatorSymbol") {} + Lazy< IfcAnnotationCurveOccurrence > AnnotatedCurve; + }; + + // C++ wrapper for IfcDimensionCurveTerminator + struct IfcDimensionCurveTerminator : IfcTerminatorSymbol, ObjectHelper { IfcDimensionCurveTerminator() : Object("IfcDimensionCurveTerminator") {} + IfcDimensionExtentUsage::Out Role; + }; + + // C++ wrapper for IfcDirection + struct IfcDirection : IfcGeometricRepresentationItem, ObjectHelper { IfcDirection() : Object("IfcDirection") {} + ListOf< REAL, 2, 3 >::Out DirectionRatios; + }; + + // C++ wrapper for IfcElementComponent + struct IfcElementComponent : IfcElement, ObjectHelper { IfcElementComponent() : Object("IfcElementComponent") {} + + }; + + // C++ wrapper for IfcDiscreteAccessory + struct IfcDiscreteAccessory : IfcElementComponent, ObjectHelper { IfcDiscreteAccessory() : Object("IfcDiscreteAccessory") {} + + }; + + // C++ wrapper for IfcElementComponentType + struct IfcElementComponentType : IfcElementType, ObjectHelper { IfcElementComponentType() : Object("IfcElementComponentType") {} + + }; + + // C++ wrapper for IfcDiscreteAccessoryType + struct IfcDiscreteAccessoryType : IfcElementComponentType, ObjectHelper { IfcDiscreteAccessoryType() : Object("IfcDiscreteAccessoryType") {} + + }; + + // C++ wrapper for IfcDistributionElement + struct IfcDistributionElement : IfcElement, ObjectHelper { IfcDistributionElement() : Object("IfcDistributionElement") {} + + }; + + // C++ wrapper for IfcDistributionFlowElement + struct IfcDistributionFlowElement : IfcDistributionElement, ObjectHelper { IfcDistributionFlowElement() : Object("IfcDistributionFlowElement") {} }; @@ -3027,12 +2254,350 @@ namespace IFC { }; - // C++ wrapper for IfcOffsetCurve3D - struct IfcOffsetCurve3D : IfcCurve, ObjectHelper { IfcOffsetCurve3D() : Object("IfcOffsetCurve3D") {} - Lazy< IfcCurve > BasisCurve; - IfcLengthMeasure::Out Distance; - LOGICAL::Out SelfIntersect; - Lazy< IfcDirection > RefDirection; + // C++ wrapper for IfcDistributionChamberElementType + struct IfcDistributionChamberElementType : IfcDistributionFlowElementType, ObjectHelper { IfcDistributionChamberElementType() : Object("IfcDistributionChamberElementType") {} + IfcDistributionChamberElementTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcDistributionControlElement + struct IfcDistributionControlElement : IfcDistributionElement, ObjectHelper { IfcDistributionControlElement() : Object("IfcDistributionControlElement") {} + Maybe< IfcIdentifier::Out > ControlElementId; + }; + + // C++ wrapper for IfcPort + struct IfcPort : IfcProduct, ObjectHelper { IfcPort() : Object("IfcPort") {} + + }; + + // C++ wrapper for IfcDistributionPort + struct IfcDistributionPort : IfcPort, ObjectHelper { IfcDistributionPort() : Object("IfcDistributionPort") {} + Maybe< IfcFlowDirectionEnum::Out > FlowDirection; + }; + + // C++ wrapper for IfcDoor + struct IfcDoor : IfcBuildingElement, ObjectHelper { IfcDoor() : Object("IfcDoor") {} + Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; + Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; + }; + + // C++ wrapper for IfcPropertyDefinition + struct IfcPropertyDefinition : IfcRoot, ObjectHelper { IfcPropertyDefinition() : Object("IfcPropertyDefinition") {} + + }; + + // C++ wrapper for IfcPropertySetDefinition + struct IfcPropertySetDefinition : IfcPropertyDefinition, ObjectHelper { IfcPropertySetDefinition() : Object("IfcPropertySetDefinition") {} + + }; + + // C++ wrapper for IfcDoorStyle + struct IfcDoorStyle : IfcTypeProduct, ObjectHelper { IfcDoorStyle() : Object("IfcDoorStyle") {} + IfcDoorStyleOperationEnum::Out OperationType; + IfcDoorStyleConstructionEnum::Out ConstructionType; + BOOLEAN::Out ParameterTakesPrecedence; + BOOLEAN::Out Sizeable; + }; + + // C++ wrapper for IfcDuctFittingType + struct IfcDuctFittingType : IfcFlowFittingType, ObjectHelper { IfcDuctFittingType() : Object("IfcDuctFittingType") {} + IfcDuctFittingTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcDuctSegmentType + struct IfcDuctSegmentType : IfcFlowSegmentType, ObjectHelper { IfcDuctSegmentType() : Object("IfcDuctSegmentType") {} + IfcDuctSegmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowTreatmentDeviceType + struct IfcFlowTreatmentDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowTreatmentDeviceType() : Object("IfcFlowTreatmentDeviceType") {} + + }; + + // C++ wrapper for IfcDuctSilencerType + struct IfcDuctSilencerType : IfcFlowTreatmentDeviceType, ObjectHelper { IfcDuctSilencerType() : Object("IfcDuctSilencerType") {} + IfcDuctSilencerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcEdge + struct IfcEdge : IfcTopologicalRepresentationItem, ObjectHelper { IfcEdge() : Object("IfcEdge") {} + Lazy< IfcVertex > EdgeStart; + Lazy< IfcVertex > EdgeEnd; + }; + + // C++ wrapper for IfcEdgeCurve + struct IfcEdgeCurve : IfcEdge, ObjectHelper { IfcEdgeCurve() : Object("IfcEdgeCurve") {} + Lazy< IfcCurve > EdgeGeometry; + BOOLEAN::Out SameSense; + }; + + // C++ wrapper for IfcLoop + struct IfcLoop : IfcTopologicalRepresentationItem, ObjectHelper { IfcLoop() : Object("IfcLoop") {} + + }; + + // C++ wrapper for IfcEdgeLoop + struct IfcEdgeLoop : IfcLoop, ObjectHelper { IfcEdgeLoop() : Object("IfcEdgeLoop") {} + ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; + }; + + // C++ wrapper for IfcElectricApplianceType + struct IfcElectricApplianceType : IfcFlowTerminalType, ObjectHelper { IfcElectricApplianceType() : Object("IfcElectricApplianceType") {} + IfcElectricApplianceTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowController + struct IfcFlowController : IfcDistributionFlowElement, ObjectHelper { IfcFlowController() : Object("IfcFlowController") {} + + }; + + // C++ wrapper for IfcElectricDistributionPoint + struct IfcElectricDistributionPoint : IfcFlowController, ObjectHelper { IfcElectricDistributionPoint() : Object("IfcElectricDistributionPoint") {} + IfcElectricDistributionPointFunctionEnum::Out DistributionPointFunction; + Maybe< IfcLabel::Out > UserDefinedFunction; + }; + + // C++ wrapper for IfcFlowStorageDeviceType + struct IfcFlowStorageDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowStorageDeviceType() : Object("IfcFlowStorageDeviceType") {} + + }; + + // C++ wrapper for IfcElectricFlowStorageDeviceType + struct IfcElectricFlowStorageDeviceType : IfcFlowStorageDeviceType, ObjectHelper { IfcElectricFlowStorageDeviceType() : Object("IfcElectricFlowStorageDeviceType") {} + IfcElectricFlowStorageDeviceTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcElectricGeneratorType + struct IfcElectricGeneratorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricGeneratorType() : Object("IfcElectricGeneratorType") {} + IfcElectricGeneratorTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcElectricHeaterType + struct IfcElectricHeaterType : IfcFlowTerminalType, ObjectHelper { IfcElectricHeaterType() : Object("IfcElectricHeaterType") {} + IfcElectricHeaterTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcElectricMotorType + struct IfcElectricMotorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricMotorType() : Object("IfcElectricMotorType") {} + IfcElectricMotorTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcElectricTimeControlType + struct IfcElectricTimeControlType : IfcFlowControllerType, ObjectHelper { IfcElectricTimeControlType() : Object("IfcElectricTimeControlType") {} + IfcElectricTimeControlTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcSystem + struct IfcSystem : IfcGroup, ObjectHelper { IfcSystem() : Object("IfcSystem") {} + + }; + + // C++ wrapper for IfcElectricalCircuit + struct IfcElectricalCircuit : IfcSystem, ObjectHelper { IfcElectricalCircuit() : Object("IfcElectricalCircuit") {} + + }; + + // C++ wrapper for IfcElectricalElement + struct IfcElectricalElement : IfcElement, ObjectHelper { IfcElectricalElement() : Object("IfcElectricalElement") {} + + }; + + // C++ wrapper for IfcElementAssembly + struct IfcElementAssembly : IfcElement, ObjectHelper { IfcElementAssembly() : Object("IfcElementAssembly") {} + Maybe< IfcAssemblyPlaceEnum::Out > AssemblyPlace; + IfcElementAssemblyTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcElementQuantity + struct IfcElementQuantity : IfcPropertySetDefinition, ObjectHelper { IfcElementQuantity() : Object("IfcElementQuantity") {} + Maybe< IfcLabel::Out > MethodOfMeasurement; + ListOf< Lazy< NotImplemented >, 1, 0 > Quantities; + }; + + // C++ wrapper for IfcElementarySurface + struct IfcElementarySurface : IfcSurface, ObjectHelper { IfcElementarySurface() : Object("IfcElementarySurface") {} + Lazy< IfcAxis2Placement3D > Position; + }; + + // C++ wrapper for IfcEllipse + struct IfcEllipse : IfcConic, ObjectHelper { IfcEllipse() : Object("IfcEllipse") {} + IfcPositiveLengthMeasure::Out SemiAxis1; + IfcPositiveLengthMeasure::Out SemiAxis2; + }; + + // C++ wrapper for IfcEllipseProfileDef + struct IfcEllipseProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcEllipseProfileDef() : Object("IfcEllipseProfileDef") {} + IfcPositiveLengthMeasure::Out SemiAxis1; + IfcPositiveLengthMeasure::Out SemiAxis2; + }; + + // C++ wrapper for IfcEnergyConversionDevice + struct IfcEnergyConversionDevice : IfcDistributionFlowElement, ObjectHelper { IfcEnergyConversionDevice() : Object("IfcEnergyConversionDevice") {} + + }; + + // C++ wrapper for IfcEquipmentElement + struct IfcEquipmentElement : IfcElement, ObjectHelper { IfcEquipmentElement() : Object("IfcEquipmentElement") {} + + }; + + // C++ wrapper for IfcEquipmentStandard + struct IfcEquipmentStandard : IfcControl, ObjectHelper { IfcEquipmentStandard() : Object("IfcEquipmentStandard") {} + + }; + + // C++ wrapper for IfcEvaporativeCoolerType + struct IfcEvaporativeCoolerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporativeCoolerType() : Object("IfcEvaporativeCoolerType") {} + IfcEvaporativeCoolerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcEvaporatorType + struct IfcEvaporatorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporatorType() : Object("IfcEvaporatorType") {} + IfcEvaporatorTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcSweptAreaSolid + struct IfcSweptAreaSolid : IfcSolidModel, ObjectHelper { IfcSweptAreaSolid() : Object("IfcSweptAreaSolid") {} + Lazy< IfcProfileDef > SweptArea; + Lazy< IfcAxis2Placement3D > Position; + }; + + // C++ wrapper for IfcExtrudedAreaSolid + struct IfcExtrudedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcExtrudedAreaSolid() : Object("IfcExtrudedAreaSolid") {} + Lazy< IfcDirection > ExtrudedDirection; + IfcPositiveLengthMeasure::Out Depth; + }; + + // C++ wrapper for IfcFace + struct IfcFace : IfcTopologicalRepresentationItem, ObjectHelper { IfcFace() : Object("IfcFace") {} + ListOf< Lazy< IfcFaceBound >, 1, 0 > Bounds; + }; + + // C++ wrapper for IfcFaceBasedSurfaceModel + struct IfcFaceBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcFaceBasedSurfaceModel() : Object("IfcFaceBasedSurfaceModel") {} + ListOf< Lazy< IfcConnectedFaceSet >, 1, 0 > FbsmFaces; + }; + + // C++ wrapper for IfcFaceBound + struct IfcFaceBound : IfcTopologicalRepresentationItem, ObjectHelper { IfcFaceBound() : Object("IfcFaceBound") {} + Lazy< IfcLoop > Bound; + BOOLEAN::Out Orientation; + }; + + // C++ wrapper for IfcFaceOuterBound + struct IfcFaceOuterBound : IfcFaceBound, ObjectHelper { IfcFaceOuterBound() : Object("IfcFaceOuterBound") {} + + }; + + // C++ wrapper for IfcFaceSurface + struct IfcFaceSurface : IfcFace, ObjectHelper { IfcFaceSurface() : Object("IfcFaceSurface") {} + Lazy< IfcSurface > FaceSurface; + BOOLEAN::Out SameSense; + }; + + // C++ wrapper for IfcManifoldSolidBrep + struct IfcManifoldSolidBrep : IfcSolidModel, ObjectHelper { IfcManifoldSolidBrep() : Object("IfcManifoldSolidBrep") {} + Lazy< IfcClosedShell > Outer; + }; + + // C++ wrapper for IfcFacetedBrep + struct IfcFacetedBrep : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrep() : Object("IfcFacetedBrep") {} + + }; + + // C++ wrapper for IfcFacetedBrepWithVoids + struct IfcFacetedBrepWithVoids : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrepWithVoids() : Object("IfcFacetedBrepWithVoids") {} + ListOf< Lazy< IfcClosedShell >, 1, 0 > Voids; + }; + + // C++ wrapper for IfcFanType + struct IfcFanType : IfcFlowMovingDeviceType, ObjectHelper { IfcFanType() : Object("IfcFanType") {} + IfcFanTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFastener + struct IfcFastener : IfcElementComponent, ObjectHelper { IfcFastener() : Object("IfcFastener") {} + + }; + + // C++ wrapper for IfcFastenerType + struct IfcFastenerType : IfcElementComponentType, ObjectHelper { IfcFastenerType() : Object("IfcFastenerType") {} + + }; + + // C++ wrapper for IfcFeatureElementAddition + struct IfcFeatureElementAddition : IfcFeatureElement, ObjectHelper { IfcFeatureElementAddition() : Object("IfcFeatureElementAddition") {} + + }; + + // C++ wrapper for IfcFillAreaStyleHatching + struct IfcFillAreaStyleHatching : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleHatching() : Object("IfcFillAreaStyleHatching") {} + Lazy< NotImplemented > HatchLineAppearance; + IfcHatchLineDistanceSelect::Out StartOfNextHatchLine; + Maybe< Lazy< IfcCartesianPoint > > PointOfReferenceHatchLine; + Maybe< Lazy< IfcCartesianPoint > > PatternStart; + IfcPlaneAngleMeasure::Out HatchLineAngle; + }; + + // C++ wrapper for IfcFillAreaStyleTileSymbolWithStyle + struct IfcFillAreaStyleTileSymbolWithStyle : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTileSymbolWithStyle() : Object("IfcFillAreaStyleTileSymbolWithStyle") {} + Lazy< IfcAnnotationSymbolOccurrence > Symbol; + }; + + // C++ wrapper for IfcFillAreaStyleTiles + struct IfcFillAreaStyleTiles : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleTiles() : Object("IfcFillAreaStyleTiles") {} + Lazy< IfcOneDirectionRepeatFactor > TilingPattern; + ListOf< IfcFillAreaStyleTileShapeSelect, 1, 0 >::Out Tiles; + IfcPositiveRatioMeasure::Out TilingScale; + }; + + // C++ wrapper for IfcFilterType + struct IfcFilterType : IfcFlowTreatmentDeviceType, ObjectHelper { IfcFilterType() : Object("IfcFilterType") {} + IfcFilterTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFireSuppressionTerminalType + struct IfcFireSuppressionTerminalType : IfcFlowTerminalType, ObjectHelper { IfcFireSuppressionTerminalType() : Object("IfcFireSuppressionTerminalType") {} + IfcFireSuppressionTerminalTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowFitting + struct IfcFlowFitting : IfcDistributionFlowElement, ObjectHelper { IfcFlowFitting() : Object("IfcFlowFitting") {} + + }; + + // C++ wrapper for IfcFlowInstrumentType + struct IfcFlowInstrumentType : IfcDistributionControlElementType, ObjectHelper { IfcFlowInstrumentType() : Object("IfcFlowInstrumentType") {} + IfcFlowInstrumentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowMeterType + struct IfcFlowMeterType : IfcFlowControllerType, ObjectHelper { IfcFlowMeterType() : Object("IfcFlowMeterType") {} + IfcFlowMeterTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcFlowMovingDevice + struct IfcFlowMovingDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowMovingDevice() : Object("IfcFlowMovingDevice") {} + + }; + + // C++ wrapper for IfcFlowSegment + struct IfcFlowSegment : IfcDistributionFlowElement, ObjectHelper { IfcFlowSegment() : Object("IfcFlowSegment") {} + + }; + + // C++ wrapper for IfcFlowStorageDevice + struct IfcFlowStorageDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowStorageDevice() : Object("IfcFlowStorageDevice") {} + + }; + + // C++ wrapper for IfcFlowTerminal + struct IfcFlowTerminal : IfcDistributionFlowElement, ObjectHelper { IfcFlowTerminal() : Object("IfcFlowTerminal") {} + + }; + + // C++ wrapper for IfcFlowTreatmentDevice + struct IfcFlowTreatmentDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowTreatmentDevice() : Object("IfcFlowTreatmentDevice") {} + }; // C++ wrapper for IfcFooting @@ -3040,53 +2605,29 @@ namespace IFC { IfcFootingTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcMappedItem - struct IfcMappedItem : IfcRepresentationItem, ObjectHelper { IfcMappedItem() : Object("IfcMappedItem") {} - Lazy< IfcRepresentationMap > MappingSource; - Lazy< IfcCartesianTransformationOperator > MappingTarget; + // C++ wrapper for IfcFurnishingElement + struct IfcFurnishingElement : IfcElement, ObjectHelper { IfcFurnishingElement() : Object("IfcFurnishingElement") {} + }; - // C++ wrapper for IfcTransformerType - struct IfcTransformerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTransformerType() : Object("IfcTransformerType") {} - IfcTransformerTypeEnum::Out PredefinedType; + // C++ wrapper for IfcFurnishingElementType + struct IfcFurnishingElementType : IfcElementType, ObjectHelper { IfcFurnishingElementType() : Object("IfcFurnishingElementType") {} + }; - // C++ wrapper for IfcRightCircularCylinder - struct IfcRightCircularCylinder : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCylinder() : Object("IfcRightCircularCylinder") {} - IfcPositiveLengthMeasure::Out Height; - IfcPositiveLengthMeasure::Out Radius; + // C++ wrapper for IfcFurnitureStandard + struct IfcFurnitureStandard : IfcControl, ObjectHelper { IfcFurnitureStandard() : Object("IfcFurnitureStandard") {} + }; - // C++ wrapper for IfcSpaceProgram - struct IfcSpaceProgram : IfcControl, ObjectHelper { IfcSpaceProgram() : Object("IfcSpaceProgram") {} - IfcIdentifier::Out SpaceProgramIdentifier; - Maybe< IfcAreaMeasure::Out > MaxRequiredArea; - Maybe< IfcAreaMeasure::Out > MinRequiredArea; - Maybe< Lazy< IfcSpatialStructureElement > > RequestedLocation; - IfcAreaMeasure::Out StandardRequiredArea; + // C++ wrapper for IfcFurnitureType + struct IfcFurnitureType : IfcFurnishingElementType, ObjectHelper { IfcFurnitureType() : Object("IfcFurnitureType") {} + IfcAssemblyPlaceEnum::Out AssemblyPlace; }; - // C++ wrapper for IfcAnnotationSurface - struct IfcAnnotationSurface : IfcGeometricRepresentationItem, ObjectHelper { IfcAnnotationSurface() : Object("IfcAnnotationSurface") {} - Lazy< IfcGeometricRepresentationItem > Item; - Maybe< Lazy< NotImplemented > > TextureCoordinates; - }; - - // C++ wrapper for IfcZShapeProfileDef - struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {} - IfcPositiveLengthMeasure::Out Depth; - IfcPositiveLengthMeasure::Out FlangeWidth; - IfcPositiveLengthMeasure::Out WebThickness; - IfcPositiveLengthMeasure::Out FlangeThickness; - Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius; - }; - - // C++ wrapper for IfcRectangleHollowProfileDef - struct IfcRectangleHollowProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRectangleHollowProfileDef() : Object("IfcRectangleHollowProfileDef") {} - IfcPositiveLengthMeasure::Out WallThickness; - Maybe< IfcPositiveLengthMeasure::Out > InnerFilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > OuterFilletRadius; + // C++ wrapper for IfcGasTerminalType + struct IfcGasTerminalType : IfcFlowTerminalType, ObjectHelper { IfcGasTerminalType() : Object("IfcGasTerminalType") {} + IfcGasTerminalTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcGeometricSet @@ -3099,63 +2640,438 @@ namespace IFC { }; - // C++ wrapper for IfcArbitraryOpenProfileDef - struct IfcArbitraryOpenProfileDef : IfcProfileDef, ObjectHelper { IfcArbitraryOpenProfileDef() : Object("IfcArbitraryOpenProfileDef") {} - Lazy< IfcBoundedCurve > Curve; + // C++ wrapper for IfcRepresentationContext + struct IfcRepresentationContext : ObjectHelper { IfcRepresentationContext() : Object("IfcRepresentationContext") {} + Maybe< IfcLabel::Out > ContextIdentifier; + Maybe< IfcLabel::Out > ContextType; }; - // C++ wrapper for IfcFacetedBrepWithVoids - struct IfcFacetedBrepWithVoids : IfcManifoldSolidBrep, ObjectHelper { IfcFacetedBrepWithVoids() : Object("IfcFacetedBrepWithVoids") {} - ListOf< Lazy< IfcClosedShell >, 1, 0 > Voids; + // C++ wrapper for IfcGeometricRepresentationContext + struct IfcGeometricRepresentationContext : IfcRepresentationContext, ObjectHelper { IfcGeometricRepresentationContext() : Object("IfcGeometricRepresentationContext") {} + IfcDimensionCount::Out CoordinateSpaceDimension; + Maybe< REAL::Out > Precision; + IfcAxis2Placement::Out WorldCoordinateSystem; + Maybe< Lazy< IfcDirection > > TrueNorth; }; - // C++ wrapper for IfcVector - struct IfcVector : IfcGeometricRepresentationItem, ObjectHelper { IfcVector() : Object("IfcVector") {} + // C++ wrapper for IfcGeometricRepresentationSubContext + struct IfcGeometricRepresentationSubContext : IfcGeometricRepresentationContext, ObjectHelper { IfcGeometricRepresentationSubContext() : Object("IfcGeometricRepresentationSubContext") {} + Lazy< IfcGeometricRepresentationContext > ParentContext; + Maybe< IfcPositiveRatioMeasure::Out > TargetScale; + IfcGeometricProjectionEnum::Out TargetView; + Maybe< IfcLabel::Out > UserDefinedTargetView; + }; + + // C++ wrapper for IfcGrid + struct IfcGrid : IfcProduct, ObjectHelper { IfcGrid() : Object("IfcGrid") {} + ListOf< Lazy< NotImplemented >, 1, 0 > UAxes; + ListOf< Lazy< NotImplemented >, 1, 0 > VAxes; + Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > WAxes; + }; + + // C++ wrapper for IfcObjectPlacement + struct IfcObjectPlacement : ObjectHelper { IfcObjectPlacement() : Object("IfcObjectPlacement") {} + + }; + + // C++ wrapper for IfcGridPlacement + struct IfcGridPlacement : IfcObjectPlacement, ObjectHelper { IfcGridPlacement() : Object("IfcGridPlacement") {} + Lazy< NotImplemented > PlacementLocation; + Maybe< Lazy< NotImplemented > > PlacementRefDirection; + }; + + // C++ wrapper for IfcHeatExchangerType + struct IfcHeatExchangerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHeatExchangerType() : Object("IfcHeatExchangerType") {} + IfcHeatExchangerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcHumidifierType + struct IfcHumidifierType : IfcEnergyConversionDeviceType, ObjectHelper { IfcHumidifierType() : Object("IfcHumidifierType") {} + IfcHumidifierTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcInventory + struct IfcInventory : IfcGroup, ObjectHelper { IfcInventory() : Object("IfcInventory") {} + IfcInventoryTypeEnum::Out InventoryType; + IfcActorSelect::Out Jurisdiction; + ListOf< Lazy< NotImplemented >, 1, 0 > ResponsiblePersons; + Lazy< NotImplemented > LastUpdateDate; + Maybe< Lazy< NotImplemented > > CurrentValue; + Maybe< Lazy< NotImplemented > > OriginalValue; + }; + + // C++ wrapper for IfcJunctionBoxType + struct IfcJunctionBoxType : IfcFlowFittingType, ObjectHelper { IfcJunctionBoxType() : Object("IfcJunctionBoxType") {} + IfcJunctionBoxTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcLShapeProfileDef + struct IfcLShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcLShapeProfileDef() : Object("IfcLShapeProfileDef") {} + IfcPositiveLengthMeasure::Out Depth; + Maybe< IfcPositiveLengthMeasure::Out > Width; + IfcPositiveLengthMeasure::Out Thickness; + Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius; + Maybe< IfcPlaneAngleMeasure::Out > LegSlope; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; + }; + + // C++ wrapper for IfcLaborResource + struct IfcLaborResource : IfcConstructionResource, ObjectHelper { IfcLaborResource() : Object("IfcLaborResource") {} + Maybe< IfcText::Out > SkillSet; + }; + + // C++ wrapper for IfcLampType + struct IfcLampType : IfcFlowTerminalType, ObjectHelper { IfcLampType() : Object("IfcLampType") {} + IfcLampTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcLightFixtureType + struct IfcLightFixtureType : IfcFlowTerminalType, ObjectHelper { IfcLightFixtureType() : Object("IfcLightFixtureType") {} + IfcLightFixtureTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcLightSource + struct IfcLightSource : IfcGeometricRepresentationItem, ObjectHelper { IfcLightSource() : Object("IfcLightSource") {} + Maybe< IfcLabel::Out > Name; + Lazy< IfcColourRgb > LightColour; + Maybe< IfcNormalisedRatioMeasure::Out > AmbientIntensity; + Maybe< IfcNormalisedRatioMeasure::Out > Intensity; + }; + + // C++ wrapper for IfcLightSourceAmbient + struct IfcLightSourceAmbient : IfcLightSource, ObjectHelper { IfcLightSourceAmbient() : Object("IfcLightSourceAmbient") {} + + }; + + // C++ wrapper for IfcLightSourceDirectional + struct IfcLightSourceDirectional : IfcLightSource, ObjectHelper { IfcLightSourceDirectional() : Object("IfcLightSourceDirectional") {} Lazy< IfcDirection > Orientation; - IfcLengthMeasure::Out Magnitude; }; - // C++ wrapper for IfcServiceLife - struct IfcServiceLife : IfcControl, ObjectHelper { IfcServiceLife() : Object("IfcServiceLife") {} - IfcServiceLifeTypeEnum::Out ServiceLifeType; - IfcTimeMeasure::Out ServiceLifeDuration; + // C++ wrapper for IfcLightSourceGoniometric + struct IfcLightSourceGoniometric : IfcLightSource, ObjectHelper { IfcLightSourceGoniometric() : Object("IfcLightSourceGoniometric") {} + Lazy< IfcAxis2Placement3D > Position; + Maybe< Lazy< IfcColourRgb > > ColourAppearance; + IfcThermodynamicTemperatureMeasure::Out ColourTemperature; + IfcLuminousFluxMeasure::Out LuminousFlux; + IfcLightEmissionSourceEnum::Out LightEmissionSource; + IfcLightDistributionDataSourceSelect::Out LightDistributionDataSource; }; - // C++ wrapper for IfcCurveBoundedPlane - struct IfcCurveBoundedPlane : IfcBoundedSurface, ObjectHelper { IfcCurveBoundedPlane() : Object("IfcCurveBoundedPlane") {} - Lazy< IfcPlane > BasisSurface; - Lazy< IfcCurve > OuterBoundary; - ListOf< Lazy< IfcCurve >, 0, 0 > InnerBoundaries; - }; - - // C++ wrapper for IfcCircle - struct IfcCircle : IfcConic, ObjectHelper { IfcCircle() : Object("IfcCircle") {} + // C++ wrapper for IfcLightSourcePositional + struct IfcLightSourcePositional : IfcLightSource, ObjectHelper { IfcLightSourcePositional() : Object("IfcLightSourcePositional") {} + Lazy< IfcCartesianPoint > Position; IfcPositiveLengthMeasure::Out Radius; + IfcReal::Out ConstantAttenuation; + IfcReal::Out DistanceAttenuation; + IfcReal::Out QuadricAttenuation; }; - // C++ wrapper for IfcVertexLoop - struct IfcVertexLoop : IfcLoop, ObjectHelper { IfcVertexLoop() : Object("IfcVertexLoop") {} - Lazy< IfcVertex > LoopVertex; + // C++ wrapper for IfcLightSourceSpot + struct IfcLightSourceSpot : IfcLightSourcePositional, ObjectHelper { IfcLightSourceSpot() : Object("IfcLightSourceSpot") {} + Lazy< IfcDirection > Orientation; + Maybe< IfcReal::Out > ConcentrationExponent; + IfcPositivePlaneAngleMeasure::Out SpreadAngle; + IfcPositivePlaneAngleMeasure::Out BeamWidthAngle; }; - // C++ wrapper for IfcSurfaceCurveSweptAreaSolid - struct IfcSurfaceCurveSweptAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcSurfaceCurveSweptAreaSolid() : Object("IfcSurfaceCurveSweptAreaSolid") {} - Lazy< IfcCurve > Directrix; - IfcParameterValue::Out StartParam; - IfcParameterValue::Out EndParam; - Lazy< IfcSurface > ReferenceSurface; + // C++ wrapper for IfcLine + struct IfcLine : IfcCurve, ObjectHelper { IfcLine() : Object("IfcLine") {} + Lazy< IfcCartesianPoint > Pnt; + Lazy< IfcVector > Dir; }; - // C++ wrapper for IfcConstructionEquipmentResource - struct IfcConstructionEquipmentResource : IfcConstructionResource, ObjectHelper { IfcConstructionEquipmentResource() : Object("IfcConstructionEquipmentResource") {} + // C++ wrapper for IfcLinearDimension + struct IfcLinearDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcLinearDimension() : Object("IfcLinearDimension") {} }; - // C++ wrapper for IfcSectionedSpine - struct IfcSectionedSpine : IfcGeometricRepresentationItem, ObjectHelper { IfcSectionedSpine() : Object("IfcSectionedSpine") {} - Lazy< IfcCompositeCurve > SpineCurve; - ListOf< Lazy< IfcProfileDef >, 2, 0 > CrossSections; - ListOf< Lazy< IfcAxis2Placement3D >, 2, 0 > CrossSectionPositions; + // C++ wrapper for IfcLocalPlacement + struct IfcLocalPlacement : IfcObjectPlacement, ObjectHelper { IfcLocalPlacement() : Object("IfcLocalPlacement") {} + Maybe< Lazy< IfcObjectPlacement > > PlacementRelTo; + IfcAxis2Placement::Out RelativePlacement; + }; + + // C++ wrapper for IfcMappedItem + struct IfcMappedItem : IfcRepresentationItem, ObjectHelper { IfcMappedItem() : Object("IfcMappedItem") {} + Lazy< IfcRepresentationMap > MappingSource; + Lazy< IfcCartesianTransformationOperator > MappingTarget; + }; + + // C++ wrapper for IfcProductRepresentation + struct IfcProductRepresentation : ObjectHelper { IfcProductRepresentation() : Object("IfcProductRepresentation") {} + Maybe< IfcLabel::Out > Name; + Maybe< IfcText::Out > Description; + ListOf< Lazy< IfcRepresentation >, 1, 0 > Representations; + }; + + // C++ wrapper for IfcMaterialDefinitionRepresentation + struct IfcMaterialDefinitionRepresentation : IfcProductRepresentation, ObjectHelper { IfcMaterialDefinitionRepresentation() : Object("IfcMaterialDefinitionRepresentation") {} + Lazy< NotImplemented > RepresentedMaterial; + }; + + // C++ wrapper for IfcMeasureWithUnit + struct IfcMeasureWithUnit : ObjectHelper { IfcMeasureWithUnit() : Object("IfcMeasureWithUnit") {} + IfcValue::Out ValueComponent; + IfcUnit::Out UnitComponent; + }; + + // C++ wrapper for IfcMechanicalFastener + struct IfcMechanicalFastener : IfcFastener, ObjectHelper { IfcMechanicalFastener() : Object("IfcMechanicalFastener") {} + Maybe< IfcPositiveLengthMeasure::Out > NominalDiameter; + Maybe< IfcPositiveLengthMeasure::Out > NominalLength; + }; + + // C++ wrapper for IfcMechanicalFastenerType + struct IfcMechanicalFastenerType : IfcFastenerType, ObjectHelper { IfcMechanicalFastenerType() : Object("IfcMechanicalFastenerType") {} + + }; + + // C++ wrapper for IfcMember + struct IfcMember : IfcBuildingElement, ObjectHelper { IfcMember() : Object("IfcMember") {} + + }; + + // C++ wrapper for IfcMemberType + struct IfcMemberType : IfcBuildingElementType, ObjectHelper { IfcMemberType() : Object("IfcMemberType") {} + IfcMemberTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcMotorConnectionType + struct IfcMotorConnectionType : IfcEnergyConversionDeviceType, ObjectHelper { IfcMotorConnectionType() : Object("IfcMotorConnectionType") {} + IfcMotorConnectionTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcProcess + struct IfcProcess : IfcObject, ObjectHelper { IfcProcess() : Object("IfcProcess") {} + + }; + + // C++ wrapper for IfcTask + struct IfcTask : IfcProcess, ObjectHelper { IfcTask() : Object("IfcTask") {} + IfcIdentifier::Out TaskId; + Maybe< IfcLabel::Out > Status; + Maybe< IfcLabel::Out > WorkMethod; + BOOLEAN::Out IsMilestone; + Maybe< INTEGER::Out > Priority; + }; + + // C++ wrapper for IfcMove + struct IfcMove : IfcTask, ObjectHelper { IfcMove() : Object("IfcMove") {} + Lazy< IfcSpatialStructureElement > MoveFrom; + Lazy< IfcSpatialStructureElement > MoveTo; + Maybe< ListOf< IfcText, 1, 0 >::Out > PunchList; + }; + + // C++ wrapper for IfcOccupant + struct IfcOccupant : IfcActor, ObjectHelper { IfcOccupant() : Object("IfcOccupant") {} + IfcOccupantTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcOffsetCurve2D + struct IfcOffsetCurve2D : IfcCurve, ObjectHelper { IfcOffsetCurve2D() : Object("IfcOffsetCurve2D") {} + Lazy< IfcCurve > BasisCurve; + IfcLengthMeasure::Out Distance; + LOGICAL::Out SelfIntersect; + }; + + // C++ wrapper for IfcOffsetCurve3D + struct IfcOffsetCurve3D : IfcCurve, ObjectHelper { IfcOffsetCurve3D() : Object("IfcOffsetCurve3D") {} + Lazy< IfcCurve > BasisCurve; + IfcLengthMeasure::Out Distance; + LOGICAL::Out SelfIntersect; + Lazy< IfcDirection > RefDirection; + }; + + // C++ wrapper for IfcOneDirectionRepeatFactor + struct IfcOneDirectionRepeatFactor : IfcGeometricRepresentationItem, ObjectHelper { IfcOneDirectionRepeatFactor() : Object("IfcOneDirectionRepeatFactor") {} + Lazy< IfcVector > RepeatFactor; + }; + + // C++ wrapper for IfcOpenShell + struct IfcOpenShell : IfcConnectedFaceSet, ObjectHelper { IfcOpenShell() : Object("IfcOpenShell") {} + + }; + + // C++ wrapper for IfcOpeningElement + struct IfcOpeningElement : IfcFeatureElementSubtraction, ObjectHelper { IfcOpeningElement() : Object("IfcOpeningElement") {} + + }; + + // C++ wrapper for IfcOrderAction + struct IfcOrderAction : IfcTask, ObjectHelper { IfcOrderAction() : Object("IfcOrderAction") {} + IfcIdentifier::Out ActionID; + }; + + // C++ wrapper for IfcOrientedEdge + struct IfcOrientedEdge : IfcEdge, ObjectHelper { IfcOrientedEdge() : Object("IfcOrientedEdge") {} + Lazy< IfcEdge > EdgeElement; + BOOLEAN::Out Orientation; + }; + + // C++ wrapper for IfcOutletType + struct IfcOutletType : IfcFlowTerminalType, ObjectHelper { IfcOutletType() : Object("IfcOutletType") {} + IfcOutletTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPath + struct IfcPath : IfcTopologicalRepresentationItem, ObjectHelper { IfcPath() : Object("IfcPath") {} + ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; + }; + + // C++ wrapper for IfcPerformanceHistory + struct IfcPerformanceHistory : IfcControl, ObjectHelper { IfcPerformanceHistory() : Object("IfcPerformanceHistory") {} + IfcLabel::Out LifeCyclePhase; + }; + + // C++ wrapper for IfcPermit + struct IfcPermit : IfcControl, ObjectHelper { IfcPermit() : Object("IfcPermit") {} + IfcIdentifier::Out PermitID; + }; + + // C++ wrapper for IfcPile + struct IfcPile : IfcBuildingElement, ObjectHelper { IfcPile() : Object("IfcPile") {} + IfcPileTypeEnum::Out PredefinedType; + Maybe< IfcPileConstructionEnum::Out > ConstructionType; + }; + + // C++ wrapper for IfcPipeFittingType + struct IfcPipeFittingType : IfcFlowFittingType, ObjectHelper { IfcPipeFittingType() : Object("IfcPipeFittingType") {} + IfcPipeFittingTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPipeSegmentType + struct IfcPipeSegmentType : IfcFlowSegmentType, ObjectHelper { IfcPipeSegmentType() : Object("IfcPipeSegmentType") {} + IfcPipeSegmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPlanarExtent + struct IfcPlanarExtent : IfcGeometricRepresentationItem, ObjectHelper { IfcPlanarExtent() : Object("IfcPlanarExtent") {} + IfcLengthMeasure::Out SizeInX; + IfcLengthMeasure::Out SizeInY; + }; + + // C++ wrapper for IfcPlanarBox + struct IfcPlanarBox : IfcPlanarExtent, ObjectHelper { IfcPlanarBox() : Object("IfcPlanarBox") {} + IfcAxis2Placement::Out Placement; + }; + + // C++ wrapper for IfcPlane + struct IfcPlane : IfcElementarySurface, ObjectHelper { IfcPlane() : Object("IfcPlane") {} + + }; + + // C++ wrapper for IfcPlate + struct IfcPlate : IfcBuildingElement, ObjectHelper { IfcPlate() : Object("IfcPlate") {} + + }; + + // C++ wrapper for IfcPlateType + struct IfcPlateType : IfcBuildingElementType, ObjectHelper { IfcPlateType() : Object("IfcPlateType") {} + IfcPlateTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcPointOnCurve + struct IfcPointOnCurve : IfcPoint, ObjectHelper { IfcPointOnCurve() : Object("IfcPointOnCurve") {} + Lazy< IfcCurve > BasisCurve; + IfcParameterValue::Out PointParameter; + }; + + // C++ wrapper for IfcPointOnSurface + struct IfcPointOnSurface : IfcPoint, ObjectHelper { IfcPointOnSurface() : Object("IfcPointOnSurface") {} + Lazy< IfcSurface > BasisSurface; + IfcParameterValue::Out PointParameterU; + IfcParameterValue::Out PointParameterV; + }; + + // C++ wrapper for IfcPolyLoop + struct IfcPolyLoop : IfcLoop, ObjectHelper { IfcPolyLoop() : Object("IfcPolyLoop") {} + ListOf< Lazy< IfcCartesianPoint >, 3, 0 > Polygon; + }; + + // C++ wrapper for IfcPolygonalBoundedHalfSpace + struct IfcPolygonalBoundedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcPolygonalBoundedHalfSpace() : Object("IfcPolygonalBoundedHalfSpace") {} + Lazy< IfcAxis2Placement3D > Position; + Lazy< IfcBoundedCurve > PolygonalBoundary; + }; + + // C++ wrapper for IfcPolyline + struct IfcPolyline : IfcBoundedCurve, ObjectHelper { IfcPolyline() : Object("IfcPolyline") {} + ListOf< Lazy< IfcCartesianPoint >, 2, 0 > Points; + }; + + // C++ wrapper for IfcPresentationStyleAssignment + struct IfcPresentationStyleAssignment : ObjectHelper { IfcPresentationStyleAssignment() : Object("IfcPresentationStyleAssignment") {} + ListOf< IfcPresentationStyleSelect, 1, 0 >::Out Styles; + }; + + // C++ wrapper for IfcProcedure + struct IfcProcedure : IfcProcess, ObjectHelper { IfcProcedure() : Object("IfcProcedure") {} + IfcIdentifier::Out ProcedureID; + IfcProcedureTypeEnum::Out ProcedureType; + Maybe< IfcLabel::Out > UserDefinedProcedureType; + }; + + // C++ wrapper for IfcProductDefinitionShape + struct IfcProductDefinitionShape : IfcProductRepresentation, ObjectHelper { IfcProductDefinitionShape() : Object("IfcProductDefinitionShape") {} + + }; + + // C++ wrapper for IfcProject + struct IfcProject : IfcObject, ObjectHelper { IfcProject() : Object("IfcProject") {} + Maybe< IfcLabel::Out > LongName; + Maybe< IfcLabel::Out > Phase; + ListOf< Lazy< IfcRepresentationContext >, 1, 0 > RepresentationContexts; + Lazy< IfcUnitAssignment > UnitsInContext; + }; + + // C++ wrapper for IfcProjectOrder + struct IfcProjectOrder : IfcControl, ObjectHelper { IfcProjectOrder() : Object("IfcProjectOrder") {} + IfcIdentifier::Out ID; + IfcProjectOrderTypeEnum::Out PredefinedType; + Maybe< IfcLabel::Out > Status; + }; + + // C++ wrapper for IfcProjectOrderRecord + struct IfcProjectOrderRecord : IfcControl, ObjectHelper { IfcProjectOrderRecord() : Object("IfcProjectOrderRecord") {} + ListOf< Lazy< NotImplemented >, 1, 0 > Records; + IfcProjectOrderRecordTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcProjectionCurve + struct IfcProjectionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcProjectionCurve() : Object("IfcProjectionCurve") {} + + }; + + // C++ wrapper for IfcProjectionElement + struct IfcProjectionElement : IfcFeatureElementAddition, ObjectHelper { IfcProjectionElement() : Object("IfcProjectionElement") {} + + }; + + // C++ wrapper for IfcSimpleProperty + struct IfcSimpleProperty : IfcProperty, ObjectHelper { IfcSimpleProperty() : Object("IfcSimpleProperty") {} + + }; + + // C++ wrapper for IfcPropertyBoundedValue + struct IfcPropertyBoundedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyBoundedValue() : Object("IfcPropertyBoundedValue") {} + Maybe< IfcValue::Out > UpperBoundValue; + Maybe< IfcValue::Out > LowerBoundValue; + Maybe< IfcUnit::Out > Unit; + }; + + // C++ wrapper for IfcPropertyEnumeratedValue + struct IfcPropertyEnumeratedValue : IfcSimpleProperty, ObjectHelper { IfcPropertyEnumeratedValue() : Object("IfcPropertyEnumeratedValue") {} + ListOf< IfcValue, 1, 0 >::Out EnumerationValues; + Maybe< Lazy< NotImplemented > > EnumerationReference; + }; + + // C++ wrapper for IfcPropertyListValue + struct IfcPropertyListValue : IfcSimpleProperty, ObjectHelper { IfcPropertyListValue() : Object("IfcPropertyListValue") {} + ListOf< IfcValue, 1, 0 >::Out ListValues; + Maybe< IfcUnit::Out > Unit; }; // C++ wrapper for IfcPropertyReferenceValue @@ -3164,18 +3080,15 @@ namespace IFC { IfcObjectReferenceSelect::Out PropertyReference; }; - // C++ wrapper for IfcSite - struct IfcSite : IfcSpatialStructureElement, ObjectHelper { IfcSite() : Object("IfcSite") {} - Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLatitude; - Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLongitude; - Maybe< IfcLengthMeasure::Out > RefElevation; - Maybe< IfcLabel::Out > LandTitleNumber; - Maybe< Lazy< NotImplemented > > SiteAddress; + // C++ wrapper for IfcPropertySet + struct IfcPropertySet : IfcPropertySetDefinition, ObjectHelper { IfcPropertySet() : Object("IfcPropertySet") {} + ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties; }; - // C++ wrapper for IfcPerformanceHistory - struct IfcPerformanceHistory : IfcControl, ObjectHelper { IfcPerformanceHistory() : Object("IfcPerformanceHistory") {} - IfcLabel::Out LifeCyclePhase; + // C++ wrapper for IfcPropertySingleValue + struct IfcPropertySingleValue : IfcSimpleProperty, ObjectHelper { IfcPropertySingleValue() : Object("IfcPropertySingleValue") {} + Maybe< IfcValue::Out > NominalValue; + Maybe< IfcUnit::Out > Unit; }; // C++ wrapper for IfcPropertyTableValue @@ -3187,34 +3100,224 @@ namespace IFC { Maybe< IfcUnit::Out > DefinedUnit; }; - // C++ wrapper for IfcTransportElementType - struct IfcTransportElementType : IfcElementType, ObjectHelper { IfcTransportElementType() : Object("IfcTransportElementType") {} - IfcTransportElementTypeEnum::Out PredefinedType; + // C++ wrapper for IfcProtectiveDeviceType + struct IfcProtectiveDeviceType : IfcFlowControllerType, ObjectHelper { IfcProtectiveDeviceType() : Object("IfcProtectiveDeviceType") {} + IfcProtectiveDeviceTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcPolygonalBoundedHalfSpace - struct IfcPolygonalBoundedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcPolygonalBoundedHalfSpace() : Object("IfcPolygonalBoundedHalfSpace") {} - Lazy< IfcAxis2Placement3D > Position; - Lazy< IfcBoundedCurve > PolygonalBoundary; + // C++ wrapper for IfcProxy + struct IfcProxy : IfcProduct, ObjectHelper { IfcProxy() : Object("IfcProxy") {} + IfcObjectTypeEnum::Out ProxyType; + Maybe< IfcLabel::Out > Tag; }; - // C++ wrapper for IfcAxis2Placement2D - struct IfcAxis2Placement2D : IfcPlacement, ObjectHelper { IfcAxis2Placement2D() : Object("IfcAxis2Placement2D") {} - Maybe< Lazy< IfcDirection > > RefDirection; + // C++ wrapper for IfcPumpType + struct IfcPumpType : IfcFlowMovingDeviceType, ObjectHelper { IfcPumpType() : Object("IfcPumpType") {} + IfcPumpTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcFillAreaStyleHatching - struct IfcFillAreaStyleHatching : IfcGeometricRepresentationItem, ObjectHelper { IfcFillAreaStyleHatching() : Object("IfcFillAreaStyleHatching") {} - Lazy< NotImplemented > HatchLineAppearance; - IfcHatchLineDistanceSelect::Out StartOfNextHatchLine; - Maybe< Lazy< IfcCartesianPoint > > PointOfReferenceHatchLine; - Maybe< Lazy< IfcCartesianPoint > > PatternStart; - IfcPlaneAngleMeasure::Out HatchLineAngle; + // C++ wrapper for IfcRadiusDimension + struct IfcRadiusDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcRadiusDimension() : Object("IfcRadiusDimension") {} + }; - // C++ wrapper for IfcFastener - struct IfcFastener : IfcElementComponent, ObjectHelper { IfcFastener() : Object("IfcFastener") {} + // C++ wrapper for IfcRailing + struct IfcRailing : IfcBuildingElement, ObjectHelper { IfcRailing() : Object("IfcRailing") {} + Maybe< IfcRailingTypeEnum::Out > PredefinedType; + }; + // C++ wrapper for IfcRailingType + struct IfcRailingType : IfcBuildingElementType, ObjectHelper { IfcRailingType() : Object("IfcRailingType") {} + IfcRailingTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcRamp + struct IfcRamp : IfcBuildingElement, ObjectHelper { IfcRamp() : Object("IfcRamp") {} + IfcRampTypeEnum::Out ShapeType; + }; + + // C++ wrapper for IfcRampFlight + struct IfcRampFlight : IfcBuildingElement, ObjectHelper { IfcRampFlight() : Object("IfcRampFlight") {} + + }; + + // C++ wrapper for IfcRampFlightType + struct IfcRampFlightType : IfcBuildingElementType, ObjectHelper { IfcRampFlightType() : Object("IfcRampFlightType") {} + IfcRampFlightTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcRationalBezierCurve + struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {} + ListOf< REAL, 2, 0 >::Out WeightsData; + }; + + // C++ wrapper for IfcRectangleProfileDef + struct IfcRectangleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcRectangleProfileDef() : Object("IfcRectangleProfileDef") {} + IfcPositiveLengthMeasure::Out XDim; + IfcPositiveLengthMeasure::Out YDim; + }; + + // C++ wrapper for IfcRectangleHollowProfileDef + struct IfcRectangleHollowProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRectangleHollowProfileDef() : Object("IfcRectangleHollowProfileDef") {} + IfcPositiveLengthMeasure::Out WallThickness; + Maybe< IfcPositiveLengthMeasure::Out > InnerFilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > OuterFilletRadius; + }; + + // C++ wrapper for IfcRectangularPyramid + struct IfcRectangularPyramid : IfcCsgPrimitive3D, ObjectHelper { IfcRectangularPyramid() : Object("IfcRectangularPyramid") {} + IfcPositiveLengthMeasure::Out XLength; + IfcPositiveLengthMeasure::Out YLength; + IfcPositiveLengthMeasure::Out Height; + }; + + // C++ wrapper for IfcRectangularTrimmedSurface + struct IfcRectangularTrimmedSurface : IfcBoundedSurface, ObjectHelper { IfcRectangularTrimmedSurface() : Object("IfcRectangularTrimmedSurface") {} + Lazy< IfcSurface > BasisSurface; + IfcParameterValue::Out U1; + IfcParameterValue::Out V1; + IfcParameterValue::Out U2; + IfcParameterValue::Out V2; + BOOLEAN::Out Usense; + BOOLEAN::Out Vsense; + }; + + // C++ wrapper for IfcReinforcingElement + struct IfcReinforcingElement : IfcBuildingElementComponent, ObjectHelper { IfcReinforcingElement() : Object("IfcReinforcingElement") {} + Maybe< IfcLabel::Out > SteelGrade; + }; + + // C++ wrapper for IfcReinforcingBar + struct IfcReinforcingBar : IfcReinforcingElement, ObjectHelper { IfcReinforcingBar() : Object("IfcReinforcingBar") {} + IfcPositiveLengthMeasure::Out NominalDiameter; + IfcAreaMeasure::Out CrossSectionArea; + Maybe< IfcPositiveLengthMeasure::Out > BarLength; + IfcReinforcingBarRoleEnum::Out BarRole; + Maybe< IfcReinforcingBarSurfaceEnum::Out > BarSurface; + }; + + // C++ wrapper for IfcReinforcingMesh + struct IfcReinforcingMesh : IfcReinforcingElement, ObjectHelper { IfcReinforcingMesh() : Object("IfcReinforcingMesh") {} + Maybe< IfcPositiveLengthMeasure::Out > MeshLength; + Maybe< IfcPositiveLengthMeasure::Out > MeshWidth; + IfcPositiveLengthMeasure::Out LongitudinalBarNominalDiameter; + IfcPositiveLengthMeasure::Out TransverseBarNominalDiameter; + IfcAreaMeasure::Out LongitudinalBarCrossSectionArea; + IfcAreaMeasure::Out TransverseBarCrossSectionArea; + IfcPositiveLengthMeasure::Out LongitudinalBarSpacing; + IfcPositiveLengthMeasure::Out TransverseBarSpacing; + }; + + // C++ wrapper for IfcRelationship + struct IfcRelationship : IfcRoot, ObjectHelper { IfcRelationship() : Object("IfcRelationship") {} + + }; + + // C++ wrapper for IfcRelDecomposes + struct IfcRelDecomposes : IfcRelationship, ObjectHelper { IfcRelDecomposes() : Object("IfcRelDecomposes") {} + Lazy< IfcObjectDefinition > RelatingObject; + ListOf< Lazy< IfcObjectDefinition >, 1, 0 > RelatedObjects; + }; + + // C++ wrapper for IfcRelAggregates + struct IfcRelAggregates : IfcRelDecomposes, ObjectHelper { IfcRelAggregates() : Object("IfcRelAggregates") {} + + }; + + // C++ wrapper for IfcRelConnects + struct IfcRelConnects : IfcRelationship, ObjectHelper { IfcRelConnects() : Object("IfcRelConnects") {} + + }; + + // C++ wrapper for IfcRelContainedInSpatialStructure + struct IfcRelContainedInSpatialStructure : IfcRelConnects, ObjectHelper { IfcRelContainedInSpatialStructure() : Object("IfcRelContainedInSpatialStructure") {} + ListOf< Lazy< IfcProduct >, 1, 0 > RelatedElements; + Lazy< IfcSpatialStructureElement > RelatingStructure; + }; + + // C++ wrapper for IfcRelDefines + struct IfcRelDefines : IfcRelationship, ObjectHelper { IfcRelDefines() : Object("IfcRelDefines") {} + ListOf< Lazy< IfcObject >, 1, 0 > RelatedObjects; + }; + + // C++ wrapper for IfcRelDefinesByProperties + struct IfcRelDefinesByProperties : IfcRelDefines, ObjectHelper { IfcRelDefinesByProperties() : Object("IfcRelDefinesByProperties") {} + Lazy< IfcPropertySetDefinition > RelatingPropertyDefinition; + }; + + // C++ wrapper for IfcRelFillsElement + struct IfcRelFillsElement : IfcRelConnects, ObjectHelper { IfcRelFillsElement() : Object("IfcRelFillsElement") {} + Lazy< IfcOpeningElement > RelatingOpeningElement; + Lazy< IfcElement > RelatedBuildingElement; + }; + + // C++ wrapper for IfcRelOverridesProperties + struct IfcRelOverridesProperties : IfcRelDefinesByProperties, ObjectHelper { IfcRelOverridesProperties() : Object("IfcRelOverridesProperties") {} + ListOf< Lazy< IfcProperty >, 1, 0 > OverridingProperties; + }; + + // C++ wrapper for IfcRelVoidsElement + struct IfcRelVoidsElement : IfcRelConnects, ObjectHelper { IfcRelVoidsElement() : Object("IfcRelVoidsElement") {} + Lazy< IfcElement > RelatingBuildingElement; + Lazy< IfcFeatureElementSubtraction > RelatedOpeningElement; + }; + + // C++ wrapper for IfcRepresentation + struct IfcRepresentation : ObjectHelper { IfcRepresentation() : Object("IfcRepresentation") {} + Lazy< IfcRepresentationContext > ContextOfItems; + Maybe< IfcLabel::Out > RepresentationIdentifier; + Maybe< IfcLabel::Out > RepresentationType; + ListOf< Lazy< IfcRepresentationItem >, 1, 0 > Items; + }; + + // C++ wrapper for IfcRepresentationMap + struct IfcRepresentationMap : ObjectHelper { IfcRepresentationMap() : Object("IfcRepresentationMap") {} + IfcAxis2Placement::Out MappingOrigin; + Lazy< IfcRepresentation > MappedRepresentation; + }; + + // C++ wrapper for IfcRevolvedAreaSolid + struct IfcRevolvedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcRevolvedAreaSolid() : Object("IfcRevolvedAreaSolid") {} + Lazy< IfcAxis1Placement > Axis; + IfcPlaneAngleMeasure::Out Angle; + }; + + // C++ wrapper for IfcRightCircularCone + struct IfcRightCircularCone : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCone() : Object("IfcRightCircularCone") {} + IfcPositiveLengthMeasure::Out Height; + IfcPositiveLengthMeasure::Out BottomRadius; + }; + + // C++ wrapper for IfcRightCircularCylinder + struct IfcRightCircularCylinder : IfcCsgPrimitive3D, ObjectHelper { IfcRightCircularCylinder() : Object("IfcRightCircularCylinder") {} + IfcPositiveLengthMeasure::Out Height; + IfcPositiveLengthMeasure::Out Radius; + }; + + // C++ wrapper for IfcRoof + struct IfcRoof : IfcBuildingElement, ObjectHelper { IfcRoof() : Object("IfcRoof") {} + IfcRoofTypeEnum::Out ShapeType; + }; + + // C++ wrapper for IfcRoundedEdgeFeature + struct IfcRoundedEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcRoundedEdgeFeature() : Object("IfcRoundedEdgeFeature") {} + Maybe< IfcPositiveLengthMeasure::Out > Radius; + }; + + // C++ wrapper for IfcRoundedRectangleProfileDef + struct IfcRoundedRectangleProfileDef : IfcRectangleProfileDef, ObjectHelper { IfcRoundedRectangleProfileDef() : Object("IfcRoundedRectangleProfileDef") {} + IfcPositiveLengthMeasure::Out RoundingRadius; + }; + + // C++ wrapper for IfcSIUnit + struct IfcSIUnit : IfcNamedUnit, ObjectHelper { IfcSIUnit() : Object("IfcSIUnit") {} + Maybe< IfcSIPrefix::Out > Prefix; + IfcSIUnitName::Out Name; + }; + + // C++ wrapper for IfcSanitaryTerminalType + struct IfcSanitaryTerminalType : IfcFlowTerminalType, ObjectHelper { IfcSanitaryTerminalType() : Object("IfcSanitaryTerminalType") {} + IfcSanitaryTerminalTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcScheduleTimeControl @@ -3239,107 +3342,273 @@ namespace IFC { Maybe< IfcPositiveRatioMeasure::Out > Completion; }; - // C++ wrapper for IfcElectricMotorType - struct IfcElectricMotorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcElectricMotorType() : Object("IfcElectricMotorType") {} - IfcElectricMotorTypeEnum::Out PredefinedType; + // C++ wrapper for IfcSectionedSpine + struct IfcSectionedSpine : IfcGeometricRepresentationItem, ObjectHelper { IfcSectionedSpine() : Object("IfcSectionedSpine") {} + Lazy< IfcCompositeCurve > SpineCurve; + ListOf< Lazy< IfcProfileDef >, 2, 0 > CrossSections; + ListOf< Lazy< IfcAxis2Placement3D >, 2, 0 > CrossSectionPositions; }; - // C++ wrapper for IfcTimeSeriesSchedule - struct IfcTimeSeriesSchedule : IfcControl, ObjectHelper { IfcTimeSeriesSchedule() : Object("IfcTimeSeriesSchedule") {} - Maybe< ListOf< IfcDateTimeSelect, 1, 0 >::Out > ApplicableDates; - IfcTimeSeriesScheduleTypeEnum::Out TimeSeriesScheduleType; - Lazy< NotImplemented > TimeSeries; + // C++ wrapper for IfcSensorType + struct IfcSensorType : IfcDistributionControlElementType, ObjectHelper { IfcSensorType() : Object("IfcSensorType") {} + IfcSensorTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcPipeSegmentType - struct IfcPipeSegmentType : IfcFlowSegmentType, ObjectHelper { IfcPipeSegmentType() : Object("IfcPipeSegmentType") {} - IfcPipeSegmentTypeEnum::Out PredefinedType; + // C++ wrapper for IfcServiceLife + struct IfcServiceLife : IfcControl, ObjectHelper { IfcServiceLife() : Object("IfcServiceLife") {} + IfcServiceLifeTypeEnum::Out ServiceLifeType; + IfcTimeMeasure::Out ServiceLifeDuration; }; - // C++ wrapper for IfcFlowTerminal - struct IfcFlowTerminal : IfcDistributionFlowElement, ObjectHelper { IfcFlowTerminal() : Object("IfcFlowTerminal") {} + // C++ wrapper for IfcShapeModel + struct IfcShapeModel : IfcRepresentation, ObjectHelper { IfcShapeModel() : Object("IfcShapeModel") {} }; - // C++ wrapper for IfcWallType - struct IfcWallType : IfcBuildingElementType, ObjectHelper { IfcWallType() : Object("IfcWallType") {} - IfcWallTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcCoilType - struct IfcCoilType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoilType() : Object("IfcCoilType") {} - IfcCoilTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFurnishingElement - struct IfcFurnishingElement : IfcElement, ObjectHelper { IfcFurnishingElement() : Object("IfcFurnishingElement") {} + // C++ wrapper for IfcShapeRepresentation + struct IfcShapeRepresentation : IfcShapeModel, ObjectHelper { IfcShapeRepresentation() : Object("IfcShapeRepresentation") {} }; - // C++ wrapper for IfcWasteTerminalType - struct IfcWasteTerminalType : IfcFlowTerminalType, ObjectHelper { IfcWasteTerminalType() : Object("IfcWasteTerminalType") {} - IfcWasteTerminalTypeEnum::Out PredefinedType; + // C++ wrapper for IfcShellBasedSurfaceModel + struct IfcShellBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcShellBasedSurfaceModel() : Object("IfcShellBasedSurfaceModel") {} + ListOf< IfcShell, 1, 0 >::Out SbsmBoundary; }; - // C++ wrapper for IfcWindow - struct IfcWindow : IfcBuildingElement, ObjectHelper { IfcWindow() : Object("IfcWindow") {} - Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; - Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; + // C++ wrapper for IfcSite + struct IfcSite : IfcSpatialStructureElement, ObjectHelper { IfcSite() : Object("IfcSite") {} + Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLatitude; + Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLongitude; + Maybe< IfcLengthMeasure::Out > RefElevation; + Maybe< IfcLabel::Out > LandTitleNumber; + Maybe< Lazy< NotImplemented > > SiteAddress; }; - // C++ wrapper for IfcElectricFlowStorageDeviceType - struct IfcElectricFlowStorageDeviceType : IfcFlowStorageDeviceType, ObjectHelper { IfcElectricFlowStorageDeviceType() : Object("IfcElectricFlowStorageDeviceType") {} - IfcElectricFlowStorageDeviceTypeEnum::Out PredefinedType; + // C++ wrapper for IfcSlab + struct IfcSlab : IfcBuildingElement, ObjectHelper { IfcSlab() : Object("IfcSlab") {} + Maybe< IfcSlabTypeEnum::Out > PredefinedType; }; - // C++ wrapper for IfcRelAggregates - struct IfcRelAggregates : IfcRelDecomposes, ObjectHelper { IfcRelAggregates() : Object("IfcRelAggregates") {} + // C++ wrapper for IfcSlabType + struct IfcSlabType : IfcBuildingElementType, ObjectHelper { IfcSlabType() : Object("IfcSlabType") {} + IfcSlabTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcSpace + struct IfcSpace : IfcSpatialStructureElement, ObjectHelper { IfcSpace() : Object("IfcSpace") {} + IfcInternalOrExternalEnum::Out InteriorOrExteriorSpace; + Maybe< IfcLengthMeasure::Out > ElevationWithFlooring; + }; + + // C++ wrapper for IfcSpaceHeaterType + struct IfcSpaceHeaterType : IfcEnergyConversionDeviceType, ObjectHelper { IfcSpaceHeaterType() : Object("IfcSpaceHeaterType") {} + IfcSpaceHeaterTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcSpaceProgram + struct IfcSpaceProgram : IfcControl, ObjectHelper { IfcSpaceProgram() : Object("IfcSpaceProgram") {} + IfcIdentifier::Out SpaceProgramIdentifier; + Maybe< IfcAreaMeasure::Out > MaxRequiredArea; + Maybe< IfcAreaMeasure::Out > MinRequiredArea; + Maybe< Lazy< IfcSpatialStructureElement > > RequestedLocation; + IfcAreaMeasure::Out StandardRequiredArea; + }; + + // C++ wrapper for IfcSpatialStructureElementType + struct IfcSpatialStructureElementType : IfcElementType, ObjectHelper { IfcSpatialStructureElementType() : Object("IfcSpatialStructureElementType") {} }; - // C++ wrapper for IfcRamp - struct IfcRamp : IfcBuildingElement, ObjectHelper { IfcRamp() : Object("IfcRamp") {} - IfcRampTypeEnum::Out ShapeType; + // C++ wrapper for IfcSpaceType + struct IfcSpaceType : IfcSpatialStructureElementType, ObjectHelper { IfcSpaceType() : Object("IfcSpaceType") {} + IfcSpaceTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcLinearDimension - struct IfcLinearDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcLinearDimension() : Object("IfcLinearDimension") {} + // C++ wrapper for IfcSphere + struct IfcSphere : IfcCsgPrimitive3D, ObjectHelper { IfcSphere() : Object("IfcSphere") {} + IfcPositiveLengthMeasure::Out Radius; + }; + + // C++ wrapper for IfcStackTerminalType + struct IfcStackTerminalType : IfcFlowTerminalType, ObjectHelper { IfcStackTerminalType() : Object("IfcStackTerminalType") {} + IfcStackTerminalTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcStair + struct IfcStair : IfcBuildingElement, ObjectHelper { IfcStair() : Object("IfcStair") {} + IfcStairTypeEnum::Out ShapeType; + }; + + // C++ wrapper for IfcStairFlight + struct IfcStairFlight : IfcBuildingElement, ObjectHelper { IfcStairFlight() : Object("IfcStairFlight") {} + Maybe< INTEGER::Out > NumberOfRiser; + Maybe< INTEGER::Out > NumberOfTreads; + Maybe< IfcPositiveLengthMeasure::Out > RiserHeight; + Maybe< IfcPositiveLengthMeasure::Out > TreadLength; + }; + + // C++ wrapper for IfcStairFlightType + struct IfcStairFlightType : IfcBuildingElementType, ObjectHelper { IfcStairFlightType() : Object("IfcStairFlightType") {} + IfcStairFlightTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcStructuralActivity + struct IfcStructuralActivity : IfcProduct, ObjectHelper { IfcStructuralActivity() : Object("IfcStructuralActivity") {} + Lazy< NotImplemented > AppliedLoad; + IfcGlobalOrLocalEnum::Out GlobalOrLocal; + }; + + // C++ wrapper for IfcStructuralAction + struct IfcStructuralAction : IfcStructuralActivity, ObjectHelper { IfcStructuralAction() : Object("IfcStructuralAction") {} + BOOLEAN::Out DestabilizingLoad; + Maybe< Lazy< IfcStructuralReaction > > CausedBy; + }; + + // C++ wrapper for IfcStructuralAnalysisModel + struct IfcStructuralAnalysisModel : IfcSystem, ObjectHelper { IfcStructuralAnalysisModel() : Object("IfcStructuralAnalysisModel") {} + IfcAnalysisModelTypeEnum::Out PredefinedType; + Maybe< Lazy< IfcAxis2Placement3D > > OrientationOf2DPlane; + Maybe< ListOf< Lazy< IfcStructuralLoadGroup >, 1, 0 > > LoadedBy; + Maybe< ListOf< Lazy< IfcStructuralResultGroup >, 1, 0 > > HasResults; + }; + + // C++ wrapper for IfcStructuralItem + struct IfcStructuralItem : IfcProduct, ObjectHelper { IfcStructuralItem() : Object("IfcStructuralItem") {} }; - // C++ wrapper for IfcElementarySurface - struct IfcElementarySurface : IfcSurface, ObjectHelper { IfcElementarySurface() : Object("IfcElementarySurface") {} - Lazy< IfcAxis2Placement3D > Position; + // C++ wrapper for IfcStructuralConnection + struct IfcStructuralConnection : IfcStructuralItem, ObjectHelper { IfcStructuralConnection() : Object("IfcStructuralConnection") {} + Maybe< Lazy< NotImplemented > > AppliedCondition; }; - // C++ wrapper for IfcConstructionProductResource - struct IfcConstructionProductResource : IfcConstructionResource, ObjectHelper { IfcConstructionProductResource() : Object("IfcConstructionProductResource") {} + // C++ wrapper for IfcStructuralCurveConnection + struct IfcStructuralCurveConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralCurveConnection() : Object("IfcStructuralCurveConnection") {} }; - // C++ wrapper for IfcCableSegmentType - struct IfcCableSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableSegmentType() : Object("IfcCableSegmentType") {} - IfcCableSegmentTypeEnum::Out PredefinedType; + // C++ wrapper for IfcStructuralMember + struct IfcStructuralMember : IfcStructuralItem, ObjectHelper { IfcStructuralMember() : Object("IfcStructuralMember") {} + }; - // C++ wrapper for IfcPath - struct IfcPath : IfcTopologicalRepresentationItem, ObjectHelper { IfcPath() : Object("IfcPath") {} - ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; + // C++ wrapper for IfcStructuralCurveMember + struct IfcStructuralCurveMember : IfcStructuralMember, ObjectHelper { IfcStructuralCurveMember() : Object("IfcStructuralCurveMember") {} + IfcStructuralCurveTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcActor - struct IfcActor : IfcObject, ObjectHelper { IfcActor() : Object("IfcActor") {} - IfcActorSelect::Out TheActor; + // C++ wrapper for IfcStructuralCurveMemberVarying + struct IfcStructuralCurveMemberVarying : IfcStructuralCurveMember, ObjectHelper { IfcStructuralCurveMemberVarying() : Object("IfcStructuralCurveMemberVarying") {} + }; - // C++ wrapper for IfcOccupant - struct IfcOccupant : IfcActor, ObjectHelper { IfcOccupant() : Object("IfcOccupant") {} - IfcOccupantTypeEnum::Out PredefinedType; + // C++ wrapper for IfcStructuralLinearAction + struct IfcStructuralLinearAction : IfcStructuralAction, ObjectHelper { IfcStructuralLinearAction() : Object("IfcStructuralLinearAction") {} + IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; }; - // C++ wrapper for IfcSwitchingDeviceType - struct IfcSwitchingDeviceType : IfcFlowControllerType, ObjectHelper { IfcSwitchingDeviceType() : Object("IfcSwitchingDeviceType") {} - IfcSwitchingDeviceTypeEnum::Out PredefinedType; + // C++ wrapper for IfcStructuralLinearActionVarying + struct IfcStructuralLinearActionVarying : IfcStructuralLinearAction, ObjectHelper { IfcStructuralLinearActionVarying() : Object("IfcStructuralLinearActionVarying") {} + Lazy< NotImplemented > VaryingAppliedLoadLocation; + ListOf< Lazy< NotImplemented >, 1, 0 > SubsequentAppliedLoads; + }; + + // C++ wrapper for IfcStructuralLoadGroup + struct IfcStructuralLoadGroup : IfcGroup, ObjectHelper { IfcStructuralLoadGroup() : Object("IfcStructuralLoadGroup") {} + IfcLoadGroupTypeEnum::Out PredefinedType; + IfcActionTypeEnum::Out ActionType; + IfcActionSourceTypeEnum::Out ActionSource; + Maybe< IfcPositiveRatioMeasure::Out > Coefficient; + Maybe< IfcLabel::Out > Purpose; + }; + + // C++ wrapper for IfcStructuralPlanarAction + struct IfcStructuralPlanarAction : IfcStructuralAction, ObjectHelper { IfcStructuralPlanarAction() : Object("IfcStructuralPlanarAction") {} + IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue; + }; + + // C++ wrapper for IfcStructuralPlanarActionVarying + struct IfcStructuralPlanarActionVarying : IfcStructuralPlanarAction, ObjectHelper { IfcStructuralPlanarActionVarying() : Object("IfcStructuralPlanarActionVarying") {} + Lazy< NotImplemented > VaryingAppliedLoadLocation; + ListOf< Lazy< NotImplemented >, 2, 0 > SubsequentAppliedLoads; + }; + + // C++ wrapper for IfcStructuralPointAction + struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {} + + }; + + // C++ wrapper for IfcStructuralPointConnection + struct IfcStructuralPointConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralPointConnection() : Object("IfcStructuralPointConnection") {} + + }; + + // C++ wrapper for IfcStructuralReaction + struct IfcStructuralReaction : IfcStructuralActivity, ObjectHelper { IfcStructuralReaction() : Object("IfcStructuralReaction") {} + + }; + + // C++ wrapper for IfcStructuralPointReaction + struct IfcStructuralPointReaction : IfcStructuralReaction, ObjectHelper { IfcStructuralPointReaction() : Object("IfcStructuralPointReaction") {} + + }; + + // C++ wrapper for IfcStructuralResultGroup + struct IfcStructuralResultGroup : IfcGroup, ObjectHelper { IfcStructuralResultGroup() : Object("IfcStructuralResultGroup") {} + IfcAnalysisTheoryTypeEnum::Out TheoryType; + Maybe< Lazy< IfcStructuralLoadGroup > > ResultForLoadGroup; + BOOLEAN::Out IsLinear; + }; + + // C++ wrapper for IfcStructuralSurfaceConnection + struct IfcStructuralSurfaceConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralSurfaceConnection() : Object("IfcStructuralSurfaceConnection") {} + + }; + + // C++ wrapper for IfcStructuralSurfaceMember + struct IfcStructuralSurfaceMember : IfcStructuralMember, ObjectHelper { IfcStructuralSurfaceMember() : Object("IfcStructuralSurfaceMember") {} + IfcStructuralSurfaceTypeEnum::Out PredefinedType; + Maybe< IfcPositiveLengthMeasure::Out > Thickness; + }; + + // C++ wrapper for IfcStructuralSurfaceMemberVarying + struct IfcStructuralSurfaceMemberVarying : IfcStructuralSurfaceMember, ObjectHelper { IfcStructuralSurfaceMemberVarying() : Object("IfcStructuralSurfaceMemberVarying") {} + ListOf< IfcPositiveLengthMeasure, 2, 0 >::Out SubsequentThickness; + Lazy< NotImplemented > VaryingThicknessLocation; + }; + + // C++ wrapper for IfcStructuredDimensionCallout + struct IfcStructuredDimensionCallout : IfcDraughtingCallout, ObjectHelper { IfcStructuredDimensionCallout() : Object("IfcStructuredDimensionCallout") {} + + }; + + // C++ wrapper for IfcStyleModel + struct IfcStyleModel : IfcRepresentation, ObjectHelper { IfcStyleModel() : Object("IfcStyleModel") {} + + }; + + // C++ wrapper for IfcStyledRepresentation + struct IfcStyledRepresentation : IfcStyleModel, ObjectHelper { IfcStyledRepresentation() : Object("IfcStyledRepresentation") {} + + }; + + // C++ wrapper for IfcSubContractResource + struct IfcSubContractResource : IfcConstructionResource, ObjectHelper { IfcSubContractResource() : Object("IfcSubContractResource") {} + Maybe< IfcActorSelect::Out > SubContractor; + Maybe< IfcText::Out > JobDescription; + }; + + // C++ wrapper for IfcSubedge + struct IfcSubedge : IfcEdge, ObjectHelper { IfcSubedge() : Object("IfcSubedge") {} + Lazy< IfcEdge > ParentEdge; + }; + + // C++ wrapper for IfcSurfaceCurveSweptAreaSolid + struct IfcSurfaceCurveSweptAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcSurfaceCurveSweptAreaSolid() : Object("IfcSurfaceCurveSweptAreaSolid") {} + Lazy< IfcCurve > Directrix; + IfcParameterValue::Out StartParam; + IfcParameterValue::Out EndParam; + Lazy< IfcSurface > ReferenceSurface; }; // C++ wrapper for IfcSweptSurface @@ -3354,27 +3623,51 @@ namespace IFC { IfcLengthMeasure::Out Depth; }; - // C++ wrapper for IfcShellBasedSurfaceModel - struct IfcShellBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper { IfcShellBasedSurfaceModel() : Object("IfcShellBasedSurfaceModel") {} - ListOf< IfcShell, 1, 0 >::Out SbsmBoundary; + // C++ wrapper for IfcSurfaceOfRevolution + struct IfcSurfaceOfRevolution : IfcSweptSurface, ObjectHelper { IfcSurfaceOfRevolution() : Object("IfcSurfaceOfRevolution") {} + Lazy< IfcAxis1Placement > AxisPosition; }; - // C++ wrapper for IfcBuilding - struct IfcBuilding : IfcSpatialStructureElement, ObjectHelper { IfcBuilding() : Object("IfcBuilding") {} - Maybe< IfcLengthMeasure::Out > ElevationOfRefHeight; - Maybe< IfcLengthMeasure::Out > ElevationOfTerrain; - Maybe< Lazy< NotImplemented > > BuildingAddress; + // C++ wrapper for IfcSurfaceStyle + struct IfcSurfaceStyle : IfcPresentationStyle, ObjectHelper { IfcSurfaceStyle() : Object("IfcSurfaceStyle") {} + IfcSurfaceSide::Out Side; + ListOf< IfcSurfaceStyleElementSelect, 1, 5 >::Out Styles; }; - // C++ wrapper for IfcSIUnit - struct IfcSIUnit : IfcNamedUnit, ObjectHelper { IfcSIUnit() : Object("IfcSIUnit") {} - Maybe< IfcSIPrefix::Out > Prefix; - IfcSIUnitName::Out Name; + // C++ wrapper for IfcSurfaceStyleShading + struct IfcSurfaceStyleShading : ObjectHelper { IfcSurfaceStyleShading() : Object("IfcSurfaceStyleShading") {} + Lazy< IfcColourRgb > SurfaceColour; }; - // C++ wrapper for IfcDiscreteAccessory - struct IfcDiscreteAccessory : IfcElementComponent, ObjectHelper { IfcDiscreteAccessory() : Object("IfcDiscreteAccessory") {} + // C++ wrapper for IfcSurfaceStyleRendering + struct IfcSurfaceStyleRendering : IfcSurfaceStyleShading, ObjectHelper { IfcSurfaceStyleRendering() : Object("IfcSurfaceStyleRendering") {} + Maybe< IfcNormalisedRatioMeasure::Out > Transparency; + Maybe< IfcColourOrFactor::Out > DiffuseColour; + Maybe< IfcColourOrFactor::Out > TransmissionColour; + Maybe< IfcColourOrFactor::Out > DiffuseTransmissionColour; + Maybe< IfcColourOrFactor::Out > ReflectionColour; + Maybe< IfcColourOrFactor::Out > SpecularColour; + Maybe< IfcSpecularHighlightSelect::Out > SpecularHighlight; + IfcReflectanceMethodEnum::Out ReflectanceMethod; + }; + // C++ wrapper for IfcSurfaceStyleWithTextures + struct IfcSurfaceStyleWithTextures : ObjectHelper { IfcSurfaceStyleWithTextures() : Object("IfcSurfaceStyleWithTextures") {} + ListOf< Lazy< NotImplemented >, 1, 0 > Textures; + }; + + // C++ wrapper for IfcSweptDiskSolid + struct IfcSweptDiskSolid : IfcSolidModel, ObjectHelper { IfcSweptDiskSolid() : Object("IfcSweptDiskSolid") {} + Lazy< IfcCurve > Directrix; + IfcPositiveLengthMeasure::Out Radius; + Maybe< IfcPositiveLengthMeasure::Out > InnerRadius; + IfcParameterValue::Out StartParam; + IfcParameterValue::Out EndParam; + }; + + // C++ wrapper for IfcSwitchingDeviceType + struct IfcSwitchingDeviceType : IfcFlowControllerType, ObjectHelper { IfcSwitchingDeviceType() : Object("IfcSwitchingDeviceType") {} + IfcSwitchingDeviceTypeEnum::Out PredefinedType; }; // C++ wrapper for IfcSystemFurnitureElementType @@ -3382,82 +3675,109 @@ namespace IFC { }; - // C++ wrapper for IfcElementAssembly - struct IfcElementAssembly : IfcElement, ObjectHelper { IfcElementAssembly() : Object("IfcElementAssembly") {} - Maybe< IfcAssemblyPlaceEnum::Out > AssemblyPlace; - IfcElementAssemblyTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcCoolingTowerType - struct IfcCoolingTowerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcCoolingTowerType() : Object("IfcCoolingTowerType") {} - IfcCoolingTowerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcLightSourceSpot - struct IfcLightSourceSpot : IfcLightSourcePositional, ObjectHelper { IfcLightSourceSpot() : Object("IfcLightSourceSpot") {} - Lazy< IfcDirection > Orientation; - Maybe< IfcReal::Out > ConcentrationExponent; - IfcPositivePlaneAngleMeasure::Out SpreadAngle; - IfcPositivePlaneAngleMeasure::Out BeamWidthAngle; - }; - - // C++ wrapper for IfcEvaporatorType - struct IfcEvaporatorType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporatorType() : Object("IfcEvaporatorType") {} - IfcEvaporatorTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcSpaceHeaterType - struct IfcSpaceHeaterType : IfcEnergyConversionDeviceType, ObjectHelper { IfcSpaceHeaterType() : Object("IfcSpaceHeaterType") {} - IfcSpaceHeaterTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcElementQuantity - struct IfcElementQuantity : IfcPropertySetDefinition, ObjectHelper { IfcElementQuantity() : Object("IfcElementQuantity") {} - Maybe< IfcLabel::Out > MethodOfMeasurement; - ListOf< Lazy< NotImplemented >, 1, 0 > Quantities; - }; - - // C++ wrapper for IfcRampFlight - struct IfcRampFlight : IfcBuildingElement, ObjectHelper { IfcRampFlight() : Object("IfcRampFlight") {} - - }; - - // C++ wrapper for IfcConversionBasedUnit - struct IfcConversionBasedUnit : IfcNamedUnit, ObjectHelper { IfcConversionBasedUnit() : Object("IfcConversionBasedUnit") {} - IfcLabel::Out Name; - Lazy< IfcMeasureWithUnit > ConversionFactor; - }; - - // C++ wrapper for IfcExtrudedAreaSolid - struct IfcExtrudedAreaSolid : IfcSweptAreaSolid, ObjectHelper { IfcExtrudedAreaSolid() : Object("IfcExtrudedAreaSolid") {} - Lazy< IfcDirection > ExtrudedDirection; + // C++ wrapper for IfcTShapeProfileDef + struct IfcTShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcTShapeProfileDef() : Object("IfcTShapeProfileDef") {} IfcPositiveLengthMeasure::Out Depth; + IfcPositiveLengthMeasure::Out FlangeWidth; + IfcPositiveLengthMeasure::Out WebThickness; + IfcPositiveLengthMeasure::Out FlangeThickness; + Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > FlangeEdgeRadius; + Maybe< IfcPositiveLengthMeasure::Out > WebEdgeRadius; + Maybe< IfcPlaneAngleMeasure::Out > WebSlope; + Maybe< IfcPlaneAngleMeasure::Out > FlangeSlope; + Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; }; - // C++ wrapper for IfcProjectOrder - struct IfcProjectOrder : IfcControl, ObjectHelper { IfcProjectOrder() : Object("IfcProjectOrder") {} - IfcIdentifier::Out ID; - IfcProjectOrderTypeEnum::Out PredefinedType; - Maybe< IfcLabel::Out > Status; + // C++ wrapper for IfcTankType + struct IfcTankType : IfcFlowStorageDeviceType, ObjectHelper { IfcTankType() : Object("IfcTankType") {} + IfcTankTypeEnum::Out PredefinedType; }; - // C++ wrapper for IfcBooleanClippingResult - struct IfcBooleanClippingResult : IfcBooleanResult, ObjectHelper { IfcBooleanClippingResult() : Object("IfcBooleanClippingResult") {} - - }; - - // C++ wrapper for IfcReinforcingBar - struct IfcReinforcingBar : IfcReinforcingElement, ObjectHelper { IfcReinforcingBar() : Object("IfcReinforcingBar") {} + // C++ wrapper for IfcTendon + struct IfcTendon : IfcReinforcingElement, ObjectHelper { IfcTendon() : Object("IfcTendon") {} + IfcTendonTypeEnum::Out PredefinedType; IfcPositiveLengthMeasure::Out NominalDiameter; IfcAreaMeasure::Out CrossSectionArea; - Maybe< IfcPositiveLengthMeasure::Out > BarLength; - IfcReinforcingBarRoleEnum::Out BarRole; - Maybe< IfcReinforcingBarSurfaceEnum::Out > BarSurface; + Maybe< IfcForceMeasure::Out > TensionForce; + Maybe< IfcPressureMeasure::Out > PreStress; + Maybe< IfcNormalisedRatioMeasure::Out > FrictionCoefficient; + Maybe< IfcPositiveLengthMeasure::Out > AnchorageSlip; + Maybe< IfcPositiveLengthMeasure::Out > MinCurvatureRadius; }; - // C++ wrapper for IfcCenterLineProfileDef - struct IfcCenterLineProfileDef : IfcArbitraryOpenProfileDef, ObjectHelper { IfcCenterLineProfileDef() : Object("IfcCenterLineProfileDef") {} - IfcPositiveLengthMeasure::Out Thickness; + // C++ wrapper for IfcTendonAnchor + struct IfcTendonAnchor : IfcReinforcingElement, ObjectHelper { IfcTendonAnchor() : Object("IfcTendonAnchor") {} + + }; + + // C++ wrapper for IfcTextLiteral + struct IfcTextLiteral : IfcGeometricRepresentationItem, ObjectHelper { IfcTextLiteral() : Object("IfcTextLiteral") {} + IfcPresentableText::Out Literal; + IfcAxis2Placement::Out Placement; + IfcTextPath::Out Path; + }; + + // C++ wrapper for IfcTextLiteralWithExtent + struct IfcTextLiteralWithExtent : IfcTextLiteral, ObjectHelper { IfcTextLiteralWithExtent() : Object("IfcTextLiteralWithExtent") {} + Lazy< IfcPlanarExtent > Extent; + IfcBoxAlignment::Out BoxAlignment; + }; + + // C++ wrapper for IfcTimeSeriesSchedule + struct IfcTimeSeriesSchedule : IfcControl, ObjectHelper { IfcTimeSeriesSchedule() : Object("IfcTimeSeriesSchedule") {} + Maybe< ListOf< IfcDateTimeSelect, 1, 0 >::Out > ApplicableDates; + IfcTimeSeriesScheduleTypeEnum::Out TimeSeriesScheduleType; + Lazy< NotImplemented > TimeSeries; + }; + + // C++ wrapper for IfcTopologyRepresentation + struct IfcTopologyRepresentation : IfcShapeModel, ObjectHelper { IfcTopologyRepresentation() : Object("IfcTopologyRepresentation") {} + + }; + + // C++ wrapper for IfcTransformerType + struct IfcTransformerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTransformerType() : Object("IfcTransformerType") {} + IfcTransformerTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcTransportElement + struct IfcTransportElement : IfcElement, ObjectHelper { IfcTransportElement() : Object("IfcTransportElement") {} + Maybe< IfcTransportElementTypeEnum::Out > OperationType; + Maybe< IfcMassMeasure::Out > CapacityByWeight; + Maybe< IfcCountMeasure::Out > CapacityByNumber; + }; + + // C++ wrapper for IfcTransportElementType + struct IfcTransportElementType : IfcElementType, ObjectHelper { IfcTransportElementType() : Object("IfcTransportElementType") {} + IfcTransportElementTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcTrapeziumProfileDef + struct IfcTrapeziumProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcTrapeziumProfileDef() : Object("IfcTrapeziumProfileDef") {} + IfcPositiveLengthMeasure::Out BottomXDim; + IfcPositiveLengthMeasure::Out TopXDim; + IfcPositiveLengthMeasure::Out YDim; + IfcLengthMeasure::Out TopXOffset; + }; + + // C++ wrapper for IfcTrimmedCurve + struct IfcTrimmedCurve : IfcBoundedCurve, ObjectHelper { IfcTrimmedCurve() : Object("IfcTrimmedCurve") {} + Lazy< IfcCurve > BasisCurve; + ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim1; + ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim2; + BOOLEAN::Out SenseAgreement; + IfcTrimmingPreference::Out MasterRepresentation; + }; + + // C++ wrapper for IfcTubeBundleType + struct IfcTubeBundleType : IfcEnergyConversionDeviceType, ObjectHelper { IfcTubeBundleType() : Object("IfcTubeBundleType") {} + IfcTubeBundleTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcTwoDirectionRepeatFactor + struct IfcTwoDirectionRepeatFactor : IfcOneDirectionRepeatFactor, ObjectHelper { IfcTwoDirectionRepeatFactor() : Object("IfcTwoDirectionRepeatFactor") {} + Lazy< IfcVector > SecondRepeatFactor; }; // C++ wrapper for IfcUShapeProfileDef @@ -3472,12 +3792,76 @@ namespace IFC { Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; }; - // C++ wrapper for IfcBoundingBox - struct IfcBoundingBox : IfcGeometricRepresentationItem, ObjectHelper { IfcBoundingBox() : Object("IfcBoundingBox") {} - Lazy< IfcCartesianPoint > Corner; - IfcPositiveLengthMeasure::Out XDim; - IfcPositiveLengthMeasure::Out YDim; - IfcPositiveLengthMeasure::Out ZDim; + // C++ wrapper for IfcUnitAssignment + struct IfcUnitAssignment : ObjectHelper { IfcUnitAssignment() : Object("IfcUnitAssignment") {} + ListOf< IfcUnit, 1, 0 >::Out Units; + }; + + // C++ wrapper for IfcUnitaryEquipmentType + struct IfcUnitaryEquipmentType : IfcEnergyConversionDeviceType, ObjectHelper { IfcUnitaryEquipmentType() : Object("IfcUnitaryEquipmentType") {} + IfcUnitaryEquipmentTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcValveType + struct IfcValveType : IfcFlowControllerType, ObjectHelper { IfcValveType() : Object("IfcValveType") {} + IfcValveTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcVector + struct IfcVector : IfcGeometricRepresentationItem, ObjectHelper { IfcVector() : Object("IfcVector") {} + Lazy< IfcDirection > Orientation; + IfcLengthMeasure::Out Magnitude; + }; + + // C++ wrapper for IfcVertex + struct IfcVertex : IfcTopologicalRepresentationItem, ObjectHelper { IfcVertex() : Object("IfcVertex") {} + + }; + + // C++ wrapper for IfcVertexLoop + struct IfcVertexLoop : IfcLoop, ObjectHelper { IfcVertexLoop() : Object("IfcVertexLoop") {} + Lazy< IfcVertex > LoopVertex; + }; + + // C++ wrapper for IfcVertexPoint + struct IfcVertexPoint : IfcVertex, ObjectHelper { IfcVertexPoint() : Object("IfcVertexPoint") {} + Lazy< IfcPoint > VertexGeometry; + }; + + // C++ wrapper for IfcVibrationIsolatorType + struct IfcVibrationIsolatorType : IfcDiscreteAccessoryType, ObjectHelper { IfcVibrationIsolatorType() : Object("IfcVibrationIsolatorType") {} + IfcVibrationIsolatorTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcVirtualElement + struct IfcVirtualElement : IfcElement, ObjectHelper { IfcVirtualElement() : Object("IfcVirtualElement") {} + + }; + + // C++ wrapper for IfcWall + struct IfcWall : IfcBuildingElement, ObjectHelper { IfcWall() : Object("IfcWall") {} + + }; + + // C++ wrapper for IfcWallStandardCase + struct IfcWallStandardCase : IfcWall, ObjectHelper { IfcWallStandardCase() : Object("IfcWallStandardCase") {} + + }; + + // C++ wrapper for IfcWallType + struct IfcWallType : IfcBuildingElementType, ObjectHelper { IfcWallType() : Object("IfcWallType") {} + IfcWallTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcWasteTerminalType + struct IfcWasteTerminalType : IfcFlowTerminalType, ObjectHelper { IfcWasteTerminalType() : Object("IfcWasteTerminalType") {} + IfcWasteTerminalTypeEnum::Out PredefinedType; + }; + + // C++ wrapper for IfcWindow + struct IfcWindow : IfcBuildingElement, ObjectHelper { IfcWindow() : Object("IfcWindow") {} + Maybe< IfcPositiveLengthMeasure::Out > OverallHeight; + Maybe< IfcPositiveLengthMeasure::Out > OverallWidth; }; // C++ wrapper for IfcWindowStyle @@ -3488,377 +3872,22 @@ namespace IFC { BOOLEAN::Out Sizeable; }; - // C++ wrapper for IfcMemberType - struct IfcMemberType : IfcBuildingElementType, ObjectHelper { IfcMemberType() : Object("IfcMemberType") {} - IfcMemberTypeEnum::Out PredefinedType; + // C++ wrapper for IfcWorkControl + struct IfcWorkControl : IfcControl, ObjectHelper { IfcWorkControl() : Object("IfcWorkControl") {} + IfcIdentifier::Out Identifier; + IfcDateTimeSelect::Out CreationDate; + Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > Creators; + Maybe< IfcLabel::Out > Purpose; + Maybe< IfcTimeMeasure::Out > Duration; + Maybe< IfcTimeMeasure::Out > TotalFloat; + IfcDateTimeSelect::Out StartTime; + Maybe< IfcDateTimeSelect::Out > FinishTime; + Maybe< IfcWorkControlTypeEnum::Out > WorkControlType; + Maybe< IfcLabel::Out > UserDefinedControlType; }; - // C++ wrapper for IfcLightFixtureType - struct IfcLightFixtureType : IfcFlowTerminalType, ObjectHelper { IfcLightFixtureType() : Object("IfcLightFixtureType") {} - IfcLightFixtureTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFlowStorageDevice - struct IfcFlowStorageDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowStorageDevice() : Object("IfcFlowStorageDevice") {} - - }; - - // C++ wrapper for IfcTopologyRepresentation - struct IfcTopologyRepresentation : IfcShapeModel, ObjectHelper { IfcTopologyRepresentation() : Object("IfcTopologyRepresentation") {} - - }; - - // C++ wrapper for IfcRelDefinesByProperties - struct IfcRelDefinesByProperties : IfcRelDefines, ObjectHelper { IfcRelDefinesByProperties() : Object("IfcRelDefinesByProperties") {} - Lazy< IfcPropertySetDefinition > RelatingPropertyDefinition; - }; - - // C++ wrapper for IfcRelOverridesProperties - struct IfcRelOverridesProperties : IfcRelDefinesByProperties, ObjectHelper { IfcRelOverridesProperties() : Object("IfcRelOverridesProperties") {} - ListOf< Lazy< IfcProperty >, 1, 0 > OverridingProperties; - }; - - // C++ wrapper for IfcStairFlightType - struct IfcStairFlightType : IfcBuildingElementType, ObjectHelper { IfcStairFlightType() : Object("IfcStairFlightType") {} - IfcStairFlightTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcCircleProfileDef - struct IfcCircleProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCircleProfileDef() : Object("IfcCircleProfileDef") {} - IfcPositiveLengthMeasure::Out Radius; - }; - - // C++ wrapper for IfcSweptDiskSolid - struct IfcSweptDiskSolid : IfcSolidModel, ObjectHelper { IfcSweptDiskSolid() : Object("IfcSweptDiskSolid") {} - Lazy< IfcCurve > Directrix; - IfcPositiveLengthMeasure::Out Radius; - Maybe< IfcPositiveLengthMeasure::Out > InnerRadius; - IfcParameterValue::Out StartParam; - IfcParameterValue::Out EndParam; - }; - - // C++ wrapper for IfcStructuralPlanarActionVarying - struct IfcStructuralPlanarActionVarying : IfcStructuralPlanarAction, ObjectHelper { IfcStructuralPlanarActionVarying() : Object("IfcStructuralPlanarActionVarying") {} - Lazy< NotImplemented > VaryingAppliedLoadLocation; - ListOf< Lazy< NotImplemented >, 2, 0 > SubsequentAppliedLoads; - }; - - // C++ wrapper for IfcValveType - struct IfcValveType : IfcFlowControllerType, ObjectHelper { IfcValveType() : Object("IfcValveType") {} - IfcValveTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcUnitAssignment - struct IfcUnitAssignment : ObjectHelper { IfcUnitAssignment() : Object("IfcUnitAssignment") {} - ListOf< IfcUnit, 1, 0 >::Out Units; - }; - - // C++ wrapper for IfcVirtualElement - struct IfcVirtualElement : IfcElement, ObjectHelper { IfcVirtualElement() : Object("IfcVirtualElement") {} - - }; - - // C++ wrapper for IfcStructuralCurveConnection - struct IfcStructuralCurveConnection : IfcStructuralConnection, ObjectHelper { IfcStructuralCurveConnection() : Object("IfcStructuralCurveConnection") {} - - }; - - // C++ wrapper for IfcAirTerminalType - struct IfcAirTerminalType : IfcFlowTerminalType, ObjectHelper { IfcAirTerminalType() : Object("IfcAirTerminalType") {} - IfcAirTerminalTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcFlowTreatmentDeviceType - struct IfcFlowTreatmentDeviceType : IfcDistributionFlowElementType, ObjectHelper { IfcFlowTreatmentDeviceType() : Object("IfcFlowTreatmentDeviceType") {} - - }; - - // C++ wrapper for IfcRoof - struct IfcRoof : IfcBuildingElement, ObjectHelper { IfcRoof() : Object("IfcRoof") {} - IfcRoofTypeEnum::Out ShapeType; - }; - - // C++ wrapper for IfcElectricTimeControlType - struct IfcElectricTimeControlType : IfcFlowControllerType, ObjectHelper { IfcElectricTimeControlType() : Object("IfcElectricTimeControlType") {} - IfcElectricTimeControlTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcPile - struct IfcPile : IfcBuildingElement, ObjectHelper { IfcPile() : Object("IfcPile") {} - IfcPileTypeEnum::Out PredefinedType; - Maybe< IfcPileConstructionEnum::Out > ConstructionType; - }; - - // C++ wrapper for IfcCostSchedule - struct IfcCostSchedule : IfcControl, ObjectHelper { IfcCostSchedule() : Object("IfcCostSchedule") {} - Maybe< IfcActorSelect::Out > SubmittedBy; - Maybe< IfcActorSelect::Out > PreparedBy; - Maybe< IfcDateTimeSelect::Out > SubmittedOn; - Maybe< IfcLabel::Out > Status; - Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > TargetUsers; - Maybe< IfcDateTimeSelect::Out > UpdateDate; - IfcIdentifier::Out ID; - IfcCostScheduleTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRampFlightType - struct IfcRampFlightType : IfcBuildingElementType, ObjectHelper { IfcRampFlightType() : Object("IfcRampFlightType") {} - IfcRampFlightTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDerivedProfileDef - struct IfcDerivedProfileDef : IfcProfileDef, ObjectHelper { IfcDerivedProfileDef() : Object("IfcDerivedProfileDef") {} - Lazy< IfcProfileDef > ParentProfile; - Lazy< IfcCartesianTransformationOperator2D > Operator; - Maybe< IfcLabel::Out > Label; - }; - - // C++ wrapper for IfcCostItem - struct IfcCostItem : IfcControl, ObjectHelper { IfcCostItem() : Object("IfcCostItem") {} - - }; - - // C++ wrapper for IfcEvaporativeCoolerType - struct IfcEvaporativeCoolerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcEvaporativeCoolerType() : Object("IfcEvaporativeCoolerType") {} - IfcEvaporativeCoolerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcChillerType - struct IfcChillerType : IfcEnergyConversionDeviceType, ObjectHelper { IfcChillerType() : Object("IfcChillerType") {} - IfcChillerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcBoxedHalfSpace - struct IfcBoxedHalfSpace : IfcHalfSpaceSolid, ObjectHelper { IfcBoxedHalfSpace() : Object("IfcBoxedHalfSpace") {} - Lazy< IfcBoundingBox > Enclosure; - }; - - // C++ wrapper for IfcCurtainWallType - struct IfcCurtainWallType : IfcBuildingElementType, ObjectHelper { IfcCurtainWallType() : Object("IfcCurtainWallType") {} - IfcCurtainWallTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcGeometricRepresentationSubContext - struct IfcGeometricRepresentationSubContext : IfcGeometricRepresentationContext, ObjectHelper { IfcGeometricRepresentationSubContext() : Object("IfcGeometricRepresentationSubContext") {} - Lazy< IfcGeometricRepresentationContext > ParentContext; - Maybe< IfcPositiveRatioMeasure::Out > TargetScale; - IfcGeometricProjectionEnum::Out TargetView; - Maybe< IfcLabel::Out > UserDefinedTargetView; - }; - - // C++ wrapper for IfcDimensionCurve - struct IfcDimensionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcDimensionCurve() : Object("IfcDimensionCurve") {} - - }; - - // C++ wrapper for IfcPlane - struct IfcPlane : IfcElementarySurface, ObjectHelper { IfcPlane() : Object("IfcPlane") {} - - }; - - // C++ wrapper for IfcProjectionCurve - struct IfcProjectionCurve : IfcAnnotationCurveOccurrence, ObjectHelper { IfcProjectionCurve() : Object("IfcProjectionCurve") {} - - }; - - // C++ wrapper for IfcDamperType - struct IfcDamperType : IfcFlowControllerType, ObjectHelper { IfcDamperType() : Object("IfcDamperType") {} - IfcDamperTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcMechanicalFastener - struct IfcMechanicalFastener : IfcFastener, ObjectHelper { IfcMechanicalFastener() : Object("IfcMechanicalFastener") {} - Maybe< IfcPositiveLengthMeasure::Out > NominalDiameter; - Maybe< IfcPositiveLengthMeasure::Out > NominalLength; - }; - - // C++ wrapper for IfcDuctSilencerType - struct IfcDuctSilencerType : IfcFlowTreatmentDeviceType, ObjectHelper { IfcDuctSilencerType() : Object("IfcDuctSilencerType") {} - IfcDuctSilencerTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcLaborResource - struct IfcLaborResource : IfcConstructionResource, ObjectHelper { IfcLaborResource() : Object("IfcLaborResource") {} - Maybe< IfcText::Out > SkillSet; - }; - - // C++ wrapper for IfcFanType - struct IfcFanType : IfcFlowMovingDeviceType, ObjectHelper { IfcFanType() : Object("IfcFanType") {} - IfcFanTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcProjectionElement - struct IfcProjectionElement : IfcFeatureElementAddition, ObjectHelper { IfcProjectionElement() : Object("IfcProjectionElement") {} - - }; - - // C++ wrapper for IfcCraneRailFShapeProfileDef - struct IfcCraneRailFShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcCraneRailFShapeProfileDef() : Object("IfcCraneRailFShapeProfileDef") {} - IfcPositiveLengthMeasure::Out OverallHeight; - IfcPositiveLengthMeasure::Out HeadWidth; - Maybe< IfcPositiveLengthMeasure::Out > Radius; - IfcPositiveLengthMeasure::Out HeadDepth2; - IfcPositiveLengthMeasure::Out HeadDepth3; - IfcPositiveLengthMeasure::Out WebThickness; - IfcPositiveLengthMeasure::Out BaseDepth1; - IfcPositiveLengthMeasure::Out BaseDepth2; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; - }; - - // C++ wrapper for IfcProject - struct IfcProject : IfcObject, ObjectHelper { IfcProject() : Object("IfcProject") {} - Maybe< IfcLabel::Out > LongName; - Maybe< IfcLabel::Out > Phase; - ListOf< Lazy< IfcRepresentationContext >, 1, 0 > RepresentationContexts; - Lazy< IfcUnitAssignment > UnitsInContext; - }; - - // C++ wrapper for IfcRelVoidsElement - struct IfcRelVoidsElement : IfcRelConnects, ObjectHelper { IfcRelVoidsElement() : Object("IfcRelVoidsElement") {} - Lazy< IfcElement > RelatingBuildingElement; - Lazy< IfcFeatureElementSubtraction > RelatedOpeningElement; - }; - - // C++ wrapper for IfcElectricalCircuit - struct IfcElectricalCircuit : IfcSystem, ObjectHelper { IfcElectricalCircuit() : Object("IfcElectricalCircuit") {} - - }; - - // C++ wrapper for IfcLShapeProfileDef - struct IfcLShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcLShapeProfileDef() : Object("IfcLShapeProfileDef") {} - IfcPositiveLengthMeasure::Out Depth; - Maybe< IfcPositiveLengthMeasure::Out > Width; - IfcPositiveLengthMeasure::Out Thickness; - Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; - Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius; - Maybe< IfcPlaneAngleMeasure::Out > LegSlope; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX; - Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY; - }; - - // C++ wrapper for IfcFlowTreatmentDevice - struct IfcFlowTreatmentDevice : IfcDistributionFlowElement, ObjectHelper { IfcFlowTreatmentDevice() : Object("IfcFlowTreatmentDevice") {} - - }; - - // C++ wrapper for IfcVertexPoint - struct IfcVertexPoint : IfcVertex, ObjectHelper { IfcVertexPoint() : Object("IfcVertexPoint") {} - Lazy< IfcPoint > VertexGeometry; - }; - - // C++ wrapper for IfcAnnotationTextOccurrence - struct IfcAnnotationTextOccurrence : IfcAnnotationOccurrence, ObjectHelper { IfcAnnotationTextOccurrence() : Object("IfcAnnotationTextOccurrence") {} - - }; - - // C++ wrapper for IfcFilterType - struct IfcFilterType : IfcFlowTreatmentDeviceType, ObjectHelper { IfcFilterType() : Object("IfcFilterType") {} - IfcFilterTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcEdgeLoop - struct IfcEdgeLoop : IfcLoop, ObjectHelper { IfcEdgeLoop() : Object("IfcEdgeLoop") {} - ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList; - }; - - // C++ wrapper for IfcCircleHollowProfileDef - struct IfcCircleHollowProfileDef : IfcCircleProfileDef, ObjectHelper { IfcCircleHollowProfileDef() : Object("IfcCircleHollowProfileDef") {} - IfcPositiveLengthMeasure::Out WallThickness; - }; - - // C++ wrapper for IfcAirTerminalBoxType - struct IfcAirTerminalBoxType : IfcFlowControllerType, ObjectHelper { IfcAirTerminalBoxType() : Object("IfcAirTerminalBoxType") {} - IfcAirTerminalBoxTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcStructuredDimensionCallout - struct IfcStructuredDimensionCallout : IfcDraughtingCallout, ObjectHelper { IfcStructuredDimensionCallout() : Object("IfcStructuredDimensionCallout") {} - - }; - - // C++ wrapper for IfcCableCarrierSegmentType - struct IfcCableCarrierSegmentType : IfcFlowSegmentType, ObjectHelper { IfcCableCarrierSegmentType() : Object("IfcCableCarrierSegmentType") {} - IfcCableCarrierSegmentTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcDuctFittingType - struct IfcDuctFittingType : IfcFlowFittingType, ObjectHelper { IfcDuctFittingType() : Object("IfcDuctFittingType") {} - IfcDuctFittingTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRectangularTrimmedSurface - struct IfcRectangularTrimmedSurface : IfcBoundedSurface, ObjectHelper { IfcRectangularTrimmedSurface() : Object("IfcRectangularTrimmedSurface") {} - Lazy< IfcSurface > BasisSurface; - IfcParameterValue::Out U1; - IfcParameterValue::Out V1; - IfcParameterValue::Out U2; - IfcParameterValue::Out V2; - BOOLEAN::Out Usense; - BOOLEAN::Out Vsense; - }; - - // C++ wrapper for IfcProductDefinitionShape - struct IfcProductDefinitionShape : IfcProductRepresentation, ObjectHelper { IfcProductDefinitionShape() : Object("IfcProductDefinitionShape") {} - - }; - - // C++ wrapper for IfcStairFlight - struct IfcStairFlight : IfcBuildingElement, ObjectHelper { IfcStairFlight() : Object("IfcStairFlight") {} - Maybe< INTEGER::Out > NumberOfRiser; - Maybe< INTEGER::Out > NumberOfTreads; - Maybe< IfcPositiveLengthMeasure::Out > RiserHeight; - Maybe< IfcPositiveLengthMeasure::Out > TreadLength; - }; - - // C++ wrapper for IfcSlab - struct IfcSlab : IfcBuildingElement, ObjectHelper { IfcSlab() : Object("IfcSlab") {} - Maybe< IfcSlabTypeEnum::Out > PredefinedType; - }; - - // C++ wrapper for IfcPipeFittingType - struct IfcPipeFittingType : IfcFlowFittingType, ObjectHelper { IfcPipeFittingType() : Object("IfcPipeFittingType") {} - IfcPipeFittingTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcSpace - struct IfcSpace : IfcSpatialStructureElement, ObjectHelper { IfcSpace() : Object("IfcSpace") {} - IfcInternalOrExternalEnum::Out InteriorOrExteriorSpace; - Maybe< IfcLengthMeasure::Out > ElevationWithFlooring; - }; - - // C++ wrapper for IfcBuildingElementProxyType - struct IfcBuildingElementProxyType : IfcBuildingElementType, ObjectHelper { IfcBuildingElementProxyType() : Object("IfcBuildingElementProxyType") {} - IfcBuildingElementProxyTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcAlarmType - struct IfcAlarmType : IfcDistributionControlElementType, ObjectHelper { IfcAlarmType() : Object("IfcAlarmType") {} - IfcAlarmTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcCableCarrierFittingType - struct IfcCableCarrierFittingType : IfcFlowFittingType, ObjectHelper { IfcCableCarrierFittingType() : Object("IfcCableCarrierFittingType") {} - IfcCableCarrierFittingTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcRoundedEdgeFeature - struct IfcRoundedEdgeFeature : IfcEdgeFeature, ObjectHelper { IfcRoundedEdgeFeature() : Object("IfcRoundedEdgeFeature") {} - Maybe< IfcPositiveLengthMeasure::Out > Radius; - }; - - // C++ wrapper for IfcFaceSurface - struct IfcFaceSurface : IfcFace, ObjectHelper { IfcFaceSurface() : Object("IfcFaceSurface") {} - Lazy< IfcSurface > FaceSurface; - BOOLEAN::Out SameSense; - }; - - // C++ wrapper for IfcCartesianTransformationOperator2D - struct IfcCartesianTransformationOperator2D : IfcCartesianTransformationOperator, ObjectHelper { IfcCartesianTransformationOperator2D() : Object("IfcCartesianTransformationOperator2D") {} - - }; - - // C++ wrapper for IfcTendonAnchor - struct IfcTendonAnchor : IfcReinforcingElement, ObjectHelper { IfcTendonAnchor() : Object("IfcTendonAnchor") {} + // C++ wrapper for IfcWorkPlan + struct IfcWorkPlan : IfcWorkControl, ObjectHelper { IfcWorkPlan() : Object("IfcWorkPlan") {} }; @@ -3867,47 +3896,18 @@ namespace IFC { }; - // C++ wrapper for IfcSurfaceOfRevolution - struct IfcSurfaceOfRevolution : IfcSweptSurface, ObjectHelper { IfcSurfaceOfRevolution() : Object("IfcSurfaceOfRevolution") {} - Lazy< IfcAxis1Placement > AxisPosition; + // C++ wrapper for IfcZShapeProfileDef + struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {} + IfcPositiveLengthMeasure::Out Depth; + IfcPositiveLengthMeasure::Out FlangeWidth; + IfcPositiveLengthMeasure::Out WebThickness; + IfcPositiveLengthMeasure::Out FlangeThickness; + Maybe< IfcPositiveLengthMeasure::Out > FilletRadius; + Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius; }; - // C++ wrapper for IfcElectricHeaterType - struct IfcElectricHeaterType : IfcFlowTerminalType, ObjectHelper { IfcElectricHeaterType() : Object("IfcElectricHeaterType") {} - IfcElectricHeaterTypeEnum::Out PredefinedType; - }; - - // C++ wrapper for IfcMeasureWithUnit - struct IfcMeasureWithUnit : ObjectHelper { IfcMeasureWithUnit() : Object("IfcMeasureWithUnit") {} - IfcValue::Out ValueComponent; - IfcUnit::Out UnitComponent; - }; - - // C++ wrapper for IfcOrientedEdge - struct IfcOrientedEdge : IfcEdge, ObjectHelper { IfcOrientedEdge() : Object("IfcOrientedEdge") {} - Lazy< IfcEdge > EdgeElement; - BOOLEAN::Out Orientation; - }; - - // C++ wrapper for IfcCartesianTransformationOperator2DnonUniform - struct IfcCartesianTransformationOperator2DnonUniform : IfcCartesianTransformationOperator2D, ObjectHelper { IfcCartesianTransformationOperator2DnonUniform() : Object("IfcCartesianTransformationOperator2DnonUniform") {} - Maybe< REAL::Out > Scale2; - }; - - // C++ wrapper for IfcRelFillsElement - struct IfcRelFillsElement : IfcRelConnects, ObjectHelper { IfcRelFillsElement() : Object("IfcRelFillsElement") {} - Lazy< IfcOpeningElement > RelatingOpeningElement; - Lazy< IfcElement > RelatedBuildingElement; - }; - - // C++ wrapper for IfcConstructionMaterialResource - struct IfcConstructionMaterialResource : IfcConstructionResource, ObjectHelper { IfcConstructionMaterialResource() : Object("IfcConstructionMaterialResource") {} - Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > Suppliers; - Maybe< IfcRatioMeasure::Out > UsageRatio; - }; - - // C++ wrapper for IfcRadiusDimension - struct IfcRadiusDimension : IfcDimensionCurveDirectedCallout, ObjectHelper { IfcRadiusDimension() : Object("IfcRadiusDimension") {} + // C++ wrapper for IfcZone + struct IfcZone : IfcGroup, ObjectHelper { IfcZone() : Object("IfcZone") {} }; @@ -3923,441 +3923,441 @@ namespace STEP { #define DECL_CONV_STUB(type) template <> size_t GenericFill(const STEP::DB& db, const EXPRESS::LIST& params, IFC::type* in) DECL_CONV_STUB(IfcRepresentationItem); - DECL_CONV_STUB(IfcTopologicalRepresentationItem); - DECL_CONV_STUB(IfcEdge); DECL_CONV_STUB(IfcGeometricRepresentationItem); - DECL_CONV_STUB(IfcCompositeCurveSegment); + DECL_CONV_STUB(IfcCurve); + DECL_CONV_STUB(IfcBoundedCurve); + DECL_CONV_STUB(IfcCompositeCurve); + DECL_CONV_STUB(Ifc2DCompositeCurve); DECL_CONV_STUB(IfcRoot); DECL_CONV_STUB(IfcObjectDefinition); DECL_CONV_STUB(IfcObject); - DECL_CONV_STUB(IfcProduct); - DECL_CONV_STUB(IfcStructuralItem); - DECL_CONV_STUB(IfcStructuralConnection); - DECL_CONV_STUB(IfcStructuralSurfaceConnection); - DECL_CONV_STUB(IfcPresentationStyleAssignment); - DECL_CONV_STUB(IfcElement); - DECL_CONV_STUB(IfcBuildingElement); - DECL_CONV_STUB(IfcCurtainWall); - DECL_CONV_STUB(IfcProxy); - DECL_CONV_STUB(IfcStyledItem); - DECL_CONV_STUB(IfcAnnotationOccurrence); - DECL_CONV_STUB(IfcAnnotationSymbolOccurrence); - DECL_CONV_STUB(IfcTerminatorSymbol); - DECL_CONV_STUB(IfcDimensionCurveTerminator); + DECL_CONV_STUB(IfcControl); + DECL_CONV_STUB(IfcActionRequest); + DECL_CONV_STUB(IfcActor); DECL_CONV_STUB(IfcTypeObject); DECL_CONV_STUB(IfcTypeProduct); DECL_CONV_STUB(IfcElementType); DECL_CONV_STUB(IfcDistributionElementType); - DECL_CONV_STUB(IfcFeatureElement); - DECL_CONV_STUB(IfcFeatureElementSubtraction); - DECL_CONV_STUB(IfcOpeningElement); - DECL_CONV_STUB(IfcPresentationStyle); - DECL_CONV_STUB(IfcSurfaceStyle); - DECL_CONV_STUB(IfcFillAreaStyleTileSymbolWithStyle); - DECL_CONV_STUB(IfcRelationship); - DECL_CONV_STUB(IfcRelConnects); - DECL_CONV_STUB(IfcStructuralMember); - DECL_CONV_STUB(IfcStructuralSurfaceMember); - DECL_CONV_STUB(IfcCartesianTransformationOperator); - DECL_CONV_STUB(IfcCartesianTransformationOperator3D); - DECL_CONV_STUB(IfcDistributionFlowElementType); - DECL_CONV_STUB(IfcFlowTerminalType); - DECL_CONV_STUB(IfcSanitaryTerminalType); - DECL_CONV_STUB(IfcEnergyConversionDeviceType); - DECL_CONV_STUB(IfcElectricGeneratorType); - DECL_CONV_STUB(IfcResource); - DECL_CONV_STUB(IfcConstructionResource); - DECL_CONV_STUB(IfcControl); - DECL_CONV_STUB(IfcEquipmentStandard); - DECL_CONV_STUB(IfcElectricApplianceType); - DECL_CONV_STUB(IfcFurnitureStandard); - DECL_CONV_STUB(IfcDefinedSymbol); - DECL_CONV_STUB(IfcColourSpecification); - DECL_CONV_STUB(IfcCurve); - DECL_CONV_STUB(IfcLine); - DECL_CONV_STUB(IfcLoop); - DECL_CONV_STUB(IfcProperty); - DECL_CONV_STUB(IfcComplexProperty); - DECL_CONV_STUB(IfcCovering); - DECL_CONV_STUB(IfcBoundedCurve); - DECL_CONV_STUB(IfcBSplineCurve); - DECL_CONV_STUB(IfcNamedUnit); - DECL_CONV_STUB(IfcSubContractResource); - DECL_CONV_STUB(IfcObjectPlacement); - DECL_CONV_STUB(IfcGridPlacement); - DECL_CONV_STUB(IfcPropertyDefinition); - DECL_CONV_STUB(IfcPropertySetDefinition); - DECL_CONV_STUB(IfcPoint); - DECL_CONV_STUB(IfcCartesianPoint); - DECL_CONV_STUB(IfcFaceBound); - DECL_CONV_STUB(IfcEdgeCurve); - DECL_CONV_STUB(IfcOneDirectionRepeatFactor); - DECL_CONV_STUB(IfcTwoDirectionRepeatFactor); - DECL_CONV_STUB(IfcLightSource); - DECL_CONV_STUB(IfcLightSourceAmbient); - DECL_CONV_STUB(IfcPlacement); - DECL_CONV_STUB(IfcAxis1Placement); - DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence); - DECL_CONV_STUB(IfcFlowControllerType); - DECL_CONV_STUB(IfcFlowMeterType); - DECL_CONV_STUB(IfcAnnotationCurveOccurrence); - DECL_CONV_STUB(IfcProfileDef); - DECL_CONV_STUB(IfcCompositeProfileDef); - DECL_CONV_STUB(IfcSubedge); - DECL_CONV_STUB(IfcFlowStorageDeviceType); - DECL_CONV_STUB(IfcTankType); - DECL_CONV_STUB(IfcBuildingElementComponent); - DECL_CONV_STUB(IfcBuildingElementPart); - DECL_CONV_STUB(IfcRepresentation); - DECL_CONV_STUB(IfcShapeModel); - DECL_CONV_STUB(IfcShapeRepresentation); - DECL_CONV_STUB(IfcRailing); - DECL_CONV_STUB(IfcStyleModel); - DECL_CONV_STUB(IfcStyledRepresentation); - DECL_CONV_STUB(IfcColourRgb); - DECL_CONV_STUB(IfcElementComponentType); - DECL_CONV_STUB(IfcDiscreteAccessoryType); - DECL_CONV_STUB(IfcVibrationIsolatorType); - DECL_CONV_STUB(IfcProcess); - DECL_CONV_STUB(IfcProcedure); - DECL_CONV_STUB(IfcFeatureElementAddition); - DECL_CONV_STUB(IfcEdgeFeature); - DECL_CONV_STUB(IfcTrimmedCurve); - DECL_CONV_STUB(IfcTextLiteral); - DECL_CONV_STUB(IfcParameterizedProfileDef); - DECL_CONV_STUB(IfcCraneRailAShapeProfileDef); - DECL_CONV_STUB(IfcElementComponent); - DECL_CONV_STUB(IfcCsgPrimitive3D); - DECL_CONV_STUB(IfcBlock); - DECL_CONV_STUB(IfcBuildingElementType); - DECL_CONV_STUB(IfcRailingType); - DECL_CONV_STUB(IfcStructuralPointConnection); - DECL_CONV_STUB(IfcFlowMovingDeviceType); - DECL_CONV_STUB(IfcPumpType); - DECL_CONV_STUB(IfcStructuralCurveMember); - DECL_CONV_STUB(IfcStructuralCurveMemberVarying); - DECL_CONV_STUB(IfcReinforcingElement); - DECL_CONV_STUB(IfcReinforcingMesh); - DECL_CONV_STUB(IfcPlanarExtent); - DECL_CONV_STUB(IfcPlanarBox); - DECL_CONV_STUB(IfcCooledBeamType); - DECL_CONV_STUB(IfcProjectOrderRecord); - DECL_CONV_STUB(IfcPointOnSurface); - DECL_CONV_STUB(IfcPointOnCurve); - DECL_CONV_STUB(IfcRelContainedInSpatialStructure); - DECL_CONV_STUB(IfcSimpleProperty); - DECL_CONV_STUB(IfcPropertyListValue); - DECL_CONV_STUB(IfcSpatialStructureElement); - DECL_CONV_STUB(IfcBuildingStorey); - DECL_CONV_STUB(IfcUnitaryEquipmentType); - DECL_CONV_STUB(IfcOutletType); - DECL_CONV_STUB(IfcFastenerType); - DECL_CONV_STUB(IfcGroup); - DECL_CONV_STUB(IfcSystem); - DECL_CONV_STUB(IfcStructuralAnalysisModel); - DECL_CONV_STUB(IfcSlabType); - DECL_CONV_STUB(IfcDistributionElement); - DECL_CONV_STUB(IfcDistributionFlowElement); - DECL_CONV_STUB(IfcTShapeProfileDef); - DECL_CONV_STUB(IfcPolyline); - DECL_CONV_STUB(IfcDraughtingCallout); - DECL_CONV_STUB(IfcFace); - DECL_CONV_STUB(IfcStructuralSurfaceMemberVarying); - DECL_CONV_STUB(IfcMotorConnectionType); - DECL_CONV_STUB(IfcAirToAirHeatRecoveryType); - DECL_CONV_STUB(IfcPlateType); - DECL_CONV_STUB(IfcSolidModel); - DECL_CONV_STUB(IfcCsgSolid); - DECL_CONV_STUB(IfcMechanicalFastenerType); - DECL_CONV_STUB(IfcRelDecomposes); - DECL_CONV_STUB(IfcElectricalElement); - DECL_CONV_STUB(IfcColumnType); - DECL_CONV_STUB(IfcRectangularPyramid); - DECL_CONV_STUB(IfcActionRequest); - DECL_CONV_STUB(IfcStructuralActivity); - DECL_CONV_STUB(IfcStructuralReaction); - DECL_CONV_STUB(IfcStructuralPointReaction); - DECL_CONV_STUB(IfcStructuralAction); - DECL_CONV_STUB(IfcStructuralLinearAction); - DECL_CONV_STUB(IfcStructuralLinearActionVarying); - DECL_CONV_STUB(IfcCrewResource); - DECL_CONV_STUB(IfcChamferEdgeFeature); - DECL_CONV_STUB(IfcCompositeCurve); - DECL_CONV_STUB(Ifc2DCompositeCurve); - DECL_CONV_STUB(IfcGrid); - DECL_CONV_STUB(IfcTendon); - DECL_CONV_STUB(IfcRectangleProfileDef); - DECL_CONV_STUB(IfcRoundedRectangleProfileDef); - DECL_CONV_STUB(IfcBeamType); - DECL_CONV_STUB(IfcLampType); - DECL_CONV_STUB(IfcLightSourceGoniometric); - DECL_CONV_STUB(IfcProductRepresentation); - DECL_CONV_STUB(IfcMaterialDefinitionRepresentation); - DECL_CONV_STUB(IfcPermit); - DECL_CONV_STUB(IfcContextDependentUnit); - DECL_CONV_STUB(IfcFlowMovingDevice); - DECL_CONV_STUB(IfcColumn); - DECL_CONV_STUB(IfcDistributionControlElement); - DECL_CONV_STUB(IfcProtectiveDeviceType); - DECL_CONV_STUB(IfcFlowSegment); - DECL_CONV_STUB(IfcCompressorType); - DECL_CONV_STUB(IfcCShapeProfileDef); - DECL_CONV_STUB(IfcTrapeziumProfileDef); - DECL_CONV_STUB(IfcRelDefines); - DECL_CONV_STUB(IfcTask); - DECL_CONV_STUB(IfcMove); - DECL_CONV_STUB(IfcLightSourceDirectional); - DECL_CONV_STUB(IfcCondenserType); - DECL_CONV_STUB(IfcConic); - DECL_CONV_STUB(IfcEllipse); - DECL_CONV_STUB(IfcDoorStyle); DECL_CONV_STUB(IfcDistributionControlElementType); - DECL_CONV_STUB(IfcSensorType); - DECL_CONV_STUB(IfcAnnotationFillAreaOccurrence); - DECL_CONV_STUB(IfcWall); - DECL_CONV_STUB(IfcFurnishingElementType); - DECL_CONV_STUB(IfcFurnitureType); - DECL_CONV_STUB(IfcControllerType); - DECL_CONV_STUB(IfcFlowFitting); - DECL_CONV_STUB(IfcRepresentationContext); - DECL_CONV_STUB(IfcRepresentationMap); - DECL_CONV_STUB(IfcDirection); + DECL_CONV_STUB(IfcActuatorType); + DECL_CONV_STUB(IfcDistributionFlowElementType); + DECL_CONV_STUB(IfcFlowControllerType); + DECL_CONV_STUB(IfcAirTerminalBoxType); + DECL_CONV_STUB(IfcFlowTerminalType); + DECL_CONV_STUB(IfcAirTerminalType); + DECL_CONV_STUB(IfcEnergyConversionDeviceType); + DECL_CONV_STUB(IfcAirToAirHeatRecoveryType); + DECL_CONV_STUB(IfcAlarmType); + DECL_CONV_STUB(IfcDraughtingCallout); DECL_CONV_STUB(IfcDimensionCurveDirectedCallout); DECL_CONV_STUB(IfcAngularDimension); - DECL_CONV_STUB(IfcWorkControl); - DECL_CONV_STUB(IfcWorkPlan); - DECL_CONV_STUB(IfcSpatialStructureElementType); - DECL_CONV_STUB(IfcSpaceType); - DECL_CONV_STUB(IfcPort); - DECL_CONV_STUB(IfcDistributionPort); - DECL_CONV_STUB(IfcOrderAction); - DECL_CONV_STUB(IfcBeam); - DECL_CONV_STUB(IfcManifoldSolidBrep); - DECL_CONV_STUB(IfcFacetedBrep); - DECL_CONV_STUB(IfcSurfaceStyleWithTextures); - DECL_CONV_STUB(IfcArbitraryClosedProfileDef); - DECL_CONV_STUB(IfcHumidifierType); - DECL_CONV_STUB(IfcPolyLoop); - DECL_CONV_STUB(IfcFlowFittingType); - DECL_CONV_STUB(IfcFillAreaStyleTiles); - DECL_CONV_STUB(IfcVertex); + DECL_CONV_STUB(IfcProduct); + DECL_CONV_STUB(IfcAnnotation); + DECL_CONV_STUB(IfcStyledItem); + DECL_CONV_STUB(IfcAnnotationOccurrence); + DECL_CONV_STUB(IfcAnnotationCurveOccurrence); DECL_CONV_STUB(IfcAnnotationFillArea); - DECL_CONV_STUB(IfcPlate); - DECL_CONV_STUB(IfcRightCircularCone); - DECL_CONV_STUB(IfcSurface); - DECL_CONV_STUB(IfcBoundedSurface); - DECL_CONV_STUB(IfcStructuralLoadGroup); - DECL_CONV_STUB(IfcGeometricRepresentationContext); - DECL_CONV_STUB(IfcTubeBundleType); - DECL_CONV_STUB(IfcStructuralPlanarAction); - DECL_CONV_STUB(IfcHeatExchangerType); - DECL_CONV_STUB(IfcFaceOuterBound); - DECL_CONV_STUB(IfcSphere); - DECL_CONV_STUB(IfcLightSourcePositional); - DECL_CONV_STUB(IfcStructuralPointAction); - DECL_CONV_STUB(IfcFlowSegmentType); - DECL_CONV_STUB(IfcFireSuppressionTerminalType); - DECL_CONV_STUB(IfcPropertySingleValue); - DECL_CONV_STUB(IfcFaceBasedSurfaceModel); - DECL_CONV_STUB(IfcAxis2Placement3D); - DECL_CONV_STUB(IfcStructuralResultGroup); - DECL_CONV_STUB(IfcHalfSpaceSolid); - DECL_CONV_STUB(IfcGasTerminalType); - DECL_CONV_STUB(IfcMember); - DECL_CONV_STUB(IfcPropertySet); - DECL_CONV_STUB(IfcCondition); - DECL_CONV_STUB(IfcPropertyEnumeratedValue); - DECL_CONV_STUB(IfcDistributionChamberElementType); - DECL_CONV_STUB(IfcTextLiteralWithExtent); - DECL_CONV_STUB(IfcFlowController); - DECL_CONV_STUB(IfcElectricDistributionPoint); - DECL_CONV_STUB(IfcTransportElement); - DECL_CONV_STUB(IfcAsset); - DECL_CONV_STUB(IfcSweptAreaSolid); - DECL_CONV_STUB(IfcRevolvedAreaSolid); - DECL_CONV_STUB(IfcFlowInstrumentType); - DECL_CONV_STUB(IfcEnergyConversionDevice); - DECL_CONV_STUB(IfcSurfaceStyleShading); - DECL_CONV_STUB(IfcSurfaceStyleRendering); - DECL_CONV_STUB(IfcBoilerType); - DECL_CONV_STUB(IfcBuildingElementProxy); - DECL_CONV_STUB(IfcLocalPlacement); - DECL_CONV_STUB(IfcZone); - DECL_CONV_STUB(IfcStair); - DECL_CONV_STUB(IfcWallStandardCase); - DECL_CONV_STUB(IfcDiameterDimension); - DECL_CONV_STUB(IfcDuctSegmentType); - DECL_CONV_STUB(IfcJunctionBoxType); - DECL_CONV_STUB(IfcCartesianTransformationOperator3DnonUniform); - DECL_CONV_STUB(IfcInventory); - DECL_CONV_STUB(IfcConditionCriterion); - DECL_CONV_STUB(IfcConnectedFaceSet); - DECL_CONV_STUB(IfcOpenShell); - DECL_CONV_STUB(IfcDoor); - DECL_CONV_STUB(IfcBezierCurve); - DECL_CONV_STUB(IfcRationalBezierCurve); + DECL_CONV_STUB(IfcAnnotationFillAreaOccurrence); + DECL_CONV_STUB(IfcAnnotationSurface); + DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence); + DECL_CONV_STUB(IfcAnnotationSymbolOccurrence); + DECL_CONV_STUB(IfcAnnotationTextOccurrence); + DECL_CONV_STUB(IfcProfileDef); + DECL_CONV_STUB(IfcArbitraryClosedProfileDef); + DECL_CONV_STUB(IfcArbitraryOpenProfileDef); DECL_CONV_STUB(IfcArbitraryProfileDefWithVoids); - DECL_CONV_STUB(IfcBooleanResult); - DECL_CONV_STUB(IfcStackTerminalType); + DECL_CONV_STUB(IfcGroup); + DECL_CONV_STUB(IfcAsset); + DECL_CONV_STUB(IfcParameterizedProfileDef); DECL_CONV_STUB(IfcIShapeProfileDef); DECL_CONV_STUB(IfcAsymmetricIShapeProfileDef); - DECL_CONV_STUB(IfcEquipmentElement); + DECL_CONV_STUB(IfcPlacement); + DECL_CONV_STUB(IfcAxis1Placement); + DECL_CONV_STUB(IfcAxis2Placement2D); + DECL_CONV_STUB(IfcAxis2Placement3D); + DECL_CONV_STUB(IfcBSplineCurve); + DECL_CONV_STUB(IfcElement); + DECL_CONV_STUB(IfcBuildingElement); + DECL_CONV_STUB(IfcBeam); + DECL_CONV_STUB(IfcBuildingElementType); + DECL_CONV_STUB(IfcBeamType); + DECL_CONV_STUB(IfcBezierCurve); + DECL_CONV_STUB(IfcCsgPrimitive3D); + DECL_CONV_STUB(IfcBlock); + DECL_CONV_STUB(IfcBoilerType); + DECL_CONV_STUB(IfcBooleanResult); + DECL_CONV_STUB(IfcBooleanClippingResult); + DECL_CONV_STUB(IfcSurface); + DECL_CONV_STUB(IfcBoundedSurface); + DECL_CONV_STUB(IfcBoundingBox); + DECL_CONV_STUB(IfcHalfSpaceSolid); + DECL_CONV_STUB(IfcBoxedHalfSpace); + DECL_CONV_STUB(IfcSpatialStructureElement); + DECL_CONV_STUB(IfcBuilding); + DECL_CONV_STUB(IfcBuildingElementComponent); + DECL_CONV_STUB(IfcBuildingElementPart); + DECL_CONV_STUB(IfcBuildingElementProxy); + DECL_CONV_STUB(IfcBuildingElementProxyType); + DECL_CONV_STUB(IfcBuildingStorey); + DECL_CONV_STUB(IfcCShapeProfileDef); + DECL_CONV_STUB(IfcFlowFittingType); + DECL_CONV_STUB(IfcCableCarrierFittingType); + DECL_CONV_STUB(IfcFlowSegmentType); + DECL_CONV_STUB(IfcCableCarrierSegmentType); + DECL_CONV_STUB(IfcCableSegmentType); + DECL_CONV_STUB(IfcPoint); + DECL_CONV_STUB(IfcCartesianPoint); + DECL_CONV_STUB(IfcCartesianTransformationOperator); + DECL_CONV_STUB(IfcCartesianTransformationOperator2D); + DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform); + DECL_CONV_STUB(IfcCartesianTransformationOperator3D); + DECL_CONV_STUB(IfcCartesianTransformationOperator3DnonUniform); + DECL_CONV_STUB(IfcCenterLineProfileDef); + DECL_CONV_STUB(IfcFeatureElement); + DECL_CONV_STUB(IfcFeatureElementSubtraction); + DECL_CONV_STUB(IfcEdgeFeature); + DECL_CONV_STUB(IfcChamferEdgeFeature); + DECL_CONV_STUB(IfcChillerType); + DECL_CONV_STUB(IfcConic); + DECL_CONV_STUB(IfcCircle); + DECL_CONV_STUB(IfcCircleProfileDef); + DECL_CONV_STUB(IfcCircleHollowProfileDef); + DECL_CONV_STUB(IfcTopologicalRepresentationItem); + DECL_CONV_STUB(IfcConnectedFaceSet); DECL_CONV_STUB(IfcClosedShell); - DECL_CONV_STUB(IfcEllipseProfileDef); - DECL_CONV_STUB(IfcPropertyBoundedValue); + DECL_CONV_STUB(IfcCoilType); + DECL_CONV_STUB(IfcColourSpecification); + DECL_CONV_STUB(IfcColourRgb); + DECL_CONV_STUB(IfcColumn); + DECL_CONV_STUB(IfcColumnType); + DECL_CONV_STUB(IfcProperty); + DECL_CONV_STUB(IfcComplexProperty); + DECL_CONV_STUB(IfcCompositeCurveSegment); + DECL_CONV_STUB(IfcCompositeProfileDef); + DECL_CONV_STUB(IfcFlowMovingDeviceType); + DECL_CONV_STUB(IfcCompressorType); + DECL_CONV_STUB(IfcCondenserType); + DECL_CONV_STUB(IfcCondition); + DECL_CONV_STUB(IfcConditionCriterion); + DECL_CONV_STUB(IfcResource); + DECL_CONV_STUB(IfcConstructionResource); + DECL_CONV_STUB(IfcConstructionEquipmentResource); + DECL_CONV_STUB(IfcConstructionMaterialResource); + DECL_CONV_STUB(IfcConstructionProductResource); + DECL_CONV_STUB(IfcNamedUnit); + DECL_CONV_STUB(IfcContextDependentUnit); + DECL_CONV_STUB(IfcControllerType); + DECL_CONV_STUB(IfcConversionBasedUnit); + DECL_CONV_STUB(IfcCooledBeamType); + DECL_CONV_STUB(IfcCoolingTowerType); + DECL_CONV_STUB(IfcCostItem); + DECL_CONV_STUB(IfcCostSchedule); + DECL_CONV_STUB(IfcCovering); DECL_CONV_STUB(IfcCoveringType); - DECL_CONV_STUB(IfcActuatorType); - DECL_CONV_STUB(IfcOffsetCurve2D); - DECL_CONV_STUB(IfcAnnotation); + DECL_CONV_STUB(IfcCraneRailAShapeProfileDef); + DECL_CONV_STUB(IfcCraneRailFShapeProfileDef); + DECL_CONV_STUB(IfcCrewResource); + DECL_CONV_STUB(IfcSolidModel); + DECL_CONV_STUB(IfcCsgSolid); + DECL_CONV_STUB(IfcCurtainWall); + DECL_CONV_STUB(IfcCurtainWallType); + DECL_CONV_STUB(IfcCurveBoundedPlane); + DECL_CONV_STUB(IfcPresentationStyle); + DECL_CONV_STUB(IfcDamperType); + DECL_CONV_STUB(IfcDefinedSymbol); + DECL_CONV_STUB(IfcDerivedProfileDef); + DECL_CONV_STUB(IfcDiameterDimension); + DECL_CONV_STUB(IfcDimensionCurve); + DECL_CONV_STUB(IfcTerminatorSymbol); + DECL_CONV_STUB(IfcDimensionCurveTerminator); + DECL_CONV_STUB(IfcDirection); + DECL_CONV_STUB(IfcElementComponent); + DECL_CONV_STUB(IfcDiscreteAccessory); + DECL_CONV_STUB(IfcElementComponentType); + DECL_CONV_STUB(IfcDiscreteAccessoryType); + DECL_CONV_STUB(IfcDistributionElement); + DECL_CONV_STUB(IfcDistributionFlowElement); DECL_CONV_STUB(IfcDistributionChamberElement); - DECL_CONV_STUB(IfcOffsetCurve3D); + DECL_CONV_STUB(IfcDistributionChamberElementType); + DECL_CONV_STUB(IfcDistributionControlElement); + DECL_CONV_STUB(IfcPort); + DECL_CONV_STUB(IfcDistributionPort); + DECL_CONV_STUB(IfcDoor); + DECL_CONV_STUB(IfcPropertyDefinition); + DECL_CONV_STUB(IfcPropertySetDefinition); + DECL_CONV_STUB(IfcDoorStyle); + DECL_CONV_STUB(IfcDuctFittingType); + DECL_CONV_STUB(IfcDuctSegmentType); + DECL_CONV_STUB(IfcFlowTreatmentDeviceType); + DECL_CONV_STUB(IfcDuctSilencerType); + DECL_CONV_STUB(IfcEdge); + DECL_CONV_STUB(IfcEdgeCurve); + DECL_CONV_STUB(IfcLoop); + DECL_CONV_STUB(IfcEdgeLoop); + DECL_CONV_STUB(IfcElectricApplianceType); + DECL_CONV_STUB(IfcFlowController); + DECL_CONV_STUB(IfcElectricDistributionPoint); + DECL_CONV_STUB(IfcFlowStorageDeviceType); + DECL_CONV_STUB(IfcElectricFlowStorageDeviceType); + DECL_CONV_STUB(IfcElectricGeneratorType); + DECL_CONV_STUB(IfcElectricHeaterType); + DECL_CONV_STUB(IfcElectricMotorType); + DECL_CONV_STUB(IfcElectricTimeControlType); + DECL_CONV_STUB(IfcSystem); + DECL_CONV_STUB(IfcElectricalCircuit); + DECL_CONV_STUB(IfcElectricalElement); + DECL_CONV_STUB(IfcElementAssembly); + DECL_CONV_STUB(IfcElementQuantity); + DECL_CONV_STUB(IfcElementarySurface); + DECL_CONV_STUB(IfcEllipse); + DECL_CONV_STUB(IfcEllipseProfileDef); + DECL_CONV_STUB(IfcEnergyConversionDevice); + DECL_CONV_STUB(IfcEquipmentElement); + DECL_CONV_STUB(IfcEquipmentStandard); + DECL_CONV_STUB(IfcEvaporativeCoolerType); + DECL_CONV_STUB(IfcEvaporatorType); + DECL_CONV_STUB(IfcSweptAreaSolid); + DECL_CONV_STUB(IfcExtrudedAreaSolid); + DECL_CONV_STUB(IfcFace); + DECL_CONV_STUB(IfcFaceBasedSurfaceModel); + DECL_CONV_STUB(IfcFaceBound); + DECL_CONV_STUB(IfcFaceOuterBound); + DECL_CONV_STUB(IfcFaceSurface); + DECL_CONV_STUB(IfcManifoldSolidBrep); + DECL_CONV_STUB(IfcFacetedBrep); + DECL_CONV_STUB(IfcFacetedBrepWithVoids); + DECL_CONV_STUB(IfcFanType); + DECL_CONV_STUB(IfcFastener); + DECL_CONV_STUB(IfcFastenerType); + DECL_CONV_STUB(IfcFeatureElementAddition); + DECL_CONV_STUB(IfcFillAreaStyleHatching); + DECL_CONV_STUB(IfcFillAreaStyleTileSymbolWithStyle); + DECL_CONV_STUB(IfcFillAreaStyleTiles); + DECL_CONV_STUB(IfcFilterType); + DECL_CONV_STUB(IfcFireSuppressionTerminalType); + DECL_CONV_STUB(IfcFlowFitting); + DECL_CONV_STUB(IfcFlowInstrumentType); + DECL_CONV_STUB(IfcFlowMeterType); + DECL_CONV_STUB(IfcFlowMovingDevice); + DECL_CONV_STUB(IfcFlowSegment); + DECL_CONV_STUB(IfcFlowStorageDevice); + DECL_CONV_STUB(IfcFlowTerminal); + DECL_CONV_STUB(IfcFlowTreatmentDevice); DECL_CONV_STUB(IfcFooting); - DECL_CONV_STUB(IfcMappedItem); - DECL_CONV_STUB(IfcTransformerType); - DECL_CONV_STUB(IfcRightCircularCylinder); - DECL_CONV_STUB(IfcSpaceProgram); - DECL_CONV_STUB(IfcAnnotationSurface); - DECL_CONV_STUB(IfcZShapeProfileDef); - DECL_CONV_STUB(IfcRectangleHollowProfileDef); + DECL_CONV_STUB(IfcFurnishingElement); + DECL_CONV_STUB(IfcFurnishingElementType); + DECL_CONV_STUB(IfcFurnitureStandard); + DECL_CONV_STUB(IfcFurnitureType); + DECL_CONV_STUB(IfcGasTerminalType); DECL_CONV_STUB(IfcGeometricSet); DECL_CONV_STUB(IfcGeometricCurveSet); - DECL_CONV_STUB(IfcArbitraryOpenProfileDef); - DECL_CONV_STUB(IfcFacetedBrepWithVoids); - DECL_CONV_STUB(IfcVector); - DECL_CONV_STUB(IfcServiceLife); - DECL_CONV_STUB(IfcCurveBoundedPlane); - DECL_CONV_STUB(IfcCircle); - DECL_CONV_STUB(IfcVertexLoop); - DECL_CONV_STUB(IfcSurfaceCurveSweptAreaSolid); - DECL_CONV_STUB(IfcConstructionEquipmentResource); - DECL_CONV_STUB(IfcSectionedSpine); - DECL_CONV_STUB(IfcPropertyReferenceValue); - DECL_CONV_STUB(IfcSite); - DECL_CONV_STUB(IfcPerformanceHistory); - DECL_CONV_STUB(IfcPropertyTableValue); - DECL_CONV_STUB(IfcTransportElementType); - DECL_CONV_STUB(IfcPolygonalBoundedHalfSpace); - DECL_CONV_STUB(IfcAxis2Placement2D); - DECL_CONV_STUB(IfcFillAreaStyleHatching); - DECL_CONV_STUB(IfcFastener); - DECL_CONV_STUB(IfcScheduleTimeControl); - DECL_CONV_STUB(IfcElectricMotorType); - DECL_CONV_STUB(IfcTimeSeriesSchedule); - DECL_CONV_STUB(IfcPipeSegmentType); - DECL_CONV_STUB(IfcFlowTerminal); - DECL_CONV_STUB(IfcWallType); - DECL_CONV_STUB(IfcCoilType); - DECL_CONV_STUB(IfcFurnishingElement); - DECL_CONV_STUB(IfcWasteTerminalType); - DECL_CONV_STUB(IfcWindow); - DECL_CONV_STUB(IfcElectricFlowStorageDeviceType); - DECL_CONV_STUB(IfcRelAggregates); - DECL_CONV_STUB(IfcRamp); + DECL_CONV_STUB(IfcRepresentationContext); + DECL_CONV_STUB(IfcGeometricRepresentationContext); + DECL_CONV_STUB(IfcGeometricRepresentationSubContext); + DECL_CONV_STUB(IfcGrid); + DECL_CONV_STUB(IfcObjectPlacement); + DECL_CONV_STUB(IfcGridPlacement); + DECL_CONV_STUB(IfcHeatExchangerType); + DECL_CONV_STUB(IfcHumidifierType); + DECL_CONV_STUB(IfcInventory); + DECL_CONV_STUB(IfcJunctionBoxType); + DECL_CONV_STUB(IfcLShapeProfileDef); + DECL_CONV_STUB(IfcLaborResource); + DECL_CONV_STUB(IfcLampType); + DECL_CONV_STUB(IfcLightFixtureType); + DECL_CONV_STUB(IfcLightSource); + DECL_CONV_STUB(IfcLightSourceAmbient); + DECL_CONV_STUB(IfcLightSourceDirectional); + DECL_CONV_STUB(IfcLightSourceGoniometric); + DECL_CONV_STUB(IfcLightSourcePositional); + DECL_CONV_STUB(IfcLightSourceSpot); + DECL_CONV_STUB(IfcLine); DECL_CONV_STUB(IfcLinearDimension); - DECL_CONV_STUB(IfcElementarySurface); - DECL_CONV_STUB(IfcConstructionProductResource); - DECL_CONV_STUB(IfcCableSegmentType); - DECL_CONV_STUB(IfcPath); - DECL_CONV_STUB(IfcActor); + DECL_CONV_STUB(IfcLocalPlacement); + DECL_CONV_STUB(IfcMappedItem); + DECL_CONV_STUB(IfcProductRepresentation); + DECL_CONV_STUB(IfcMaterialDefinitionRepresentation); + DECL_CONV_STUB(IfcMeasureWithUnit); + DECL_CONV_STUB(IfcMechanicalFastener); + DECL_CONV_STUB(IfcMechanicalFastenerType); + DECL_CONV_STUB(IfcMember); + DECL_CONV_STUB(IfcMemberType); + DECL_CONV_STUB(IfcMotorConnectionType); + DECL_CONV_STUB(IfcProcess); + DECL_CONV_STUB(IfcTask); + DECL_CONV_STUB(IfcMove); DECL_CONV_STUB(IfcOccupant); - DECL_CONV_STUB(IfcSwitchingDeviceType); + DECL_CONV_STUB(IfcOffsetCurve2D); + DECL_CONV_STUB(IfcOffsetCurve3D); + DECL_CONV_STUB(IfcOneDirectionRepeatFactor); + DECL_CONV_STUB(IfcOpenShell); + DECL_CONV_STUB(IfcOpeningElement); + DECL_CONV_STUB(IfcOrderAction); + DECL_CONV_STUB(IfcOrientedEdge); + DECL_CONV_STUB(IfcOutletType); + DECL_CONV_STUB(IfcPath); + DECL_CONV_STUB(IfcPerformanceHistory); + DECL_CONV_STUB(IfcPermit); + DECL_CONV_STUB(IfcPile); + DECL_CONV_STUB(IfcPipeFittingType); + DECL_CONV_STUB(IfcPipeSegmentType); + DECL_CONV_STUB(IfcPlanarExtent); + DECL_CONV_STUB(IfcPlanarBox); + DECL_CONV_STUB(IfcPlane); + DECL_CONV_STUB(IfcPlate); + DECL_CONV_STUB(IfcPlateType); + DECL_CONV_STUB(IfcPointOnCurve); + DECL_CONV_STUB(IfcPointOnSurface); + DECL_CONV_STUB(IfcPolyLoop); + DECL_CONV_STUB(IfcPolygonalBoundedHalfSpace); + DECL_CONV_STUB(IfcPolyline); + DECL_CONV_STUB(IfcPresentationStyleAssignment); + DECL_CONV_STUB(IfcProcedure); + DECL_CONV_STUB(IfcProductDefinitionShape); + DECL_CONV_STUB(IfcProject); + DECL_CONV_STUB(IfcProjectOrder); + DECL_CONV_STUB(IfcProjectOrderRecord); + DECL_CONV_STUB(IfcProjectionCurve); + DECL_CONV_STUB(IfcProjectionElement); + DECL_CONV_STUB(IfcSimpleProperty); + DECL_CONV_STUB(IfcPropertyBoundedValue); + DECL_CONV_STUB(IfcPropertyEnumeratedValue); + DECL_CONV_STUB(IfcPropertyListValue); + DECL_CONV_STUB(IfcPropertyReferenceValue); + DECL_CONV_STUB(IfcPropertySet); + DECL_CONV_STUB(IfcPropertySingleValue); + DECL_CONV_STUB(IfcPropertyTableValue); + DECL_CONV_STUB(IfcProtectiveDeviceType); + DECL_CONV_STUB(IfcProxy); + DECL_CONV_STUB(IfcPumpType); + DECL_CONV_STUB(IfcRadiusDimension); + DECL_CONV_STUB(IfcRailing); + DECL_CONV_STUB(IfcRailingType); + DECL_CONV_STUB(IfcRamp); + DECL_CONV_STUB(IfcRampFlight); + DECL_CONV_STUB(IfcRampFlightType); + DECL_CONV_STUB(IfcRationalBezierCurve); + DECL_CONV_STUB(IfcRectangleProfileDef); + DECL_CONV_STUB(IfcRectangleHollowProfileDef); + DECL_CONV_STUB(IfcRectangularPyramid); + DECL_CONV_STUB(IfcRectangularTrimmedSurface); + DECL_CONV_STUB(IfcReinforcingElement); + DECL_CONV_STUB(IfcReinforcingBar); + DECL_CONV_STUB(IfcReinforcingMesh); + DECL_CONV_STUB(IfcRelationship); + DECL_CONV_STUB(IfcRelDecomposes); + DECL_CONV_STUB(IfcRelAggregates); + DECL_CONV_STUB(IfcRelConnects); + DECL_CONV_STUB(IfcRelContainedInSpatialStructure); + DECL_CONV_STUB(IfcRelDefines); + DECL_CONV_STUB(IfcRelDefinesByProperties); + DECL_CONV_STUB(IfcRelFillsElement); + DECL_CONV_STUB(IfcRelOverridesProperties); + DECL_CONV_STUB(IfcRelVoidsElement); + DECL_CONV_STUB(IfcRepresentation); + DECL_CONV_STUB(IfcRepresentationMap); + DECL_CONV_STUB(IfcRevolvedAreaSolid); + DECL_CONV_STUB(IfcRightCircularCone); + DECL_CONV_STUB(IfcRightCircularCylinder); + DECL_CONV_STUB(IfcRoof); + DECL_CONV_STUB(IfcRoundedEdgeFeature); + DECL_CONV_STUB(IfcRoundedRectangleProfileDef); + DECL_CONV_STUB(IfcSIUnit); + DECL_CONV_STUB(IfcSanitaryTerminalType); + DECL_CONV_STUB(IfcScheduleTimeControl); + DECL_CONV_STUB(IfcSectionedSpine); + DECL_CONV_STUB(IfcSensorType); + DECL_CONV_STUB(IfcServiceLife); + DECL_CONV_STUB(IfcShapeModel); + DECL_CONV_STUB(IfcShapeRepresentation); + DECL_CONV_STUB(IfcShellBasedSurfaceModel); + DECL_CONV_STUB(IfcSite); + DECL_CONV_STUB(IfcSlab); + DECL_CONV_STUB(IfcSlabType); + DECL_CONV_STUB(IfcSpace); + DECL_CONV_STUB(IfcSpaceHeaterType); + DECL_CONV_STUB(IfcSpaceProgram); + DECL_CONV_STUB(IfcSpatialStructureElementType); + DECL_CONV_STUB(IfcSpaceType); + DECL_CONV_STUB(IfcSphere); + DECL_CONV_STUB(IfcStackTerminalType); + DECL_CONV_STUB(IfcStair); + DECL_CONV_STUB(IfcStairFlight); + DECL_CONV_STUB(IfcStairFlightType); + DECL_CONV_STUB(IfcStructuralActivity); + DECL_CONV_STUB(IfcStructuralAction); + DECL_CONV_STUB(IfcStructuralAnalysisModel); + DECL_CONV_STUB(IfcStructuralItem); + DECL_CONV_STUB(IfcStructuralConnection); + DECL_CONV_STUB(IfcStructuralCurveConnection); + DECL_CONV_STUB(IfcStructuralMember); + DECL_CONV_STUB(IfcStructuralCurveMember); + DECL_CONV_STUB(IfcStructuralCurveMemberVarying); + DECL_CONV_STUB(IfcStructuralLinearAction); + DECL_CONV_STUB(IfcStructuralLinearActionVarying); + DECL_CONV_STUB(IfcStructuralLoadGroup); + DECL_CONV_STUB(IfcStructuralPlanarAction); + DECL_CONV_STUB(IfcStructuralPlanarActionVarying); + DECL_CONV_STUB(IfcStructuralPointAction); + DECL_CONV_STUB(IfcStructuralPointConnection); + DECL_CONV_STUB(IfcStructuralReaction); + DECL_CONV_STUB(IfcStructuralPointReaction); + DECL_CONV_STUB(IfcStructuralResultGroup); + DECL_CONV_STUB(IfcStructuralSurfaceConnection); + DECL_CONV_STUB(IfcStructuralSurfaceMember); + DECL_CONV_STUB(IfcStructuralSurfaceMemberVarying); + DECL_CONV_STUB(IfcStructuredDimensionCallout); + DECL_CONV_STUB(IfcStyleModel); + DECL_CONV_STUB(IfcStyledRepresentation); + DECL_CONV_STUB(IfcSubContractResource); + DECL_CONV_STUB(IfcSubedge); + DECL_CONV_STUB(IfcSurfaceCurveSweptAreaSolid); DECL_CONV_STUB(IfcSweptSurface); DECL_CONV_STUB(IfcSurfaceOfLinearExtrusion); - DECL_CONV_STUB(IfcShellBasedSurfaceModel); - DECL_CONV_STUB(IfcBuilding); - DECL_CONV_STUB(IfcSIUnit); - DECL_CONV_STUB(IfcDiscreteAccessory); - DECL_CONV_STUB(IfcSystemFurnitureElementType); - DECL_CONV_STUB(IfcElementAssembly); - DECL_CONV_STUB(IfcCoolingTowerType); - DECL_CONV_STUB(IfcLightSourceSpot); - DECL_CONV_STUB(IfcEvaporatorType); - DECL_CONV_STUB(IfcSpaceHeaterType); - DECL_CONV_STUB(IfcElementQuantity); - DECL_CONV_STUB(IfcRampFlight); - DECL_CONV_STUB(IfcConversionBasedUnit); - DECL_CONV_STUB(IfcExtrudedAreaSolid); - DECL_CONV_STUB(IfcProjectOrder); - DECL_CONV_STUB(IfcBooleanClippingResult); - DECL_CONV_STUB(IfcReinforcingBar); - DECL_CONV_STUB(IfcCenterLineProfileDef); - DECL_CONV_STUB(IfcUShapeProfileDef); - DECL_CONV_STUB(IfcBoundingBox); - DECL_CONV_STUB(IfcWindowStyle); - DECL_CONV_STUB(IfcMemberType); - DECL_CONV_STUB(IfcLightFixtureType); - DECL_CONV_STUB(IfcFlowStorageDevice); - DECL_CONV_STUB(IfcTopologyRepresentation); - DECL_CONV_STUB(IfcRelDefinesByProperties); - DECL_CONV_STUB(IfcRelOverridesProperties); - DECL_CONV_STUB(IfcStairFlightType); - DECL_CONV_STUB(IfcCircleProfileDef); - DECL_CONV_STUB(IfcSweptDiskSolid); - DECL_CONV_STUB(IfcStructuralPlanarActionVarying); - DECL_CONV_STUB(IfcValveType); - DECL_CONV_STUB(IfcUnitAssignment); - DECL_CONV_STUB(IfcVirtualElement); - DECL_CONV_STUB(IfcStructuralCurveConnection); - DECL_CONV_STUB(IfcAirTerminalType); - DECL_CONV_STUB(IfcFlowTreatmentDeviceType); - DECL_CONV_STUB(IfcRoof); - DECL_CONV_STUB(IfcElectricTimeControlType); - DECL_CONV_STUB(IfcPile); - DECL_CONV_STUB(IfcCostSchedule); - DECL_CONV_STUB(IfcRampFlightType); - DECL_CONV_STUB(IfcDerivedProfileDef); - DECL_CONV_STUB(IfcCostItem); - DECL_CONV_STUB(IfcEvaporativeCoolerType); - DECL_CONV_STUB(IfcChillerType); - DECL_CONV_STUB(IfcBoxedHalfSpace); - DECL_CONV_STUB(IfcCurtainWallType); - DECL_CONV_STUB(IfcGeometricRepresentationSubContext); - DECL_CONV_STUB(IfcDimensionCurve); - DECL_CONV_STUB(IfcPlane); - DECL_CONV_STUB(IfcProjectionCurve); - DECL_CONV_STUB(IfcDamperType); - DECL_CONV_STUB(IfcMechanicalFastener); - DECL_CONV_STUB(IfcDuctSilencerType); - DECL_CONV_STUB(IfcLaborResource); - DECL_CONV_STUB(IfcFanType); - DECL_CONV_STUB(IfcProjectionElement); - DECL_CONV_STUB(IfcCraneRailFShapeProfileDef); - DECL_CONV_STUB(IfcProject); - DECL_CONV_STUB(IfcRelVoidsElement); - DECL_CONV_STUB(IfcElectricalCircuit); - DECL_CONV_STUB(IfcLShapeProfileDef); - DECL_CONV_STUB(IfcFlowTreatmentDevice); - DECL_CONV_STUB(IfcVertexPoint); - DECL_CONV_STUB(IfcAnnotationTextOccurrence); - DECL_CONV_STUB(IfcFilterType); - DECL_CONV_STUB(IfcEdgeLoop); - DECL_CONV_STUB(IfcCircleHollowProfileDef); - DECL_CONV_STUB(IfcAirTerminalBoxType); - DECL_CONV_STUB(IfcStructuredDimensionCallout); - DECL_CONV_STUB(IfcCableCarrierSegmentType); - DECL_CONV_STUB(IfcDuctFittingType); - DECL_CONV_STUB(IfcRectangularTrimmedSurface); - DECL_CONV_STUB(IfcProductDefinitionShape); - DECL_CONV_STUB(IfcStairFlight); - DECL_CONV_STUB(IfcSlab); - DECL_CONV_STUB(IfcPipeFittingType); - DECL_CONV_STUB(IfcSpace); - DECL_CONV_STUB(IfcBuildingElementProxyType); - DECL_CONV_STUB(IfcAlarmType); - DECL_CONV_STUB(IfcCableCarrierFittingType); - DECL_CONV_STUB(IfcRoundedEdgeFeature); - DECL_CONV_STUB(IfcFaceSurface); - DECL_CONV_STUB(IfcCartesianTransformationOperator2D); - DECL_CONV_STUB(IfcTendonAnchor); - DECL_CONV_STUB(IfcWorkSchedule); DECL_CONV_STUB(IfcSurfaceOfRevolution); - DECL_CONV_STUB(IfcElectricHeaterType); - DECL_CONV_STUB(IfcMeasureWithUnit); - DECL_CONV_STUB(IfcOrientedEdge); - DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform); - DECL_CONV_STUB(IfcRelFillsElement); - DECL_CONV_STUB(IfcConstructionMaterialResource); - DECL_CONV_STUB(IfcRadiusDimension); + DECL_CONV_STUB(IfcSurfaceStyle); + DECL_CONV_STUB(IfcSurfaceStyleShading); + DECL_CONV_STUB(IfcSurfaceStyleRendering); + DECL_CONV_STUB(IfcSurfaceStyleWithTextures); + DECL_CONV_STUB(IfcSweptDiskSolid); + DECL_CONV_STUB(IfcSwitchingDeviceType); + DECL_CONV_STUB(IfcSystemFurnitureElementType); + DECL_CONV_STUB(IfcTShapeProfileDef); + DECL_CONV_STUB(IfcTankType); + DECL_CONV_STUB(IfcTendon); + DECL_CONV_STUB(IfcTendonAnchor); + DECL_CONV_STUB(IfcTextLiteral); + DECL_CONV_STUB(IfcTextLiteralWithExtent); + DECL_CONV_STUB(IfcTimeSeriesSchedule); + DECL_CONV_STUB(IfcTopologyRepresentation); + DECL_CONV_STUB(IfcTransformerType); + DECL_CONV_STUB(IfcTransportElement); + DECL_CONV_STUB(IfcTransportElementType); + DECL_CONV_STUB(IfcTrapeziumProfileDef); + DECL_CONV_STUB(IfcTrimmedCurve); + DECL_CONV_STUB(IfcTubeBundleType); + DECL_CONV_STUB(IfcTwoDirectionRepeatFactor); + DECL_CONV_STUB(IfcUShapeProfileDef); + DECL_CONV_STUB(IfcUnitAssignment); + DECL_CONV_STUB(IfcUnitaryEquipmentType); + DECL_CONV_STUB(IfcValveType); + DECL_CONV_STUB(IfcVector); + DECL_CONV_STUB(IfcVertex); + DECL_CONV_STUB(IfcVertexLoop); + DECL_CONV_STUB(IfcVertexPoint); + DECL_CONV_STUB(IfcVibrationIsolatorType); + DECL_CONV_STUB(IfcVirtualElement); + DECL_CONV_STUB(IfcWall); + DECL_CONV_STUB(IfcWallStandardCase); + DECL_CONV_STUB(IfcWallType); + DECL_CONV_STUB(IfcWasteTerminalType); + DECL_CONV_STUB(IfcWindow); + DECL_CONV_STUB(IfcWindowStyle); + DECL_CONV_STUB(IfcWorkControl); + DECL_CONV_STUB(IfcWorkPlan); + DECL_CONV_STUB(IfcWorkSchedule); + DECL_CONV_STUB(IfcZShapeProfileDef); + DECL_CONV_STUB(IfcZone); #undef DECL_CONV_STUB From 0cee21ce3c049c48658c914a103f6efcca215006 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 13 Apr 2015 21:52:09 +0200 Subject: [PATCH 161/166] COB: code cleanup. --- code/COBLoader.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/COBLoader.cpp b/code/COBLoader.cpp index ce9ceeb7e..0b90067c5 100644 --- a/code/COBLoader.cpp +++ b/code/COBLoader.cpp @@ -148,13 +148,17 @@ void COBImporter::InternReadFile( const std::string& pFile, } DefaultLogger::get()->info("File format tag: "+std::string(head+9,6)); - void (COBImporter::* load)(Scene&,StreamReaderLE*)= head[15]=='A'?&COBImporter::ReadAsciiFile:&COBImporter::ReadBinaryFile; if (head[16]!='L') { ThrowException("File is big-endian, which is not supported"); } // load data into intermediate structures - (this->*load)(scene,stream.get()); + if (head[15]=='A') { + ReadAsciiFile(scene, stream.get()); + } + else { + ReadBinaryFile(scene, stream.get()); + } if(scene.nodes.empty()) { ThrowException("No nodes loaded"); } From 5a8d5605a58b24c3ff609ee4f34ae5820227abb3 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Mon, 13 Apr 2015 22:10:26 +0200 Subject: [PATCH 162/166] Update README for regression test suite. --- test/regression/README | 98 +++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 50 deletions(-) diff --git a/test/regression/README b/test/regression/README index d0e42e442..907d1ecf7 100644 --- a/test/regression/README +++ b/test/regression/README @@ -3,83 +3,81 @@ Assimp Regression Test Suite 1) How does it work? --------------------------------------------------------------------------------- -run.py checks all model in the /test/models folder and compares the result -against a regression database provided by us (db.zip). If the test passes -successfully, Assimp definitely WORKS perfectly on your system. A few failures -are totally fine as well (see sections 7+). You need to worry if a huge -majority of all files in a particular format or post-processing configuration -fails - this might be a sign of a recent regression in assimp's codebase. +run.py checks all model in the /test/models* folders and compares the result +against a regression database provided with assimp (db.zip). A few failures +are totally fine (see sections 7+). You need to worry if a huge +majority of all files in a particular format (or post-processing configuration) +fails as this might be a sign of a recent regression in assimp's codebase or +gross incompatibility with your system or compiler. 2) What do I need? --------------------------------------------------------------------------------- - - you need Python installed - 3.x !! - - you need to build tools/assimp_cmd as described in the INSTALL file ( - make && make install on unixes,release-dll target with msvc). + - You need Python installed (2.7+, 3.x). On Windows, run the scripts using "py". + - You need to build the assimp command line tool (ASSIMP_BUILD_ASSIMP_TOOLS + CMake build flag). Both run.py and gen_db.py take the full path to the binary + as first command line parameter. 3) How to add more test files? --------------------------------------------------------------------------------- Use the following procedure: - - verify the correctness of your assimp build - run the regression suite. - DO NOT continue if one or more tests fail. - - add your additional test files to /test/models/, where - is the file type (typically the file extension) - - rebuild the regression database using gen_db.py - - run the regression suite again - all tests should pass, including - those for the new files. + - Verify the correctness of your assimp build - run the regression suite. + DO NOT continue if more tests fail than usual. + - Add your additional test files to /test/models/, where + is the file type (typically the file extension). + - If you test file does not meet the BSD license requirements, add it to + /test/models-nonbsd/ so people know to be careful with it. + - Rebuild the regression database: + "gen_db.py -ixyz" where .xyz is the file extension of the new file. + - Run the regression suite again. There should be no new failures and the new + file should not be among the failures. + - Include the db.zip file with your Pull Request. Travis CI enforces a passing + regression suite (with offenders whitelisted as a last resort). - - contributors: commit the db.zip plus your additional test files to - the SVN repository. - -4) I made a change/fix/.. to a loader, how to update the database? +4) I made a change/fix/patch to a loader, how to update the database? --------------------------------------------------------------------------------- - - rebuild the regression database using gen_db.py - - run the suite - all tests should pass now. If they do not, don't continue - - - contributors: commit the db.zip to the SVN repository + - Rebuild the regression database using "gen_db.py -ixyz" + where .xyz is the file extension for which the loader was patched. + - Run the regression suite again. There should be no new failures and the new + file should not be among the failures. + - Include the db.zip file with your Pull Request. Travis CI enforces a passing + regression suite (with offenders whitelisted as a last resort). -5) How to add my whole model repository to the suite? +5) How to add my whole model repository to the database? --------------------------------------------------------------------------------- Edit the reg_settings.py file and add the path to your repository to -<>. Then, rebuild the suite. +<>. Then, rebuild the database. -6) So what is actually verified? +6) So what is actually tested? --------------------------------------------------------------------------------- -The regression database includes mini dumps of the aiScene data structure - +The regression database includes mini dumps of the aiScene data structure, i.e. the scene hierarchy plus the sizes of all data arrays MUST match. Floating-point -data buffers, such as vertex positions, are handled less strictly: min,max and -average values are stored with lower precision. This takes hardware- or +data buffers, such as vertex positions are handled less strictly: min, max and +average values are stored with low precision. This takes hardware- or compiler-specific differences in floating-point computations into account. Generally, almost all significant regressions will be detected while the number of false positives is relatively low. 7) The test suite fails, what do do? --------------------------------------------------------------------------------- -Get back to ../results and check out regression_suite_failures.txt -It contains a list of all files which failed the test ... they're copied to -../results/tmp. Both an EXPECTED and an ACTUAL file is produced per test. -The output of `assimp cmpdump` is written to regressions_suite_output.txt. -To quickly find all all reports pertaining to tests which failed, I'd -recommend grepping for 'but' because its a constituent of all error messages -produced by assimp_cmd :) Error reports contain detailed information -regarding the point of failure inside the data structure, the values of -the two corresponding fields that were found to be different from EXPECTED -and ACTUAL, respectively, ... this should offer you enough information to start -debugging. +Get back to /test/results and look at regression_suite_failures.txt. +It contains a list of all files which failed the test. Failing dumps are copied to +root>/test/results/tmp. Both an EXPECTED and an ACTUAL file is produced per test. +The output of "assimp cmpdump" is written to regressions_suite_output.txt. Grep +for the file name in question and locate the log for the failed comparison. It +contains a full trace of which scene elements have been compared before, which +makes it reasonably easy to locate the offending field. 8) fp:fast vs fp:precise fails the test suite (same for gcc equivalents) --------------------------------------------------------------------------------- As mentioned above, floating-point inaccuracies between differently optimized builds are not considered regressions and all float comparisons done by the test -suite involve an epsilon. Changing floating-point optimizations can, however, - lead to *real* changes in the output data structure, such as different number -of vertices or faces, ... this violates one of our primary targets, that is -produce reliable and portable output. We're working hard on removing these -issues, but at the moment you have to live with few of them. - -Currently, the regression database is build on Windows using MSVC8 with -fp:precise. This leads to a small number of failures with fp:fast and -virtally every build with gcc. Be patient, it will be fixed. +suite involve an epsilon to accomodate. However compiler settings that allow +compilers to perform non-IEEE754 compliant optimizations can cause arbitrary +failures in the test suite. Even if the compiler is configured to be IEE754 +comformant, there is lots of code in assimp that leaves the compiler a choice +and different compilers make different choices (for example the precision of +float intermediaries is implementation-specified). From fb45e4d51249611cb880db14c6f778027743d4a8 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Tue, 14 Apr 2015 10:22:33 +0200 Subject: [PATCH 163/166] Make command line parameters in gen_db script more predictable. --- test/regression/gen_db.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/test/regression/gen_db.py b/test/regression/gen_db.py index 4005fe161..ab4e31c72 100644 --- a/test/regression/gen_db.py +++ b/test/regression/gen_db.py @@ -69,6 +69,9 @@ configs for an IDE, make sure to build the assimp_cmd project. -i,--include: List of file extensions to update dumps for. If omitted, all file extensions are updated except those in `exclude`. + Example: -ixyz,abc + -i.xyz,.abc + --include=xyz,abc -e,--exclude: Merged with settings.exclude_extensions to produce a list of all file extensions to ignore. If dumps exist, @@ -78,8 +81,6 @@ configs for an IDE, make sure to build the assimp_cmd project. Dont' change anything. -n,--nozip: Don't pack to ZIP archive. Keep all dumps in individual files. - -(lists of file extensions are comma delimited, i.e. `3ds,lwo,x`) """ # ------------------------------------------------------------------------------- @@ -172,30 +173,32 @@ def gen_db(ext_list,outfile): # ------------------------------------------------------------------------------- if __name__ == "__main__": - assimp_bin_path = sys.argv[1] if len(sys.argv) > 1 else 'assimp' - def clean(f): f = f.strip("* \'") return "."+f if f[:1] != '.' else f - if len(sys.argv)>1 and (sys.argv[1] == "--help" or sys.argv[1] == "-h"): + if len(sys.argv) <= 1 or sys.argv[1] == "--help" or sys.argv[1] == "-h": print(usage) sys.exit(0) + assimp_bin_path = sys.argv[1] ext_list, preview, nozip = None, False, False - for m in sys.argv[1:]: + for m in sys.argv[2:]: if m[:10]=="--exclude=": settings.exclude_extensions += map(clean, m[10:].split(",")) - elif m[:3]=="-e=": - settings.exclude_extensions += map(clean, m[3:].split(",")) + elif m[:2]=="-e": + settings.exclude_extensions += map(clean, m[2:].split(",")) elif m[:10]=="--include=": ext_list = m[10:].split(",") - elif m[:3]=="-i=": - ext_list = m[3:].split(",") + elif m[:2]=="-i": + ext_list = m[2:].split(",") elif m=="-p" or m == "--preview": preview = True elif m=="-n" or m == "--nozip": nozip = True + else: + print("Unrecognized parameter: " + m) + sys.exit(-1) outfile = open(os.path.join("..", "results", "gen_regression_db_output.txt"), "w") if ext_list is None: @@ -206,9 +209,8 @@ if __name__ == "__main__": # todo: Fix for multi dot extensions like .skeleton.xml ext_list = list(filter(lambda f: not f in settings.exclude_extensions, map(clean, ext_list))) - - if preview: - print(','.join(ext_list)) + print('File extensions processed: ' + ', '.join(ext_list)) + if preview: sys.exit(1) extract_zip() From 072e39470bce5499789f9f63d0dfd92ca0469554 Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Tue, 14 Apr 2015 10:31:15 +0200 Subject: [PATCH 164/166] Disable WINDOWS builds. - Currently, the mingw linker crashes linking unit.exe - Significant increase in build time for testing an exotic platform - Mingw crosscompile on linux. Assimp does not have many system dependencies so I feel we can omit this. - Confusion since 2 build combinations appear in Travis but are disabled. --- .travis.yml | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index 20b7a058a..f988cb12d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ before_install: - sudo apt-get update -qq - sudo apt-get install cmake python3 - - if [ $WINDOWS ]; then sudo apt-get install -qq gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 wine ; fi - if [ $LINUX ]; then sudo apt-get install -qq freeglut3-dev libxmu-dev libxi-dev ; fi - echo -e "#ifndef A_R_H_INC\n#define A_R_H_INC\n#define GitVersion ${TRAVIS_JOB_ID}\n#define GitBranch \"${TRAVIS_BRANCH}\"\n#endif // A_R_H_INC" > revision.h @@ -17,10 +16,6 @@ env: - LINUX=1 TRAVIS_NO_EXPORT=NO - LINUX=1 SHARED_BUILD=ON - LINUX=1 SHARED_BUILD=OFF - - WINDOWS=1 TRAVIS_NO_EXPORT=YES - - WINDOWS=1 TRAVIS_NO_EXPORT=NO - - WINDOWS=1 SHARED_BUILD=ON - - WINDOWS=1 SHARED_BUILD=OFF - ANDROID=1 language: cpp @@ -34,17 +29,7 @@ install: script: - if [ $ANDROID ]; then - ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; - elif [ $WINDOWS -a $CC = "gcc" ]; then - sudo sh -c "wget http://source.winehq.org/git/wine.git/commitdiff_plain/86781a6a524fa336f893ffd0a87373ffd306913c?hp=076edfe9d4b6cd39b6cf41b9f1d3e18688cc8673 -O - | patch -p 1 -d /usr/x86_64-w64-mingw32" ; - sudo sh -c "wget https://www.winehq.org/pipermail/wine-patches/2012-February/111438.html -O - | patch -p 1 -d /usr/x86_64-w64-mingw32" ; - cmake -G "Unix Makefiles" -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD -DCMAKE_TOOLCHAIN_FILE=cmake-modules/MinGW_x86_64.cmake ; - cmake --build . ; - make install ; - elif [ $WINDOWS ]; then - echo "Skip compile with non-gcc setting." ; - elif [ $RESERVED ]; then - echo "Reserved condition" ; + ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni ; else cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -DBUILD_SHARED_LIBS=$SHARED_BUILD ; make ; @@ -56,6 +41,6 @@ script: chmod 755 run.py ; ./run.py ; echo "==========================================================" ; - echo "REGRESSION TEST FAILS (results/run_regression_suite_failures.csv)" ; + echo "REGRESSION TEST FAILURES (results/run_regression_suite_failures.csv)" ; cat ../results/run_regression_suite_failures.csv; fi From 1899de6ea9f53cdcc30b93253f8ecebe7a749409 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 14 Apr 2015 12:03:51 +0200 Subject: [PATCH 165/166] remove dead code. Signed-off-by: Kim Kulling --- code/OpenGEXImporter.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/code/OpenGEXImporter.cpp b/code/OpenGEXImporter.cpp index 8454ae1f2..9dd2197a7 100644 --- a/code/OpenGEXImporter.cpp +++ b/code/OpenGEXImporter.cpp @@ -769,7 +769,6 @@ void OpenGEXImporter::resolveReferences() { if( m_mesh2refMap.end() != it ) { unsigned int meshIdx = m_mesh2refMap[ name ]; node->mMeshes[ i ] = meshIdx; - //node->mNumMeshes++; } } } else if( RefInfo::MaterialRef == currentRefInfo->m_type ) { From 14e65f53252d1c4dc12a17980466c53f8a1f3c60 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 14 Apr 2015 12:04:39 +0200 Subject: [PATCH 166/166] openddl-parser: latest greatest: fix invalid handling of float values stored a hexadecimal literals. Signed-off-by: Kim Kulling --- contrib/openddlparser/code/OpenDDLParser.cpp | 14 ++++--- contrib/openddlparser/code/Value.cpp | 41 +++++++++++++++++++ .../include/openddlparser/OpenDDLCommon.h | 40 ++++++++++++++++++ .../openddlparser/OpenDDLParserUtils.h | 7 ++-- .../include/openddlparser/Value.h | 14 +++++-- 5 files changed, 105 insertions(+), 11 deletions(-) diff --git a/contrib/openddlparser/code/OpenDDLParser.cpp b/contrib/openddlparser/code/OpenDDLParser.cpp index 104471965..c1b36620c 100644 --- a/contrib/openddlparser/code/OpenDDLParser.cpp +++ b/contrib/openddlparser/code/OpenDDLParser.cpp @@ -46,6 +46,7 @@ namespace Grammar { static const char *BoolTrue = "true"; static const char *BoolFalse = "false"; static const char *RefToken = "ref"; + static const char *CommaSeparator = ","; static const char* PrimitiveTypeToken[ Value::ddl_types_max ] = { "bool", @@ -752,13 +753,16 @@ char *OpenDDLParser::parseHexaLiteral( char *in, char *end, Value **data ) { int value( 0 ); while( pos > 0 ) { + int v = hex2Decimal( *start ); pos--; - value += hex2Decimal( *start ) * static_cast( pow( 16.0, pos ) ); + value = ( value << 4 ) | v; start++; } - *data = ValueAllocator::allocPrimData( Value::ddl_int32 ); - (*data)->setInt32( value ); + *data = ValueAllocator::allocPrimData( Value::ddl_unsigned_int64 ); + if( ddl_nullptr != *data ) { + ( *data )->setUnsignedInt64( value ); + } return in; } @@ -856,7 +860,7 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value **data, size_t &n return in; } -DataArrayList *createDataArrayList( Value *currentValue, size_t numValues ) { +static DataArrayList *createDataArrayList( Value *currentValue, size_t numValues ) { DataArrayList *dataList = new DataArrayList; dataList->m_dataList = currentValue; dataList->m_numItems = numValues; @@ -892,7 +896,7 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end, DataArrayList **da } } } - } while( ',' == *in && in != end ); + } while( Grammar::CommaSeparator[ 0 ] == *in && in != end ); in = lookForNextToken( in, end ); in++; } diff --git a/contrib/openddlparser/code/Value.cpp b/contrib/openddlparser/code/Value.cpp index 5e88d6572..c815d52a2 100644 --- a/contrib/openddlparser/code/Value.cpp +++ b/contrib/openddlparser/code/Value.cpp @@ -88,6 +88,47 @@ int64 Value::getInt64() { return ( int64 ) ( *m_data ); } +void Value::setUnsignedInt8( uint8 value ) { + assert( ddl_unsigned_int8 == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +uint8 Value::getUnsignedInt8() const { + assert( ddl_unsigned_int8 == m_type ); + return ( uint8 ) ( *m_data ); +} + +void Value::setUnsignedInt16( uint16 value ) { + assert( ddl_unsigned_int16 == m_type ); + ::memcpy( m_data, &value, m_size ); + +} +uint16 Value::getUnsignedInt16() const { + assert( ddl_unsigned_int16 == m_type ); + return ( uint8 ) ( *m_data ); + +} + +void Value::setUnsignedInt32( uint32 value ) { + assert( ddl_unsigned_int32 == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +uint32 Value::getUnsignedInt32() const { + assert( ddl_unsigned_int32 == m_type ); + return ( uint8 ) ( *m_data ); +} + +void Value::setUnsignedInt64( uint64 value ) { + assert( ddl_unsigned_int64 == m_type ); + ::memcpy( m_data, &value, m_size ); +} + +uint64 Value::getUnsignedInt64() const { + assert( ddl_unsigned_int64 == m_type ); + return ( uint64 ) ( *m_data ); +} + void Value::setFloat( float value ) { assert( ddl_float == m_type ); ::memcpy( m_data, &value, m_size ); diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h index 40e54ea4b..a42fbcf59 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLCommon.h @@ -67,12 +67,52 @@ typedef char int8; typedef short int16; typedef int int32; typedef long int64; +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef unsigned long uint64; enum NameType { GlobalName, LocalName }; +struct Token { +public: + Token( const char *token ) + : m_token( token ) + , m_size( 0 ){ + if( ddl_nullptr != token ) { + m_size = strlen( m_token ); + } + } + + ~Token() { + // empty + } + + size_t length() const { + return m_size; + } + + bool operator == ( const Token &rhs ) const { + if( m_size != rhs.m_size ) { + return false; + } + + const int res( strncmp( m_token, rhs.m_token, m_size ) ); + return ( res == 0 ); + } + +private: + Token(); + Token( const Token & ); + Token &operator = ( const Token & ); + +private: + const char *m_token; + size_t m_size; +}; struct Name { NameType m_type; Identifier *m_id; diff --git a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h index a8d21b710..a4c0f2180 100644 --- a/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h +++ b/contrib/openddlparser/include/openddlparser/OpenDDLParserUtils.h @@ -227,17 +227,18 @@ static T *getNextSeparator( T *in, T *end ) { return in; } -static const int ErrorHex2Decimal = 9999; +static const int ErrorHex2Decimal = 9999999; inline int hex2Decimal( char in ) { if( isNumeric( in ) ) { - return (int) in-48; + return ( in - 48 ); } + char hexCodeLower( 'a' ), hexCodeUpper( 'A' ); for( int i = 0; i<16; i++ ) { if( in == hexCodeLower + i || in == hexCodeUpper + i ) { - return i+10; + return ( i+10 ); } } diff --git a/contrib/openddlparser/include/openddlparser/Value.h b/contrib/openddlparser/include/openddlparser/Value.h index 48eb6e771..a11b823a3 100644 --- a/contrib/openddlparser/include/openddlparser/Value.h +++ b/contrib/openddlparser/include/openddlparser/Value.h @@ -66,11 +66,19 @@ public: void setInt8( int8 value ); int8 getInt8(); void setInt16( int16 value ); - int16 getInt16(); + int16 getInt16(); void setInt32( int32 value ); - int32 getInt32(); + int32 getInt32(); void setInt64( int64 value ); - int64 getInt64(); + int64 getInt64(); + void setUnsignedInt8( uint8 value ); + uint8 getUnsignedInt8() const; + void setUnsignedInt16( uint16 value ); + uint16 getUnsignedInt16() const; + void setUnsignedInt32( uint32 value ); + uint32 getUnsignedInt32() const; + void setUnsignedInt64( uint64 value ); + uint64 getUnsignedInt64() const; void setFloat( float value ); float getFloat() const; void setDouble( double value );

    f&$*d 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

  3. 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�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 z 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

mSO2!&eoXblG}=Luq`kfk!zL*P37HdhbB6 z2y41{Ns1PQNbu9|5F*X6uWam2(N`Jb{%Nx$wYhER4;o6kwPNR5u|X%sjqO2F59;*k zNl7&Be8`k%8kTK_VvLO3DRK0Q%MA;fO^M_8ANB%Hb>CLqC2=l4o(Ut_ZGnJO68YaF zP6B>doS}DjOInm#c5tTBdf({iSVr+VYJljPy%Og|$vZpS!h{=Dy})~_0C^1y!sTT9 zeu+b6bel1jtv4|v@6v|(&uQlg2ZkRIKr|R~8+q3n!oC0f!oT$TennAUX)a2f)onEJ z3#7=6GjEMbx*fpAiey&$R|0JgJesnJlDIvJ{oY5f?`m_mf>$LDJ?;%W9Gz^ur{<$& zsM-Q@fzgudw}~P(X5BRjLF;Hl`RN6OHc#SFd+SWWP$+gC!pxjECC+R1po*LxN9!E4 zM=srxRA?Cgjkt@yZm0e=8zxjv**8gV3!E8UKtf)0hyfjLu53Z?Wr-EWRlX~6=zZ(* zXJ+RGZRvmBmp2ExB47j3XSpv)T_$6Q^buw90u8Q`LVKcoc#j7Xhes*9kC_+5<3_FX z?I?*)LS=>!hShr%#5w&I)#KBn_%laR0M&T06;CA4gCs&fvoFLEs0D(beUrI7|~9A{Xu3b=;KV*dP5;^4h^@}z=cRDR|{y608*0@z&v{_t4>oqm+p zX4{6C7oY3&w2I`!yzLE?06(BL*y*-8y6Dw;;(98?8LQHL{Q zJDkgedUOF)Ug3IsXIhDK!cFa{%?=~+Qr4xKmtJ3S(GLN>M+-k zoqUV1i|`zE?t4LMH^MUD5nZ%SMN#SPOv*hdrhvpbjO07g zuM+LSG{vf=UJ9m7R$}FD7S?b!EE97G(MfXPZk71_fo|w53Z|_qCQ02$;^v*ENJc;J zsucelKItfS9hcEBB?OKNsu`Ia(6Y>2kT|WZrwtQnwLzmqNfI|>FOkl8*009?VC&Yh zsKJKCc9@X8$?NRV_g?-bca#g0QLB3wwn`j)_^4~F=M$}9#<)H0sA4bWN^z-NZ<9DY zL3#YO6ree*(Ud^|s(F%5hXf+E-|J@{DdJj@$V+bn<97?CbImC!U3f6zkduX}4bv|0*#r7-P!1qs7@2CmC`W|I@TndfPY-E-ZbyN|Mx#CsJNC zh$izU?*5)R!As5h%90dieqFpY7;WBxH;$AZfSGJp%#%LR0*6N5Ru}h|&=3PV)xIi& zfiasXIHVw5F00dtf`0mm)4^Q0)r?;ji1!8@6?ZgJWa!ycty44QuZt)eSPkS~Q(F#! zUI(bmq#uIRs&nkTqJHpHb?oPkkvO*%UM&7-Lz2JdvFAole7>3hu)3}Udi`cZ?CJ+3 z$sd{XpW=5h;CkiItkF>7d_IGfX9)J7a!yY^Y?_@0UpPcjWlb6jAiQ7Rkczj&@Ab9H zTf2**j^Ov0rjiuiH4E=%OQadgN1f~|NWt$yEhMQK_BqdEpwq#ezFHd;Aq#7*oDPRu zNt}(=iK!t{blq1Ky+cW#YW#)Kui?;&#vIA`Msr(s=TN~$!J~3;TS<$43n&V&XEE*d z+aqSppMtG)_@`3jqVQ^ov%1moF~q7xpz!=;9qs7=?4%eR8`nx8 zlEuy3h#)8JtcD*iECBATvS%NzmpC+u_4%0ACC+Sq;J>&D9L-6xXJEGF#!V9FcX|x` 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 ML}6F1;)W6Se~iZn!~g&Q delta 873082 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 &4dyAUYT5Fe2%E(8!CnWK;&s>YVl`k>M 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%0D+{b`?k#(hPIBw$Xn6f?}mKNk#qa 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