diff --git a/Core/src/DataManagement/General/Data.cpp b/Core/src/DataManagement/General/Data.cpp index 303974cd7..661625c77 100644 --- a/Core/src/DataManagement/General/Data.cpp +++ b/Core/src/DataManagement/General/Data.cpp @@ -49,6 +49,12 @@ #include "EarlyBinding\IFC4X3_RC4\src\IFC4X3_RC4.h" #endif +#ifdef OIP_MODULE_EARLYBINDING_IFC4X3 +#include "EarlyBinding\IFC4X3\src\reader\IFC4X3Reader.h" +#include "EarlyBinding\IFC4X3\src\EMTIFC4X3EntityTypes.h" +#include "EarlyBinding\IFC4X3\src\IFC4X3.h" +#endif + #include "IfcGeometryConverter\GeometryInputData.h" #include "IfcGeometryConverter\IfcPeekStepReader.h" #include "IfcGeometryConverter\IfcImporterImpl.h" @@ -196,6 +202,15 @@ void OpenInfraPlatform::Core::DataManagement::Data::importJob(const std::string& #endif //OIP_MODULE_EARLYBINDING_IFC4X3_RC4 } + if (ifcSchema == IfcPeekStepReader::IfcSchema::IFC4X3) { +#ifdef OIP_MODULE_EARLYBINDING_IFC4X3 + ParseExpressAndGeometryModel(filename); + return; +#else // OIP_MODULE_EARLYBINDING_IFC4X3 + IFCVersionNotCompiled("IFC4X3"); +#endif //OIP_MODULE_EARLYBINDING_IFC4X3 + } + IFCVersionNotCompiled(strSchema); return; } diff --git a/Core/src/IfcGeometryConverter/CurveConverter.h b/Core/src/IfcGeometryConverter/CurveConverter.h index dc6fb3eeb..acbac14f0 100644 --- a/Core/src/IfcGeometryConverter/CurveConverter.h +++ b/Core/src/IfcGeometryConverter/CurveConverter.h @@ -1477,7 +1477,7 @@ namespace OpenInfraPlatform */ } -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Converts \c IfcSegment and its subtypes to a series of points. * \param[in] segment The \c IfcSegment to be converted. * \param[out] targetVec The tessellated line. @@ -1507,7 +1507,7 @@ namespace OpenInfraPlatform } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Converts \c IfcCurveSegment to a series of points and appends them to the curve. * https://standards.buildingsmart.org/IFC/DEV/IFC4_3/RC4-voting/HTML/link/ifccurvesegment.htm * \param[in] curveSegment The \c IfcCurveSegment to be converted. @@ -1603,6 +1603,18 @@ namespace OpenInfraPlatform point = getPointOnCurve(curveSegment->ParentCurve.as(), runningLength); direction = getDirectionOfCurve(curveSegment->ParentCurve.as(), runningLength); } +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3) + else if (curveSegment->ParentCurve.isOfType()) + { + point = getPointOnCurve(curveSegment->ParentCurve.as(), runningLength, length); + direction = getDirectionOfCurve(curveSegment->ParentCurve.as(), runningLength, length); + } + else if (curveSegment->ParentCurve.isOfType()) + { + point = getPointOnCurve(curveSegment->ParentCurve.as(), runningLength, length); + direction = getDirectionOfCurve(curveSegment->ParentCurve.as(), runningLength, length); + } +#else else if (curveSegment->ParentCurve.isOfType()) { point = getPointOnCurve(curveSegment->ParentCurve.as(), runningLength, length); @@ -1613,6 +1625,8 @@ namespace OpenInfraPlatform point = getPointOnCurve(curveSegment->ParentCurve.as(), runningLength, length); direction = getDirectionOfCurve(curveSegment->ParentCurve.as(), runningLength, length); } +#endif + else if (curveSegment->ParentCurve.isOfType()) { point = getPointOnCurve(curveSegment->ParentCurve.as(), runningLength); @@ -2453,7 +2467,7 @@ namespace OpenInfraPlatform } } -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) template carve::geom::vector<3> getPointOnCurve( const EXPRESSReference& curve, @@ -2644,7 +2658,7 @@ namespace OpenInfraPlatform } -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates a trimming point on the clothoid. * \param[in] clothoid A pointer to data from \c IfcClothoid. @@ -2683,7 +2697,7 @@ namespace OpenInfraPlatform return carve::geom::VECTOR(x, y, 0.); } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates a trimming point on the second order polymonial spiral * \param[in] secondOrderPolynomial A pointer to data from \c IfcSecondOrderPolynomialSpiral. @@ -2736,7 +2750,7 @@ namespace OpenInfraPlatform } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates a trimming point on the seventh order polymonial spiral * \param[in] seventhOrderPolynomial A pointer to data from \c IfcSeventhOrderPolynomialSpiral. @@ -2803,7 +2817,7 @@ namespace OpenInfraPlatform return carve::geom::VECTOR(x, y, 0.); } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates a trimming point on the third order polymonial spiral * \param[in] thirdOrderPolynomial A pointer to data from \c IfcThirdOrderPolynomialSpiral. @@ -2862,7 +2876,7 @@ namespace OpenInfraPlatform return carve::geom::VECTOR(x, y, 0.); } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates a trimming point on the sine curve. * \param[in] sine A pointer to data from \c IfcSine. @@ -2871,6 +2885,22 @@ namespace OpenInfraPlatform * \return The location of the trimming point. * \note */ +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3) + template <> + carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& sine, + const typename IfcEntityTypesT::IfcParameterValue& parameter, const double& length) const noexcept(false) + { + return getPointOnCurve(sine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + template <> + carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& sine, + const typename IfcEntityTypesT::IfcNonNegativeLengthMeasure& parameter, const double& length) const noexcept(false) + { + return getPointOnCurve(sine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& sine, + const double& parameter, const double& length) const noexcept(false) +#else template <> carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& sine, const typename IfcEntityTypesT::IfcParameterValue& parameter, const double& length) const noexcept(false) @@ -2885,6 +2915,7 @@ namespace OpenInfraPlatform } carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& sine, const double& parameter, const double& length) const noexcept(false) +#endif { // Interpret parameter double sineTerm = sine->SineTerm * this->UnitConvert()->getLengthInMeterFactor(); @@ -2926,6 +2957,23 @@ namespace OpenInfraPlatform * \return The location of the trimming point. * \note */ +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3) + + template <> + carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& cosine, + const typename IfcEntityTypesT::IfcParameterValue& parameter, const double& length) const noexcept(false) + { + return getPointOnCurve(cosine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + template <> + carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& cosine, + const typename IfcEntityTypesT::IfcNonNegativeLengthMeasure& parameter, const double& length) const noexcept(false) + { + return getPointOnCurve(cosine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& cosine, + const double& parameter, const double& length) const noexcept(false) +#else template <> carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& cosine, const typename IfcEntityTypesT::IfcParameterValue& parameter, const double& length) const noexcept(false) @@ -2940,6 +2988,7 @@ namespace OpenInfraPlatform } carve::geom::vector<3> getPointOnCurve(const EXPRESSReference& cosine, const double& parameter, const double& length) const noexcept(false) +#endif { // Interpret parameter double cosineTerm = cosine->CosineTerm * this->UnitConvert()->getLengthInMeterFactor(); @@ -3045,7 +3094,7 @@ namespace OpenInfraPlatform } } -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) template carve::geom::vector<3> getDirectionOfCurve( const EXPRESSReference& curve, @@ -3263,7 +3312,7 @@ namespace OpenInfraPlatform } -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates an angle of the clothoid. * \param[in] clothoid A pointer to data from \c IfcClothoid. * \param[in] parameter The length. @@ -3302,7 +3351,7 @@ namespace OpenInfraPlatform return carve::geom::VECTOR(std::cos(angle), std::sin(angle), 0.); } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates an angle of the second order polynomial spiral. * \param[in] secondOrderPolynomial A pointer to data from \c IfcSecondOrderPolynomialSpiral. * \param[in] parameter The length. @@ -3349,7 +3398,7 @@ namespace OpenInfraPlatform return carve::geom::VECTOR(std::cos(angle), std::sin(angle), 0.); } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates an angle of the seventh order polynomial spiral. * \param[in] seventhOrderPolynomial A pointer to data from \c IfcSeventhOrderPolynomialSpiral. * \param[in] parameter The length. @@ -3412,7 +3461,7 @@ namespace OpenInfraPlatform return carve::geom::VECTOR(std::cos(angle), std::sin(angle), 0.); } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates an angle of the third order polynomial spiral. * \param[in] thirdOrderPolynomial A pointer to data from \c IfcThirdOrderPolynomialSpiral. * \param[in] parameter The length. @@ -3466,7 +3515,7 @@ namespace OpenInfraPlatform } #endif -#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC4) || defined(OIP_MODULE_EARLYBINDING_IFC4X3) /*! \brief Calculates an angle of the sine. * \param[in] sine A pointer to data from \c IfcSine. * \param[in] parameter The trimmed length. @@ -3474,6 +3523,22 @@ namespace OpenInfraPlatform * \return The Angle in radians. * \note */ +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3) + template <> + carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& sine, + const typename IfcEntityTypesT::IfcParameterValue& parameter, const double& length) const noexcept(false) + { + return getDirectionOfCurve(sine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + template <> + carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& sine, + const typename IfcEntityTypesT::IfcNonNegativeLengthMeasure& parameter, const double& length) const noexcept(false) + { + return getDirectionOfCurve(sine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& sine, + const double& parameter, const double& length) const noexcept(false) +#else template <> carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& sine, const typename IfcEntityTypesT::IfcParameterValue& parameter, const double& length) const noexcept(false) @@ -3488,6 +3553,7 @@ namespace OpenInfraPlatform } carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& sine, const double& parameter, const double& length) const noexcept(false) +#endif { // Interpret parameter double sineTerm = sine->SineTerm * this->UnitConvert()->getLengthInMeterFactor(); @@ -3528,6 +3594,23 @@ namespace OpenInfraPlatform * \return The Angle in radians. * \note */ +#if defined(OIP_MODULE_EARLYBINDING_IFC4X3) + template <> + carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& cosine, + const typename IfcEntityTypesT::IfcNonNegativeLengthMeasure& parameter, const double& length) const noexcept(false) + { + return getDirectionOfCurve(cosine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + template<> + carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& cosine, + const typename IfcEntityTypesT::IfcParameterValue& parameter, const double& length) const noexcept(false) + { + return getDirectionOfCurve(cosine, parameter * this->UnitConvert()->getLengthInMeterFactor(), length * this->UnitConvert()->getLengthInMeterFactor()); + } + template<> + carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& cosine, + const double& parameter, const double& length) const noexcept(false) +#else template <> carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& cosine, const typename IfcEntityTypesT::IfcNonNegativeLengthMeasure& parameter, const double& length) const noexcept(false) @@ -3543,6 +3626,7 @@ namespace OpenInfraPlatform template<> carve::geom::vector<3> getDirectionOfCurve(const EXPRESSReference& cosine, const double& parameter, const double& length) const noexcept(false) +#endif { // Interpret parameter double cosineTerm = cosine->CosineTerm * this->UnitConvert()->getLengthInMeterFactor(); diff --git a/Core/src/IfcGeometryConverter/IfcImporterImpl.h b/Core/src/IfcGeometryConverter/IfcImporterImpl.h index f48166f47..36e338cb6 100644 --- a/Core/src/IfcGeometryConverter/IfcImporterImpl.h +++ b/Core/src/IfcGeometryConverter/IfcImporterImpl.h @@ -47,6 +47,11 @@ #include "EarlyBinding\IFC4X3_RC4\src\IFC4X3_RC4Entities.h" #endif +#ifdef OIP_MODULE_EARLYBINDING_IFC4X3 +#include "EarlyBinding\IFC4X3\src\EMTIFC4X3EntityTypes.h" +#include "EarlyBinding\IFC4X3\src\IFC4X3Entities.h" +#endif + #include "namespace.h" #include "PlacementConverterImpl.h" diff --git a/Core/src/IfcGeometryConverter/IfcPeekStepReader.cpp b/Core/src/IfcGeometryConverter/IfcPeekStepReader.cpp index 7b78a4500..e7870448f 100644 --- a/Core/src/IfcGeometryConverter/IfcPeekStepReader.cpp +++ b/Core/src/IfcGeometryConverter/IfcPeekStepReader.cpp @@ -34,7 +34,8 @@ std::map schemata = { MapType("ifc4", IfcPeekStepReader::IfcSchema::IFC4), MapType("ifc4x1", IfcPeekStepReader::IfcSchema::IFC4X1), MapType("ifc4x3_rc1", IfcPeekStepReader::IfcSchema::IFC4X3_RC1), - MapType("ifc4x3_rc4", IfcPeekStepReader::IfcSchema::IFC4X3_RC4) + MapType("ifc4x3_rc4", IfcPeekStepReader::IfcSchema::IFC4X3_RC4), + MapType("ifc4x3", IfcPeekStepReader::IfcSchema::IFC4X3) }; IfcPeekStepReader::IfcPeekStepReader() diff --git a/Core/src/IfcGeometryConverter/IfcPeekStepReader.h b/Core/src/IfcGeometryConverter/IfcPeekStepReader.h index dc2b9ca23..83e4a6190 100644 --- a/Core/src/IfcGeometryConverter/IfcPeekStepReader.h +++ b/Core/src/IfcGeometryConverter/IfcPeekStepReader.h @@ -34,7 +34,7 @@ namespace OpenInfraPlatform virtual ~IfcPeekStepReader(); //TODO: Have this amended by cmake configure file - enum class IfcSchema : short { IFC2X3, IFC4, IFC4X1, IFC4X3_RC1, IFC4X3_RC4 }; + enum class IfcSchema : short { IFC2X3, IFC4, IFC4X1, IFC4X3_RC1, IFC4X3_RC4, IFC4X3 }; static std::pair parseIfcHeader(const std::string& filename); }; } diff --git a/Core/src/IfcGeometryConverter/SolidModelConverter.h b/Core/src/IfcGeometryConverter/SolidModelConverter.h index 43d0fca1b..12fe9ed9c 100644 --- a/Core/src/IfcGeometryConverter/SolidModelConverter.h +++ b/Core/src/IfcGeometryConverter/SolidModelConverter.h @@ -402,9 +402,11 @@ namespace OpenInfraPlatform // Get cross section positions and fixed axis vertical (attributes 3-4). const auto& crossSectionPositions = sectionedSolidHorizontal->CrossSectionPositions; - +#if defined(OIP_MODULE_EARLYBINDING_IFC4X1) || defined(OIP_MODULE_EARLYBINDING_IFC4X3_RC1) bool fixedAxisVertical = sectionedSolidHorizontal->FixedAxisVertical; - +#else + bool fixedAxisVertical = true;//please rewrite it!! wrong implementation +#endif //check dimensions and correct attributes sizes if (vecCrossSections.size() != crossSectionPositions.size()) { diff --git a/Documentation/markdown/IFC4.3XListOfChanges.md b/Documentation/markdown/IFC4.3XListOfChanges.md new file mode 100644 index 000000000..99381d4e6 --- /dev/null +++ b/Documentation/markdown/IFC4.3XListOfChanges.md @@ -0,0 +1,42 @@ +# List of changes between IFC4X3_RC4 and IFC4X3 versions + +### Missing data in OIP + +| Name | IFC4X3_RC4.exp | IFC4X3.exp | +|--------------------------------------|-------------------------|--------------------| +| IfcCosine | :heavy_check_mark: | :x: | +| IfcGradient | :heavy_check_mark: | :x: | +| IfcSine | :heavy_check_mark: | :x: | +| IfcCosineSpiral | :x: | :heavy_check_mark: | +| IfcIndexedPolygonalTextureMap | :x: | :heavy_check_mark: | +| IfcPointDim | :x: | :heavy_check_mark: | +| IfcSegmentDim | :x: | :heavy_check_mark: | +| IfcSineSpiral | :x: | :heavy_check_mark: | +| IfcTextureCoordinateIndices | :x: | :heavy_check_mark: | +| IfcTextureCoordinateIndicesWithVoids | :x: | :heavy_check_mark: | + +### Entity definitions + +| Name | IFC4X3_RC4.exp | IFC4X3.exp | +|----------------------------------------------|-----------------------------------------------------|------------------------------------------------------------------| +| IfcIndexedPolygonalFace inverses | ['ToFaceSet'] | ['ToFaceSet', 'HasTexCoords'] | +| IfcOpenCrossProfileDef attributes | ['HorizontalWidths', 'Widths', 'Slopes', 'Tags'] | ['HorizontalWidths', 'Widths', 'Slopes', 'Tags', 'OffsetPoint'] | +| IfcObjectPlacement inverses | ['PlacesObject'] | ['PlacesObject', 'ReferencedByPlacements'] | +| IfcPolygonalFaceSet.Faces | Faces : list[1:?] of IfcIndexedPolygonalFace | Faces : list[1:?] of unique IfcIndexedPolygonalFace | +| IfcSectionedSolidHorizontal attributes | ['CrossSectionPositions', 'FixedAxisVertical'] | ['CrossSectionPositions'] | +| IfcSweptDiskSolidPolygonal.FilletRadius | FilletRadius : optional IfcPositiveLengthMeasure | FilletRadius : optional IfcNonNegativeLengthMeasure | + +### Constraints + +| Name | IFC4X3_RC4.exp | IFC4X3.exp | +|-----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| IfcCartesianPoint derive rules | ['Dim'] | [] | +| IfcCompositeCurveSegment derive rules | ['Dim'] | [] | +| IfcCurveSegment derive rules | ['Dim'] | [] | +| IfcGradientCurve derive rules | ['RelativeElevation'] | [] | +| IfcPoint derive rules | [] | ['Dim'] | +| IfcPointByDistanceExpression derive rules | ['Dim']| []| +| IfcPointOnCurve derive rules | ['Dim']| []| +| IfcPolygonalBoundedHalfSpace.BoundaryType | sizeof(typeof(PolygonalBoundary)*['ifc4x3_dev.ifcpolyline','ifc4x3_dev.ifccompositecurve']) = 1 | sizeof(typeof(PolygonalBoundary)*['ifc4x3_dev.ifcpolyline','ifc4x3_dev.ifccompositecurve','ifc4x3_dev.ifcindexedpolycurve']) = 1 | +| IfcSegment derive rules | []| ['Dim']| | ['AreaProfileTypes', 'CorrespondingSectionPositions', 'DirectrixIs3D', 'NoOffsets', 'SectionsSameType'] | +| IfcSweptDiskSolidPolygonal.DirectrixIsPolyline | ('ifc4x3_dev.ifcpolyline' in typeof(self\IfcSweptDiskSolid.Directrix)) or (('ifc4x3_dev.ifcindexedpolycurve' in typeof(self\IfcSweptDiskSolid.Directrix)) and not(exists(self\IfcSweptDiskSolid.Directrix.Segments))) | ('ifc4x3_dev.ifcpolyline' in typeof(self\IfcSweptDiskSolid.Directrix)) or (('ifc4x3_dev.ifcindexedpolycurve' in typeof(self\IfcSweptDiskSolid.Directrix)) and not(exists(self\IfcSweptDiskSolid.Directrix\IfcIndexedPolyCurve.Segments))) | \ No newline at end of file diff --git a/ExpressBindingGenerator/CMakeLists.txt b/ExpressBindingGenerator/CMakeLists.txt index 2f017ebf1..ee09600c1 100644 --- a/ExpressBindingGenerator/CMakeLists.txt +++ b/ExpressBindingGenerator/CMakeLists.txt @@ -40,6 +40,7 @@ endmacro() add_format(IFC2X3 IFC2X3_TC1 OFF) add_format(IFC4 IFC4_ADD2_TC1 OFF) add_format(IFC4X1 IFC4x1_RC3 OFF) +add_format(IFC4X3 IFC4X3 OFF) add_format(IFC4X3_RC1 IFC4X3_RC1 ON) add_format(IFC4X3_RC4 IFC4X3_RC4 OFF) diff --git a/ExpressBindingGenerator/schemas/IFC4X3.exp b/ExpressBindingGenerator/schemas/IFC4X3.exp new file mode 100644 index 000000000..4433a38c9 --- /dev/null +++ b/ExpressBindingGenerator/schemas/IFC4X3.exp @@ -0,0 +1,14066 @@ +(* +Copyright by: +buildingSMART International Limited, 1996-2022 + +Any technical documentation made available by buildingSMART International Limited +is the copyrighted work of buildingSMART International Limited and is owned by the +buildingSMART International Limited. It may be photocopied, used in software development, +or translated into another computer language without prior written consent from +buildingSMART International Limited provided that full attribution is given. +Prior written consent is required if changes are made to the technical specification. + +This material is delivered to you as is and buildingSMART International Limited makes +no warranty of any kind with regard to it, including, but not limited to, the implied +warranties as to its accuracy or fitness for a particular purpose. Any use of the +technical documentation or the information contained therein is at the risk of the user. +Documentation may include technical or other inaccuracies or typographical errors. +buildingSMART International Limited shall not be liable for errors contained therein or +for incidental consequential damages in connection with the furnishing, performance or use +of the material. The information contained in this document is subject to change without notice. + +Issue date: +21 October 2022 + +*) + +SCHEMA IFC4X3; + +TYPE IfcAbsorbedDoseMeasure = REAL; +END_TYPE; + +TYPE IfcAccelerationMeasure = REAL; +END_TYPE; + +TYPE IfcAmountOfSubstanceMeasure = REAL; +END_TYPE; + +TYPE IfcAngularVelocityMeasure = REAL; +END_TYPE; + +TYPE IfcArcIndex = LIST [3:3] OF IfcPositiveInteger; +END_TYPE; + +TYPE IfcAreaDensityMeasure = REAL; +END_TYPE; + +TYPE IfcAreaMeasure = REAL; +END_TYPE; + +TYPE IfcBinary = BINARY; +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 IfcCardinalPointReference = INTEGER; + WHERE + GreaterThanZero : SELF > 0; +END_TYPE; + +TYPE IfcComplexNumber = ARRAY [1:2] OF REAL; +END_TYPE; + +TYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER; + WHERE + MinutesInRange : ABS(SELF[2]) < 60; + SecondsInRange : ABS(SELF[3]) < 60; + MicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000); + ConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0))) +OR +((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0))); +END_TYPE; + +TYPE IfcContextDependentMeasure = REAL; +END_TYPE; + +TYPE IfcCountMeasure = INTEGER; +END_TYPE; + +TYPE IfcCurvatureMeasure = REAL; +END_TYPE; + +TYPE IfcDate = STRING; +END_TYPE; + +TYPE IfcDateTime = STRING; +END_TYPE; + +TYPE IfcDayInMonthNumber = INTEGER; + WHERE + ValidRange : {1 <= SELF <= 31}; +END_TYPE; + +TYPE IfcDayInWeekNumber = INTEGER; + WHERE + ValidRange : {1 <= SELF <= 7}; +END_TYPE; + +TYPE IfcDescriptiveMeasure = STRING; +END_TYPE; + +TYPE IfcDimensionCount = INTEGER; + WHERE + WR1 : { 0 < SELF <= 3 }; +END_TYPE; + +TYPE IfcDoseEquivalentMeasure = REAL; +END_TYPE; + +TYPE IfcDuration = STRING; +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 IfcIdentifier = STRING(255); +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(255); +END_TYPE; + +TYPE IfcLanguageId = IfcIdentifier; +END_TYPE; + +TYPE IfcLengthMeasure = REAL; +END_TYPE; + +TYPE IfcLineIndex = LIST [2:?] OF IfcPositiveInteger; +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 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 + ValidRange : {1 <= SELF <= 12}; +END_TYPE; + +TYPE IfcNonNegativeLengthMeasure = IfcLengthMeasure; + WHERE + NotNegative : SELF >= 0.; +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 IfcPositiveInteger = IfcInteger; + WHERE + WR1 : SELF > 0; +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 IfcPropertySetDefinitionSet = SET [1:?] OF IfcPropertySetDefinition; +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 IfcSectionModulusMeasure = REAL; +END_TYPE; + +TYPE IfcSectionalAreaIntegralMeasure = REAL; +END_TYPE; + +TYPE IfcShearModulusMeasure = REAL; +END_TYPE; + +TYPE IfcSolidAngleMeasure = REAL; +END_TYPE; + +TYPE IfcSoundPowerLevelMeasure = REAL; +END_TYPE; + +TYPE IfcSoundPowerMeasure = REAL; +END_TYPE; + +TYPE IfcSoundPressureLevelMeasure = 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 IfcTemperatureRateOfChangeMeasure = 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 IfcTime = STRING; +END_TYPE; + +TYPE IfcTimeMeasure = REAL; +END_TYPE; + +TYPE IfcTimeStamp = INTEGER; +END_TYPE; + +TYPE IfcTorqueMeasure = REAL; +END_TYPE; + +TYPE IfcURIReference = STRING; +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 IfcActionRequestTypeEnum = ENUMERATION OF + (EMAIL + ,FAX + ,PHONE + ,POST + ,VERBAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcActionSourceTypeEnum = ENUMERATION OF + (BRAKES + ,BUOYANCY + ,COMPLETION_G1 + ,CREEP + ,CURRENT + ,DEAD_LOAD_G + ,EARTHQUAKE_E + ,ERECTION + ,FIRE + ,ICE + ,IMPACT + ,IMPULSE + ,LACK_OF_FIT + ,LIVE_LOAD_Q + ,PRESTRESSING_P + ,PROPPING + ,RAIN + ,SETTLEMENT_U + ,SHRINKAGE + ,SNOW_S + ,SYSTEM_IMPERFECTION + ,TEMPERATURE_T + ,TRANSPORT + ,WAVE + ,WIND_W + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcActionTypeEnum = ENUMERATION OF + (EXTRAORDINARY_A + ,PERMANENT_G + ,VARIABLE_Q + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcActuatorTypeEnum = ENUMERATION OF + (ELECTRICACTUATOR + ,HANDOPERATEDACTUATOR + ,HYDRAULICACTUATOR + ,PNEUMATICACTUATOR + ,THERMOSTATICACTUATOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAddressTypeEnum = ENUMERATION OF + (DISTRIBUTIONPOINT + ,HOME + ,OFFICE + ,SITE + ,USERDEFINED); +END_TYPE; + +TYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF + (CONSTANTFLOW + ,VARIABLEFLOWPRESSUREDEPENDANT + ,VARIABLEFLOWPRESSUREINDEPENDANT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAirTerminalTypeEnum = ENUMERATION OF + (DIFFUSER + ,GRILLE + ,LOUVRE + ,REGISTER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF + (FIXEDPLATECOUNTERFLOWEXCHANGER + ,FIXEDPLATECROSSFLOWEXCHANGER + ,FIXEDPLATEPARALLELFLOWEXCHANGER + ,HEATPIPE + ,ROTARYWHEEL + ,RUNAROUNDCOILLOOP + ,THERMOSIPHONCOILTYPEHEATEXCHANGERS + ,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS + ,TWINTOWERENTHALPYRECOVERYLOOPS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAlarmTypeEnum = ENUMERATION OF + (BELL + ,BREAKGLASSBUTTON + ,LIGHT + ,MANUALPULLBOX + ,RAILWAYCROCODILE + ,RAILWAYDETONATOR + ,SIREN + ,WHISTLE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAlignmentCantSegmentTypeEnum = ENUMERATION OF + (BLOSSCURVE + ,CONSTANTCANT + ,COSINECURVE + ,HELMERTCURVE + ,LINEARTRANSITION + ,SINECURVE + ,VIENNESEBEND); +END_TYPE; + +TYPE IfcAlignmentHorizontalSegmentTypeEnum = ENUMERATION OF + (BLOSSCURVE + ,CIRCULARARC + ,CLOTHOID + ,COSINECURVE + ,CUBIC + ,HELMERTCURVE + ,LINE + ,SINECURVE + ,VIENNESEBEND); +END_TYPE; + +TYPE IfcAlignmentTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAlignmentVerticalSegmentTypeEnum = ENUMERATION OF + (CIRCULARARC + ,CLOTHOID + ,CONSTANTGRADIENT + ,PARABOLICARC); +END_TYPE; + +TYPE IfcAnalysisModelTypeEnum = ENUMERATION OF + (IN_PLANE_LOADING_2D + ,LOADING_3D + ,OUT_PLANE_LOADING_2D + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF + (FIRST_ORDER_THEORY + ,FULL_NONLINEAR_THEORY + ,SECOND_ORDER_THEORY + ,THIRD_ORDER_THEORY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAnnotationTypeEnum = ENUMERATION OF + (ASBUILTAREA + ,ASBUILTLINE + ,ASBUILTPOINT + ,ASSUMEDAREA + ,ASSUMEDLINE + ,ASSUMEDPOINT + ,NON_PHYSICAL_SIGNAL + ,SUPERELEVATIONEVENT + ,WIDTHEVENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcArithmeticOperatorEnum = ENUMERATION OF + (ADD + ,DIVIDE + ,MULTIPLY + ,SUBTRACT); +END_TYPE; + +TYPE IfcAssemblyPlaceEnum = ENUMERATION OF + (FACTORY + ,SITE + ,NOTDEFINED); +END_TYPE; + +TYPE IfcAudioVisualApplianceTypeEnum = ENUMERATION OF + (AMPLIFIER + ,CAMERA + ,COMMUNICATIONTERMINAL + ,DISPLAY + ,MICROPHONE + ,PLAYER + ,PROJECTOR + ,RECEIVER + ,RECORDINGEQUIPMENT + ,SPEAKER + ,SWITCHER + ,TELEPHONE + ,TUNER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBSplineCurveForm = ENUMERATION OF + (CIRCULAR_ARC + ,ELLIPTIC_ARC + ,HYPERBOLIC_ARC + ,PARABOLIC_ARC + ,POLYLINE_FORM + ,UNSPECIFIED); +END_TYPE; + +TYPE IfcBSplineSurfaceForm = ENUMERATION OF + (CONICAL_SURF + ,CYLINDRICAL_SURF + ,GENERALISED_CONE + ,PLANE_SURF + ,QUADRIC_SURF + ,RULED_SURF + ,SPHERICAL_SURF + ,SURF_OF_LINEAR_EXTRUSION + ,SURF_OF_REVOLUTION + ,TOROIDAL_SURF + ,UNSPECIFIED); +END_TYPE; + +TYPE IfcBeamTypeEnum = ENUMERATION OF + (BEAM + ,CORNICE + ,DIAPHRAGM + ,EDGEBEAM + ,GIRDER_SEGMENT + ,HATSTONE + ,HOLLOWCORE + ,JOIST + ,LINTEL + ,PIERCAP + ,SPANDREL + ,T_BEAM + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBearingTypeDisplacementEnum = ENUMERATION OF + (FIXED_MOVEMENT + ,FREE_MOVEMENT + ,GUIDED_LONGITUDINAL + ,GUIDED_TRANSVERSAL + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBearingTypeEnum = ENUMERATION OF + (CYLINDRICAL + ,DISK + ,ELASTOMERIC + ,GUIDE + ,POT + ,ROCKER + ,ROLLER + ,SPHERICAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBenchmarkEnum = ENUMERATION OF + (EQUALTO + ,GREATERTHAN + ,GREATERTHANOREQUALTO + ,INCLUDEDIN + ,INCLUDES + ,LESSTHAN + ,LESSTHANOREQUALTO + ,NOTEQUALTO + ,NOTINCLUDEDIN + ,NOTINCLUDES); +END_TYPE; + +TYPE IfcBoilerTypeEnum = ENUMERATION OF + (STEAM + ,WATER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBooleanOperator = ENUMERATION OF + (DIFFERENCE + ,INTERSECTION + ,UNION); +END_TYPE; + +TYPE IfcBridgePartTypeEnum = ENUMERATION OF + (ABUTMENT + ,DECK + ,DECK_SEGMENT + ,FOUNDATION + ,PIER + ,PIER_SEGMENT + ,PYLON + ,SUBSTRUCTURE + ,SUPERSTRUCTURE + ,SURFACESTRUCTURE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBridgeTypeEnum = ENUMERATION OF + (ARCHED + ,CABLE_STAYED + ,CANTILEVER + ,CULVERT + ,FRAMEWORK + ,GIRDER + ,SUSPENSION + ,TRUSS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBuildingElementPartTypeEnum = ENUMERATION OF + (APRON + ,ARMOURUNIT + ,INSULATION + ,PRECASTPANEL + ,SAFETYCAGE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF + (COMPLEX + ,ELEMENT + ,PARTIAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBuildingSystemTypeEnum = ENUMERATION OF + (EROSIONPREVENTION + ,FENESTRATION + ,FOUNDATION + ,LOADBEARING + ,OUTERSHELL + ,PRESTRESSING + ,REINFORCING + ,SHADING + ,TRANSPORT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBuiltSystemTypeEnum = ENUMERATION OF + (EROSIONPREVENTION + ,FENESTRATION + ,FOUNDATION + ,LOADBEARING + ,MOORING + ,OUTERSHELL + ,PRESTRESSING + ,RAILWAYLINE + ,RAILWAYTRACK + ,REINFORCING + ,SHADING + ,TRACKCIRCUIT + ,TRANSPORT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcBurnerTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF + (BEND + ,CONNECTOR + ,CROSS + ,JUNCTION + ,TEE + ,TRANSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF + (CABLEBRACKET + ,CABLELADDERSEGMENT + ,CABLETRAYSEGMENT + ,CABLETRUNKINGSEGMENT + ,CATENARYWIRE + ,CONDUITSEGMENT + ,DROPPER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCableFittingTypeEnum = ENUMERATION OF + (CONNECTOR + ,ENTRY + ,EXIT + ,FANOUT + ,JUNCTION + ,TRANSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCableSegmentTypeEnum = ENUMERATION OF + (BUSBARSEGMENT + ,CABLESEGMENT + ,CONDUCTORSEGMENT + ,CONTACTWIRESEGMENT + ,CORESEGMENT + ,FIBERSEGMENT + ,FIBERTUBE + ,OPTICALCABLESEGMENT + ,STITCHWIRE + ,WIREPAIRSEGMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCaissonFoundationTypeEnum = ENUMERATION OF + (CAISSON + ,WELL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcChangeActionEnum = ENUMERATION OF + (ADDED + ,DELETED + ,MODIFIED + ,NOCHANGE + ,NOTDEFINED); +END_TYPE; + +TYPE IfcChillerTypeEnum = ENUMERATION OF + (AIRCOOLED + ,HEATRECOVERY + ,WATERCOOLED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcChimneyTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCoilTypeEnum = ENUMERATION OF + (DXCOOLINGCOIL + ,ELECTRICHEATINGCOIL + ,GASHEATINGCOIL + ,HYDRONICCOIL + ,STEAMHEATINGCOIL + ,WATERCOOLINGCOIL + ,WATERHEATINGCOIL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcColumnTypeEnum = ENUMERATION OF + (COLUMN + ,PIERSTEM + ,PIERSTEM_SEGMENT + ,PILASTER + ,STANDCOLUMN + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCommunicationsApplianceTypeEnum = ENUMERATION OF + (ANTENNA + ,AUTOMATON + ,COMPUTER + ,FAX + ,GATEWAY + ,INTELLIGENTPERIPHERAL + ,IPNETWORKEQUIPMENT + ,LINESIDEELECTRONICUNIT + ,MODEM + ,NETWORKAPPLIANCE + ,NETWORKBRIDGE + ,NETWORKHUB + ,OPTICALLINETERMINAL + ,OPTICALNETWORKUNIT + ,PRINTER + ,RADIOBLOCKCENTER + ,REPEATER + ,ROUTER + ,SCANNER + ,TELECOMMAND + ,TELEPHONYEXCHANGE + ,TRANSITIONCOMPONENT + ,TRANSPONDER + ,TRANSPORTEQUIPMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcComplexPropertyTemplateTypeEnum = ENUMERATION OF + (P_COMPLEX + ,Q_COMPLEX); +END_TYPE; + +TYPE IfcCompressorTypeEnum = ENUMERATION OF + (BOOSTER + ,DYNAMIC + ,HERMETIC + ,OPENTYPE + ,RECIPROCATING + ,ROLLINGPISTON + ,ROTARY + ,ROTARYVANE + ,SCROLL + ,SEMIHERMETIC + ,SINGLESCREW + ,SINGLESTAGE + ,TROCHOIDAL + ,TWINSCREW + ,WELDEDSHELLHERMETIC + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCondenserTypeEnum = ENUMERATION OF + (AIRCOOLED + ,EVAPORATIVECOOLED + ,WATERCOOLED + ,WATERCOOLEDBRAZEDPLATE + ,WATERCOOLEDSHELLCOIL + ,WATERCOOLEDSHELLTUBE + ,WATERCOOLEDTUBEINTUBE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConnectionTypeEnum = ENUMERATION OF + (ATEND + ,ATPATH + ,ATSTART + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConstraintEnum = ENUMERATION OF + (ADVISORY + ,HARD + ,SOFT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF + (DEMOLISHING + ,EARTHMOVING + ,ERECTING + ,HEATING + ,LIGHTING + ,PAVING + ,PUMPING + ,TRANSPORTING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF + (AGGREGATES + ,CONCRETE + ,DRYWALL + ,FUEL + ,GYPSUM + ,MASONRY + ,METAL + ,PLASTIC + ,WOOD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConstructionProductResourceTypeEnum = ENUMERATION OF + (ASSEMBLY + ,FORMWORK + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcControllerTypeEnum = ENUMERATION OF + (FLOATING + ,MULTIPOSITION + ,PROGRAMMABLE + ,PROPORTIONAL + ,TWOPOSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcConveyorSegmentTypeEnum = ENUMERATION OF + (BELTCONVEYOR + ,BUCKETCONVEYOR + ,CHUTECONVEYOR + ,SCREWCONVEYOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCooledBeamTypeEnum = ENUMERATION OF + (ACTIVE + ,PASSIVE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCoolingTowerTypeEnum = ENUMERATION OF + (MECHANICALFORCEDDRAFT + ,MECHANICALINDUCEDDRAFT + ,NATURALDRAFT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCostItemTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCostScheduleTypeEnum = ENUMERATION OF + (BUDGET + ,COSTPLAN + ,ESTIMATE + ,PRICEDBILLOFQUANTITIES + ,SCHEDULEOFRATES + ,TENDER + ,UNPRICEDBILLOFQUANTITIES + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCourseTypeEnum = ENUMERATION OF + (ARMOUR + ,BALLASTBED + ,CORE + ,FILTER + ,PAVEMENT + ,PROTECTION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCoveringTypeEnum = ENUMERATION OF + (CEILING + ,CLADDING + ,COPING + ,FLOORING + ,INSULATION + ,MEMBRANE + ,MOLDING + ,ROOFING + ,SKIRTINGBOARD + ,SLEEVING + ,TOPPING + ,WRAPPING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCrewResourceTypeEnum = ENUMERATION OF + (OFFICE + ,SITE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCurtainWallTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcCurveInterpolationEnum = ENUMERATION OF + (LINEAR + ,LOG_LINEAR + ,LOG_LOG + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDamperTypeEnum = ENUMERATION OF + (BACKDRAFTDAMPER + ,BALANCINGDAMPER + ,BLASTDAMPER + ,CONTROLDAMPER + ,FIREDAMPER + ,FIRESMOKEDAMPER + ,FUMEHOODEXHAUST + ,GRAVITYDAMPER + ,GRAVITYRELIEFDAMPER + ,RELIEFDAMPER + ,SMOKEDAMPER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDataOriginEnum = ENUMERATION OF + (MEASURED + ,PREDICTED + ,SIMULATED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDerivedUnitEnum = ENUMERATION OF + (ACCELERATIONUNIT + ,ANGULARVELOCITYUNIT + ,AREADENSITYUNIT + ,COMPOUNDPLANEANGLEUNIT + ,CURVATUREUNIT + ,DYNAMICVISCOSITYUNIT + ,HEATFLUXDENSITYUNIT + ,HEATINGVALUEUNIT + ,INTEGERCOUNTRATEUNIT + ,IONCONCENTRATIONUNIT + ,ISOTHERMALMOISTURECAPACITYUNIT + ,KINEMATICVISCOSITYUNIT + ,LINEARFORCEUNIT + ,LINEARMOMENTUNIT + ,LINEARSTIFFNESSUNIT + ,LINEARVELOCITYUNIT + ,LUMINOUSINTENSITYDISTRIBUTIONUNIT + ,MASSDENSITYUNIT + ,MASSFLOWRATEUNIT + ,MASSPERLENGTHUNIT + ,MODULUSOFELASTICITYUNIT + ,MODULUSOFLINEARSUBGRADEREACTIONUNIT + ,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT + ,MODULUSOFSUBGRADEREACTIONUNIT + ,MOISTUREDIFFUSIVITYUNIT + ,MOLECULARWEIGHTUNIT + ,MOMENTOFINERTIAUNIT + ,PHUNIT + ,PLANARFORCEUNIT + ,ROTATIONALFREQUENCYUNIT + ,ROTATIONALMASSUNIT + ,ROTATIONALSTIFFNESSUNIT + ,SECTIONAREAINTEGRALUNIT + ,SECTIONMODULUSUNIT + ,SHEARMODULUSUNIT + ,SOUNDPOWERLEVELUNIT + ,SOUNDPOWERUNIT + ,SOUNDPRESSURELEVELUNIT + ,SOUNDPRESSUREUNIT + ,SPECIFICHEATCAPACITYUNIT + ,TEMPERATUREGRADIENTUNIT + ,TEMPERATURERATEOFCHANGEUNIT + ,THERMALADMITTANCEUNIT + ,THERMALCONDUCTANCEUNIT + ,THERMALEXPANSIONCOEFFICIENTUNIT + ,THERMALRESISTANCEUNIT + ,THERMALTRANSMITTANCEUNIT + ,TORQUEUNIT + ,VAPORPERMEABILITYUNIT + ,VOLUMETRICFLOWRATEUNIT + ,WARPINGCONSTANTUNIT + ,WARPINGMOMENTUNIT + ,USERDEFINED); +END_TYPE; + +TYPE IfcDirectionSenseEnum = ENUMERATION OF + (NEGATIVE + ,POSITIVE); +END_TYPE; + +TYPE IfcDiscreteAccessoryTypeEnum = ENUMERATION OF + (ANCHORPLATE + ,BIRDPROTECTION + ,BRACKET + ,CABLEARRANGER + ,ELASTIC_CUSHION + ,EXPANSION_JOINT_DEVICE + ,FILLER + ,FLASHING + ,INSULATOR + ,LOCK + ,PANEL_STRENGTHENING + ,POINTMACHINEMOUNTINGDEVICE + ,POINT_MACHINE_LOCKING_DEVICE + ,RAILBRACE + ,RAILPAD + ,RAIL_LUBRICATION + ,RAIL_MECHANICAL_EQUIPMENT + ,SHOE + ,SLIDINGCHAIR + ,SOUNDABSORPTION + ,TENSIONINGEQUIPMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDistributionBoardTypeEnum = ENUMERATION OF + (CONSUMERUNIT + ,DISPATCHINGBOARD + ,DISTRIBUTIONBOARD + ,DISTRIBUTIONFRAME + ,MOTORCONTROLCENTRE + ,SWITCHBOARD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF + (FORMEDDUCT + ,INSPECTIONCHAMBER + ,INSPECTIONPIT + ,MANHOLE + ,METERCHAMBER + ,SUMP + ,TRENCH + ,VALVECHAMBER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDistributionPortTypeEnum = ENUMERATION OF + (CABLE + ,CABLECARRIER + ,DUCT + ,PIPE + ,WIRELESS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDistributionSystemEnum = ENUMERATION OF + (AIRCONDITIONING + ,AUDIOVISUAL + ,CATENARY_SYSTEM + ,CHEMICAL + ,CHILLEDWATER + ,COMMUNICATION + ,COMPRESSEDAIR + ,CONDENSERWATER + ,CONTROL + ,CONVEYING + ,DATA + ,DISPOSAL + ,DOMESTICCOLDWATER + ,DOMESTICHOTWATER + ,DRAINAGE + ,EARTHING + ,ELECTRICAL + ,ELECTROACOUSTIC + ,EXHAUST + ,FIREPROTECTION + ,FIXEDTRANSMISSIONNETWORK + ,FUEL + ,GAS + ,HAZARDOUS + ,HEATING + ,LIGHTING + ,LIGHTNINGPROTECTION + ,MOBILENETWORK + ,MONITORINGSYSTEM + ,MUNICIPALSOLIDWASTE + ,OIL + ,OPERATIONAL + ,OPERATIONALTELEPHONYSYSTEM + ,OVERHEAD_CONTACTLINE_SYSTEM + ,POWERGENERATION + ,RAINWATER + ,REFRIGERATION + ,RETURN_CIRCUIT + ,SECURITY + ,SEWAGE + ,SIGNAL + ,STORMWATER + ,TELEPHONE + ,TV + ,VACUUM + ,VENT + ,VENTILATION + ,WASTEWATER + ,WATERSUPPLY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDocumentConfidentialityEnum = ENUMERATION OF + (CONFIDENTIAL + ,PERSONAL + ,PUBLIC + ,RESTRICTED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDocumentStatusEnum = ENUMERATION OF + (DRAFT + ,FINAL + ,FINALDRAFT + ,REVISION + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorPanelOperationEnum = ENUMERATION OF + (DOUBLE_ACTING + ,FIXEDPANEL + ,FOLDING + ,REVOLVING + ,ROLLINGUP + ,SLIDING + ,SWINGING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorPanelPositionEnum = ENUMERATION OF + (LEFT + ,MIDDLE + ,RIGHT + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorStyleConstructionEnum = ENUMERATION OF + (ALUMINIUM + ,ALUMINIUM_PLASTIC + ,ALUMINIUM_WOOD + ,HIGH_GRADE_STEEL + ,PLASTIC + ,STEEL + ,WOOD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorStyleOperationEnum = ENUMERATION OF + (DOUBLE_DOOR_DOUBLE_SWING + ,DOUBLE_DOOR_FOLDING + ,DOUBLE_DOOR_SINGLE_SWING + ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT + ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT + ,DOUBLE_DOOR_SLIDING + ,DOUBLE_SWING_LEFT + ,DOUBLE_SWING_RIGHT + ,FOLDING_TO_LEFT + ,FOLDING_TO_RIGHT + ,REVOLVING + ,ROLLINGUP + ,SINGLE_SWING_LEFT + ,SINGLE_SWING_RIGHT + ,SLIDING_TO_LEFT + ,SLIDING_TO_RIGHT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorTypeEnum = ENUMERATION OF + (BOOM_BARRIER + ,DOOR + ,GATE + ,TRAPDOOR + ,TURNSTILE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDoorTypeOperationEnum = ENUMERATION OF + (DOUBLE_PANEL_DOUBLE_SWING + ,DOUBLE_PANEL_FOLDING + ,DOUBLE_PANEL_LIFTING_VERTICAL + ,DOUBLE_PANEL_SINGLE_SWING + ,DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT + ,DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT + ,DOUBLE_PANEL_SLIDING + ,DOUBLE_SWING_LEFT + ,DOUBLE_SWING_RIGHT + ,FOLDING_TO_LEFT + ,FOLDING_TO_RIGHT + ,LIFTING_HORIZONTAL + ,LIFTING_VERTICAL_LEFT + ,LIFTING_VERTICAL_RIGHT + ,REVOLVING_HORIZONTAL + ,REVOLVING_VERTICAL + ,ROLLINGUP + ,SINGLE_SWING_LEFT + ,SINGLE_SWING_RIGHT + ,SLIDING_TO_LEFT + ,SLIDING_TO_RIGHT + ,SWING_FIXED_LEFT + ,SWING_FIXED_RIGHT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDuctFittingTypeEnum = ENUMERATION OF + (BEND + ,CONNECTOR + ,ENTRY + ,EXIT + ,JUNCTION + ,OBSTRUCTION + ,TRANSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDuctSegmentTypeEnum = ENUMERATION OF + (FLEXIBLESEGMENT + ,RIGIDSEGMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcDuctSilencerTypeEnum = ENUMERATION OF + (FLATOVAL + ,RECTANGULAR + ,ROUND + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEarthworksCutTypeEnum = ENUMERATION OF + (BASE_EXCAVATION + ,CUT + ,DREDGING + ,EXCAVATION + ,OVEREXCAVATION + ,PAVEMENTMILLING + ,STEPEXCAVATION + ,TOPSOILREMOVAL + ,TRENCH + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEarthworksFillTypeEnum = ENUMERATION OF + (BACKFILL + ,COUNTERWEIGHT + ,EMBANKMENT + ,SLOPEFILL + ,SUBGRADE + ,SUBGRADEBED + ,TRANSITIONSECTION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricApplianceTypeEnum = ENUMERATION OF + (DISHWASHER + ,ELECTRICCOOKER + ,FREESTANDINGELECTRICHEATER + ,FREESTANDINGFAN + ,FREESTANDINGWATERCOOLER + ,FREESTANDINGWATERHEATER + ,FREEZER + ,FRIDGE_FREEZER + ,HANDDRYER + ,KITCHENMACHINE + ,MICROWAVE + ,PHOTOCOPIER + ,REFRIGERATOR + ,TUMBLEDRYER + ,VENDINGMACHINE + ,WASHINGMACHINE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricDistributionBoardTypeEnum = ENUMERATION OF + (CONSUMERUNIT + ,DISTRIBUTIONBOARD + ,MOTORCONTROLCENTRE + ,SWITCHBOARD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF + (BATTERY + ,CAPACITOR + ,CAPACITORBANK + ,COMPENSATOR + ,HARMONICFILTER + ,INDUCTOR + ,INDUCTORBANK + ,RECHARGER + ,UPS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricFlowTreatmentDeviceTypeEnum = ENUMERATION OF + (ELECTRONICFILTER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF + (CHP + ,ENGINEGENERATOR + ,STANDALONE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricMotorTypeEnum = ENUMERATION OF + (DC + ,INDUCTION + ,POLYPHASE + ,RELUCTANCESYNCHRONOUS + ,SYNCHRONOUS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF + (RELAY + ,TIMECLOCK + ,TIMEDELAY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElementAssemblyTypeEnum = ENUMERATION OF + (ABUTMENT + ,ACCESSORY_ASSEMBLY + ,ARCH + ,BEAM_GRID + ,BRACED_FRAME + ,CROSS_BRACING + ,DECK + ,DILATATIONPANEL + ,ENTRANCEWORKS + ,GIRDER + ,GRID + ,MAST + ,PIER + ,PYLON + ,RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY + ,REINFORCEMENT_UNIT + ,RIGID_FRAME + ,SHELTER + ,SIGNALASSEMBLY + ,SLAB_FIELD + ,SUMPBUSTER + ,SUPPORTINGASSEMBLY + ,SUSPENSIONASSEMBLY + ,TRACKPANEL + ,TRACTION_SWITCHING_ASSEMBLY + ,TRAFFIC_CALMING_DEVICE + ,TRUSS + ,TURNOUTPANEL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcElementCompositionEnum = ENUMERATION OF + (COMPLEX + ,ELEMENT + ,PARTIAL); +END_TYPE; + +TYPE IfcEngineTypeEnum = ENUMERATION OF + (EXTERNALCOMBUSTION + ,INTERNALCOMBUSTION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF + (DIRECTEVAPORATIVEAIRWASHER + ,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER + ,DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER + ,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER + ,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER + ,INDIRECTDIRECTCOMBINATION + ,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER + ,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER + ,INDIRECTEVAPORATIVEWETCOIL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEvaporatorTypeEnum = ENUMERATION OF + (DIRECTEXPANSION + ,DIRECTEXPANSIONBRAZEDPLATE + ,DIRECTEXPANSIONSHELLANDTUBE + ,DIRECTEXPANSIONTUBEINTUBE + ,FLOODEDSHELLANDTUBE + ,SHELLANDCOIL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEventTriggerTypeEnum = ENUMERATION OF + (EVENTCOMPLEX + ,EVENTMESSAGE + ,EVENTRULE + ,EVENTTIME + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcEventTypeEnum = ENUMERATION OF + (ENDEVENT + ,INTERMEDIATEEVENT + ,STARTEVENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcExternalSpatialElementTypeEnum = ENUMERATION OF + (EXTERNAL + ,EXTERNAL_EARTH + ,EXTERNAL_FIRE + ,EXTERNAL_WATER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFacilityPartCommonTypeEnum = ENUMERATION OF + (ABOVEGROUND + ,BELOWGROUND + ,JUNCTION + ,LEVELCROSSING + ,SEGMENT + ,SUBSTRUCTURE + ,SUPERSTRUCTURE + ,TERMINAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFacilityUsageEnum = ENUMERATION OF + (LATERAL + ,LONGITUDINAL + ,REGION + ,VERTICAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFanTypeEnum = ENUMERATION OF + (CENTRIFUGALAIRFOIL + ,CENTRIFUGALBACKWARDINCLINEDCURVED + ,CENTRIFUGALFORWARDCURVED + ,CENTRIFUGALRADIAL + ,PROPELLORAXIAL + ,TUBEAXIAL + ,VANEAXIAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFastenerTypeEnum = ENUMERATION OF + (GLUE + ,MORTAR + ,WELD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFilterTypeEnum = ENUMERATION OF + (AIRPARTICLEFILTER + ,COMPRESSEDAIRFILTER + ,ODORFILTER + ,OILFILTER + ,STRAINER + ,WATERFILTER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF + (BREECHINGINLET + ,FIREHYDRANT + ,FIREMONITOR + ,HOSEREEL + ,SPRINKLER + ,SPRINKLERDEFLECTOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFlowDirectionEnum = ENUMERATION OF + (SINK + ,SOURCE + ,SOURCEANDSINK + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF + (AMMETER + ,COMBINED + ,FREQUENCYMETER + ,PHASEANGLEMETER + ,POWERFACTORMETER + ,PRESSUREGAUGE + ,THERMOMETER + ,VOLTMETER + ,VOLTMETER_PEAK + ,VOLTMETER_RMS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFlowMeterTypeEnum = ENUMERATION OF + (ENERGYMETER + ,GASMETER + ,OILMETER + ,WATERMETER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFootingTypeEnum = ENUMERATION OF + (CAISSON_FOUNDATION + ,FOOTING_BEAM + ,PAD_FOOTING + ,PILE_CAP + ,STRIP_FOOTING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcFurnitureTypeEnum = ENUMERATION OF + (BED + ,CHAIR + ,DESK + ,FILECABINET + ,SHELF + ,SOFA + ,TABLE + ,TECHNICALCABINET + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcGeographicElementTypeEnum = ENUMERATION OF + (SOIL_BORING_POINT + ,TERRAIN + ,VEGETATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcGeometricProjectionEnum = ENUMERATION OF + (ELEVATION_VIEW + ,GRAPH_VIEW + ,MODEL_VIEW + ,PLAN_VIEW + ,REFLECTED_PLAN_VIEW + ,SECTION_VIEW + ,SKETCH_VIEW + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcGeotechnicalStratumTypeEnum = ENUMERATION OF + (SOLID + ,VOID + ,WATER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcGlobalOrLocalEnum = ENUMERATION OF + (GLOBAL_COORDS + ,LOCAL_COORDS); +END_TYPE; + +TYPE IfcGridTypeEnum = ENUMERATION OF + (IRREGULAR + ,RADIAL + ,RECTANGULAR + ,TRIANGULAR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcHeatExchangerTypeEnum = ENUMERATION OF + (PLATE + ,SHELLANDTUBE + ,TURNOUTHEATING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcHumidifierTypeEnum = ENUMERATION OF + (ADIABATICAIRWASHER + ,ADIABATICATOMIZING + ,ADIABATICCOMPRESSEDAIRNOZZLE + ,ADIABATICPAN + ,ADIABATICRIGIDMEDIA + ,ADIABATICULTRASONIC + ,ADIABATICWETTEDELEMENT + ,ASSISTEDBUTANE + ,ASSISTEDELECTRIC + ,ASSISTEDNATURALGAS + ,ASSISTEDPROPANE + ,ASSISTEDSTEAM + ,STEAMINJECTION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcImpactProtectionDeviceTypeEnum = ENUMERATION OF + (BUMPER + ,CRASHCUSHION + ,DAMPINGSYSTEM + ,FENDER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcInterceptorTypeEnum = ENUMERATION OF + (CYCLONIC + ,GREASE + ,OIL + ,PETROL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcInternalOrExternalEnum = ENUMERATION OF + (EXTERNAL + ,EXTERNAL_EARTH + ,EXTERNAL_FIRE + ,EXTERNAL_WATER + ,INTERNAL + ,NOTDEFINED); +END_TYPE; + +TYPE IfcInventoryTypeEnum = ENUMERATION OF + (ASSETINVENTORY + ,FURNITUREINVENTORY + ,SPACEINVENTORY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcJunctionBoxTypeEnum = ENUMERATION OF + (DATA + ,POWER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcKnotType = ENUMERATION OF + (PIECEWISE_BEZIER_KNOTS + ,QUASI_UNIFORM_KNOTS + ,UNIFORM_KNOTS + ,UNSPECIFIED); +END_TYPE; + +TYPE IfcLaborResourceTypeEnum = ENUMERATION OF + (ADMINISTRATION + ,CARPENTRY + ,CLEANING + ,CONCRETE + ,DRYWALL + ,ELECTRIC + ,FINISHING + ,FLOORING + ,GENERAL + ,HVAC + ,LANDSCAPING + ,MASONRY + ,PAINTING + ,PAVING + ,PLUMBING + ,ROOFING + ,SITEGRADING + ,STEELWORK + ,SURVEYING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLampTypeEnum = ENUMERATION OF + (COMPACTFLUORESCENT + ,FLUORESCENT + ,HALOGEN + ,HIGHPRESSUREMERCURY + ,HIGHPRESSURESODIUM + ,LED + ,METALHALIDE + ,OLED + ,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 + (DIRECTIONSOURCE + ,POINTSOURCE + ,SECURITYLIGHTING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLiquidTerminalTypeEnum = ENUMERATION OF + (HOSEREEL + ,LOADINGARM + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLoadGroupTypeEnum = ENUMERATION OF + (LOAD_CASE + ,LOAD_COMBINATION + ,LOAD_GROUP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcLogicalOperatorEnum = ENUMERATION OF + (LOGICALAND + ,LOGICALNOTAND + ,LOGICALNOTOR + ,LOGICALOR + ,LOGICALXOR); +END_TYPE; + +TYPE IfcMarineFacilityTypeEnum = ENUMERATION OF + (BARRIERBEACH + ,BREAKWATER + ,CANAL + ,DRYDOCK + ,FLOATINGDOCK + ,HYDROLIFT + ,JETTY + ,LAUNCHRECOVERY + ,MARINEDEFENCE + ,NAVIGATIONALCHANNEL + ,PORT + ,QUAY + ,REVETMENT + ,SHIPLIFT + ,SHIPLOCK + ,SHIPYARD + ,SLIPWAY + ,WATERWAY + ,WATERWAYSHIPLIFT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMarinePartTypeEnum = ENUMERATION OF + (ABOVEWATERLINE + ,ANCHORAGE + ,APPROACHCHANNEL + ,BELOWWATERLINE + ,BERTHINGSTRUCTURE + ,CHAMBER + ,CILL_LEVEL + ,COPELEVEL + ,CORE + ,CREST + ,GATEHEAD + ,GUDINGSTRUCTURE + ,HIGHWATERLINE + ,LANDFIELD + ,LEEWARDSIDE + ,LOWWATERLINE + ,MANUFACTURING + ,NAVIGATIONALAREA + ,PROTECTION + ,SHIPTRANSFER + ,STORAGEAREA + ,VEHICLESERVICING + ,WATERFIELD + ,WEATHERSIDE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMechanicalFastenerTypeEnum = ENUMERATION OF + (ANCHORBOLT + ,BOLT + ,CHAIN + ,COUPLER + ,DOWEL + ,NAIL + ,NAILPLATE + ,RAILFASTENING + ,RAILJOINT + ,RIVET + ,ROPE + ,SCREW + ,SHEARCONNECTOR + ,STAPLE + ,STUDSHEARCONNECTOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMedicalDeviceTypeEnum = ENUMERATION OF + (AIRSTATION + ,FEEDAIRUNIT + ,OXYGENGENERATOR + ,OXYGENPLANT + ,VACUUMSTATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMemberTypeEnum = ENUMERATION OF + (ARCH_SEGMENT + ,BRACE + ,CHORD + ,COLLAR + ,MEMBER + ,MULLION + ,PLATE + ,POST + ,PURLIN + ,RAFTER + ,STAY_CABLE + ,STIFFENING_RIB + ,STRINGER + ,STRUCTURALCABLE + ,STRUT + ,STUD + ,SUSPENDER + ,SUSPENSION_CABLE + ,TIEBAR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMobileTelecommunicationsApplianceTypeEnum = ENUMERATION OF + (ACCESSPOINT + ,BASEBANDUNIT + ,BASETRANSCEIVERSTATION + ,E_UTRAN_NODE_B + ,GATEWAY_GPRS_SUPPORT_NODE + ,MASTERUNIT + ,MOBILESWITCHINGCENTER + ,MSCSERVER + ,PACKETCONTROLUNIT + ,REMOTERADIOUNIT + ,REMOTEUNIT + ,SERVICE_GPRS_SUPPORT_NODE + ,SUBSCRIBERSERVER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMooringDeviceTypeEnum = ENUMERATION OF + (BOLLARD + ,LINETENSIONER + ,MAGNETICDEVICE + ,MOORINGHOOKS + ,VACUUMDEVICE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcMotorConnectionTypeEnum = ENUMERATION OF + (BELTDRIVE + ,COUPLING + ,DIRECTDRIVE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcNavigationElementTypeEnum = ENUMERATION OF + (BEACON + ,BUOY + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcObjectTypeEnum = ENUMERATION OF + (ACTOR + ,CONTROL + ,GROUP + ,PROCESS + ,PRODUCT + ,PROJECT + ,RESOURCE + ,NOTDEFINED); +END_TYPE; + +TYPE IfcObjectiveEnum = ENUMERATION OF + (CODECOMPLIANCE + ,CODEWAIVER + ,DESIGNINTENT + ,EXTERNAL + ,HEALTHANDSAFETY + ,MERGECONFLICT + ,MODELVIEW + ,PARAMETER + ,REQUIREMENT + ,SPECIFICATION + ,TRIGGERCONDITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcOccupantTypeEnum = ENUMERATION OF + (ASSIGNEE + ,ASSIGNOR + ,LESSEE + ,LESSOR + ,LETTINGAGENT + ,OWNER + ,TENANT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcOpeningElementTypeEnum = ENUMERATION OF + (OPENING + ,RECESS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcOutletTypeEnum = ENUMERATION OF + (AUDIOVISUALOUTLET + ,COMMUNICATIONSOUTLET + ,DATAOUTLET + ,POWEROUTLET + ,TELEPHONEOUTLET + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPavementTypeEnum = ENUMERATION OF + (FLEXIBLE + ,RIGID + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPerformanceHistoryTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF + (GRILL + ,LOUVER + ,SCREEN + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPermitTypeEnum = ENUMERATION OF + (ACCESS + ,BUILDING + ,WORK + ,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 + (BORED + ,COHESION + ,DRIVEN + ,FRICTION + ,JETGROUTING + ,SUPPORT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPipeFittingTypeEnum = ENUMERATION OF + (BEND + ,CONNECTOR + ,ENTRY + ,EXIT + ,JUNCTION + ,OBSTRUCTION + ,TRANSITION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPipeSegmentTypeEnum = ENUMERATION OF + (CULVERT + ,FLEXIBLESEGMENT + ,GUTTER + ,RIGIDSEGMENT + ,SPOOL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPlateTypeEnum = ENUMERATION OF + (BASE_PLATE + ,COVER_PLATE + ,CURTAIN_PANEL + ,FLANGE_PLATE + ,GUSSET_PLATE + ,SHEET + ,SPLICE_PLATE + ,STIFFENER_PLATE + ,WEB_PLATE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPreferredSurfaceCurveRepresentation = ENUMERATION OF + (CURVE3D + ,PCURVE_S1 + ,PCURVE_S2); +END_TYPE; + +TYPE IfcProcedureTypeEnum = ENUMERATION OF + (ADVICE_CAUTION + ,ADVICE_NOTE + ,ADVICE_WARNING + ,CALIBRATION + ,DIAGNOSTIC + ,SHUTDOWN + ,STARTUP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcProfileTypeEnum = ENUMERATION OF + (AREA + ,CURVE); +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 IfcProjectionElementTypeEnum = ENUMERATION OF + (BLISTER + ,DEVIATOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPropertySetTemplateTypeEnum = ENUMERATION OF + (PSET_MATERIALDRIVEN + ,PSET_OCCURRENCEDRIVEN + ,PSET_PERFORMANCEDRIVEN + ,PSET_PROFILEDRIVEN + ,PSET_TYPEDRIVENONLY + ,PSET_TYPEDRIVENOVERRIDE + ,QTO_OCCURRENCEDRIVEN + ,QTO_TYPEDRIVENONLY + ,QTO_TYPEDRIVENOVERRIDE + ,NOTDEFINED); +END_TYPE; + +TYPE IfcProtectiveDeviceTrippingUnitTypeEnum = ENUMERATION OF + (ELECTROMAGNETIC + ,ELECTRONIC + ,RESIDUALCURRENT + ,THERMAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF + (ANTI_ARCING_DEVICE + ,CIRCUITBREAKER + ,EARTHINGSWITCH + ,EARTHLEAKAGECIRCUITBREAKER + ,FUSEDISCONNECTOR + ,RESIDUALCURRENTCIRCUITBREAKER + ,RESIDUALCURRENTSWITCH + ,SPARKGAP + ,VARISTOR + ,VOLTAGELIMITER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcPumpTypeEnum = ENUMERATION OF + (CIRCULATOR + ,ENDSUCTION + ,SPLITCASE + ,SUBMERSIBLEPUMP + ,SUMPPUMP + ,VERTICALINLINE + ,VERTICALTURBINE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRailTypeEnum = ENUMERATION OF + (BLADE + ,CHECKRAIL + ,GUARDRAIL + ,RACKRAIL + ,RAIL + ,STOCKRAIL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRailingTypeEnum = ENUMERATION OF + (BALUSTRADE + ,FENCE + ,GUARDRAIL + ,HANDRAIL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRailwayPartTypeEnum = ENUMERATION OF + (DILATATIONSUPERSTRUCTURE + ,LINESIDESTRUCTURE + ,LINESIDESTRUCTUREPART + ,PLAINTRACKSUPERSTRUCTURE + ,SUPERSTRUCTURE + ,TRACKSTRUCTURE + ,TRACKSTRUCTUREPART + ,TURNOUTSUPERSTRUCTURE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRailwayTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRampFlightTypeEnum = ENUMERATION OF + (SPIRAL + ,STRAIGHT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRampTypeEnum = ENUMERATION OF + (HALF_TURN_RAMP + ,QUARTER_TURN_RAMP + ,SPIRAL_RAMP + ,STRAIGHT_RUN_RAMP + ,TWO_QUARTER_TURN_RAMP + ,TWO_STRAIGHT_RUN_RAMP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRecurrenceTypeEnum = ENUMERATION OF + (BY_DAY_COUNT + ,BY_WEEKDAY_COUNT + ,DAILY + ,MONTHLY_BY_DAY_OF_MONTH + ,MONTHLY_BY_POSITION + ,WEEKLY + ,YEARLY_BY_DAY_OF_MONTH + ,YEARLY_BY_POSITION); +END_TYPE; + +TYPE IfcReferentTypeEnum = ENUMERATION OF + (BOUNDARY + ,INTERSECTION + ,KILOPOINT + ,LANDMARK + ,MILEPOINT + ,POSITION + ,REFERENCEMARKER + ,STATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReflectanceMethodEnum = ENUMERATION OF + (BLINN + ,FLAT + ,GLASS + ,MATT + ,METAL + ,MIRROR + ,PHONG + ,PHYSICAL + ,PLASTIC + ,STRAUSS + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReinforcedSoilTypeEnum = ENUMERATION OF + (DYNAMICALLYCOMPACTED + ,GROUTED + ,REPLACED + ,ROLLERCOMPACTED + ,SURCHARGEPRELOADED + ,VERTICALLYDRAINED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReinforcingBarRoleEnum = ENUMERATION OF + (ANCHORING + ,EDGE + ,LIGATURE + ,MAIN + ,PUNCHING + ,RING + ,SHEAR + ,STUD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF + (PLAIN + ,TEXTURED); +END_TYPE; + +TYPE IfcReinforcingBarTypeEnum = ENUMERATION OF + (ANCHORING + ,EDGE + ,LIGATURE + ,MAIN + ,PUNCHING + ,RING + ,SHEAR + ,SPACEBAR + ,STUD + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcReinforcingMeshTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRoadPartTypeEnum = ENUMERATION OF + (BICYCLECROSSING + ,BUS_STOP + ,CARRIAGEWAY + ,CENTRALISLAND + ,CENTRALRESERVE + ,HARDSHOULDER + ,INTERSECTION + ,LAYBY + ,PARKINGBAY + ,PASSINGBAY + ,PEDESTRIAN_CROSSING + ,RAILWAYCROSSING + ,REFUGEISLAND + ,ROADSEGMENT + ,ROADSIDE + ,ROADSIDEPART + ,ROADWAYPLATEAU + ,ROUNDABOUT + ,SHOULDER + ,SIDEWALK + ,SOFTSHOULDER + ,TOLLPLAZA + ,TRAFFICISLAND + ,TRAFFICLANE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRoadTypeEnum = ENUMERATION OF + (USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcRoleEnum = ENUMERATION OF + (ARCHITECT + ,BUILDINGOPERATOR + ,BUILDINGOWNER + ,CIVILENGINEER + ,CLIENT + ,COMMISSIONINGENGINEER + ,CONSTRUCTIONMANAGER + ,CONSULTANT + ,CONTRACTOR + ,COSTENGINEER + ,ELECTRICALENGINEER + ,ENGINEER + ,FACILITIESMANAGER + ,FIELDCONSTRUCTIONMANAGER + ,MANUFACTURER + ,MECHANICALENGINEER + ,OWNER + ,PROJECTMANAGER + ,RESELLER + ,STRUCTURALENGINEER + ,SUBCONTRACTOR + ,SUPPLIER + ,USERDEFINED); +END_TYPE; + +TYPE IfcRoofTypeEnum = ENUMERATION OF + (BARREL_ROOF + ,BUTTERFLY_ROOF + ,DOME_ROOF + ,FLAT_ROOF + ,FREEFORM + ,GABLE_ROOF + ,GAMBREL_ROOF + ,HIPPED_GABLE_ROOF + ,HIP_ROOF + ,MANSARD_ROOF + ,PAVILION_ROOF + ,RAINBOW_ROOF + ,SHED_ROOF + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSIPrefix = ENUMERATION OF + (ATTO + ,CENTI + ,DECA + ,DECI + ,EXA + ,FEMTO + ,GIGA + ,HECTO + ,KILO + ,MEGA + ,MICRO + ,MILLI + ,NANO + ,PETA + ,PICO + ,TERA); +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 + ,SANITARYFOUNTAIN + ,SHOWER + ,SINK + ,TOILETPAN + ,URINAL + ,WASHHANDBASIN + ,WCSEAT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSectionTypeEnum = ENUMERATION OF + (TAPERED + ,UNIFORM); +END_TYPE; + +TYPE IfcSensorTypeEnum = ENUMERATION OF + (CO2SENSOR + ,CONDUCTANCESENSOR + ,CONTACTSENSOR + ,COSENSOR + ,EARTHQUAKESENSOR + ,FIRESENSOR + ,FLOWSENSOR + ,FOREIGNOBJECTDETECTIONSENSOR + ,FROSTSENSOR + ,GASSENSOR + ,HEATSENSOR + ,HUMIDITYSENSOR + ,IDENTIFIERSENSOR + ,IONCONCENTRATIONSENSOR + ,LEVELSENSOR + ,LIGHTSENSOR + ,MOISTURESENSOR + ,MOVEMENTSENSOR + ,OBSTACLESENSOR + ,PHSENSOR + ,PRESSURESENSOR + ,RADIATIONSENSOR + ,RADIOACTIVITYSENSOR + ,RAINSENSOR + ,SMOKESENSOR + ,SNOWDEPTHSENSOR + ,SOUNDSENSOR + ,TEMPERATURESENSOR + ,TRAINSENSOR + ,TURNOUTCLOSURESENSOR + ,WHEELSENSOR + ,WINDSENSOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSequenceEnum = ENUMERATION OF + (FINISH_FINISH + ,FINISH_START + ,START_FINISH + ,START_START + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcShadingDeviceTypeEnum = ENUMERATION OF + (AWNING + ,JALOUSIE + ,SHUTTER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSignTypeEnum = ENUMERATION OF + (MARKER + ,MIRROR + ,PICTORAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSignalTypeEnum = ENUMERATION OF + (AUDIO + ,MIXED + ,VISUAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSimplePropertyTemplateTypeEnum = ENUMERATION OF + (P_BOUNDEDVALUE + ,P_ENUMERATEDVALUE + ,P_LISTVALUE + ,P_REFERENCEVALUE + ,P_SINGLEVALUE + ,P_TABLEVALUE + ,Q_AREA + ,Q_COUNT + ,Q_LENGTH + ,Q_NUMBER + ,Q_TIME + ,Q_VOLUME + ,Q_WEIGHT); +END_TYPE; + +TYPE IfcSlabTypeEnum = ENUMERATION OF + (APPROACH_SLAB + ,BASESLAB + ,FLOOR + ,LANDING + ,PAVING + ,ROOF + ,SIDEWALK + ,TRACKSLAB + ,WEARING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSolarDeviceTypeEnum = ENUMERATION OF + (SOLARCOLLECTOR + ,SOLARPANEL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF + (CONVECTOR + ,RADIATOR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSpaceTypeEnum = ENUMERATION OF + (BERTH + ,EXTERNAL + ,GFA + ,INTERNAL + ,PARKING + ,SPACE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSpatialZoneTypeEnum = ENUMERATION OF + (CONSTRUCTION + ,FIRESAFETY + ,INTERFERENCE + ,LIGHTING + ,OCCUPANCY + ,RESERVATION + ,SECURITY + ,THERMAL + ,TRANSPORT + ,VENTILATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStackTerminalTypeEnum = ENUMERATION OF + (BIRDCAGE + ,COWL + ,RAINWATERHOPPER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStairFlightTypeEnum = ENUMERATION OF + (CURVED + ,FREEFORM + ,SPIRAL + ,STRAIGHT + ,WINDER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStairTypeEnum = ENUMERATION OF + (CURVED_RUN_STAIR + ,DOUBLE_RETURN_STAIR + ,HALF_TURN_STAIR + ,HALF_WINDING_STAIR + ,LADDER + ,QUARTER_TURN_STAIR + ,QUARTER_WINDING_STAIR + ,SPIRAL_STAIR + ,STRAIGHT_RUN_STAIR + ,THREE_QUARTER_TURN_STAIR + ,THREE_QUARTER_WINDING_STAIR + ,TWO_CURVED_RUN_STAIR + ,TWO_QUARTER_TURN_STAIR + ,TWO_QUARTER_WINDING_STAIR + ,TWO_STRAIGHT_RUN_STAIR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStateEnum = ENUMERATION OF + (LOCKED + ,READONLY + ,READONLYLOCKED + ,READWRITE + ,READWRITELOCKED); +END_TYPE; + +TYPE IfcStructuralCurveActivityTypeEnum = ENUMERATION OF + (CONST + ,DISCRETE + ,EQUIDISTANT + ,LINEAR + ,PARABOLA + ,POLYGONAL + ,SINUS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStructuralCurveMemberTypeEnum = ENUMERATION OF + (CABLE + ,COMPRESSION_MEMBER + ,PIN_JOINED_MEMBER + ,RIGID_JOINED_MEMBER + ,TENSION_MEMBER + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStructuralSurfaceActivityTypeEnum = ENUMERATION OF + (BILINEAR + ,CONST + ,DISCRETE + ,ISOCONTOUR + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcStructuralSurfaceMemberTypeEnum = ENUMERATION OF + (BENDING_ELEMENT + ,MEMBRANE_ELEMENT + ,SHELL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSubContractResourceTypeEnum = ENUMERATION OF + (PURCHASE + ,WORK + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSurfaceFeatureTypeEnum = ENUMERATION OF + (DEFECT + ,HATCHMARKING + ,LINEMARKING + ,MARK + ,NONSKIDSURFACING + ,PAVEMENTSURFACEMARKING + ,RUMBLESTRIP + ,SYMBOLMARKING + ,TAG + ,TRANSVERSERUMBLESTRIP + ,TREATMENT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSurfaceSide = ENUMERATION OF + (BOTH + ,NEGATIVE + ,POSITIVE); +END_TYPE; + +TYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF + (CONTACTOR + ,DIMMERSWITCH + ,EMERGENCYSTOP + ,KEYPAD + ,MOMENTARYSWITCH + ,RELAY + ,SELECTORSWITCH + ,STARTER + ,START_AND_STOP_EQUIPMENT + ,SWITCHDISCONNECTOR + ,TOGGLESWITCH + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcSystemFurnitureElementTypeEnum = ENUMERATION OF + (PANEL + ,SUBRACK + ,WORKSURFACE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTankTypeEnum = ENUMERATION OF + (BASIN + ,BREAKPRESSURE + ,EXPANSION + ,FEEDANDEXPANSION + ,OILRETENTIONTRAY + ,PRESSUREVESSEL + ,STORAGE + ,VESSEL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTaskDurationEnum = ENUMERATION OF + (ELAPSEDTIME + ,WORKTIME + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTaskTypeEnum = ENUMERATION OF + (ADJUSTMENT + ,ATTENDANCE + ,CALIBRATION + ,CONSTRUCTION + ,DEMOLITION + ,DISMANTLE + ,DISPOSAL + ,EMERGENCY + ,INSPECTION + ,INSTALLATION + ,LOGISTIC + ,MAINTENANCE + ,MOVE + ,OPERATION + ,REMOVAL + ,RENOVATION + ,SAFETY + ,SHUTDOWN + ,STARTUP + ,TESTING + ,TROUBLESHOOTING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTendonAnchorTypeEnum = ENUMERATION OF + (COUPLER + ,FIXED_END + ,TENSIONING_END + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTendonConduitTypeEnum = ENUMERATION OF + (COUPLER + ,DIABOLO + ,DUCT + ,GROUTING_DUCT + ,TRUMPET + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTendonTypeEnum = ENUMERATION OF + (BAR + ,COATED + ,STRAND + ,WIRE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTextPath = ENUMERATION OF + (DOWN + ,LEFT + ,RIGHT + ,UP); +END_TYPE; + +TYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF + (CONTINUOUS + ,DISCRETE + ,DISCRETEBINARY + ,PIECEWISEBINARY + ,PIECEWISECONSTANT + ,PIECEWISECONTINUOUS + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTrackElementTypeEnum = ENUMERATION OF + (BLOCKINGDEVICE + ,DERAILER + ,FROG + ,HALF_SET_OF_BLADES + ,SLEEPER + ,SPEEDREGULATOR + ,TRACKENDOFALIGNMENT + ,VEHICLESTOP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTransformerTypeEnum = ENUMERATION OF + (CHOPPER + ,COMBINED + ,CURRENT + ,FREQUENCY + ,INVERTER + ,RECTIFIER + ,VOLTAGE + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcTransitionCode = ENUMERATION OF + (CONTINUOUS + ,CONTSAMEGRADIENT + ,CONTSAMEGRADIENTSAMECURVATURE + ,DISCONTINUOUS); +END_TYPE; + +TYPE IfcTransportElementTypeEnum = ENUMERATION OF + (CRANEWAY + ,ELEVATOR + ,ESCALATOR + ,HAULINGGEAR + ,LIFTINGGEAR + ,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 IfcUnitaryControlElementTypeEnum = ENUMERATION OF + (ALARMPANEL + ,BASESTATIONCONTROLLER + ,COMBINED + ,CONTROLPANEL + ,GASDETECTIONPANEL + ,HUMIDISTAT + ,INDICATORPANEL + ,MIMICPANEL + ,THERMOSTAT + ,WEATHERSTATION + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF + (AIRCONDITIONINGUNIT + ,AIRHANDLER + ,DEHUMIDIFIER + ,ROOFTOPUNIT + ,SPLITSYSTEM + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcValveTypeEnum = ENUMERATION OF + (AIRRELEASE + ,ANTIVACUUM + ,CHANGEOVER + ,CHECK + ,COMMISSIONING + ,DIVERTING + ,DOUBLECHECK + ,DOUBLEREGULATING + ,DRAWOFFCOCK + ,FAUCET + ,FLUSHING + ,GASCOCK + ,GASTAP + ,ISOLATING + ,MIXING + ,PRESSUREREDUCING + ,PRESSURERELIEF + ,REGULATING + ,SAFETYCUTOFF + ,STEAMTRAP + ,STOPCOCK + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcVehicleTypeEnum = ENUMERATION OF + (CARGO + ,ROLLINGSTOCK + ,VEHICLE + ,VEHICLEAIR + ,VEHICLEMARINE + ,VEHICLETRACKED + ,VEHICLEWHEELED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcVibrationDamperTypeEnum = ENUMERATION OF + (AXIAL_YIELD + ,BENDING_YIELD + ,FRICTION + ,RUBBER + ,SHEAR_YIELD + ,VISCOUS + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF + (BASE + ,COMPRESSION + ,SPRING + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcVirtualElementTypeEnum = ENUMERATION OF + (BOUNDARY + ,CLEARANCE + ,PROVISIONFORVOID + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcVoidingFeatureTypeEnum = ENUMERATION OF + (CHAMFER + ,CUTOUT + ,EDGE + ,HOLE + ,MITER + ,NOTCH + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWallTypeEnum = ENUMERATION OF + (ELEMENTEDWALL + ,MOVABLE + ,PARAPET + ,PARTITIONING + ,PLUMBINGWALL + ,POLYGONAL + ,RETAININGWALL + ,SHEAR + ,SOLIDWALL + ,STANDARD + ,WAVEWALL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWasteTerminalTypeEnum = ENUMERATION OF + (FLOORTRAP + ,FLOORWASTE + ,GULLYSUMP + ,GULLYTRAP + ,ROOFDRAIN + ,WASTEDISPOSALUNIT + ,WASTETRAP + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowPanelOperationEnum = ENUMERATION OF + (BOTTOMHUNG + ,FIXEDCASEMENT + ,OTHEROPERATION + ,PIVOTHORIZONTAL + ,PIVOTVERTICAL + ,REMOVABLECASEMENT + ,SIDEHUNGLEFTHAND + ,SIDEHUNGRIGHTHAND + ,SLIDINGHORIZONTAL + ,SLIDINGVERTICAL + ,TILTANDTURNLEFTHAND + ,TILTANDTURNRIGHTHAND + ,TOPHUNG + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowPanelPositionEnum = ENUMERATION OF + (BOTTOM + ,LEFT + ,MIDDLE + ,RIGHT + ,TOP + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowStyleConstructionEnum = ENUMERATION OF + (ALUMINIUM + ,ALUMINIUM_WOOD + ,HIGH_GRADE_STEEL + ,OTHER_CONSTRUCTION + ,PLASTIC + ,STEEL + ,WOOD + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowStyleOperationEnum = ENUMERATION OF + (DOUBLE_PANEL_HORIZONTAL + ,DOUBLE_PANEL_VERTICAL + ,SINGLE_PANEL + ,TRIPLE_PANEL_BOTTOM + ,TRIPLE_PANEL_HORIZONTAL + ,TRIPLE_PANEL_LEFT + ,TRIPLE_PANEL_RIGHT + ,TRIPLE_PANEL_TOP + ,TRIPLE_PANEL_VERTICAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowTypeEnum = ENUMERATION OF + (LIGHTDOME + ,SKYLIGHT + ,WINDOW + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWindowTypePartitioningEnum = ENUMERATION OF + (DOUBLE_PANEL_HORIZONTAL + ,DOUBLE_PANEL_VERTICAL + ,SINGLE_PANEL + ,TRIPLE_PANEL_BOTTOM + ,TRIPLE_PANEL_HORIZONTAL + ,TRIPLE_PANEL_LEFT + ,TRIPLE_PANEL_RIGHT + ,TRIPLE_PANEL_TOP + ,TRIPLE_PANEL_VERTICAL + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWorkCalendarTypeEnum = ENUMERATION OF + (FIRSTSHIFT + ,SECONDSHIFT + ,THIRDSHIFT + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWorkPlanTypeEnum = ENUMERATION OF + (ACTUAL + ,BASELINE + ,PLANNED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcWorkScheduleTypeEnum = ENUMERATION OF + (ACTUAL + ,BASELINE + ,PLANNED + ,USERDEFINED + ,NOTDEFINED); +END_TYPE; + +TYPE IfcActorSelect = SELECT + (IfcOrganization + ,IfcPerson + ,IfcPersonAndOrganization); +END_TYPE; + +TYPE IfcAppliedValueSelect = SELECT + (IfcMeasureWithUnit + ,IfcReference + ,IfcValue); +END_TYPE; + +TYPE IfcAxis2Placement = SELECT + (IfcAxis2Placement2D + ,IfcAxis2Placement3D); +END_TYPE; + +TYPE IfcBendingParameterSelect = SELECT + (IfcLengthMeasure + ,IfcPlaneAngleMeasure); +END_TYPE; + +TYPE IfcBooleanOperand = SELECT + (IfcBooleanResult + ,IfcCsgPrimitive3D + ,IfcHalfSpaceSolid + ,IfcSolidModel + ,IfcTessellatedFaceSet); +END_TYPE; + +TYPE IfcClassificationReferenceSelect = SELECT + (IfcClassification + ,IfcClassificationReference); +END_TYPE; + +TYPE IfcClassificationSelect = SELECT + (IfcClassification + ,IfcClassificationReference); +END_TYPE; + +TYPE IfcColour = SELECT + (IfcColourSpecification + ,IfcPreDefinedColour); +END_TYPE; + +TYPE IfcColourOrFactor = SELECT + (IfcColourRgb + ,IfcNormalisedRatioMeasure); +END_TYPE; + +TYPE IfcCoordinateReferenceSystemSelect = SELECT + (IfcCoordinateReferenceSystem + ,IfcGeometricRepresentationContext); +END_TYPE; + +TYPE IfcCsgSelect = SELECT + (IfcBooleanResult + ,IfcCsgPrimitive3D); +END_TYPE; + +TYPE IfcCurveFontOrScaledCurveFontSelect = SELECT + (IfcCurveStyleFontAndScaling + ,IfcCurveStyleFontSelect); +END_TYPE; + +TYPE IfcCurveMeasureSelect = SELECT + (IfcNonNegativeLengthMeasure + ,IfcParameterValue); +END_TYPE; + +TYPE IfcCurveOnSurface = SELECT + (IfcCompositeCurveOnSurface + ,IfcPcurve + ,IfcSurfaceCurve); +END_TYPE; + +TYPE IfcCurveOrEdgeCurve = SELECT + (IfcBoundedCurve + ,IfcEdgeCurve); +END_TYPE; + +TYPE IfcCurveStyleFontSelect = SELECT + (IfcCurveStyleFont + ,IfcPreDefinedCurveFont); +END_TYPE; + +TYPE IfcDefinitionSelect = SELECT + (IfcObjectDefinition + ,IfcPropertyDefinition); +END_TYPE; + +TYPE IfcDerivedMeasureValue = SELECT + (IfcAbsorbedDoseMeasure + ,IfcAccelerationMeasure + ,IfcAngularVelocityMeasure + ,IfcAreaDensityMeasure + ,IfcCompoundPlaneAngleMeasure + ,IfcCurvatureMeasure + ,IfcDoseEquivalentMeasure + ,IfcDynamicViscosityMeasure + ,IfcElectricCapacitanceMeasure + ,IfcElectricChargeMeasure + ,IfcElectricConductanceMeasure + ,IfcElectricResistanceMeasure + ,IfcElectricVoltageMeasure + ,IfcEnergyMeasure + ,IfcForceMeasure + ,IfcFrequencyMeasure + ,IfcHeatFluxDensityMeasure + ,IfcHeatingValueMeasure + ,IfcIlluminanceMeasure + ,IfcInductanceMeasure + ,IfcIntegerCountRateMeasure + ,IfcIonConcentrationMeasure + ,IfcIsothermalMoistureCapacityMeasure + ,IfcKinematicViscosityMeasure + ,IfcLinearForceMeasure + ,IfcLinearMomentMeasure + ,IfcLinearStiffnessMeasure + ,IfcLinearVelocityMeasure + ,IfcLuminousFluxMeasure + ,IfcLuminousIntensityDistributionMeasure + ,IfcMagneticFluxDensityMeasure + ,IfcMagneticFluxMeasure + ,IfcMassDensityMeasure + ,IfcMassFlowRateMeasure + ,IfcMassPerLengthMeasure + ,IfcModulusOfElasticityMeasure + ,IfcModulusOfLinearSubgradeReactionMeasure + ,IfcModulusOfRotationalSubgradeReactionMeasure + ,IfcModulusOfSubgradeReactionMeasure + ,IfcMoistureDiffusivityMeasure + ,IfcMolecularWeightMeasure + ,IfcMomentOfInertiaMeasure + ,IfcMonetaryMeasure + ,IfcPHMeasure + ,IfcPlanarForceMeasure + ,IfcPowerMeasure + ,IfcPressureMeasure + ,IfcRadioActivityMeasure + ,IfcRotationalFrequencyMeasure + ,IfcRotationalMassMeasure + ,IfcRotationalStiffnessMeasure + ,IfcSectionModulusMeasure + ,IfcSectionalAreaIntegralMeasure + ,IfcShearModulusMeasure + ,IfcSoundPowerLevelMeasure + ,IfcSoundPowerMeasure + ,IfcSoundPressureLevelMeasure + ,IfcSoundPressureMeasure + ,IfcSpecificHeatCapacityMeasure + ,IfcTemperatureGradientMeasure + ,IfcTemperatureRateOfChangeMeasure + ,IfcThermalAdmittanceMeasure + ,IfcThermalConductivityMeasure + ,IfcThermalExpansionCoefficientMeasure + ,IfcThermalResistanceMeasure + ,IfcThermalTransmittanceMeasure + ,IfcTorqueMeasure + ,IfcVaporPermeabilityMeasure + ,IfcVolumetricFlowRateMeasure + ,IfcWarpingConstantMeasure + ,IfcWarpingMomentMeasure); +END_TYPE; + +TYPE IfcDocumentSelect = SELECT + (IfcDocumentInformation + ,IfcDocumentReference); +END_TYPE; + +TYPE IfcFillStyleSelect = SELECT + (IfcColour + ,IfcExternallyDefinedHatchStyle + ,IfcFillAreaStyleHatching + ,IfcFillAreaStyleTiles); +END_TYPE; + +TYPE IfcGeometricSetSelect = SELECT + (IfcCurve + ,IfcPoint + ,IfcSurface); +END_TYPE; + +TYPE IfcGridPlacementDirectionSelect = SELECT + (IfcDirection + ,IfcVirtualGridIntersection); +END_TYPE; + +TYPE IfcHatchLineDistanceSelect = SELECT + (IfcPositiveLengthMeasure + ,IfcVector); +END_TYPE; + +TYPE IfcInterferenceSelect = SELECT + (IfcElement + ,IfcSpatialElement); +END_TYPE; + +TYPE IfcLayeredItem = SELECT + (IfcRepresentation + ,IfcRepresentationItem); +END_TYPE; + +TYPE IfcLibrarySelect = SELECT + (IfcLibraryInformation + ,IfcLibraryReference); +END_TYPE; + +TYPE IfcLightDistributionDataSourceSelect = SELECT + (IfcExternalReference + ,IfcLightIntensityDistribution); +END_TYPE; + +TYPE IfcMaterialSelect = SELECT + (IfcMaterialDefinition + ,IfcMaterialList + ,IfcMaterialUsageDefinition); +END_TYPE; + +TYPE IfcMeasureValue = SELECT + (IfcAmountOfSubstanceMeasure + ,IfcAreaMeasure + ,IfcComplexNumber + ,IfcContextDependentMeasure + ,IfcCountMeasure + ,IfcDescriptiveMeasure + ,IfcElectricCurrentMeasure + ,IfcLengthMeasure + ,IfcLuminousIntensityMeasure + ,IfcMassMeasure + ,IfcNonNegativeLengthMeasure + ,IfcNormalisedRatioMeasure + ,IfcNumericMeasure + ,IfcParameterValue + ,IfcPlaneAngleMeasure + ,IfcPositiveLengthMeasure + ,IfcPositivePlaneAngleMeasure + ,IfcPositiveRatioMeasure + ,IfcRatioMeasure + ,IfcSolidAngleMeasure + ,IfcThermodynamicTemperatureMeasure + ,IfcTimeMeasure + ,IfcVolumeMeasure); +END_TYPE; + +TYPE IfcMetricValueSelect = SELECT + (IfcAppliedValue + ,IfcMeasureWithUnit + ,IfcReference + ,IfcTable + ,IfcTimeSeries + ,IfcValue); +END_TYPE; + +TYPE IfcModulusOfRotationalSubgradeReactionSelect = SELECT + (IfcBoolean + ,IfcModulusOfRotationalSubgradeReactionMeasure); +END_TYPE; + +TYPE IfcModulusOfSubgradeReactionSelect = SELECT + (IfcBoolean + ,IfcModulusOfSubgradeReactionMeasure); +END_TYPE; + +TYPE IfcModulusOfTranslationalSubgradeReactionSelect = SELECT + (IfcBoolean + ,IfcModulusOfLinearSubgradeReactionMeasure); +END_TYPE; + +TYPE IfcObjectReferenceSelect = SELECT + (IfcAddress + ,IfcAppliedValue + ,IfcExternalReference + ,IfcMaterialDefinition + ,IfcOrganization + ,IfcPerson + ,IfcPersonAndOrganization + ,IfcTable + ,IfcTimeSeries); +END_TYPE; + +TYPE IfcPointOrVertexPoint = SELECT + (IfcPoint + ,IfcVertexPoint); +END_TYPE; + +TYPE IfcProcessSelect = SELECT + (IfcProcess + ,IfcTypeProcess); +END_TYPE; + +TYPE IfcProductRepresentationSelect = SELECT + (IfcProductDefinitionShape + ,IfcRepresentationMap); +END_TYPE; + +TYPE IfcProductSelect = SELECT + (IfcProduct + ,IfcTypeProduct); +END_TYPE; + +TYPE IfcPropertySetDefinitionSelect = SELECT + (IfcPropertySetDefinition + ,IfcPropertySetDefinitionSet); +END_TYPE; + +TYPE IfcResourceObjectSelect = SELECT + (IfcActorRole + ,IfcAppliedValue + ,IfcApproval + ,IfcConstraint + ,IfcContextDependentUnit + ,IfcConversionBasedUnit + ,IfcExternalInformation + ,IfcExternalReference + ,IfcMaterialDefinition + ,IfcOrganization + ,IfcPerson + ,IfcPersonAndOrganization + ,IfcPhysicalQuantity + ,IfcProfileDef + ,IfcPropertyAbstraction + ,IfcShapeAspect + ,IfcTimeSeries); +END_TYPE; + +TYPE IfcResourceSelect = SELECT + (IfcResource + ,IfcTypeResource); +END_TYPE; + +TYPE IfcRotationalStiffnessSelect = SELECT + (IfcBoolean + ,IfcRotationalStiffnessMeasure); +END_TYPE; + +TYPE IfcSegmentIndexSelect = SELECT + (IfcArcIndex + ,IfcLineIndex); +END_TYPE; + +TYPE IfcShell = SELECT + (IfcClosedShell + ,IfcOpenShell); +END_TYPE; + +TYPE IfcSimpleValue = SELECT + (IfcBinary + ,IfcBoolean + ,IfcDate + ,IfcDateTime + ,IfcDuration + ,IfcIdentifier + ,IfcInteger + ,IfcLabel + ,IfcLogical + ,IfcPositiveInteger + ,IfcReal + ,IfcText + ,IfcTime + ,IfcTimeStamp); +END_TYPE; + +TYPE IfcSizeSelect = SELECT + (IfcDescriptiveMeasure + ,IfcLengthMeasure + ,IfcNormalisedRatioMeasure + ,IfcPositiveLengthMeasure + ,IfcPositiveRatioMeasure + ,IfcRatioMeasure); +END_TYPE; + +TYPE IfcSolidOrShell = SELECT + (IfcClosedShell + ,IfcSolidModel); +END_TYPE; + +TYPE IfcSpaceBoundarySelect = SELECT + (IfcExternalSpatialElement + ,IfcSpace); +END_TYPE; + +TYPE IfcSpatialReferenceSelect = SELECT + (IfcGroup + ,IfcProduct); +END_TYPE; + +TYPE IfcSpecularHighlightSelect = SELECT + (IfcSpecularExponent + ,IfcSpecularRoughness); +END_TYPE; + +TYPE IfcStructuralActivityAssignmentSelect = SELECT + (IfcElement + ,IfcStructuralItem); +END_TYPE; + +TYPE IfcSurfaceOrFaceSurface = SELECT + (IfcFaceBasedSurfaceModel + ,IfcFaceSurface + ,IfcSurface); +END_TYPE; + +TYPE IfcSurfaceStyleElementSelect = SELECT + (IfcExternallyDefinedSurfaceStyle + ,IfcSurfaceStyleLighting + ,IfcSurfaceStyleRefraction + ,IfcSurfaceStyleShading + ,IfcSurfaceStyleWithTextures); +END_TYPE; + +TYPE IfcTextFontSelect = SELECT + (IfcExternallyDefinedTextFont + ,IfcPreDefinedTextFont); +END_TYPE; + +TYPE IfcTimeOrRatioSelect = SELECT + (IfcDuration + ,IfcRatioMeasure); +END_TYPE; + +TYPE IfcTranslationalStiffnessSelect = SELECT + (IfcBoolean + ,IfcLinearStiffnessMeasure); +END_TYPE; + +TYPE IfcTrimmingSelect = SELECT + (IfcCartesianPoint + ,IfcParameterValue); +END_TYPE; + +TYPE IfcUnit = SELECT + (IfcDerivedUnit + ,IfcMonetaryUnit + ,IfcNamedUnit); +END_TYPE; + +TYPE IfcValue = SELECT + (IfcDerivedMeasureValue + ,IfcMeasureValue + ,IfcSimpleValue); +END_TYPE; + +TYPE IfcVectorOrDirection = SELECT + (IfcDirection + ,IfcVector); +END_TYPE; + +TYPE IfcWarpingStiffnessSelect = SELECT + (IfcBoolean + ,IfcWarpingMomentMeasure); +END_TYPE; + +ENTITY IfcActionRequest + SUBTYPE OF (IfcControl); + PredefinedType : OPTIONAL IfcActionRequestTypeEnum; + Status : OPTIONAL IfcLabel; + LongDescription : OPTIONAL IfcText; +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; + INVERSE + HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; + WHERE + WR1 : (Role <> IfcRoleEnum.USERDEFINED) OR +((Role = IfcRoleEnum.USERDEFINED) AND + EXISTS(SELF.UserDefinedRole)); +END_ENTITY; + +ENTITY IfcActuator + SUBTYPE OF (IfcDistributionControlElement); + PredefinedType : OPTIONAL IfcActuatorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCACTUATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcActuatorType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcActuatorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +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 IfcAdvancedBrep + SUPERTYPE OF (ONEOF + (IfcAdvancedBrepWithVoids)) + SUBTYPE OF (IfcManifoldSolidBrep); + WHERE + HasAdvancedFaces : SIZEOF(QUERY(Afs <* SELF\IfcManifoldSolidBrep.Outer.CfsFaces | + (NOT ('IFC4X3.IFCADVANCEDFACE' IN TYPEOF(Afs))) +)) = 0; +END_ENTITY; + +ENTITY IfcAdvancedBrepWithVoids + SUBTYPE OF (IfcAdvancedBrep); + Voids : SET [1:?] OF IfcClosedShell; + WHERE + VoidsHaveAdvancedFaces : SIZEOF (QUERY (Vsh <* Voids | + SIZEOF (QUERY (Afs <* Vsh.CfsFaces | + (NOT ('IFC4X3.IFCADVANCEDFACE' IN TYPEOF(Afs))) + )) = 0 +)) = 0; +END_ENTITY; + +ENTITY IfcAdvancedFace + SUBTYPE OF (IfcFaceSurface); + WHERE + ApplicableEdgeCurves : SIZEOF(QUERY (ElpFbnds <* + QUERY (Bnds <* SELF\IfcFace.Bounds | + 'IFC4X3.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | + NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | + NOT (SIZEOF (['IFC4X3.IFCLINE', + 'IFC4X3.IFCCONIC', + 'IFC4X3.IFCPOLYLINE', + 'IFC4X3.IFCBSPLINECURVE'] * + TYPEOF(Oe\IfcOrientedEdge.EdgeElement\IfcEdgeCurve.EdgeGeometry)) = 1 ) + )) = 0 +))) = 0; + ApplicableSurface : SIZEOF ( +['IFC4X3.IFCELEMENTARYSURFACE', + 'IFC4X3.IFCSWEPTSURFACE', + 'IFC4X3.IFCBSPLINESURFACE'] * +TYPEOF(SELF\IfcFaceSurface.FaceSurface)) = 1; + RequiresEdgeCurve : SIZEOF(QUERY (ElpFbnds <* + QUERY (Bnds <* SELF\IfcFace.Bounds | + 'IFC4X3.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | + NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | + NOT('IFC4X3.IFCEDGECURVE' IN + TYPEOF(Oe\IfcOrientedEdge.EdgeElement) + ))) = 0 +))) = 0; +END_ENTITY; + +ENTITY IfcAirTerminal + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcAirTerminalTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCAIRTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcAirTerminalBox + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcAirTerminalBoxTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCAIRTERMINALBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcAirTerminalBoxType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcAirTerminalBoxTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcAirTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcAirTerminalTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcAirToAirHeatRecovery + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcAirToAirHeatRecoveryTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcAirToAirHeatRecoveryType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcAirToAirHeatRecoveryTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcAlarm + SUBTYPE OF (IfcDistributionControlElement); + PredefinedType : OPTIONAL IfcAlarmTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCALARMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcAlarmType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcAlarmTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcAlignment + SUBTYPE OF (IfcLinearPositioningElement); + PredefinedType : OPTIONAL IfcAlignmentTypeEnum; +END_ENTITY; + +ENTITY IfcAlignmentCant + SUBTYPE OF (IfcLinearElement); + RailHeadDistance : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcAlignmentCantSegment + SUBTYPE OF (IfcAlignmentParameterSegment); + StartDistAlong : IfcLengthMeasure; + HorizontalLength : IfcNonNegativeLengthMeasure; + StartCantLeft : IfcLengthMeasure; + EndCantLeft : OPTIONAL IfcLengthMeasure; + StartCantRight : IfcLengthMeasure; + EndCantRight : OPTIONAL IfcLengthMeasure; + PredefinedType : IfcAlignmentCantSegmentTypeEnum; +END_ENTITY; + +ENTITY IfcAlignmentHorizontal + SUBTYPE OF (IfcLinearElement); +END_ENTITY; + +ENTITY IfcAlignmentHorizontalSegment + SUBTYPE OF (IfcAlignmentParameterSegment); + StartPoint : IfcCartesianPoint; + StartDirection : IfcPlaneAngleMeasure; + StartRadiusOfCurvature : IfcLengthMeasure; + EndRadiusOfCurvature : IfcLengthMeasure; + SegmentLength : IfcNonNegativeLengthMeasure; + GravityCenterLineHeight : OPTIONAL IfcPositiveLengthMeasure; + PredefinedType : IfcAlignmentHorizontalSegmentTypeEnum; +END_ENTITY; + +ENTITY IfcAlignmentParameterSegment + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAlignmentCantSegment + ,IfcAlignmentHorizontalSegment + ,IfcAlignmentVerticalSegment)); + StartTag : OPTIONAL IfcLabel; + EndTag : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcAlignmentSegment + SUBTYPE OF (IfcLinearElement); + DesignParameters : IfcAlignmentParameterSegment; +END_ENTITY; + +ENTITY IfcAlignmentVertical + SUBTYPE OF (IfcLinearElement); +END_ENTITY; + +ENTITY IfcAlignmentVerticalSegment + SUBTYPE OF (IfcAlignmentParameterSegment); + StartDistAlong : IfcLengthMeasure; + HorizontalLength : IfcNonNegativeLengthMeasure; + StartHeight : IfcLengthMeasure; + StartGradient : IfcRatioMeasure; + EndGradient : IfcRatioMeasure; + RadiusOfCurvature : OPTIONAL IfcLengthMeasure; + PredefinedType : IfcAlignmentVerticalSegmentTypeEnum; +END_ENTITY; + +ENTITY IfcAnnotation + SUBTYPE OF (IfcProduct); + PredefinedType : OPTIONAL IfcAnnotationTypeEnum; + INVERSE + ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; +END_ENTITY; + +ENTITY IfcAnnotationFillArea + SUBTYPE OF (IfcGeometricRepresentationItem); + OuterBoundary : IfcCurve; + InnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve; +END_ENTITY; + +ENTITY IfcApplication; + ApplicationDeveloper : IfcOrganization; + Version : IfcLabel; + ApplicationFullName : IfcLabel; + ApplicationIdentifier : IfcIdentifier; + UNIQUE + UR1 : ApplicationIdentifier; + UR2 : ApplicationFullName, Version; +END_ENTITY; + +ENTITY IfcAppliedValue + SUPERTYPE OF (ONEOF + (IfcCostValue)); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + AppliedValue : OPTIONAL IfcAppliedValueSelect; + UnitBasis : OPTIONAL IfcMeasureWithUnit; + ApplicableDate : OPTIONAL IfcDate; + FixedUntilDate : OPTIONAL IfcDate; + Category : OPTIONAL IfcLabel; + Condition : OPTIONAL IfcLabel; + ArithmeticOperator : OPTIONAL IfcArithmeticOperatorEnum; + Components : OPTIONAL LIST [1:?] OF IfcAppliedValue; + INVERSE + HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; +END_ENTITY; + +ENTITY IfcApproval; + Identifier : OPTIONAL IfcIdentifier; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + TimeOfApproval : OPTIONAL IfcDateTime; + Status : OPTIONAL IfcLabel; + Level : OPTIONAL IfcLabel; + Qualifier : OPTIONAL IfcText; + RequestingApproval : OPTIONAL IfcActorSelect; + GivingApproval : OPTIONAL IfcActorSelect; + INVERSE + HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; + ApprovedObjects : SET [0:?] OF IfcRelAssociatesApproval FOR RelatingApproval; + ApprovedResources : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatingApproval; + IsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApprovals; + Relates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval; + WHERE + HasIdentifierOrName : EXISTS (Identifier) OR EXISTS (Name); +END_ENTITY; + +ENTITY IfcApprovalRelationship + SUBTYPE OF (IfcResourceLevelRelationship); + RelatingApproval : IfcApproval; + RelatedApprovals : SET [1:?] OF IfcApproval; +END_ENTITY; + +ENTITY IfcArbitraryClosedProfileDef + SUPERTYPE OF (ONEOF + (IfcArbitraryProfileDefWithVoids)) + SUBTYPE OF (IfcProfileDef); + OuterCurve : IfcCurve; + WHERE + WR1 : OuterCurve.Dim = 2; + WR2 : NOT('IFC4X3.IFCLINE' IN TYPEOF(OuterCurve)); + WR3 : NOT('IFC4X3.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve)); +END_ENTITY; + +ENTITY IfcArbitraryOpenProfileDef + SUPERTYPE OF (ONEOF + (IfcCenterLineProfileDef)) + SUBTYPE OF (IfcProfileDef); + Curve : IfcBoundedCurve; + WHERE + WR11 : ('IFC4X3.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 | 'IFC4X3.IFCLINE' IN TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcAsset + SUBTYPE OF (IfcGroup); + Identification : OPTIONAL IfcIdentifier; + OriginalValue : OPTIONAL IfcCostValue; + CurrentValue : OPTIONAL IfcCostValue; + TotalReplacementCost : OPTIONAL IfcCostValue; + Owner : OPTIONAL IfcActorSelect; + User : OPTIONAL IfcActorSelect; + ResponsiblePerson : OPTIONAL IfcPerson; + IncorporationDate : OPTIONAL IfcDate; + DepreciatedValue : OPTIONAL IfcCostValue; +END_ENTITY; + +ENTITY IfcAsymmetricIShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + BottomFlangeWidth : IfcPositiveLengthMeasure; + OverallDepth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + BottomFlangeThickness : IfcPositiveLengthMeasure; + BottomFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + TopFlangeWidth : IfcPositiveLengthMeasure; + TopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure; + TopFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + BottomFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + BottomFlangeSlope : OPTIONAL IfcPlaneAngleMeasure; + TopFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + TopFlangeSlope : OPTIONAL IfcPlaneAngleMeasure; + WHERE + ValidBottomFilletRadius : (NOT(EXISTS(BottomFlangeFilletRadius))) OR +(BottomFlangeFilletRadius <= (BottomFlangeWidth - WebThickness)/2.); + ValidFlangeThickness : NOT(EXISTS(TopFlangeThickness)) OR ((BottomFlangeThickness + TopFlangeThickness) < OverallDepth); + ValidTopFilletRadius : (NOT(EXISTS(TopFlangeFilletRadius))) OR +(TopFlangeFilletRadius <= (TopFlangeWidth - WebThickness)/2.); + ValidWebThickness : (WebThickness < BottomFlangeWidth) AND (WebThickness < TopFlangeWidth); +END_ENTITY; + +ENTITY IfcAudioVisualAppliance + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcAudioVisualApplianceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcAudioVisualApplianceType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcAudioVisualApplianceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +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 + AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); + LocationIs3D : SELF\IfcPlacement.Location.Dim = 3; + LocationIsCP : 'IFC4X3.IFCCARTESIANPOINT' IN TYPEOF(SELF\IfcPlacement.Location); +END_ENTITY; + +ENTITY IfcAxis2Placement2D + SUBTYPE OF (IfcPlacement); + RefDirection : OPTIONAL IfcDirection; + DERIVE + P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection); + WHERE + LocationIs2D : SELF\IfcPlacement.Location.Dim = 2; + LocationIsCP : 'IFC4X3.IFCCARTESIANPOINT' IN TYPEOF(SELF\IfcPlacement.Location); + RefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.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 + AxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection))); + AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); + AxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0); + LocationIs3D : SELF\IfcPlacement.Location.Dim = 3; + LocationIsCP : 'IFC4X3.IFCCARTESIANPOINT' IN TYPEOF(SELF\IfcPlacement.Location); + RefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3); +END_ENTITY; + +ENTITY IfcAxis2PlacementLinear + SUBTYPE OF (IfcPlacement); + Axis : OPTIONAL IfcDirection; + RefDirection : OPTIONAL IfcDirection; + WHERE + WR1 : 'IFC4X3.IFCPOINTBYDISTANCEEXPRESSION' IN TYPEOF(SELF\IfcPlacement.Location); + WR2 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0); +END_ENTITY; + +ENTITY IfcBSplineCurve + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBSplineCurveWithKnots)) + SUBTYPE OF (IfcBoundedCurve); + Degree : IfcInteger; + ControlPointsList : LIST [2:?] OF IfcCartesianPoint; + CurveForm : IfcBSplineCurveForm; + ClosedCurve : IfcLogical; + SelfIntersect : IfcLogical; + DERIVE + UpperIndexOnControlPoints : IfcInteger := (SIZEOF(ControlPointsList) - 1); + ControlPoints : ARRAY [0:UpperIndexOnControlPoints] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints); + WHERE + SameDim : SIZEOF(QUERY(Temp <* ControlPointsList | + Temp.Dim <> ControlPointsList[1].Dim)) += 0; +END_ENTITY; + +ENTITY IfcBSplineCurveWithKnots + SUPERTYPE OF (ONEOF + (IfcRationalBSplineCurveWithKnots)) + SUBTYPE OF (IfcBSplineCurve); + KnotMultiplicities : LIST [2:?] OF IfcInteger; + Knots : LIST [2:?] OF IfcParameterValue; + KnotSpec : IfcKnotType; + DERIVE + UpperIndexOnKnots : IfcInteger := SIZEOF(Knots); + WHERE + ConsistentBSpline : IfcConstraintsParamBSpline(Degree, UpperIndexOnKnots, +UpperIndexOnControlPoints, KnotMultiplicities, Knots); + CorrespondingKnotLists : SIZEOF(KnotMultiplicities) = UpperIndexOnKnots; +END_ENTITY; + +ENTITY IfcBSplineSurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBSplineSurfaceWithKnots)) + SUBTYPE OF (IfcBoundedSurface); + UDegree : IfcInteger; + VDegree : IfcInteger; + ControlPointsList : LIST [2:?] OF LIST [2:?] OF IfcCartesianPoint; + SurfaceForm : IfcBSplineSurfaceForm; + UClosed : IfcLogical; + VClosed : IfcLogical; + SelfIntersect : IfcLogical; + DERIVE + UUpper : IfcInteger := SIZEOF(ControlPointsList) - 1; + VUpper : IfcInteger := SIZEOF(ControlPointsList[1]) - 1; + ControlPoints : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcCartesianPoint := IfcMakeArrayOfArray(ControlPointsList, +0,UUpper,0,VUpper); +END_ENTITY; + +ENTITY IfcBSplineSurfaceWithKnots + SUPERTYPE OF (ONEOF + (IfcRationalBSplineSurfaceWithKnots)) + SUBTYPE OF (IfcBSplineSurface); + UMultiplicities : LIST [2:?] OF IfcInteger; + VMultiplicities : LIST [2:?] OF IfcInteger; + UKnots : LIST [2:?] OF IfcParameterValue; + VKnots : LIST [2:?] OF IfcParameterValue; + KnotSpec : IfcKnotType; + DERIVE + KnotVUpper : IfcInteger := SIZEOF(VKnots); + KnotUUpper : IfcInteger := SIZEOF(UKnots); + WHERE + CorrespondingULists : SIZEOF(UMultiplicities) = KnotUUpper; + CorrespondingVLists : SIZEOF(VMultiplicities) = KnotVUpper; + UDirectionConstraints : IfcConstraintsParamBSpline ( + SELF\IfcBSplineSurface.UDegree, KnotUUpper, + SELF\IfcBSplineSurface.UUpper, UMultiplicities, UKnots); + VDirectionConstraints : IfcConstraintsParamBSpline ( + SELF\IfcBSplineSurface.VDegree, KnotVUpper, + SELF\IfcBSplineSurface.VUpper, VMultiplicities, VKnots); +END_ENTITY; + +ENTITY IfcBeam + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcBeamTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCBEAMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcBeamType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcBeamTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcBearing + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcBearingTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBearingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBearingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCBEARINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcBearingType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcBearingTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcBearingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBearingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcBlobTexture + SUBTYPE OF (IfcSurfaceTexture); + RasterFormat : IfcIdentifier; + RasterCode : IfcBinary; + WHERE + RasterCodeByteStream : BLENGTH(RasterCode) MOD 8 = 0; + SupportedRasterFormat : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG']; +END_ENTITY; + +ENTITY IfcBlock + SUBTYPE OF (IfcCsgPrimitive3D); + XLength : IfcPositiveLengthMeasure; + YLength : IfcPositiveLengthMeasure; + ZLength : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcBoiler + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcBoilerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCBOILERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcBoilerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcBoilerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcBooleanClippingResult + SUBTYPE OF (IfcBooleanResult); + WHERE + FirstOperandType : ('IFC4X3.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR +('IFC4X3.IFCSWEPTDISCSOLID' IN TYPEOF(FirstOperand)) OR +('IFC4X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand)); + OperatorType : Operator = DIFFERENCE; + SecondOperandType : ('IFC4X3.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand)); +END_ENTITY; + +ENTITY IfcBooleanResult + SUPERTYPE OF (ONEOF + (IfcBooleanClippingResult)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Operator : IfcBooleanOperator; + FirstOperand : IfcBooleanOperand; + SecondOperand : IfcBooleanOperand; + DERIVE + Dim : IfcDimensionCount := FirstOperand.Dim; + WHERE + FirstOperandClosed : NOT('IFC4X3.IFCTESSELLATEDFACESET' IN TYPEOF(FirstOperand)) OR (EXISTS(FirstOperand.Closed) AND FirstOperand.Closed); + SameDim : FirstOperand.Dim = SecondOperand.Dim; + SecondOperandClosed : NOT('IFC4X3.IFCTESSELLATEDFACESET' IN TYPEOF(SecondOperand)) OR (EXISTS(SecondOperand.Closed) AND SecondOperand.Closed); +END_ENTITY; + +ENTITY IfcBorehole + SUBTYPE OF (IfcGeotechnicalAssembly); +END_ENTITY; + +ENTITY IfcBoundaryCondition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBoundaryEdgeCondition + ,IfcBoundaryFaceCondition + ,IfcBoundaryNodeCondition)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcBoundaryCurve + SUPERTYPE OF (ONEOF + (IfcOuterBoundaryCurve)) + SUBTYPE OF (IfcCompositeCurveOnSurface); + WHERE + IsClosed : SELF\IfcCompositeCurve.ClosedCurve; +END_ENTITY; + +ENTITY IfcBoundaryEdgeCondition + SUBTYPE OF (IfcBoundaryCondition); + TranslationalStiffnessByLengthX : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect; + TranslationalStiffnessByLengthY : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect; + TranslationalStiffnessByLengthZ : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect; + RotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect; + RotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect; + RotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect; +END_ENTITY; + +ENTITY IfcBoundaryFaceCondition + SUBTYPE OF (IfcBoundaryCondition); + TranslationalStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionSelect; + TranslationalStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionSelect; + TranslationalStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionSelect; +END_ENTITY; + +ENTITY IfcBoundaryNodeCondition + SUPERTYPE OF (ONEOF + (IfcBoundaryNodeConditionWarping)) + SUBTYPE OF (IfcBoundaryCondition); + TranslationalStiffnessX : OPTIONAL IfcTranslationalStiffnessSelect; + TranslationalStiffnessY : OPTIONAL IfcTranslationalStiffnessSelect; + TranslationalStiffnessZ : OPTIONAL IfcTranslationalStiffnessSelect; + RotationalStiffnessX : OPTIONAL IfcRotationalStiffnessSelect; + RotationalStiffnessY : OPTIONAL IfcRotationalStiffnessSelect; + RotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessSelect; +END_ENTITY; + +ENTITY IfcBoundaryNodeConditionWarping + SUBTYPE OF (IfcBoundaryNodeCondition); + WarpingStiffness : OPTIONAL IfcWarpingStiffnessSelect; +END_ENTITY; + +ENTITY IfcBoundedCurve + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBSplineCurve + ,IfcCompositeCurve + ,IfcIndexedPolyCurve + ,IfcPolyline + ,IfcTrimmedCurve)) + SUBTYPE OF (IfcCurve); +END_ENTITY; + +ENTITY IfcBoundedSurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBSplineSurface + ,IfcCurveBoundedPlane + ,IfcCurveBoundedSurface + ,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 + UnboundedSurface : NOT ('IFC4X3.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface)); +END_ENTITY; + +ENTITY IfcBridge + SUBTYPE OF (IfcFacility); + PredefinedType : OPTIONAL IfcBridgeTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBridgeTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBridgeTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcBridgePart + SUBTYPE OF (IfcFacilityPart); + PredefinedType : OPTIONAL IfcBridgePartTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBridgePartTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBridgePartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcBuilding + SUBTYPE OF (IfcFacility); + ElevationOfRefHeight : OPTIONAL IfcLengthMeasure; + ElevationOfTerrain : OPTIONAL IfcLengthMeasure; + BuildingAddress : OPTIONAL IfcPostalAddress; +END_ENTITY; + +ENTITY IfcBuildingElementPart + SUBTYPE OF (IfcElementComponent); + PredefinedType : OPTIONAL IfcBuildingElementPartTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcBuildingElementPartType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcBuildingElementPartTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcBuildingElementProxy + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcBuildingElementProxyTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCBUILDINGELEMENTPROXYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + HasObjectName : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcBuildingElementProxyType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcBuildingElementProxyTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcBuildingStorey + SUBTYPE OF (IfcSpatialStructureElement); + Elevation : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcBuildingSystem + SUBTYPE OF (IfcSystem); + PredefinedType : OPTIONAL IfcBuildingSystemTypeEnum; + LongName : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBuildingSystemTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBuildingSystemTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcBuiltElement + SUPERTYPE OF (ONEOF + (IfcBeam + ,IfcBearing + ,IfcBuildingElementProxy + ,IfcChimney + ,IfcColumn + ,IfcCourse + ,IfcCovering + ,IfcCurtainWall + ,IfcDeepFoundation + ,IfcDoor + ,IfcEarthworksElement + ,IfcFooting + ,IfcKerb + ,IfcMember + ,IfcMooringDevice + ,IfcNavigationElement + ,IfcPavement + ,IfcPlate + ,IfcRail + ,IfcRailing + ,IfcRamp + ,IfcRampFlight + ,IfcRoof + ,IfcShadingDevice + ,IfcSlab + ,IfcStair + ,IfcStairFlight + ,IfcTrackElement + ,IfcWall + ,IfcWindow)) + SUBTYPE OF (IfcElement); + WHERE + MaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | + 'IFC4X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) + )) <= 1; +END_ENTITY; + +ENTITY IfcBuiltElementType + SUPERTYPE OF (ONEOF + (IfcBeamType + ,IfcBearingType + ,IfcBuildingElementProxyType + ,IfcChimneyType + ,IfcColumnType + ,IfcCourseType + ,IfcCoveringType + ,IfcCurtainWallType + ,IfcDeepFoundationType + ,IfcDoorType + ,IfcFootingType + ,IfcKerbType + ,IfcMemberType + ,IfcMooringDeviceType + ,IfcNavigationElementType + ,IfcPavementType + ,IfcPlateType + ,IfcRailType + ,IfcRailingType + ,IfcRampFlightType + ,IfcRampType + ,IfcRoofType + ,IfcShadingDeviceType + ,IfcSlabType + ,IfcStairFlightType + ,IfcStairType + ,IfcTrackElementType + ,IfcWallType + ,IfcWindowType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcBuiltSystem + SUBTYPE OF (IfcSystem); + PredefinedType : OPTIONAL IfcBuiltSystemTypeEnum; + LongName : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBuiltSystemTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBuiltSystemTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcBurner + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcBurnerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCBURNERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcBurnerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcBurnerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + Width : IfcPositiveLengthMeasure; + WallThickness : IfcPositiveLengthMeasure; + Girth : IfcPositiveLengthMeasure; + InternalFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + WHERE + ValidGirth : Girth < (Depth / 2.); + ValidInternalFilletRadius : NOT(EXISTS(InternalFilletRadius)) OR +((InternalFilletRadius <= Width/2. - WallThickness) AND (InternalFilletRadius <= Depth/2. - WallThickness)); + ValidWallThickness : (WallThickness < Width/2.) AND (WallThickness < Depth/2.); +END_ENTITY; + +ENTITY IfcCableCarrierFitting + SUBTYPE OF (IfcFlowFitting); + PredefinedType : OPTIONAL IfcCableCarrierFittingTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCABLECARRIERFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCableCarrierFittingType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcCableCarrierFittingTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCableCarrierSegment + SUBTYPE OF (IfcFlowSegment); + PredefinedType : OPTIONAL IfcCableCarrierSegmentTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCABLECARRIERSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCableCarrierSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcCableCarrierSegmentTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCableFitting + SUBTYPE OF (IfcFlowFitting); + PredefinedType : OPTIONAL IfcCableFittingTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCABLEFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCableFittingType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcCableFittingTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCableSegment + SUBTYPE OF (IfcFlowSegment); + PredefinedType : OPTIONAL IfcCableSegmentTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCABLESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCableSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcCableSegmentTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCaissonFoundation + SUBTYPE OF (IfcDeepFoundation); + PredefinedType : OPTIONAL IfcCaissonFoundationTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCaissonFoundationTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCaissonFoundationTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCAISSONFOUNDATIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCaissonFoundationType + SUBTYPE OF (IfcDeepFoundationType); + PredefinedType : IfcCaissonFoundationTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCaissonFoundationTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCaissonFoundationTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCartesianPoint + SUBTYPE OF (IfcPoint); + Coordinates : LIST [1:3] OF IfcLengthMeasure; + DERIVE + Dim : IfcDimensionCount := HIINDEX(Coordinates); + WHERE + CP2Dor3D : HIINDEX(Coordinates) >= 2; +END_ENTITY; + +ENTITY IfcCartesianPointList + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCartesianPointList2D + ,IfcCartesianPointList3D)) + SUBTYPE OF (IfcGeometricRepresentationItem); + DERIVE + Dim : IfcDimensionCount := IfcPointListDim(SELF); +END_ENTITY; + +ENTITY IfcCartesianPointList2D + SUBTYPE OF (IfcCartesianPointList); + CoordList : LIST [1:?] OF LIST [2:2] OF IfcLengthMeasure; + TagList : OPTIONAL LIST [1:?] OF IfcLabel; +END_ENTITY; + +ENTITY IfcCartesianPointList3D + SUBTYPE OF (IfcCartesianPointList); + CoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure; + TagList : OPTIONAL LIST [1:?] OF IfcLabel; +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCartesianTransformationOperator2D + ,IfcCartesianTransformationOperator3D)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Axis1 : OPTIONAL IfcDirection; + Axis2 : OPTIONAL IfcDirection; + LocalOrigin : IfcCartesianPoint; + Scale : OPTIONAL IfcReal; + DERIVE + Scl : IfcReal := NVL(Scale, 1.0); + Dim : IfcDimensionCount := LocalOrigin.Dim; + WHERE + ScaleGreaterZero : 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 + Axis1Is2D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR +(SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2); + Axis2Is2D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR +(SELF\IfcCartesianTransformationOperator.Axis2.Dim = 2); + DimEqual2 : SELF\IfcCartesianTransformationOperator.Dim = 2; +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator2DnonUniform + SUBTYPE OF (IfcCartesianTransformationOperator2D); + Scale2 : OPTIONAL IfcReal; + DERIVE + Scl2 : IfcReal := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); + WHERE + Scale2GreaterZero : 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 + Axis1Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR +(SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3); + Axis2Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR +(SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3); + Axis3Is3D : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3); + DimIs3D : SELF\IfcCartesianTransformationOperator.Dim = 3; +END_ENTITY; + +ENTITY IfcCartesianTransformationOperator3DnonUniform + SUBTYPE OF (IfcCartesianTransformationOperator3D); + Scale2 : OPTIONAL IfcReal; + Scale3 : OPTIONAL IfcReal; + DERIVE + Scl2 : IfcReal := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); + Scl3 : IfcReal := NVL(Scale3, SELF\IfcCartesianTransformationOperator.Scl); + WHERE + Scale2GreaterZero : Scl2 > 0.0; + Scale3GreaterZero : Scl3 > 0.0; +END_ENTITY; + +ENTITY IfcCenterLineProfileDef + SUBTYPE OF (IfcArbitraryOpenProfileDef); + Thickness : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcChiller + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcChillerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCHILLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcChillerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcChillerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcChimney + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcChimneyTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCHIMNEYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcChimneyType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcChimneyTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcChimneyTypeEnum.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 IfcCivilElement + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcCivilElementType + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcClassification + SUBTYPE OF (IfcExternalInformation); + Source : OPTIONAL IfcLabel; + Edition : OPTIONAL IfcLabel; + EditionDate : OPTIONAL IfcDate; + Name : IfcLabel; + Description : OPTIONAL IfcText; + Specification : OPTIONAL IfcURIReference; + ReferenceTokens : OPTIONAL LIST [1:?] OF IfcIdentifier; + INVERSE + ClassificationForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification; + HasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource; +END_ENTITY; + +ENTITY IfcClassificationReference + SUBTYPE OF (IfcExternalReference); + ReferencedSource : OPTIONAL IfcClassificationReferenceSelect; + Description : OPTIONAL IfcText; + Sort : OPTIONAL IfcIdentifier; + INVERSE + ClassificationRefForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification; + HasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource; +END_ENTITY; + +ENTITY IfcClosedShell + SUBTYPE OF (IfcConnectedFaceSet); +END_ENTITY; + +ENTITY IfcClothoid + SUBTYPE OF (IfcSpiral); + ClothoidConstant : IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcCoil + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcCoilTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOILTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCoilType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCoilTypeEnum; + WHERE + CorrectPredefinedType : (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 IfcColourRgbList + SUBTYPE OF (IfcPresentationItem); + ColourList : LIST [1:?] OF LIST [3:3] OF IfcNormalisedRatioMeasure; +END_ENTITY; + +ENTITY IfcColourSpecification + ABSTRACT SUPERTYPE OF (ONEOF + (IfcColourRgb)) + SUBTYPE OF (IfcPresentationItem); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcColumn + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcColumnTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOLUMNTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcColumnType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcColumnTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCommunicationsAppliance + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcCommunicationsApplianceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCommunicationsApplianceType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcCommunicationsApplianceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +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 IfcComplexPropertyTemplate + SUBTYPE OF (IfcPropertyTemplate); + UsageName : OPTIONAL IfcLabel; + TemplateType : OPTIONAL IfcComplexPropertyTemplateTypeEnum; + HasPropertyTemplates : OPTIONAL SET [1:?] OF IfcPropertyTemplate; + WHERE + NoSelfReference : SIZEOF(QUERY(temp <* HasPropertyTemplates | SELF :=: temp)) = 0; + UniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates); +END_ENTITY; + +ENTITY IfcCompositeCurve + SUPERTYPE OF (ONEOF + (IfcCompositeCurveOnSurface + ,IfcGradientCurve + ,IfcSegmentedReferenceCurve)) + SUBTYPE OF (IfcBoundedCurve); + Segments : LIST [1:?] OF IfcSegment; + SelfIntersect : IfcLogical; + DERIVE + NSegments : IfcInteger := SIZEOF(Segments); + ClosedCurve : IfcLogical := Segments[NSegments].Transition <> Discontinuous; + WHERE + CurveContinuous : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0)); + SameDim : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0; +END_ENTITY; + +ENTITY IfcCompositeCurveOnSurface + SUPERTYPE OF (ONEOF + (IfcBoundaryCurve)) + SUBTYPE OF (IfcCompositeCurve); + DERIVE + BasisSurface : SET [0:1] OF IfcSurface := IfcGetBasisSurface(SELF); + WHERE + SameSurface : SIZEOF(BasisSurface) > 0; +END_ENTITY; + +ENTITY IfcCompositeCurveSegment + SUPERTYPE OF (ONEOF + (IfcReparametrisedCompositeCurveSegment)) + SUBTYPE OF (IfcSegment); + SameSense : IfcBoolean; + ParentCurve : IfcCurve; + DERIVE + Dim : IfcDimensionCount := ParentCurve.Dim; + WHERE + ParentIsBoundedCurve : ('IFC4X3.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve)); +END_ENTITY; + +ENTITY IfcCompositeProfileDef + SUBTYPE OF (IfcProfileDef); + Profiles : SET [2:?] OF IfcProfileDef; + Label : OPTIONAL IfcLabel; + WHERE + InvariantProfileType : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0; + NoRecursion : SIZEOF(QUERY(temp <* Profiles | 'IFC4X3.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcCompressor + SUBTYPE OF (IfcFlowMovingDevice); + PredefinedType : OPTIONAL IfcCompressorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOMPRESSORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCompressorType + SUBTYPE OF (IfcFlowMovingDeviceType); + PredefinedType : IfcCompressorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCondenser + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcCondenserTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCONDENSERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCondenserType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCondenserTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +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 + ,IfcConnectionSurfaceGeometry + ,IfcConnectionVolumeGeometry)); +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 IfcConnectionSurfaceGeometry + SUBTYPE OF (IfcConnectionGeometry); + SurfaceOnRelatingElement : IfcSurfaceOrFaceSurface; + SurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface; +END_ENTITY; + +ENTITY IfcConnectionVolumeGeometry + SUBTYPE OF (IfcConnectionGeometry); + VolumeOnRelatingElement : IfcSolidOrShell; + VolumeOnRelatedElement : OPTIONAL IfcSolidOrShell; +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 IfcDateTime; + UserDefinedGrade : OPTIONAL IfcLabel; + INVERSE + HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; + PropertiesForConstraint : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatingConstraint; + WHERE + WR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR +((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\IfcConstraint.UserDefinedGrade)); +END_ENTITY; + +ENTITY IfcConstructionEquipmentResource + SUBTYPE OF (IfcConstructionResource); + PredefinedType : OPTIONAL IfcConstructionEquipmentResourceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR +(PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcConstructionEquipmentResourceType + SUBTYPE OF (IfcConstructionResourceType); + PredefinedType : IfcConstructionEquipmentResourceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); +END_ENTITY; + +ENTITY IfcConstructionMaterialResource + SUBTYPE OF (IfcConstructionResource); + PredefinedType : OPTIONAL IfcConstructionMaterialResourceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcConstructionMaterialResourceType + SUBTYPE OF (IfcConstructionResourceType); + PredefinedType : IfcConstructionMaterialResourceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); +END_ENTITY; + +ENTITY IfcConstructionProductResource + SUBTYPE OF (IfcConstructionResource); + PredefinedType : OPTIONAL IfcConstructionProductResourceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcConstructionProductResourceType + SUBTYPE OF (IfcConstructionResourceType); + PredefinedType : IfcConstructionProductResourceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); +END_ENTITY; + +ENTITY IfcConstructionResource + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConstructionEquipmentResource + ,IfcConstructionMaterialResource + ,IfcConstructionProductResource + ,IfcCrewResource + ,IfcLaborResource + ,IfcSubContractResource)) + SUBTYPE OF (IfcResource); + Usage : OPTIONAL IfcResourceTime; + BaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue; + BaseQuantity : OPTIONAL IfcPhysicalQuantity; +END_ENTITY; + +ENTITY IfcConstructionResourceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConstructionEquipmentResourceType + ,IfcConstructionMaterialResourceType + ,IfcConstructionProductResourceType + ,IfcCrewResourceType + ,IfcLaborResourceType + ,IfcSubContractResourceType)) + SUBTYPE OF (IfcTypeResource); + BaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue; + BaseQuantity : OPTIONAL IfcPhysicalQuantity; +END_ENTITY; + +ENTITY IfcContext + ABSTRACT SUPERTYPE OF (ONEOF + (IfcProject + ,IfcProjectLibrary)) + SUBTYPE OF (IfcObjectDefinition); + ObjectType : OPTIONAL IfcLabel; + LongName : OPTIONAL IfcLabel; + Phase : OPTIONAL IfcLabel; + RepresentationContexts : OPTIONAL SET [1:?] OF IfcRepresentationContext; + UnitsInContext : OPTIONAL IfcUnitAssignment; + INVERSE + IsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects; + Declares : SET [0:?] OF IfcRelDeclares FOR RelatingContext; +END_ENTITY; + +ENTITY IfcContextDependentUnit + SUBTYPE OF (IfcNamedUnit); + Name : IfcLabel; + INVERSE + HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; +END_ENTITY; + +ENTITY IfcControl + ABSTRACT SUPERTYPE OF (ONEOF + (IfcActionRequest + ,IfcCostItem + ,IfcCostSchedule + ,IfcPerformanceHistory + ,IfcPermit + ,IfcProjectOrder + ,IfcWorkCalendar + ,IfcWorkControl)) + SUBTYPE OF (IfcObject); + Identification : OPTIONAL IfcIdentifier; + INVERSE + Controls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl; +END_ENTITY; + +ENTITY IfcController + SUBTYPE OF (IfcDistributionControlElement); + PredefinedType : OPTIONAL IfcControllerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCONTROLLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcControllerType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcControllerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcConversionBasedUnit + SUPERTYPE OF (ONEOF + (IfcConversionBasedUnitWithOffset)) + SUBTYPE OF (IfcNamedUnit); + Name : IfcLabel; + ConversionFactor : IfcMeasureWithUnit; + INVERSE + HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; +END_ENTITY; + +ENTITY IfcConversionBasedUnitWithOffset + SUBTYPE OF (IfcConversionBasedUnit); + ConversionOffset : IfcReal; +END_ENTITY; + +ENTITY IfcConveyorSegment + SUBTYPE OF (IfcFlowSegment); + PredefinedType : OPTIONAL IfcConveyorSegmentTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcConveyorSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcConveyorSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCONVEYORSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcConveyorSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcConveyorSegmentTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcConveyorSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcConveyorSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCooledBeam + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcCooledBeamTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOOLEDBEAMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCooledBeamType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCooledBeamTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCoolingTower + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcCoolingTowerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOOLINGTOWERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCoolingTowerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcCoolingTowerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCoordinateOperation + ABSTRACT SUPERTYPE OF (ONEOF + (IfcMapConversion)); + SourceCRS : IfcCoordinateReferenceSystemSelect; + TargetCRS : IfcCoordinateReferenceSystem; +END_ENTITY; + +ENTITY IfcCoordinateReferenceSystem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcProjectedCRS)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + GeodeticDatum : OPTIONAL IfcIdentifier; + VerticalDatum : OPTIONAL IfcIdentifier; + INVERSE + HasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS; +END_ENTITY; + +ENTITY IfcCosineSpiral + SUBTYPE OF (IfcSpiral); + CosineTerm : IfcLengthMeasure; + ConstantTerm : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcCostItem + SUBTYPE OF (IfcControl); + PredefinedType : OPTIONAL IfcCostItemTypeEnum; + CostValues : OPTIONAL LIST [1:?] OF IfcCostValue; + CostQuantities : OPTIONAL LIST [1:?] OF IfcPhysicalQuantity; +END_ENTITY; + +ENTITY IfcCostSchedule + SUBTYPE OF (IfcControl); + PredefinedType : OPTIONAL IfcCostScheduleTypeEnum; + Status : OPTIONAL IfcLabel; + SubmittedOn : OPTIONAL IfcDateTime; + UpdateDate : OPTIONAL IfcDateTime; +END_ENTITY; + +ENTITY IfcCostValue + SUBTYPE OF (IfcAppliedValue); +END_ENTITY; + +ENTITY IfcCourse + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcCourseTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCourseTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCourseTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOURSETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCourseType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcCourseTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCourseTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCourseTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCovering + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcCoveringTypeEnum; + INVERSE + CoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings; + CoversElements : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCOVERINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCoveringType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcCoveringTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCrewResource + SUBTYPE OF (IfcConstructionResource); + PredefinedType : OPTIONAL IfcCrewResourceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcCrewResourceType + SUBTYPE OF (IfcConstructionResourceType); + PredefinedType : IfcCrewResourceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); +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 + SUBTYPE OF (IfcResourceLevelRelationship); + RelatingMonetaryUnit : IfcMonetaryUnit; + RelatedMonetaryUnit : IfcMonetaryUnit; + ExchangeRate : IfcPositiveRatioMeasure; + RateDateTime : OPTIONAL IfcDateTime; + RateSource : OPTIONAL IfcLibraryInformation; +END_ENTITY; + +ENTITY IfcCurtainWall + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcCurtainWallTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCCURTAINWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcCurtainWallType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcCurtainWallTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcCurve + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBoundedCurve + ,IfcConic + ,IfcLine + ,IfcOffsetCurve + ,IfcPcurve + ,IfcPolynomialCurve + ,IfcSpiral + ,IfcSurfaceCurve)) + SUBTYPE OF (IfcGeometricRepresentationItem); + DERIVE + Dim : IfcDimensionCount := IfcCurveDim(SELF); +END_ENTITY; + +ENTITY IfcCurveBoundedPlane + SUBTYPE OF (IfcBoundedSurface); + BasisSurface : IfcPlane; + OuterBoundary : IfcCurve; + InnerBoundaries : SET [0:?] OF IfcCurve; +END_ENTITY; + +ENTITY IfcCurveBoundedSurface + SUBTYPE OF (IfcBoundedSurface); + BasisSurface : IfcSurface; + Boundaries : SET [1:?] OF IfcBoundaryCurve; + ImplicitOuter : IfcBoolean; +END_ENTITY; + +ENTITY IfcCurveSegment + SUBTYPE OF (IfcSegment); + Placement : IfcPlacement; + SegmentStart : IfcCurveMeasureSelect; + SegmentLength : IfcCurveMeasureSelect; + ParentCurve : IfcCurve; + DERIVE + Dim : IfcDimensionCount := ParentCurve.Dim; +END_ENTITY; + +ENTITY IfcCurveStyle + SUBTYPE OF (IfcPresentationStyle); + CurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect; + CurveWidth : OPTIONAL IfcSizeSelect; + CurveColour : OPTIONAL IfcColour; + ModelOrDraughting : OPTIONAL IfcBoolean; + WHERE + IdentifiableCurveStyle : EXISTS(CurveFont) OR EXISTS(CurveWidth) OR EXISTS(CurveColour); + MeasureOfWidth : (NOT(EXISTS(CurveWidth))) OR +('IFC4X3.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR + (('IFC4X3.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND + (CurveWidth = 'by layer')); +END_ENTITY; + +ENTITY IfcCurveStyleFont + SUBTYPE OF (IfcPresentationItem); + Name : OPTIONAL IfcLabel; + PatternList : LIST [1:?] OF IfcCurveStyleFontPattern; +END_ENTITY; + +ENTITY IfcCurveStyleFontAndScaling + SUBTYPE OF (IfcPresentationItem); + Name : OPTIONAL IfcLabel; + CurveStyleFont : IfcCurveStyleFontSelect; + CurveFontScaling : IfcPositiveRatioMeasure; +END_ENTITY; + +ENTITY IfcCurveStyleFontPattern + SUBTYPE OF (IfcPresentationItem); + VisibleSegmentLength : IfcLengthMeasure; + InvisibleSegmentLength : IfcPositiveLengthMeasure; + WHERE + VisibleLengthGreaterEqualZero : VisibleSegmentLength >= 0.; +END_ENTITY; + +ENTITY IfcCylindricalSurface + SUBTYPE OF (IfcElementarySurface); + Radius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcDamper + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcDamperTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDAMPERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDamperType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcDamperTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDeepFoundation + SUPERTYPE OF (ONEOF + (IfcCaissonFoundation + ,IfcPile)) + SUBTYPE OF (IfcBuiltElement); + WHERE + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDEEPFOUNDATIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDeepFoundationType + SUPERTYPE OF (ONEOF + (IfcCaissonFoundationType + ,IfcPileType)) + SUBTYPE OF (IfcBuiltElementType); +END_ENTITY; + +ENTITY IfcDerivedProfileDef + SUPERTYPE OF (ONEOF + (IfcMirroredProfileDef)) + SUBTYPE OF (IfcProfileDef); + ParentProfile : IfcProfileDef; + Operator : IfcCartesianTransformationOperator2D; + Label : OPTIONAL IfcLabel; + WHERE + InvariantProfileType : SELF\IfcProfileDef.ProfileType = ParentProfile.ProfileType; +END_ENTITY; + +ENTITY IfcDerivedUnit; + Elements : SET [1:?] OF IfcDerivedUnitElement; + UnitType : IfcDerivedUnitEnum; + UserDefinedType : OPTIONAL IfcLabel; + Name : OPTIONAL IfcLabel; + DERIVE + Dimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements); + 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 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 IfcReal; + DERIVE + Dim : IfcDimensionCount := HIINDEX(DirectionRatios); + WHERE + MagnitudeGreaterZero : SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0; +END_ENTITY; + +ENTITY IfcDirectrixCurveSweptAreaSolid + ABSTRACT SUPERTYPE OF (ONEOF + (IfcFixedReferenceSweptAreaSolid + ,IfcSurfaceCurveSweptAreaSolid)) + SUBTYPE OF (IfcSweptAreaSolid); + Directrix : IfcCurve; + StartParam : OPTIONAL IfcCurveMeasureSelect; + EndParam : OPTIONAL IfcCurveMeasureSelect; + WHERE + DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR +(SIZEOF(['IFC4X3.IFCCONIC', 'IFC4X3.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1); +END_ENTITY; + +ENTITY IfcDirectrixDerivedReferenceSweptAreaSolid + SUBTYPE OF (IfcFixedReferenceSweptAreaSolid); +END_ENTITY; + +ENTITY IfcDiscreteAccessory + SUBTYPE OF (IfcElementComponent); + PredefinedType : OPTIONAL IfcDiscreteAccessoryTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDiscreteAccessoryType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcDiscreteAccessoryTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDistributionBoard + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcDistributionBoardTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDistributionBoardTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDistributionBoardType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcDistributionBoardTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDistributionBoardTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDistributionChamberElement + SUBTYPE OF (IfcDistributionFlowElement); + PredefinedType : OPTIONAL IfcDistributionChamberElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDISTRIBUTIONCHAMBERELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDistributionChamberElementType + SUBTYPE OF (IfcDistributionFlowElementType); + PredefinedType : IfcDistributionChamberElementTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDistributionCircuit + SUBTYPE OF (IfcDistributionSystem); +END_ENTITY; + +ENTITY IfcDistributionControlElement + SUPERTYPE OF (ONEOF + (IfcActuator + ,IfcAlarm + ,IfcController + ,IfcFlowInstrument + ,IfcProtectiveDeviceTrippingUnit + ,IfcSensor + ,IfcUnitaryControlElement)) + SUBTYPE OF (IfcDistributionElement); + INVERSE + AssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements; +END_ENTITY; + +ENTITY IfcDistributionControlElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcActuatorType + ,IfcAlarmType + ,IfcControllerType + ,IfcFlowInstrumentType + ,IfcProtectiveDeviceTrippingUnitType + ,IfcSensorType + ,IfcUnitaryControlElementType)) + SUBTYPE OF (IfcDistributionElementType); +END_ENTITY; + +ENTITY IfcDistributionElement + SUPERTYPE OF (ONEOF + (IfcDistributionControlElement + ,IfcDistributionFlowElement)) + SUBTYPE OF (IfcElement); + INVERSE + HasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement; +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; + PredefinedType : OPTIONAL IfcDistributionPortTypeEnum; + SystemType : OPTIONAL IfcDistributionSystemEnum; +END_ENTITY; + +ENTITY IfcDistributionSystem + SUPERTYPE OF (ONEOF + (IfcDistributionCircuit)) + SUBTYPE OF (IfcSystem); + LongName : OPTIONAL IfcLabel; + PredefinedType : OPTIONAL IfcDistributionSystemEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDistributionSystemEnum.USERDEFINED) OR + ((PredefinedType = IfcDistributionSystemEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcDocumentInformation + SUBTYPE OF (IfcExternalInformation); + Identification : IfcIdentifier; + Name : IfcLabel; + Description : OPTIONAL IfcText; + Location : OPTIONAL IfcURIReference; + Purpose : OPTIONAL IfcText; + IntendedUse : OPTIONAL IfcText; + Scope : OPTIONAL IfcText; + Revision : OPTIONAL IfcLabel; + DocumentOwner : OPTIONAL IfcActorSelect; + Editors : OPTIONAL SET [1:?] OF IfcActorSelect; + CreationTime : OPTIONAL IfcDateTime; + LastRevisionTime : OPTIONAL IfcDateTime; + ElectronicFormat : OPTIONAL IfcIdentifier; + ValidFrom : OPTIONAL IfcDate; + ValidUntil : OPTIONAL IfcDate; + Confidentiality : OPTIONAL IfcDocumentConfidentialityEnum; + Status : OPTIONAL IfcDocumentStatusEnum; + INVERSE + DocumentInfoForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument; + HasDocumentReferences : SET [0:?] OF IfcDocumentReference FOR ReferencedDocument; + IsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments; + IsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument; +END_ENTITY; + +ENTITY IfcDocumentInformationRelationship + SUBTYPE OF (IfcResourceLevelRelationship); + RelatingDocument : IfcDocumentInformation; + RelatedDocuments : SET [1:?] OF IfcDocumentInformation; + RelationshipType : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcDocumentReference + SUBTYPE OF (IfcExternalReference); + Description : OPTIONAL IfcText; + ReferencedDocument : OPTIONAL IfcDocumentInformation; + INVERSE + DocumentRefForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument; + WHERE + WR1 : EXISTS(Name) XOR EXISTS(ReferencedDocument); +END_ENTITY; + +ENTITY IfcDoor + SUBTYPE OF (IfcBuiltElement); + OverallHeight : OPTIONAL IfcPositiveLengthMeasure; + OverallWidth : OPTIONAL IfcPositiveLengthMeasure; + PredefinedType : OPTIONAL IfcDoorTypeEnum; + OperationType : OPTIONAL IfcDoorTypeOperationEnum; + UserDefinedOperationType : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDOORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDoorLiningProperties + SUBTYPE OF (IfcPreDefinedPropertySet); + LiningDepth : OPTIONAL IfcPositiveLengthMeasure; + LiningThickness : OPTIONAL IfcNonNegativeLengthMeasure; + ThresholdDepth : OPTIONAL IfcPositiveLengthMeasure; + ThresholdThickness : OPTIONAL IfcNonNegativeLengthMeasure; + TransomThickness : OPTIONAL IfcNonNegativeLengthMeasure; + TransomOffset : OPTIONAL IfcLengthMeasure; + LiningOffset : OPTIONAL IfcLengthMeasure; + ThresholdOffset : OPTIONAL IfcLengthMeasure; + CasingThickness : OPTIONAL IfcPositiveLengthMeasure; + CasingDepth : OPTIONAL IfcPositiveLengthMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; + LiningToPanelOffsetX : OPTIONAL IfcLengthMeasure; + LiningToPanelOffsetY : OPTIONAL IfcLengthMeasure; + WHERE + WR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness))); + WR32 : NOT(EXISTS(ThresholdDepth) AND NOT(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 +( + ('IFC4X3.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + OR + ('IFC4X3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) +); +END_ENTITY; + +ENTITY IfcDoorPanelProperties + SUBTYPE OF (IfcPreDefinedPropertySet); + PanelDepth : OPTIONAL IfcPositiveLengthMeasure; + PanelOperation : IfcDoorPanelOperationEnum; + PanelWidth : OPTIONAL IfcNormalisedRatioMeasure; + PanelPosition : IfcDoorPanelPositionEnum; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; + WHERE + ApplicableToType : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) +AND +( + ('IFC4X3.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + OR + ('IFC4X3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) +); +END_ENTITY; + +ENTITY IfcDoorType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcDoorTypeEnum; + OperationType : IfcDoorTypeOperationEnum; + ParameterTakesPrecedence : OPTIONAL IfcBoolean; + UserDefinedOperationType : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDraughtingPreDefinedColour + SUBTYPE OF (IfcPreDefinedColour); + WHERE + PreDefinedColourNames : SELF\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow', + 'magenta','cyan','white','by layer']; +END_ENTITY; + +ENTITY IfcDraughtingPreDefinedCurveFont + SUBTYPE OF (IfcPreDefinedCurveFont); + WHERE + PreDefinedCurveFontNames : SELF\IfcPredefinedItem.Name IN + ['continuous', + 'chain', + 'chain double dash', + 'dashed', + 'dotted', + 'by layer']; +END_ENTITY; + +ENTITY IfcDuctFitting + SUBTYPE OF (IfcFlowFitting); + PredefinedType : OPTIONAL IfcDuctFittingTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDUCTFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDuctFittingType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcDuctFittingTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDuctSegment + SUBTYPE OF (IfcFlowSegment); + PredefinedType : OPTIONAL IfcDuctSegmentTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDUCTSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDuctSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcDuctSegmentTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcDuctSilencer + SUBTYPE OF (IfcFlowTreatmentDevice); + PredefinedType : OPTIONAL IfcDuctSilencerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcDuctSilencerType + SUBTYPE OF (IfcFlowTreatmentDeviceType); + PredefinedType : IfcDuctSilencerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcEarthworksCut + SUBTYPE OF (IfcFeatureElementSubtraction); + PredefinedType : OPTIONAL IfcEarthworksCutTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcEarthworksCutTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEarthworksCutTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcEarthworksElement + SUPERTYPE OF (ONEOF + (IfcEarthworksFill + ,IfcReinforcedSoil)) + SUBTYPE OF (IfcBuiltElement); +END_ENTITY; + +ENTITY IfcEarthworksFill + SUBTYPE OF (IfcEarthworksElement); + PredefinedType : OPTIONAL IfcEarthworksFillTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcEarthworksFillTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEarthworksFillTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +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 : IfcBoolean; +END_ENTITY; + +ENTITY IfcEdgeLoop + SUBTYPE OF (IfcLoop); + EdgeList : LIST [1:?] OF IfcOrientedEdge; + DERIVE + Ne : IfcInteger := SIZEOF(EdgeList); + WHERE + IsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd); + IsContinuous : IfcLoopHeadToTail(SELF); +END_ENTITY; + +ENTITY IfcElectricAppliance + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcElectricApplianceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELECTRICAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElectricApplianceType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcElectricApplianceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElectricDistributionBoard + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcElectricDistributionBoardTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELECTRICDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElectricDistributionBoardType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcElectricDistributionBoardTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElectricFlowStorageDevice + SUBTYPE OF (IfcFlowStorageDevice); + PredefinedType : OPTIONAL IfcElectricFlowStorageDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElectricFlowStorageDeviceType + SUBTYPE OF (IfcFlowStorageDeviceType); + PredefinedType : IfcElectricFlowStorageDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElectricFlowTreatmentDevice + SUBTYPE OF (IfcFlowTreatmentDevice); + PredefinedType : OPTIONAL IfcElectricFlowTreatmentDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELECTRICFLOWTREATMENTDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElectricFlowTreatmentDeviceType + SUBTYPE OF (IfcFlowTreatmentDeviceType); + PredefinedType : IfcElectricFlowTreatmentDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElectricGenerator + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcElectricGeneratorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELECTRICGENERATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElectricGeneratorType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcElectricGeneratorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElectricMotor + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcElectricMotorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELECTRICMOTORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElectricMotorType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcElectricMotorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElectricTimeControl + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcElectricTimeControlTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElectricTimeControlType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcElectricTimeControlTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuiltElement + ,IfcCivilElement + ,IfcDistributionElement + ,IfcElementAssembly + ,IfcElementComponent + ,IfcFeatureElement + ,IfcFurnishingElement + ,IfcGeographicElement + ,IfcGeotechnicalElement + ,IfcTransportationDevice + ,IfcVirtualElement)) + SUBTYPE OF (IfcProduct); + Tag : OPTIONAL IfcIdentifier; + INVERSE + FillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement; + ConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement; + IsInterferedByElements : SET [0:?] OF IfcRelInterferesElements FOR RelatedElement; + InterferesElements : SET [0:?] OF IfcRelInterferesElements FOR RelatingElement; + HasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement; + 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; + HasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement; + HasSurfaceFeatures : SET [0:?] OF IfcRelAdheresToElement FOR RelatingElement; +END_ENTITY; + +ENTITY IfcElementAssembly + SUBTYPE OF (IfcElement); + AssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum; + PredefinedType : OPTIONAL IfcElementAssemblyTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcElementAssemblyType + SUBTYPE OF (IfcElementType); + PredefinedType : IfcElementAssemblyTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcElementComponent + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuildingElementPart + ,IfcDiscreteAccessory + ,IfcFastener + ,IfcImpactProtectionDevice + ,IfcMechanicalFastener + ,IfcReinforcingElement + ,IfcSign + ,IfcVibrationDamper + ,IfcVibrationIsolator)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcElementComponentType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuildingElementPartType + ,IfcDiscreteAccessoryType + ,IfcFastenerType + ,IfcImpactProtectionDeviceType + ,IfcMechanicalFastenerType + ,IfcReinforcingElementType + ,IfcSignType + ,IfcVibrationDamperType + ,IfcVibrationIsolatorType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcElementQuantity + SUBTYPE OF (IfcQuantitySet); + MethodOfMeasurement : OPTIONAL IfcLabel; + Quantities : SET [1:?] OF IfcPhysicalQuantity; + WHERE + UniqueQuantityNames : IfcUniqueQuantityNames(Quantities); +END_ENTITY; + +ENTITY IfcElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuiltElementType + ,IfcCivilElementType + ,IfcDistributionElementType + ,IfcElementAssemblyType + ,IfcElementComponentType + ,IfcFurnishingElementType + ,IfcGeographicElementType + ,IfcTransportationDeviceType)) + SUBTYPE OF (IfcTypeProduct); + ElementType : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcElementarySurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCylindricalSurface + ,IfcPlane + ,IfcSphericalSurface + ,IfcToroidalSurface)) + SUBTYPE OF (IfcSurface); + Position : IfcAxis2Placement3D; +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 + SUPERTYPE OF (ONEOF + (IfcAirToAirHeatRecovery + ,IfcBoiler + ,IfcBurner + ,IfcChiller + ,IfcCoil + ,IfcCondenser + ,IfcCooledBeam + ,IfcCoolingTower + ,IfcElectricGenerator + ,IfcElectricMotor + ,IfcEngine + ,IfcEvaporativeCooler + ,IfcEvaporator + ,IfcHeatExchanger + ,IfcHumidifier + ,IfcMotorConnection + ,IfcSolarDevice + ,IfcTransformer + ,IfcTubeBundle + ,IfcUnitaryEquipment)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcEnergyConversionDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAirToAirHeatRecoveryType + ,IfcBoilerType + ,IfcBurnerType + ,IfcChillerType + ,IfcCoilType + ,IfcCondenserType + ,IfcCooledBeamType + ,IfcCoolingTowerType + ,IfcElectricGeneratorType + ,IfcElectricMotorType + ,IfcEngineType + ,IfcEvaporativeCoolerType + ,IfcEvaporatorType + ,IfcHeatExchangerType + ,IfcHumidifierType + ,IfcMotorConnectionType + ,IfcSolarDeviceType + ,IfcTransformerType + ,IfcTubeBundleType + ,IfcUnitaryEquipmentType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcEngine + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcEngineTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCENGINETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcEngineType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcEngineTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcEvaporativeCooler + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcEvaporativeCoolerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcEvaporativeCoolerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcEvaporativeCoolerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcEvaporator + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcEvaporatorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCEVAPORATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcEvaporatorType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcEvaporatorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcEvent + SUBTYPE OF (IfcProcess); + PredefinedType : OPTIONAL IfcEventTypeEnum; + EventTriggerType : OPTIONAL IfcEventTriggerTypeEnum; + UserDefinedEventTriggerType : OPTIONAL IfcLabel; + EventOccurenceTime : OPTIONAL IfcEventTime; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : NOT(EXISTS(EventTriggerType)) OR (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType)); +END_ENTITY; + +ENTITY IfcEventTime + SUBTYPE OF (IfcSchedulingTime); + ActualDate : OPTIONAL IfcDateTime; + EarlyDate : OPTIONAL IfcDateTime; + LateDate : OPTIONAL IfcDateTime; + ScheduleDate : OPTIONAL IfcDateTime; +END_ENTITY; + +ENTITY IfcEventType + SUBTYPE OF (IfcTypeProcess); + PredefinedType : IfcEventTypeEnum; + EventTriggerType : IfcEventTriggerTypeEnum; + UserDefinedEventTriggerType : OPTIONAL IfcLabel; + WHERE + CorrectEventTriggerType : (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType)) ; + CorrectPredefinedType : (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType)); +END_ENTITY; + +ENTITY IfcExtendedProperties + ABSTRACT SUPERTYPE OF (ONEOF + (IfcMaterialProperties + ,IfcProfileProperties)) + SUBTYPE OF (IfcPropertyAbstraction); + Name : OPTIONAL IfcIdentifier; + Description : OPTIONAL IfcText; + Properties : SET [1:?] OF IfcProperty; +END_ENTITY; + +ENTITY IfcExternalInformation + ABSTRACT SUPERTYPE OF (ONEOF + (IfcClassification + ,IfcDocumentInformation + ,IfcLibraryInformation)); +END_ENTITY; + +ENTITY IfcExternalReference + ABSTRACT SUPERTYPE OF (ONEOF + (IfcClassificationReference + ,IfcDocumentReference + ,IfcExternallyDefinedHatchStyle + ,IfcExternallyDefinedSurfaceStyle + ,IfcExternallyDefinedTextFont + ,IfcLibraryReference)); + Location : OPTIONAL IfcURIReference; + Identification : OPTIONAL IfcIdentifier; + Name : OPTIONAL IfcLabel; + INVERSE + ExternalReferenceForResources : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatingReference; + WHERE + WR1 : EXISTS(Identification) OR EXISTS(Location) OR EXISTS(Name); +END_ENTITY; + +ENTITY IfcExternalReferenceRelationship + SUBTYPE OF (IfcResourceLevelRelationship); + RelatingReference : IfcExternalReference; + RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect; +END_ENTITY; + +ENTITY IfcExternalSpatialElement + SUBTYPE OF (IfcExternalSpatialStructureElement); + PredefinedType : OPTIONAL IfcExternalSpatialElementTypeEnum; + INVERSE + BoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace; +END_ENTITY; + +ENTITY IfcExternalSpatialStructureElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcExternalSpatialElement)) + SUBTYPE OF (IfcSpatialElement); +END_ENTITY; + +ENTITY IfcExternallyDefinedHatchStyle + SUBTYPE OF (IfcExternalReference); +END_ENTITY; + +ENTITY IfcExternallyDefinedSurfaceStyle + SUBTYPE OF (IfcExternalReference); +END_ENTITY; + +ENTITY IfcExternallyDefinedTextFont + SUBTYPE OF (IfcExternalReference); +END_ENTITY; + +ENTITY IfcExtrudedAreaSolid + SUPERTYPE OF (ONEOF + (IfcExtrudedAreaSolidTapered)) + SUBTYPE OF (IfcSweptAreaSolid); + ExtrudedDirection : IfcDirection; + Depth : IfcPositiveLengthMeasure; + WHERE + ValidExtrusionDirection : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0; +END_ENTITY; + +ENTITY IfcExtrudedAreaSolidTapered + SUBTYPE OF (IfcExtrudedAreaSolid); + EndSweptArea : IfcProfileDef; + WHERE + CorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea); +END_ENTITY; + +ENTITY IfcFace + SUPERTYPE OF (ONEOF + (IfcFaceSurface)) + SUBTYPE OF (IfcTopologicalRepresentationItem); + Bounds : SET [1:?] OF IfcFaceBound; + INVERSE + HasTextureMaps : SET [0:?] OF IfcTextureMap FOR MappedTo; + WHERE + HasOuterBound : SIZEOF(QUERY(temp <* Bounds | 'IFC4X3.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 : IfcBoolean; +END_ENTITY; + +ENTITY IfcFaceOuterBound + SUBTYPE OF (IfcFaceBound); +END_ENTITY; + +ENTITY IfcFaceSurface + SUPERTYPE OF (ONEOF + (IfcAdvancedFace)) + SUBTYPE OF (IfcFace); + FaceSurface : IfcSurface; + SameSense : IfcBoolean; +END_ENTITY; + +ENTITY IfcFacetedBrep + SUPERTYPE OF (ONEOF + (IfcFacetedBrepWithVoids)) + SUBTYPE OF (IfcManifoldSolidBrep); +END_ENTITY; + +ENTITY IfcFacetedBrepWithVoids + SUBTYPE OF (IfcFacetedBrep); + Voids : SET [1:?] OF IfcClosedShell; +END_ENTITY; + +ENTITY IfcFacility + SUPERTYPE OF (ONEOF + (IfcBridge + ,IfcBuilding + ,IfcMarineFacility + ,IfcRailway + ,IfcRoad)) + SUBTYPE OF (IfcSpatialStructureElement); +END_ENTITY; + +ENTITY IfcFacilityPart + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBridgePart + ,IfcFacilityPartCommon + ,IfcMarinePart + ,IfcRailwayPart + ,IfcRoadPart)) + SUBTYPE OF (IfcSpatialStructureElement); + UsageType : IfcFacilityUsageEnum; +END_ENTITY; + +ENTITY IfcFacilityPartCommon + SUBTYPE OF (IfcFacilityPart); + PredefinedType : OPTIONAL IfcFacilityPartCommonTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFacilityPartCommonTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFacilityPartCommonTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +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 IfcFan + SUBTYPE OF (IfcFlowMovingDevice); + PredefinedType : OPTIONAL IfcFanTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFANTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFanType + SUBTYPE OF (IfcFlowMovingDeviceType); + PredefinedType : IfcFanTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFastener + SUBTYPE OF (IfcElementComponent); + PredefinedType : OPTIONAL IfcFastenerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFastenerType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcFastenerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFeatureElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcFeatureElementAddition + ,IfcFeatureElementSubtraction + ,IfcSurfaceFeature)) + SUBTYPE OF (IfcElement); + WHERE + NotContained : SIZEOF(ContainedInStructure) = 0; +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 + (IfcEarthworksCut + ,IfcOpeningElement + ,IfcVoidingFeature)) + SUBTYPE OF (IfcFeatureElement); + INVERSE + VoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement; + WHERE + HasNoSubtraction : SIZEOF(SELF\IfcElement.HasOpenings) = 0; + IsNotFilling : SIZEOF(SELF\IfcElement.FillsVoids) = 0; +END_ENTITY; + +ENTITY IfcFillAreaStyle + SUBTYPE OF (IfcPresentationStyle); + FillStyles : SET [1:?] OF IfcFillStyleSelect; + ModelOrDraughting : OPTIONAL IfcBoolean; + WHERE + ConsistentHatchStyleDef : IfcCorrectFillAreaStyle(SELF.FillStyles); + MaxOneColour : SIZEOF(QUERY(Style <* SELF.FillStyles | + 'IFC4X3.IFCCOLOUR' IN + TYPEOF(Style) + )) <= 1; + MaxOneExtHatchStyle : SIZEOF(QUERY(Style <* SELF.FillStyles | + 'IFC4X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN + TYPEOF(Style) + )) <= 1; +END_ENTITY; + +ENTITY IfcFillAreaStyleHatching + SUBTYPE OF (IfcGeometricRepresentationItem); + HatchLineAppearance : IfcCurveStyle; + StartOfNextHatchLine : IfcHatchLineDistanceSelect; + PointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint; + PatternStart : OPTIONAL IfcCartesianPoint; + HatchLineAngle : IfcPlaneAngleMeasure; + WHERE + PatternStart2D : NOT(EXISTS(PatternStart)) OR (PatternStart.Dim = 2) +; + RefHatchLine2D : NOT(EXISTS(PointOfReferenceHatchLine)) OR (PointOfReferenceHatchLine.Dim = 2); +END_ENTITY; + +ENTITY IfcFillAreaStyleTiles + SUBTYPE OF (IfcGeometricRepresentationItem); + TilingPattern : LIST [2:2] OF IfcVector; + Tiles : SET [1:?] OF IfcStyledItem; + TilingScale : IfcPositiveRatioMeasure; +END_ENTITY; + +ENTITY IfcFilter + SUBTYPE OF (IfcFlowTreatmentDevice); + PredefinedType : OPTIONAL IfcFilterTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFILTERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFilterType + SUBTYPE OF (IfcFlowTreatmentDeviceType); + PredefinedType : IfcFilterTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFireSuppressionTerminal + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcFireSuppressionTerminalTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFireSuppressionTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcFireSuppressionTerminalTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFixedReferenceSweptAreaSolid + SUPERTYPE OF (ONEOF + (IfcDirectrixDerivedReferenceSweptAreaSolid)) + SUBTYPE OF (IfcDirectrixCurveSweptAreaSolid); + FixedReference : IfcDirection; +END_ENTITY; + +ENTITY IfcFlowController + SUPERTYPE OF (ONEOF + (IfcAirTerminalBox + ,IfcDamper + ,IfcDistributionBoard + ,IfcElectricDistributionBoard + ,IfcElectricTimeControl + ,IfcFlowMeter + ,IfcProtectiveDevice + ,IfcSwitchingDevice + ,IfcValve)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowControllerType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAirTerminalBoxType + ,IfcDamperType + ,IfcDistributionBoardType + ,IfcElectricDistributionBoardType + ,IfcElectricTimeControlType + ,IfcFlowMeterType + ,IfcProtectiveDeviceType + ,IfcSwitchingDeviceType + ,IfcValveType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowFitting + SUPERTYPE OF (ONEOF + (IfcCableCarrierFitting + ,IfcCableFitting + ,IfcDuctFitting + ,IfcJunctionBox + ,IfcPipeFitting)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowFittingType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCableCarrierFittingType + ,IfcCableFittingType + ,IfcDuctFittingType + ,IfcJunctionBoxType + ,IfcPipeFittingType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowInstrument + SUBTYPE OF (IfcDistributionControlElement); + PredefinedType : OPTIONAL IfcFlowInstrumentTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFLOWINSTRUMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFlowInstrumentType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcFlowInstrumentTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFlowMeter + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcFlowMeterTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFLOWMETERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFlowMeterType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcFlowMeterTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFlowMovingDevice + SUPERTYPE OF (ONEOF + (IfcCompressor + ,IfcFan + ,IfcPump)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowMovingDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCompressorType + ,IfcFanType + ,IfcPumpType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowSegment + SUPERTYPE OF (ONEOF + (IfcCableCarrierSegment + ,IfcCableSegment + ,IfcConveyorSegment + ,IfcDuctSegment + ,IfcPipeSegment)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowSegmentType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCableCarrierSegmentType + ,IfcCableSegmentType + ,IfcConveyorSegmentType + ,IfcDuctSegmentType + ,IfcPipeSegmentType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowStorageDevice + SUPERTYPE OF (ONEOF + (IfcElectricFlowStorageDevice + ,IfcTank)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowStorageDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcElectricFlowStorageDeviceType + ,IfcTankType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowTerminal + SUPERTYPE OF (ONEOF + (IfcAirTerminal + ,IfcAudioVisualAppliance + ,IfcCommunicationsAppliance + ,IfcElectricAppliance + ,IfcFireSuppressionTerminal + ,IfcLamp + ,IfcLightFixture + ,IfcLiquidTerminal + ,IfcMedicalDevice + ,IfcMobileTelecommunicationsAppliance + ,IfcOutlet + ,IfcSanitaryTerminal + ,IfcSignal + ,IfcSpaceHeater + ,IfcStackTerminal + ,IfcWasteTerminal)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowTerminalType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAirTerminalType + ,IfcAudioVisualApplianceType + ,IfcCommunicationsApplianceType + ,IfcElectricApplianceType + ,IfcFireSuppressionTerminalType + ,IfcLampType + ,IfcLightFixtureType + ,IfcLiquidTerminalType + ,IfcMedicalDeviceType + ,IfcMobileTelecommunicationsApplianceType + ,IfcOutletType + ,IfcSanitaryTerminalType + ,IfcSignalType + ,IfcSpaceHeaterType + ,IfcStackTerminalType + ,IfcWasteTerminalType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFlowTreatmentDevice + SUPERTYPE OF (ONEOF + (IfcDuctSilencer + ,IfcElectricFlowTreatmentDevice + ,IfcFilter + ,IfcInterceptor)) + SUBTYPE OF (IfcDistributionFlowElement); +END_ENTITY; + +ENTITY IfcFlowTreatmentDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDuctSilencerType + ,IfcElectricFlowTreatmentDeviceType + ,IfcFilterType + ,IfcInterceptorType)) + SUBTYPE OF (IfcDistributionFlowElementType); +END_ENTITY; + +ENTITY IfcFooting + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcFootingTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFOOTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFootingType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcFootingTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcFurnishingElement + SUPERTYPE OF (ONEOF + (IfcFurniture + ,IfcSystemFurnitureElement)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcFurnishingElementType + SUPERTYPE OF (ONEOF + (IfcFurnitureType + ,IfcSystemFurnitureElementType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcFurniture + SUBTYPE OF (IfcFurnishingElement); + PredefinedType : OPTIONAL IfcFurnitureTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCFURNITURETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcFurnitureType + SUBTYPE OF (IfcFurnishingElementType); + AssemblyPlace : IfcAssemblyPlaceEnum; + PredefinedType : OPTIONAL IfcFurnitureTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcGeographicElement + SUBTYPE OF (IfcElement); + PredefinedType : OPTIONAL IfcGeographicElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCGEOGRAPHICELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcGeographicElementType + SUBTYPE OF (IfcElementType); + PredefinedType : IfcGeographicElementTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcGeometricCurveSet + SUBTYPE OF (IfcGeometricSet); + WHERE + NoSurfaces : SIZEOF(QUERY(Temp <* SELF\IfcGeometricSet.Elements | +'IFC4X3.IFCSURFACE' IN TYPEOF(Temp))) = 0; +END_ENTITY; + +ENTITY IfcGeometricRepresentationContext + SUPERTYPE OF (ONEOF + (IfcGeometricRepresentationSubContext)) + SUBTYPE OF (IfcRepresentationContext); + CoordinateSpaceDimension : IfcDimensionCount; + Precision : OPTIONAL IfcReal; + WorldCoordinateSystem : IfcAxis2Placement; + TrueNorth : OPTIONAL IfcDirection; + INVERSE + HasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext; + HasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS; + WHERE + North2D : NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2); +END_ENTITY; + +ENTITY IfcGeometricRepresentationItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAnnotationFillArea + ,IfcBooleanResult + ,IfcBoundingBox + ,IfcCartesianPointList + ,IfcCartesianTransformationOperator + ,IfcCsgPrimitive3D + ,IfcCurve + ,IfcDirection + ,IfcFaceBasedSurfaceModel + ,IfcFillAreaStyleHatching + ,IfcFillAreaStyleTiles + ,IfcGeometricSet + ,IfcHalfSpaceSolid + ,IfcLightSource + ,IfcPlacement + ,IfcPlanarExtent + ,IfcPoint + ,IfcSectionedSpine + ,IfcSegment + ,IfcShellBasedSurfaceModel + ,IfcSolidModel + ,IfcSurface + ,IfcTessellatedItem + ,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, IfcConvertDirectionInto2D(SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem.P[2])); + SELF\IfcGeometricRepresentationContext.Precision : IfcReal := NVL(ParentContext.Precision,1.E-5); + WHERE + NoCoordOperation : SIZEOF(SELF\IfcGeometricRepresentationContext.HasCoordinateOperation) = 0; + ParentNoSub : NOT('IFC4X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext)); + UserTargetProvided : (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 + ConsistentDim : SIZEOF(QUERY(Temp <* Elements | + Temp.Dim <> Elements[1].Dim)) += 0; +END_ENTITY; + +ENTITY IfcGeomodel + SUBTYPE OF (IfcGeotechnicalAssembly); +END_ENTITY; + +ENTITY IfcGeoslice + SUBTYPE OF (IfcGeotechnicalAssembly); +END_ENTITY; + +ENTITY IfcGeotechnicalAssembly + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBorehole + ,IfcGeomodel + ,IfcGeoslice)) + SUBTYPE OF (IfcGeotechnicalElement); +END_ENTITY; + +ENTITY IfcGeotechnicalElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcGeotechnicalAssembly + ,IfcGeotechnicalStratum)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcGeotechnicalStratum + SUBTYPE OF (IfcGeotechnicalElement); + PredefinedType : OPTIONAL IfcGeotechnicalStratumTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcGeotechnicalStratumTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcGeotechnicalStratumTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcGradientCurve + SUBTYPE OF (IfcCompositeCurve); + BaseCurve : IfcBoundedCurve; + EndPoint : OPTIONAL IfcPlacement; + DERIVE + RelativeElevation : IfcLengthMeasure := IfcGradient(SELF); +END_ENTITY; + +ENTITY IfcGrid + SUBTYPE OF (IfcPositioningElement); + UAxes : LIST [1:?] OF UNIQUE IfcGridAxis; + VAxes : LIST [1:?] OF UNIQUE IfcGridAxis; + WAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis; + PredefinedType : OPTIONAL IfcGridTypeEnum; +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 IfcGridPlacementDirectionSelect; +END_ENTITY; + +ENTITY IfcGroup + SUPERTYPE OF (ONEOF + (IfcAsset + ,IfcInventory + ,IfcStructuralLoadGroup + ,IfcStructuralResultGroup + ,IfcSystem)) + SUBTYPE OF (IfcObject); + INVERSE + IsGroupedBy : SET [0:?] OF IfcRelAssignsToGroup FOR RelatingGroup; + ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements; +END_ENTITY; + +ENTITY IfcHalfSpaceSolid + SUPERTYPE OF (ONEOF + (IfcBoxedHalfSpace + ,IfcPolygonalBoundedHalfSpace)) + SUBTYPE OF (IfcGeometricRepresentationItem); + BaseSurface : IfcSurface; + AgreementFlag : IfcBoolean; + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcHeatExchanger + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcHeatExchangerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCHEATEXCHANGERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcHeatExchangerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcHeatExchangerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcHumidifier + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcHumidifierTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcHumidifierType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcHumidifierTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcIShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + OverallWidth : IfcPositiveLengthMeasure; + OverallDepth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + FlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + FlangeSlope : OPTIONAL IfcPlaneAngleMeasure; + WHERE + ValidFilletRadius : NOT(EXISTS(FilletRadius)) OR +((FilletRadius <= (OverallWidth - WebThickness)/2.) AND + (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.)); + ValidFlangeThickness : (2. * FlangeThickness) < OverallDepth; + ValidWebThickness : WebThickness < OverallWidth; +END_ENTITY; + +ENTITY IfcImageTexture + SUBTYPE OF (IfcSurfaceTexture); + URLReference : IfcURIReference; +END_ENTITY; + +ENTITY IfcImpactProtectionDevice + SUBTYPE OF (IfcElementComponent); + PredefinedType : OPTIONAL IfcImpactProtectionDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcImpactProtectionDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcImpactProtectionDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCIMPACTPROTECTIONDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcImpactProtectionDeviceType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcImpactProtectionDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcImpactProtectionDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcImpactProtectionDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcIndexedColourMap + SUBTYPE OF (IfcPresentationItem); + MappedTo : IfcTessellatedFaceSet; + Opacity : OPTIONAL IfcNormalisedRatioMeasure; + Colours : IfcColourRgbList; + ColourIndex : LIST [1:?] OF IfcPositiveInteger; +END_ENTITY; + +ENTITY IfcIndexedPolyCurve + SUBTYPE OF (IfcBoundedCurve); + Points : IfcCartesianPointList; + Segments : OPTIONAL LIST [1:?] OF IfcSegmentIndexSelect; + SelfIntersect : IfcLogical; + WHERE + Consecutive : NOT(EXISTS(Segments)) OR IfcConsecutiveSegments(Segments); +END_ENTITY; + +ENTITY IfcIndexedPolygonalFace + SUPERTYPE OF (ONEOF + (IfcIndexedPolygonalFaceWithVoids)) + SUBTYPE OF (IfcTessellatedItem); + CoordIndex : LIST [3:?] OF IfcPositiveInteger; + INVERSE + ToFaceSet : SET [1:?] OF IfcPolygonalFaceSet FOR Faces; + HasTexCoords : SET [0:1] OF IfcTextureCoordinateIndices FOR TexCoordsOf; +END_ENTITY; + +ENTITY IfcIndexedPolygonalFaceWithVoids + SUBTYPE OF (IfcIndexedPolygonalFace); + InnerCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger; +END_ENTITY; + +ENTITY IfcIndexedPolygonalTextureMap + SUBTYPE OF (IfcIndexedTextureMap); + TexCoordIndices : SET [1:?] OF IfcTextureCoordinateIndices; +END_ENTITY; + +ENTITY IfcIndexedTextureMap + ABSTRACT SUPERTYPE OF (ONEOF + (IfcIndexedPolygonalTextureMap + ,IfcIndexedTriangleTextureMap)) + SUBTYPE OF (IfcTextureCoordinate); + MappedTo : IfcTessellatedFaceSet; + TexCoords : IfcTextureVertexList; +END_ENTITY; + +ENTITY IfcIndexedTriangleTextureMap + SUBTYPE OF (IfcIndexedTextureMap); + TexCoordIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger; +END_ENTITY; + +ENTITY IfcInterceptor + SUBTYPE OF (IfcFlowTreatmentDevice); + PredefinedType : OPTIONAL IfcInterceptorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCINTERCEPTORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcInterceptorType + SUBTYPE OF (IfcFlowTreatmentDeviceType); + PredefinedType : IfcInterceptorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcIntersectionCurve + SUBTYPE OF (IfcSurfaceCurve); + WHERE + DistinctSurfaces : IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[1]) <> IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[2]); + TwoPCurves : SIZEOF(SELF\IfcSurfaceCurve.AssociatedGeometry) = 2; +END_ENTITY; + +ENTITY IfcInventory + SUBTYPE OF (IfcGroup); + PredefinedType : OPTIONAL IfcInventoryTypeEnum; + Jurisdiction : OPTIONAL IfcActorSelect; + ResponsiblePersons : OPTIONAL SET [1:?] OF IfcPerson; + LastUpdateDate : OPTIONAL IfcDate; + CurrentValue : OPTIONAL IfcCostValue; + OriginalValue : OPTIONAL IfcCostValue; +END_ENTITY; + +ENTITY IfcIrregularTimeSeries + SUBTYPE OF (IfcTimeSeries); + Values : LIST [1:?] OF IfcIrregularTimeSeriesValue; +END_ENTITY; + +ENTITY IfcIrregularTimeSeriesValue; + TimeStamp : IfcDateTime; + ListValues : LIST [1:?] OF IfcValue; +END_ENTITY; + +ENTITY IfcJunctionBox + SUBTYPE OF (IfcFlowFitting); + PredefinedType : OPTIONAL IfcJunctionBoxTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCJUNCTIONBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcJunctionBoxType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcJunctionBoxTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcKerb + SUBTYPE OF (IfcBuiltElement); + Mountable : IfcBoolean; +END_ENTITY; + +ENTITY IfcKerbType + SUBTYPE OF (IfcBuiltElementType); + Mountable : IfcBoolean; +END_ENTITY; + +ENTITY IfcLShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + Width : OPTIONAL IfcPositiveLengthMeasure; + Thickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + EdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + LegSlope : OPTIONAL IfcPlaneAngleMeasure; + WHERE + ValidThickness : (Thickness < Depth) AND (NOT(EXISTS(Width)) OR (Thickness < Width)); +END_ENTITY; + +ENTITY IfcLaborResource + SUBTYPE OF (IfcConstructionResource); + PredefinedType : OPTIONAL IfcLaborResourceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcLaborResourceType + SUBTYPE OF (IfcConstructionResourceType); + PredefinedType : IfcLaborResourceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); +END_ENTITY; + +ENTITY IfcLagTime + SUBTYPE OF (IfcSchedulingTime); + LagValue : IfcTimeOrRatioSelect; + DurationType : IfcTaskDurationEnum; +END_ENTITY; + +ENTITY IfcLamp + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcLampTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCLAMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcLampType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcLampTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcLibraryInformation + SUBTYPE OF (IfcExternalInformation); + Name : IfcLabel; + Version : OPTIONAL IfcLabel; + Publisher : OPTIONAL IfcActorSelect; + VersionDate : OPTIONAL IfcDateTime; + Location : OPTIONAL IfcURIReference; + Description : OPTIONAL IfcText; + INVERSE + LibraryInfoForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary; + HasLibraryReferences : SET [0:?] OF IfcLibraryReference FOR ReferencedLibrary; +END_ENTITY; + +ENTITY IfcLibraryReference + SUBTYPE OF (IfcExternalReference); + Description : OPTIONAL IfcText; + Language : OPTIONAL IfcLanguageId; + ReferencedLibrary : OPTIONAL IfcLibraryInformation; + INVERSE + LibraryRefForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary; +END_ENTITY; + +ENTITY IfcLightDistributionData; + MainPlaneAngle : IfcPlaneAngleMeasure; + SecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure; + LuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure; +END_ENTITY; + +ENTITY IfcLightFixture + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcLightFixtureTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCLIGHTFIXTURETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcLightFixtureType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcLightFixtureTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +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 + SameDim : Dir.Dim = Pnt.Dim; +END_ENTITY; + +ENTITY IfcLinearElement + SUPERTYPE OF (ONEOF + (IfcAlignmentCant + ,IfcAlignmentHorizontal + ,IfcAlignmentSegment + ,IfcAlignmentVertical)) + SUBTYPE OF (IfcProduct); +END_ENTITY; + +ENTITY IfcLinearPlacement + SUBTYPE OF (IfcObjectPlacement); + RelativePlacement : IfcAxis2PlacementLinear; + CartesianPosition : OPTIONAL IfcAxis2Placement3D; +END_ENTITY; + +ENTITY IfcLinearPositioningElement + SUPERTYPE OF (ONEOF + (IfcAlignment)) + SUBTYPE OF (IfcPositioningElement); +END_ENTITY; + +ENTITY IfcLiquidTerminal + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcLiquidTerminalTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcLiquidTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcLiquidTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCLIQUIDTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcLiquidTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcLiquidTerminalTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcLiquidTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcLiquidTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcLocalPlacement + SUBTYPE OF (IfcObjectPlacement); + RelativePlacement : IfcAxis2Placement; + WHERE + WR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo); +END_ENTITY; + +ENTITY IfcLoop + SUPERTYPE OF (ONEOF + (IfcEdgeLoop + ,IfcPolyLoop + ,IfcVertexLoop)) + SUBTYPE OF (IfcTopologicalRepresentationItem); +END_ENTITY; + +ENTITY IfcManifoldSolidBrep + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAdvancedBrep + ,IfcFacetedBrep)) + SUBTYPE OF (IfcSolidModel); + Outer : IfcClosedShell; +END_ENTITY; + +ENTITY IfcMapConversion + SUBTYPE OF (IfcCoordinateOperation); + Eastings : IfcLengthMeasure; + Northings : IfcLengthMeasure; + OrthogonalHeight : IfcLengthMeasure; + XAxisAbscissa : OPTIONAL IfcReal; + XAxisOrdinate : OPTIONAL IfcReal; + Scale : OPTIONAL IfcReal; + ScaleY : OPTIONAL IfcReal; + ScaleZ : OPTIONAL IfcReal; +END_ENTITY; + +ENTITY IfcMappedItem + SUBTYPE OF (IfcRepresentationItem); + MappingSource : IfcRepresentationMap; + MappingTarget : IfcCartesianTransformationOperator; +END_ENTITY; + +ENTITY IfcMarineFacility + SUBTYPE OF (IfcFacility); + PredefinedType : OPTIONAL IfcMarineFacilityTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMarineFacilityTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMarineFacilityTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcMarinePart + SUBTYPE OF (IfcFacilityPart); + PredefinedType : OPTIONAL IfcMarinePartTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMarinePartTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMarinePartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcMaterial + SUBTYPE OF (IfcMaterialDefinition); + Name : IfcLabel; + Description : OPTIONAL IfcText; + Category : OPTIONAL IfcLabel; + INVERSE + HasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial; + IsRelatedWith : SET [0:?] OF IfcMaterialRelationship FOR RelatedMaterials; + RelatesTo : SET [0:1] OF IfcMaterialRelationship FOR RelatingMaterial; +END_ENTITY; + +ENTITY IfcMaterialClassificationRelationship; + MaterialClassifications : SET [1:?] OF IfcClassificationSelect; + ClassifiedMaterial : IfcMaterial; +END_ENTITY; + +ENTITY IfcMaterialConstituent + SUBTYPE OF (IfcMaterialDefinition); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + Material : IfcMaterial; + Fraction : OPTIONAL IfcNormalisedRatioMeasure; + Category : OPTIONAL IfcLabel; + INVERSE + ToMaterialConstituentSet : IfcMaterialConstituentSet FOR MaterialConstituents; +END_ENTITY; + +ENTITY IfcMaterialConstituentSet + SUBTYPE OF (IfcMaterialDefinition); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + MaterialConstituents : OPTIONAL SET [1:?] OF IfcMaterialConstituent; +END_ENTITY; + +ENTITY IfcMaterialDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcMaterial + ,IfcMaterialConstituent + ,IfcMaterialConstituentSet + ,IfcMaterialLayer + ,IfcMaterialLayerSet + ,IfcMaterialProfile + ,IfcMaterialProfileSet)); + INVERSE + AssociatedTo : SET [0:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial; + HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; + HasProperties : SET [0:?] OF IfcMaterialProperties FOR Material; +END_ENTITY; + +ENTITY IfcMaterialDefinitionRepresentation + SUBTYPE OF (IfcProductRepresentation); + RepresentedMaterial : IfcMaterial; + WHERE + OnlyStyledRepresentations : SIZEOF(QUERY(temp <* Representations | + (NOT('IFC4X3.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp))) +)) = 0; +END_ENTITY; + +ENTITY IfcMaterialLayer + SUPERTYPE OF (ONEOF + (IfcMaterialLayerWithOffsets)) + SUBTYPE OF (IfcMaterialDefinition); + Material : OPTIONAL IfcMaterial; + LayerThickness : IfcNonNegativeLengthMeasure; + IsVentilated : OPTIONAL IfcLogical; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + Category : OPTIONAL IfcLabel; + Priority : OPTIONAL IfcInteger; + INVERSE + ToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers; + WHERE + NormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100}; +END_ENTITY; + +ENTITY IfcMaterialLayerSet + SUBTYPE OF (IfcMaterialDefinition); + MaterialLayers : LIST [1:?] OF IfcMaterialLayer; + LayerSetName : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + DERIVE + TotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF); +END_ENTITY; + +ENTITY IfcMaterialLayerSetUsage + SUBTYPE OF (IfcMaterialUsageDefinition); + ForLayerSet : IfcMaterialLayerSet; + LayerSetDirection : IfcLayerSetDirectionEnum; + DirectionSense : IfcDirectionSenseEnum; + OffsetFromReferenceLine : IfcLengthMeasure; + ReferenceExtent : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcMaterialLayerWithOffsets + SUBTYPE OF (IfcMaterialLayer); + OffsetDirection : IfcLayerSetDirectionEnum; + OffsetValues : ARRAY [1:2] OF IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcMaterialList; + Materials : LIST [1:?] OF IfcMaterial; +END_ENTITY; + +ENTITY IfcMaterialProfile + SUPERTYPE OF (ONEOF + (IfcMaterialProfileWithOffsets)) + SUBTYPE OF (IfcMaterialDefinition); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + Material : OPTIONAL IfcMaterial; + Profile : IfcProfileDef; + Priority : OPTIONAL IfcInteger; + Category : OPTIONAL IfcLabel; + INVERSE + ToMaterialProfileSet : IfcMaterialProfileSet FOR MaterialProfiles; + WHERE + NormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100}; +END_ENTITY; + +ENTITY IfcMaterialProfileSet + SUBTYPE OF (IfcMaterialDefinition); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + MaterialProfiles : LIST [1:?] OF IfcMaterialProfile; + CompositeProfile : OPTIONAL IfcCompositeProfileDef; +END_ENTITY; + +ENTITY IfcMaterialProfileSetUsage + SUPERTYPE OF (ONEOF + (IfcMaterialProfileSetUsageTapering)) + SUBTYPE OF (IfcMaterialUsageDefinition); + ForProfileSet : IfcMaterialProfileSet; + CardinalPoint : OPTIONAL IfcCardinalPointReference; + ReferenceExtent : OPTIONAL IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcMaterialProfileSetUsageTapering + SUBTYPE OF (IfcMaterialProfileSetUsage); + ForProfileEndSet : IfcMaterialProfileSet; + CardinalEndPoint : OPTIONAL IfcCardinalPointReference; +END_ENTITY; + +ENTITY IfcMaterialProfileWithOffsets + SUBTYPE OF (IfcMaterialProfile); + OffsetValues : ARRAY [1:2] OF IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcMaterialProperties + SUBTYPE OF (IfcExtendedProperties); + Material : IfcMaterialDefinition; +END_ENTITY; + +ENTITY IfcMaterialRelationship + SUBTYPE OF (IfcResourceLevelRelationship); + RelatingMaterial : IfcMaterial; + RelatedMaterials : SET [1:?] OF IfcMaterial; + MaterialExpression : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcMaterialUsageDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcMaterialLayerSetUsage + ,IfcMaterialProfileSetUsage)); + INVERSE + AssociatedTo : SET [1:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial; +END_ENTITY; + +ENTITY IfcMeasureWithUnit; + ValueComponent : IfcValue; + UnitComponent : IfcUnit; +END_ENTITY; + +ENTITY IfcMechanicalFastener + SUBTYPE OF (IfcElementComponent); + NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + NominalLength : OPTIONAL IfcPositiveLengthMeasure; + PredefinedType : OPTIONAL IfcMechanicalFastenerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCMECHANICALFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcMechanicalFastenerType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcMechanicalFastenerTypeEnum; + NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + NominalLength : OPTIONAL IfcPositiveLengthMeasure; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcMedicalDevice + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcMedicalDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCMEDICALDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcMedicalDeviceType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcMedicalDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcMember + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcMemberTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCMEMBERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcMemberType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcMemberTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcMetric + SUBTYPE OF (IfcConstraint); + Benchmark : IfcBenchmarkEnum; + ValueSource : OPTIONAL IfcLabel; + DataValue : OPTIONAL IfcMetricValueSelect; + ReferencePath : OPTIONAL IfcReference; +END_ENTITY; + +ENTITY IfcMirroredProfileDef + SUBTYPE OF (IfcDerivedProfileDef); + DERIVE + SELF\IfcDerivedProfileDef.Operator : IfcCartesianTransformationOperator2D := +IfcRepresentationItem() || IfcGeometricRepresentationItem() || +IfcCartesianTransformationOperator( + -- Axis1 + IfcRepresentationItem() || IfcGeometricRepresentationItem() || + IfcDirection([-1., 0.]), + -- Axis2 + IfcRepresentationItem() || IfcGeometricRepresentationItem() || + IfcDirection([ 0., 1.]), + -- LocalOrigin + IfcRepresentationItem() || IfcGeometricRepresentationItem() || + IfcPoint() || IfcCartesianPoint([0., 0.]), + -- Scale + 1.) || +IfcCartesianTransformationOperator2D(); +END_ENTITY; + +ENTITY IfcMobileTelecommunicationsAppliance + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcMobileTelecommunicationsApplianceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcMobileTelecommunicationsApplianceType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcMobileTelecommunicationsApplianceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcMonetaryUnit; + Currency : IfcLabel; +END_ENTITY; + +ENTITY IfcMooringDevice + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcMooringDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMooringDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMooringDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCMOORINGDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcMooringDeviceType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcMooringDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcMooringDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMooringDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcMotorConnection + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcMotorConnectionTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCMOTORCONNECTIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcMotorConnectionType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcMotorConnectionTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +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 IfcNavigationElement + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcNavigationElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcNavigationElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcNavigationElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCNAVIGATIONELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcNavigationElementType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcNavigationElementTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcNavigationElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcNavigationElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcObject + ABSTRACT SUPERTYPE OF (ONEOF + (IfcActor + ,IfcControl + ,IfcGroup + ,IfcProcess + ,IfcProduct + ,IfcResource)) + SUBTYPE OF (IfcObjectDefinition); + ObjectType : OPTIONAL IfcLabel; + INVERSE + IsDeclaredBy : SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects; + Declares : SET [0:?] OF IfcRelDefinesByObject FOR RelatingObject; + IsTypedBy : SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects; + IsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects; + WHERE + UniquePropertySetNames : ((SIZEOF(IsDefinedBy) = 0) OR IfcUniqueDefinitionNames(IsDefinedBy)); +END_ENTITY; + +ENTITY IfcObjectDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcContext + ,IfcObject + ,IfcTypeObject)) + SUBTYPE OF (IfcRoot); + INVERSE + HasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects; + Nests : SET [0:1] OF IfcRelNests FOR RelatedObjects; + IsNestedBy : SET [0:?] OF IfcRelNests FOR RelatingObject; + HasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions; + IsDecomposedBy : SET [0:?] OF IfcRelAggregates FOR RelatingObject; + Decomposes : SET [0:1] OF IfcRelAggregates FOR RelatedObjects; + HasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects; +END_ENTITY; + +ENTITY IfcObjectPlacement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcGridPlacement + ,IfcLinearPlacement + ,IfcLocalPlacement)); + PlacementRelTo : OPTIONAL IfcObjectPlacement; + INVERSE + PlacesObject : SET [0:?] OF IfcProduct FOR ObjectPlacement; + ReferencedByPlacements : SET [0:?] OF IfcObjectPlacement FOR PlacementRelTo; +END_ENTITY; + +ENTITY IfcObjective + SUBTYPE OF (IfcConstraint); + BenchmarkValues : OPTIONAL LIST [1:?] OF IfcConstraint; + LogicalAggregator : OPTIONAL IfcLogicalOperatorEnum; + 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 : OPTIONAL IfcOccupantTypeEnum; + WHERE + WR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) +OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcOffsetCurve + ABSTRACT SUPERTYPE OF (ONEOF + (IfcOffsetCurve2D + ,IfcOffsetCurve3D + ,IfcOffsetCurveByDistances)) + SUBTYPE OF (IfcCurve); + BasisCurve : IfcCurve; +END_ENTITY; + +ENTITY IfcOffsetCurve2D + SUBTYPE OF (IfcOffsetCurve); + Distance : IfcLengthMeasure; + SelfIntersect : IfcLogical; + WHERE + DimIs2D : BasisCurve.Dim = 2; +END_ENTITY; + +ENTITY IfcOffsetCurve3D + SUBTYPE OF (IfcOffsetCurve); + Distance : IfcLengthMeasure; + SelfIntersect : IfcLogical; + RefDirection : IfcDirection; + WHERE + DimIs2D : BasisCurve.Dim = 3; +END_ENTITY; + +ENTITY IfcOffsetCurveByDistances + SUBTYPE OF (IfcOffsetCurve); + OffsetValues : LIST [1:?] OF IfcPointByDistanceExpression; + Tag : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcOpenCrossProfileDef + SUBTYPE OF (IfcProfileDef); + HorizontalWidths : IfcBoolean; + Widths : LIST [1:?] OF IfcNonNegativeLengthMeasure; + Slopes : LIST [1:?] OF IfcPlaneAngleMeasure; + Tags : OPTIONAL LIST [2:?] OF IfcLabel; + OffsetPoint : OPTIONAL IfcCartesianPoint; + WHERE + CorrectProfileType : SELF\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE; + CorrespondingSlopeWidths : SIZEOF(Slopes) = SIZEOF(Widths); + CorrespondingTags : (NOT EXISTS (Tags)) OR (SIZEOF(Tags) = (SIZEOF(Slopes) + 1)); +END_ENTITY; + +ENTITY IfcOpenShell + SUBTYPE OF (IfcConnectedFaceSet); +END_ENTITY; + +ENTITY IfcOpeningElement + SUBTYPE OF (IfcFeatureElementSubtraction); + PredefinedType : OPTIONAL IfcOpeningElementTypeEnum; + INVERSE + HasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcOpeningElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcOpeningElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcOrganization; + Identification : 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 + SUBTYPE OF (IfcResourceLevelRelationship); + RelatingOrganization : IfcOrganization; + RelatedOrganizations : SET [1:?] OF IfcOrganization; +END_ENTITY; + +ENTITY IfcOrientedEdge + SUBTYPE OF (IfcEdge); + EdgeElement : IfcEdge; + Orientation : IfcBoolean; + DERIVE + SELF\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose +(Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd); + SELF\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose +(Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart); + WHERE + EdgeElementNotOriented : NOT('IFC4X3.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement)); +END_ENTITY; + +ENTITY IfcOuterBoundaryCurve + SUBTYPE OF (IfcBoundaryCurve); +END_ENTITY; + +ENTITY IfcOutlet + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcOutletTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCOUTLETTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcOutletType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcOutletTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcOwnerHistory; + OwningUser : IfcPersonAndOrganization; + OwningApplication : IfcApplication; + State : OPTIONAL IfcStateEnum; + ChangeAction : OPTIONAL IfcChangeActionEnum; + LastModifiedDate : OPTIONAL IfcTimeStamp; + LastModifyingUser : OPTIONAL IfcPersonAndOrganization; + LastModifyingApplication : OPTIONAL IfcApplication; + CreationDate : IfcTimeStamp; + WHERE + CorrectChangeAction : (EXISTS(LastModifiedDate)) OR +(NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR +(NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE))); +END_ENTITY; + +ENTITY IfcParameterizedProfileDef + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAsymmetricIShapeProfileDef + ,IfcCShapeProfileDef + ,IfcCircleProfileDef + ,IfcEllipseProfileDef + ,IfcIShapeProfileDef + ,IfcLShapeProfileDef + ,IfcRectangleProfileDef + ,IfcTShapeProfileDef + ,IfcTrapeziumProfileDef + ,IfcUShapeProfileDef + ,IfcZShapeProfileDef)) + SUBTYPE OF (IfcProfileDef); + Position : OPTIONAL IfcAxis2Placement2D; +END_ENTITY; + +ENTITY IfcPath + SUBTYPE OF (IfcTopologicalRepresentationItem); + EdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge; + WHERE + IsContinuous : IfcPathHeadToTail(SELF); +END_ENTITY; + +ENTITY IfcPavement + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcPavementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcPavementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPavementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPAVEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcPavementType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcPavementTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcPavementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPavementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcPcurve + SUBTYPE OF (IfcCurve); + BasisSurface : IfcSurface; + ReferenceCurve : IfcCurve; + WHERE + DimIs2D : ReferenceCurve.Dim = 2; +END_ENTITY; + +ENTITY IfcPerformanceHistory + SUBTYPE OF (IfcControl); + LifeCyclePhase : IfcLabel; + PredefinedType : OPTIONAL IfcPerformanceHistoryTypeEnum; +END_ENTITY; + +ENTITY IfcPermeableCoveringProperties + SUBTYPE OF (IfcPreDefinedPropertySet); + OperationType : IfcPermeableCoveringOperationEnum; + PanelPosition : IfcWindowPanelPositionEnum; + FrameDepth : OPTIONAL IfcPositiveLengthMeasure; + FrameThickness : OPTIONAL IfcPositiveLengthMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; +END_ENTITY; + +ENTITY IfcPermit + SUBTYPE OF (IfcControl); + PredefinedType : OPTIONAL IfcPermitTypeEnum; + Status : OPTIONAL IfcLabel; + LongDescription : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcPerson; + Identification : 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 + IdentifiablePerson : EXISTS(Identification) OR EXISTS(FamilyName) OR EXISTS(GivenName); + ValidSetOfNames : NOT EXISTS(MiddleNames) OR 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 + NoSelfReference : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0; + UniqueQuantityNames : IfcUniqueQuantityNames(HasQuantities); +END_ENTITY; + +ENTITY IfcPhysicalQuantity + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPhysicalComplexQuantity + ,IfcPhysicalSimpleQuantity)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + INVERSE + HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; + PartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities; +END_ENTITY; + +ENTITY IfcPhysicalSimpleQuantity + ABSTRACT SUPERTYPE OF (ONEOF + (IfcQuantityArea + ,IfcQuantityCount + ,IfcQuantityLength + ,IfcQuantityNumber + ,IfcQuantityTime + ,IfcQuantityVolume + ,IfcQuantityWeight)) + SUBTYPE OF (IfcPhysicalQuantity); + Unit : OPTIONAL IfcNamedUnit; +END_ENTITY; + +ENTITY IfcPile + SUBTYPE OF (IfcDeepFoundation); + PredefinedType : OPTIONAL IfcPileTypeEnum; + ConstructionType : OPTIONAL IfcPileConstructionEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPILETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcPileType + SUBTYPE OF (IfcDeepFoundationType); + PredefinedType : IfcPileTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcPipeFitting + SUBTYPE OF (IfcFlowFitting); + PredefinedType : OPTIONAL IfcPipeFittingTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPIPEFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcPipeFittingType + SUBTYPE OF (IfcFlowFittingType); + PredefinedType : IfcPipeFittingTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcPipeSegment + SUBTYPE OF (IfcFlowSegment); + PredefinedType : OPTIONAL IfcPipeSegmentTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPIPESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcPipeSegmentType + SUBTYPE OF (IfcFlowSegmentType); + PredefinedType : IfcPipeSegmentTypeEnum; + WHERE + CorrectPredefinedType : (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 IfcBinary; + WHERE + MinPixelInS : Width >= 1; + MinPixelInT : Height >= 1; + NumberOfColours : {1 <= ColourComponents <= 4}; + PixelAsByteAndSameLength : SIZEOF(QUERY(temp<* Pixel | + (BLENGTH(temp) MOD 8 = 0) AND + (BLENGTH(temp) = BLENGTH(Pixel[1])) +)) = SIZEOF(Pixel); + SizeOfPixelList : SIZEOF(Pixel) = (Width * Height); +END_ENTITY; + +ENTITY IfcPlacement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAxis1Placement + ,IfcAxis2Placement2D + ,IfcAxis2Placement3D + ,IfcAxis2PlacementLinear)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Location : IfcPoint; + 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 (IfcBuiltElement); + PredefinedType : OPTIONAL IfcPlateTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPLATETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcPlateType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcPlateTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcPoint + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCartesianPoint + ,IfcPointByDistanceExpression + ,IfcPointOnCurve + ,IfcPointOnSurface)) + SUBTYPE OF (IfcGeometricRepresentationItem); +END_ENTITY; + +ENTITY IfcPointByDistanceExpression + SUBTYPE OF (IfcPoint); + DistanceAlong : IfcCurveMeasureSelect; + OffsetLateral : OPTIONAL IfcLengthMeasure; + OffsetVertical : OPTIONAL IfcLengthMeasure; + OffsetLongitudinal : OPTIONAL IfcLengthMeasure; + BasisCurve : IfcCurve; + DERIVE + Dim : IfcDimensionCount := BasisCurve.Dim; +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 + AllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0; +END_ENTITY; + +ENTITY IfcPolygonalBoundedHalfSpace + SUBTYPE OF (IfcHalfSpaceSolid); + Position : IfcAxis2Placement3D; + PolygonalBoundary : IfcBoundedCurve; + WHERE + BoundaryDim : PolygonalBoundary.Dim = 2; + BoundaryType : SIZEOF(TYPEOF(PolygonalBoundary) * [ + 'IFC4X3.IfcPolyline', + 'IFC4X3.IfcCompositeCurve', + 'IFC4X3.IfcIndexedPolyCurve' + ]) = 1; +END_ENTITY; + +ENTITY IfcPolygonalFaceSet + SUBTYPE OF (IfcTessellatedFaceSet); + Faces : LIST [1:?] OF IfcIndexedPolygonalFace; + PnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger; +END_ENTITY; + +ENTITY IfcPolyline + SUBTYPE OF (IfcBoundedCurve); + Points : LIST [2:?] OF IfcCartesianPoint; + WHERE + SameDim : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0; +END_ENTITY; + +ENTITY IfcPolynomialCurve + SUBTYPE OF (IfcCurve); + Position : IfcPlacement; + CoefficientsX : OPTIONAL LIST [2:?] OF IfcReal; + CoefficientsY : OPTIONAL LIST [2:?] OF IfcReal; + CoefficientsZ : OPTIONAL LIST [2:?] OF IfcReal; + WHERE + CorrectPositionDim : ((Position.Dim=2) AND (NOT EXISTS(CoefficientsZ))) OR (Position.Dim=3); + ValidCoefficients : (EXISTS(CoefficientsX) AND EXISTS(CoefficientsY)) OR (EXISTS(CoefficientsX) AND EXISTS(CoefficientsZ)) OR (EXISTS(CoefficientsY) AND EXISTS(CoefficientsZ)) OR (EXISTS(CoefficientsX) AND EXISTS(CoefficientsY) AND EXISTS(CoefficientsZ)); +END_ENTITY; + +ENTITY IfcPort + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDistributionPort)) + SUBTYPE OF (IfcProduct); + INVERSE + ContainedIn : SET [0:1] OF IfcRelConnectsPortToElement FOR RelatingPort; + ConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort; + ConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort; +END_ENTITY; + +ENTITY IfcPositioningElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcGrid + ,IfcLinearPositioningElement + ,IfcReferent)) + SUBTYPE OF (IfcProduct); + INVERSE + ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; + Positions : SET [0:?] OF IfcRelPositions FOR RelatingPositioningElement; + WHERE + HasPlacement : EXISTS(SELF\IfcProduct.ObjectPlacement); +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 IfcPreDefinedItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPreDefinedColour + ,IfcPreDefinedCurveFont + ,IfcPreDefinedTextFont)) + SUBTYPE OF (IfcPresentationItem); + Name : IfcLabel; +END_ENTITY; + +ENTITY IfcPreDefinedProperties + ABSTRACT SUPERTYPE OF (ONEOF + (IfcReinforcementBarProperties + ,IfcSectionProperties + ,IfcSectionReinforcementProperties)) + SUBTYPE OF (IfcPropertyAbstraction); +END_ENTITY; + +ENTITY IfcPreDefinedPropertySet + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDoorLiningProperties + ,IfcDoorPanelProperties + ,IfcPermeableCoveringProperties + ,IfcReinforcementDefinitionProperties + ,IfcWindowLiningProperties + ,IfcWindowPanelProperties)) + SUBTYPE OF (IfcPropertySetDefinition); +END_ENTITY; + +ENTITY IfcPreDefinedTextFont + ABSTRACT SUPERTYPE OF (ONEOF + (IfcTextStyleFontModel)) + SUBTYPE OF (IfcPreDefinedItem); +END_ENTITY; + +ENTITY IfcPresentationItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcColourRgbList + ,IfcColourSpecification + ,IfcCurveStyleFont + ,IfcCurveStyleFontAndScaling + ,IfcCurveStyleFontPattern + ,IfcIndexedColourMap + ,IfcPreDefinedItem + ,IfcSurfaceStyleLighting + ,IfcSurfaceStyleRefraction + ,IfcSurfaceStyleShading + ,IfcSurfaceStyleWithTextures + ,IfcSurfaceTexture + ,IfcTextStyleForDefinedFont + ,IfcTextStyleTextModel + ,IfcTextureCoordinate + ,IfcTextureVertex + ,IfcTextureVertexList)); +END_ENTITY; + +ENTITY IfcPresentationLayerAssignment + SUPERTYPE OF (ONEOF + (IfcPresentationLayerWithStyle)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + AssignedItems : SET [1:?] OF IfcLayeredItem; + Identifier : OPTIONAL IfcIdentifier; + WHERE + ApplicableItems : SIZEOF(QUERY(temp <* AssignedItems | ( + SIZEOF(TYPEOF(temp) * [ + 'IFC4X3.IFCSHAPEREPRESENTATION', + 'IFC4X3.IFCGEOMETRICREPRESENTATIONITEM', + 'IFC4X3.IFCMAPPEDITEM']) = 1) +)) = SIZEOF(AssignedItems); +END_ENTITY; + +ENTITY IfcPresentationLayerWithStyle + SUBTYPE OF (IfcPresentationLayerAssignment); + LayerOn : IfcLogical; + LayerFrozen : IfcLogical; + LayerBlocked : IfcLogical; + LayerStyles : SET [0:?] OF IfcPresentationStyle; + WHERE + ApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | (SIZEOF(TYPEOF(temp) * ['IFC4X3.IfcGeometricRepresentationItem','IFC4X3.IfcMappedItem']) >= 1))) = SIZEOF(AssignedItems); +END_ENTITY; + +ENTITY IfcPresentationStyle + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCurveStyle + ,IfcFillAreaStyle + ,IfcSurfaceStyle + ,IfcTextStyle)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcProcedure + SUBTYPE OF (IfcProcess); + PredefinedType : OPTIONAL IfcProcedureTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR +((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); + HasName : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcProcedureType + SUBTYPE OF (IfcTypeProcess); + PredefinedType : IfcProcedureTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType)); +END_ENTITY; + +ENTITY IfcProcess + ABSTRACT SUPERTYPE OF (ONEOF + (IfcEvent + ,IfcProcedure + ,IfcTask)) + SUBTYPE OF (IfcObject); + Identification : OPTIONAL IfcIdentifier; + LongDescription : OPTIONAL IfcText; + INVERSE + IsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess; + IsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess; + OperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess; +END_ENTITY; + +ENTITY IfcProduct + ABSTRACT SUPERTYPE OF (ONEOF + (IfcAnnotation + ,IfcElement + ,IfcLinearElement + ,IfcPort + ,IfcPositioningElement + ,IfcSpatialElement + ,IfcStructuralActivity + ,IfcStructuralItem)) + SUBTYPE OF (IfcObject); + ObjectPlacement : OPTIONAL IfcObjectPlacement; + Representation : OPTIONAL IfcProductRepresentation; + INVERSE + ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct; + PositionedRelativeTo : SET [0:?] OF IfcRelPositions FOR RelatedProducts; + ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements; + WHERE + PlacementForShapeRepresentation : (EXISTS(Representation) AND EXISTS(ObjectPlacement)) + OR (EXISTS(Representation) AND + (SIZEOF(QUERY(temp <* Representation.Representations | 'IFC4X3.IFCSHAPEREPRESENTATION' IN TYPEOF(temp))) = 0)) + OR (NOT(EXISTS(Representation))); +END_ENTITY; + +ENTITY IfcProductDefinitionShape + SUBTYPE OF (IfcProductRepresentation); + INVERSE + ShapeOfProduct : SET [1:?] OF IfcProduct FOR Representation; + HasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape; + WHERE + OnlyShapeModel : SIZEOF(QUERY(temp <* Representations | + (NOT('IFC4X3.IFCSHAPEMODEL' IN TYPEOF(temp))) +)) = 0; +END_ENTITY; + +ENTITY IfcProductRepresentation + ABSTRACT SUPERTYPE OF (ONEOF + (IfcMaterialDefinitionRepresentation + ,IfcProductDefinitionShape)); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + Representations : LIST [1:?] OF IfcRepresentation; +END_ENTITY; + +ENTITY IfcProfileDef + SUPERTYPE OF (ONEOF + (IfcArbitraryClosedProfileDef + ,IfcArbitraryOpenProfileDef + ,IfcCompositeProfileDef + ,IfcDerivedProfileDef + ,IfcOpenCrossProfileDef + ,IfcParameterizedProfileDef)); + ProfileType : IfcProfileTypeEnum; + ProfileName : OPTIONAL IfcLabel; + INVERSE + HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; + HasProperties : SET [0:?] OF IfcProfileProperties FOR ProfileDefinition; +END_ENTITY; + +ENTITY IfcProfileProperties + SUBTYPE OF (IfcExtendedProperties); + ProfileDefinition : IfcProfileDef; +END_ENTITY; + +ENTITY IfcProject + SUBTYPE OF (IfcContext); + WHERE + CorrectContext : NOT(EXISTS(SELF\IfcContext.RepresentationContexts)) OR +(SIZEOF(QUERY(Temp <* SELF\IfcContext.RepresentationContexts | + 'IFC4X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp) + )) = 0); + HasName : EXISTS(SELF\IfcRoot.Name); + NoDecomposition : SIZEOF(SELF\IfcObjectDefinition.Decomposes) = 0; +END_ENTITY; + +ENTITY IfcProjectLibrary + SUBTYPE OF (IfcContext); +END_ENTITY; + +ENTITY IfcProjectOrder + SUBTYPE OF (IfcControl); + PredefinedType : OPTIONAL IfcProjectOrderTypeEnum; + Status : OPTIONAL IfcLabel; + LongDescription : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcProjectedCRS + SUBTYPE OF (IfcCoordinateReferenceSystem); + MapProjection : OPTIONAL IfcIdentifier; + MapZone : OPTIONAL IfcIdentifier; + MapUnit : OPTIONAL IfcNamedUnit; + WHERE + IsLengthUnit : NOT(EXISTS(MapUnit)) OR (MapUnit.UnitType = IfcUnitEnum.LENGTHUNIT); +END_ENTITY; + +ENTITY IfcProjectionElement + SUBTYPE OF (IfcFeatureElementAddition); + PredefinedType : OPTIONAL IfcProjectionElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcProjectionElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcProjectionElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcProperty + ABSTRACT SUPERTYPE OF (ONEOF + (IfcComplexProperty + ,IfcSimpleProperty)) + SUBTYPE OF (IfcPropertyAbstraction); + Name : IfcIdentifier; + Specification : OPTIONAL IfcText; + INVERSE + PartOfPset : SET [0:?] OF IfcPropertySet FOR HasProperties; + PropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty; + PropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty; + PartOfComplex : SET [0:?] OF IfcComplexProperty FOR HasProperties; + HasConstraints : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatedResourceObjects; + HasApprovals : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatedResourceObjects; +END_ENTITY; + +ENTITY IfcPropertyAbstraction + ABSTRACT SUPERTYPE OF (ONEOF + (IfcExtendedProperties + ,IfcPreDefinedProperties + ,IfcProperty + ,IfcPropertyEnumeration)); + INVERSE + HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; +END_ENTITY; + +ENTITY IfcPropertyBoundedValue + SUBTYPE OF (IfcSimpleProperty); + UpperBoundValue : OPTIONAL IfcValue; + LowerBoundValue : OPTIONAL IfcValue; + Unit : OPTIONAL IfcUnit; + SetPointValue : OPTIONAL IfcValue; + WHERE + SameUnitLowerSet : NOT(EXISTS(LowerBoundValue)) OR NOT(EXISTS(SetPointValue)) OR +(TYPEOF(LowerBoundValue) = TYPEOF(SetPointValue)); + SameUnitUpperLower : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR +(TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue)); + SameUnitUpperSet : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(SetPointValue)) OR +(TYPEOF(UpperBoundValue) = TYPEOF(SetPointValue)); +END_ENTITY; + +ENTITY IfcPropertyDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPropertySetDefinition + ,IfcPropertyTemplateDefinition)) + SUBTYPE OF (IfcRoot); + INVERSE + HasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions; + HasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects; +END_ENTITY; + +ENTITY IfcPropertyDependencyRelationship + SUBTYPE OF (IfcResourceLevelRelationship); + DependingProperty : IfcProperty; + DependantProperty : IfcProperty; + Expression : OPTIONAL IfcText; + WHERE + NoSelfReference : DependingProperty :<>: DependantProperty; +END_ENTITY; + +ENTITY IfcPropertyEnumeratedValue + SUBTYPE OF (IfcSimpleProperty); + EnumerationValues : OPTIONAL LIST [1:?] OF IfcValue; + EnumerationReference : OPTIONAL IfcPropertyEnumeration; + WHERE + WR21 : NOT(EXISTS(EnumerationReference)) +OR NOT(EXISTS(EnumerationValues)) +OR (SIZEOF(QUERY(temp <* EnumerationValues | + temp IN EnumerationReference.EnumerationValues)) + = SIZEOF(EnumerationValues)); +END_ENTITY; + +ENTITY IfcPropertyEnumeration + SUBTYPE OF (IfcPropertyAbstraction); + 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 : OPTIONAL 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 IfcText; + PropertyReference : OPTIONAL IfcObjectReferenceSelect; +END_ENTITY; + +ENTITY IfcPropertySet + SUBTYPE OF (IfcPropertySetDefinition); + HasProperties : SET [1:?] OF IfcProperty; + WHERE + ExistsName : EXISTS(SELF\IfcRoot.Name); + UniquePropertyNames : IfcUniquePropertyName(HasProperties); +END_ENTITY; + +ENTITY IfcPropertySetDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPreDefinedPropertySet + ,IfcPropertySet + ,IfcQuantitySet)) + SUBTYPE OF (IfcPropertyDefinition); + INVERSE + DefinesType : SET [0:?] OF IfcTypeObject FOR HasPropertySets; + IsDefinedBy : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatedPropertySets; + DefinesOccurrence : SET [0:?] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition; +END_ENTITY; + +ENTITY IfcPropertySetTemplate + SUBTYPE OF (IfcPropertyTemplateDefinition); + TemplateType : OPTIONAL IfcPropertySetTemplateTypeEnum; + ApplicableEntity : OPTIONAL IfcIdentifier; + HasPropertyTemplates : SET [1:?] OF IfcPropertyTemplate; + INVERSE + Defines : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatingTemplate; + WHERE + ExistsName : EXISTS(SELF\IfcRoot.Name); + UniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates); +END_ENTITY; + +ENTITY IfcPropertySingleValue + SUBTYPE OF (IfcSimpleProperty); + NominalValue : OPTIONAL IfcValue; + Unit : OPTIONAL IfcUnit; +END_ENTITY; + +ENTITY IfcPropertyTableValue + SUBTYPE OF (IfcSimpleProperty); + DefiningValues : OPTIONAL LIST [1:?] OF UNIQUE IfcValue; + DefinedValues : OPTIONAL LIST [1:?] OF IfcValue; + Expression : OPTIONAL IfcText; + DefiningUnit : OPTIONAL IfcUnit; + DefinedUnit : OPTIONAL IfcUnit; + CurveInterpolation : OPTIONAL IfcCurveInterpolationEnum; + WHERE + WR21 : (NOT(EXISTS(DefiningValues)) AND NOT(EXISTS(DefinedValues))) +OR (SIZEOF(DefiningValues) = SIZEOF(DefinedValues)); + WR22 : NOT(EXISTS(DefiningValues)) OR +(SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1]) +)) = 0); + WR23 : NOT(EXISTS(DefinedValues)) OR +(SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1]) +)) = 0); +END_ENTITY; + +ENTITY IfcPropertyTemplate + ABSTRACT SUPERTYPE OF (ONEOF + (IfcComplexPropertyTemplate + ,IfcSimplePropertyTemplate)) + SUBTYPE OF (IfcPropertyTemplateDefinition); + INVERSE + PartOfComplexTemplate : SET [0:?] OF IfcComplexPropertyTemplate FOR HasPropertyTemplates; + PartOfPsetTemplate : SET [0:?] OF IfcPropertySetTemplate FOR HasPropertyTemplates; +END_ENTITY; + +ENTITY IfcPropertyTemplateDefinition + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPropertySetTemplate + ,IfcPropertyTemplate)) + SUBTYPE OF (IfcPropertyDefinition); +END_ENTITY; + +ENTITY IfcProtectiveDevice + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcProtectiveDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPROTECTIVEDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcProtectiveDeviceTrippingUnit + SUBTYPE OF (IfcDistributionControlElement); + PredefinedType : OPTIONAL IfcProtectiveDeviceTrippingUnitTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPROTECTIVEDEVICETRIPPINGUNITTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcProtectiveDeviceTrippingUnitType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcProtectiveDeviceTrippingUnitTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcProtectiveDeviceType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcProtectiveDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcPump + SUBTYPE OF (IfcFlowMovingDevice); + PredefinedType : OPTIONAL IfcPumpTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCPUMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcPumpType + SUBTYPE OF (IfcFlowMovingDeviceType); + PredefinedType : IfcPumpTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcQuantityArea + SUBTYPE OF (IfcPhysicalSimpleQuantity); + AreaValue : IfcAreaMeasure; + Formula : OPTIONAL IfcLabel; + 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; + Formula : OPTIONAL IfcLabel; + WHERE + WR21 : CountValue >= 0; +END_ENTITY; + +ENTITY IfcQuantityLength + SUBTYPE OF (IfcPhysicalSimpleQuantity); + LengthValue : IfcLengthMeasure; + Formula : OPTIONAL IfcLabel; + WHERE + WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR + (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT); + WR22 : LengthValue >= 0.; +END_ENTITY; + +ENTITY IfcQuantityNumber + SUBTYPE OF (IfcPhysicalSimpleQuantity); + NumberValue : IfcNumericMeasure; + Formula : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcQuantitySet + ABSTRACT SUPERTYPE OF (ONEOF + (IfcElementQuantity)) + SUBTYPE OF (IfcPropertySetDefinition); +END_ENTITY; + +ENTITY IfcQuantityTime + SUBTYPE OF (IfcPhysicalSimpleQuantity); + TimeValue : IfcTimeMeasure; + Formula : OPTIONAL IfcLabel; + 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; + Formula : OPTIONAL IfcLabel; + 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; + Formula : OPTIONAL IfcLabel; + WHERE + WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR + (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT); + WR22 : WeightValue >= 0.; +END_ENTITY; + +ENTITY IfcRail + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcRailTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRailTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRailTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCRAILTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcRailType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcRailTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcRailTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRailTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcRailing + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcRailingTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCRAILINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcRailingType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcRailingTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcRailway + SUBTYPE OF (IfcFacility); + PredefinedType : OPTIONAL IfcRailwayTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRailwayTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRailwayTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcRailwayTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcRailwayPart + SUBTYPE OF (IfcFacilityPart); + PredefinedType : OPTIONAL IfcRailwayPartTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRailwayPartTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRailwayPartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcRamp + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcRampTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCRAMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcRampFlight + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcRampFlightTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCRAMPFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcRampFlightType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcRampFlightTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcRampType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcRampTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcRationalBSplineCurveWithKnots + SUBTYPE OF (IfcBSplineCurveWithKnots); + WeightsData : LIST [2:?] OF IfcReal; + DERIVE + Weights : ARRAY [0:UpperIndexOnControlPoints] OF IfcReal := IfcListToArray(WeightsData,0,SELF\IfcBSplineCurve.UpperIndexOnControlPoints); + WHERE + SameNumOfWeightsAndPoints : SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineCurve.ControlPointsList); + WeightsGreaterZero : IfcCurveWeightsPositive(SELF); +END_ENTITY; + +ENTITY IfcRationalBSplineSurfaceWithKnots + SUBTYPE OF (IfcBSplineSurfaceWithKnots); + WeightsData : LIST [2:?] OF LIST [2:?] OF IfcReal; + DERIVE + Weights : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcReal := IfcMakeArrayOfArray(WeightsData,0,UUpper,0,VUpper); + WHERE + CorrespondingWeightsDataLists : (SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineSurface.ControlPointsList)) +AND +(SIZEOF(WeightsData[1]) = SIZEOF(SELF\IfcBSplineSurface.ControlPointsList[1])); + WeightValuesGreaterZero : IfcSurfaceWeightsPositive(SELF); +END_ENTITY; + +ENTITY IfcRectangleHollowProfileDef + SUBTYPE OF (IfcRectangleProfileDef); + WallThickness : IfcPositiveLengthMeasure; + InnerFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + OuterFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + WHERE + ValidInnerRadius : NOT(EXISTS(InnerFilletRadius)) OR +((InnerFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND + (InnerFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2. - WallThickness))) +; + ValidOuterRadius : NOT(EXISTS(OuterFilletRadius)) OR +((OuterFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2.)) AND + (OuterFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2.))); + ValidWallThickness : (WallThickness < (SELF\IfcRectangleProfileDef.XDim/2.)) AND +(WallThickness < (SELF\IfcRectangleProfileDef.YDim/2.)); +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 : IfcBoolean; + Vsense : IfcBoolean; + WHERE + U1AndU2Different : U1 <> U2; + UsenseCompatible : (('IFC4X3.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND + (NOT ('IFC4X3.IFCPLANE' IN TYPEOF(BasisSurface)))) OR + ('IFC4X3.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR + (Usense = (U2 > U1)); + V1AndV2Different : V1 <> V2; + VsenseCompatible : Vsense = (V2 > V1); +END_ENTITY; + +ENTITY IfcRecurrencePattern; + RecurrenceType : IfcRecurrenceTypeEnum; + DayComponent : OPTIONAL SET [1:?] OF IfcDayInMonthNumber; + WeekdayComponent : OPTIONAL SET [1:?] OF IfcDayInWeekNumber; + MonthComponent : OPTIONAL SET [1:?] OF IfcMonthInYearNumber; + Position : OPTIONAL IfcInteger; + Interval : OPTIONAL IfcInteger; + Occurrences : OPTIONAL IfcInteger; + TimePeriods : OPTIONAL LIST [1:?] OF IfcTimePeriod; +END_ENTITY; + +ENTITY IfcReference; + TypeIdentifier : OPTIONAL IfcIdentifier; + AttributeIdentifier : OPTIONAL IfcIdentifier; + InstanceName : OPTIONAL IfcLabel; + ListPositions : OPTIONAL LIST [1:?] OF IfcInteger; + InnerReference : OPTIONAL IfcReference; +END_ENTITY; + +ENTITY IfcReferent + SUBTYPE OF (IfcPositioningElement); + PredefinedType : OPTIONAL IfcReferentTypeEnum; +END_ENTITY; + +ENTITY IfcRegularTimeSeries + SUBTYPE OF (IfcTimeSeries); + TimeStep : IfcTimeMeasure; + Values : LIST [1:?] OF IfcTimeSeriesValue; +END_ENTITY; + +ENTITY IfcReinforcedSoil + SUBTYPE OF (IfcEarthworksElement); + PredefinedType : OPTIONAL IfcReinforcedSoilTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcReinforcedSoilTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcReinforcedSoilTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcReinforcementBarProperties + SUBTYPE OF (IfcPreDefinedProperties); + TotalCrossSectionArea : IfcAreaMeasure; + SteelGrade : IfcLabel; + BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum; + EffectiveDepth : OPTIONAL IfcLengthMeasure; + NominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure; + BarCount : OPTIONAL IfcCountMeasure; +END_ENTITY; + +ENTITY IfcReinforcementDefinitionProperties + SUBTYPE OF (IfcPreDefinedPropertySet); + DefinitionType : OPTIONAL IfcLabel; + ReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties; +END_ENTITY; + +ENTITY IfcReinforcingBar + SUBTYPE OF (IfcReinforcingElement); + NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + CrossSectionArea : OPTIONAL IfcAreaMeasure; + BarLength : OPTIONAL IfcPositiveLengthMeasure; + PredefinedType : OPTIONAL IfcReinforcingBarTypeEnum; + BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCREINFORCINGBARTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcReinforcingBarType + SUBTYPE OF (IfcReinforcingElementType); + PredefinedType : IfcReinforcingBarTypeEnum; + NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + CrossSectionArea : OPTIONAL IfcAreaMeasure; + BarLength : OPTIONAL IfcPositiveLengthMeasure; + BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum; + BendingShapeCode : OPTIONAL IfcLabel; + BendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect; + WHERE + BendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode); + CorrectPredefinedType : (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcReinforcingElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcReinforcingBar + ,IfcReinforcingMesh + ,IfcTendon + ,IfcTendonAnchor + ,IfcTendonConduit)) + SUBTYPE OF (IfcElementComponent); + SteelGrade : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcReinforcingElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcReinforcingBarType + ,IfcReinforcingMeshType + ,IfcTendonAnchorType + ,IfcTendonConduitType + ,IfcTendonType)) + SUBTYPE OF (IfcElementComponentType); +END_ENTITY; + +ENTITY IfcReinforcingMesh + SUBTYPE OF (IfcReinforcingElement); + MeshLength : OPTIONAL IfcPositiveLengthMeasure; + MeshWidth : OPTIONAL IfcPositiveLengthMeasure; + LongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + TransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + LongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure; + TransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure; + LongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure; + TransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure; + PredefinedType : OPTIONAL IfcReinforcingMeshTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCREINFORCINGMESHTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcReinforcingMeshType + SUBTYPE OF (IfcReinforcingElementType); + PredefinedType : IfcReinforcingMeshTypeEnum; + MeshLength : OPTIONAL IfcPositiveLengthMeasure; + MeshWidth : OPTIONAL IfcPositiveLengthMeasure; + LongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + TransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + LongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure; + TransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure; + LongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure; + TransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure; + BendingShapeCode : OPTIONAL IfcLabel; + BendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect; + WHERE + BendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode); + CorrectPredefinedType : (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcRelAdheresToElement + SUBTYPE OF (IfcRelDecomposes); + RelatingElement : IfcElement; + RelatedSurfaceFeatures : SET [1:?] OF IfcSurfaceFeature; +END_ENTITY; + +ENTITY IfcRelAggregates + SUBTYPE OF (IfcRelDecomposes); + RelatingObject : IfcObjectDefinition; + RelatedObjects : SET [1:?] OF IfcObjectDefinition; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0; +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 IfcRelAssignsToActor + SUBTYPE OF (IfcRelAssigns); + RelatingActor : IfcActor; + ActingRole : OPTIONAL IfcActorRole; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToControl + SUBTYPE OF (IfcRelAssigns); + RelatingControl : IfcControl; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToGroup + SUPERTYPE OF (ONEOF + (IfcRelAssignsToGroupByFactor)) + SUBTYPE OF (IfcRelAssigns); + RelatingGroup : IfcGroup; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToGroupByFactor + SUBTYPE OF (IfcRelAssignsToGroup); + Factor : IfcRatioMeasure; +END_ENTITY; + +ENTITY IfcRelAssignsToProcess + SUBTYPE OF (IfcRelAssigns); + RelatingProcess : IfcProcessSelect; + QuantityInProcess : OPTIONAL IfcMeasureWithUnit; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToProduct + SUBTYPE OF (IfcRelAssigns); + RelatingProduct : IfcProductSelect; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssignsToResource + SUBTYPE OF (IfcRelAssigns); + RelatingResource : IfcResourceSelect; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelAssociates + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelAssociatesApproval + ,IfcRelAssociatesClassification + ,IfcRelAssociatesConstraint + ,IfcRelAssociatesDocument + ,IfcRelAssociatesLibrary + ,IfcRelAssociatesMaterial + ,IfcRelAssociatesProfileDef)) + SUBTYPE OF (IfcRelationship); + RelatedObjects : SET [1:?] OF IfcDefinitionSelect; +END_ENTITY; + +ENTITY IfcRelAssociatesApproval + SUBTYPE OF (IfcRelAssociates); + RelatingApproval : IfcApproval; +END_ENTITY; + +ENTITY IfcRelAssociatesClassification + SUBTYPE OF (IfcRelAssociates); + RelatingClassification : IfcClassificationSelect; +END_ENTITY; + +ENTITY IfcRelAssociatesConstraint + SUBTYPE OF (IfcRelAssociates); + Intent : OPTIONAL 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 + AllowedElements : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | ( + SIZEOF(TYPEOF(temp) * [ + 'IFC4X3.IFCELEMENT', + 'IFC4X3.IFCELEMENTTYPE', + 'IFC4X3.IFCWINDOWSTYLE', + 'IFC4X3.IFCDOORSTYLE', + 'IFC4X3.IFCSTRUCTURALMEMBER', + 'IFC4X3.IFCPORT']) = 0) +)) = 0; + NoVoidElement : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | + ('IFC4X3.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR + ('IFC4X3.IFCVIRTUALELEMENT' IN TYPEOF(temp)) +)) = 0; +END_ENTITY; + +ENTITY IfcRelAssociatesProfileDef + SUBTYPE OF (IfcRelAssociates); + RelatingProfileDef : IfcProfileDef; +END_ENTITY; + +ENTITY IfcRelConnects + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelConnectsElements + ,IfcRelConnectsPortToElement + ,IfcRelConnectsPorts + ,IfcRelConnectsStructuralActivity + ,IfcRelConnectsStructuralMember + ,IfcRelContainedInSpatialStructure + ,IfcRelCoversBldgElements + ,IfcRelCoversSpaces + ,IfcRelFillsElement + ,IfcRelFlowControlElements + ,IfcRelInterferesElements + ,IfcRelPositions + ,IfcRelReferencedInSpatialStructure + ,IfcRelSequence + ,IfcRelServicesBuildings + ,IfcRelSpaceBoundary)) + SUBTYPE OF (IfcRelationship); +END_ENTITY; + +ENTITY IfcRelConnectsElements + SUPERTYPE OF (ONEOF + (IfcRelConnectsPathElements + ,IfcRelConnectsWithRealizingElements)) + SUBTYPE OF (IfcRelConnects); + ConnectionGeometry : OPTIONAL IfcConnectionGeometry; + RelatingElement : IfcElement; + RelatedElement : IfcElement; + WHERE + NoSelfReference : RelatingElement :<>: RelatedElement; +END_ENTITY; + +ENTITY IfcRelConnectsPathElements + SUBTYPE OF (IfcRelConnectsElements); + RelatingPriorities : LIST [0:?] OF IfcInteger; + RelatedPriorities : LIST [0:?] OF IfcInteger; + RelatedConnectionType : IfcConnectionTypeEnum; + RelatingConnectionType : IfcConnectionTypeEnum; + WHERE + NormalizedRelatedPriorities : (SIZEOF(RelatedPriorities) = 0) +OR +(SIZEOF (QUERY (temp <* RelatedPriorities + | {0 <= temp <= 100} + )) = SIZEOF(RelatedPriorities)); + NormalizedRelatingPriorities : (SIZEOF(RelatingPriorities) = 0) +OR +(SIZEOF (QUERY (temp <* RelatingPriorities + | {0 <= temp <= 100} + )) = SIZEOF(RelatingPriorities)); +END_ENTITY; + +ENTITY IfcRelConnectsPortToElement + SUBTYPE OF (IfcRelConnects); + RelatingPort : IfcPort; + RelatedElement : IfcDistributionElement; +END_ENTITY; + +ENTITY IfcRelConnectsPorts + SUBTYPE OF (IfcRelConnects); + RelatingPort : IfcPort; + RelatedPort : IfcPort; + RealizingElement : OPTIONAL IfcElement; + WHERE + NoSelfReference : RelatingPort :<>: RelatedPort; +END_ENTITY; + +ENTITY IfcRelConnectsStructuralActivity + SUBTYPE OF (IfcRelConnects); + RelatingElement : IfcStructuralActivityAssignmentSelect; + RelatedStructuralActivity : IfcStructuralActivity; +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 : IfcSpatialElement; + WHERE + WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4X3.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); + RelatingSpace : IfcSpace; + RelatedCoverings : SET [1:?] OF IfcCovering; +END_ENTITY; + +ENTITY IfcRelDeclares + SUBTYPE OF (IfcRelationship); + RelatingContext : IfcContext; + RelatedDefinitions : SET [1:?] OF IfcDefinitionSelect; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* RelatedDefinitions | RelatingContext :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelDecomposes + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelAdheresToElement + ,IfcRelAggregates + ,IfcRelNests + ,IfcRelProjectsElement + ,IfcRelVoidsElement)) + SUBTYPE OF (IfcRelationship); +END_ENTITY; + +ENTITY IfcRelDefines + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelDefinesByObject + ,IfcRelDefinesByProperties + ,IfcRelDefinesByTemplate + ,IfcRelDefinesByType)) + SUBTYPE OF (IfcRelationship); +END_ENTITY; + +ENTITY IfcRelDefinesByObject + SUBTYPE OF (IfcRelDefines); + RelatedObjects : SET [1:?] OF IfcObject; + RelatingObject : IfcObject; +END_ENTITY; + +ENTITY IfcRelDefinesByProperties + SUBTYPE OF (IfcRelDefines); + RelatedObjects : SET [1:?] OF IfcObjectDefinition; + RelatingPropertyDefinition : IfcPropertySetDefinitionSelect; + WHERE + NoRelatedTypeObject : SIZEOF(QUERY(Types <* SELF\IfcRelDefinesByProperties.RelatedObjects | 'IFC4X3.IFCTYPEOBJECT' IN TYPEOF(Types))) = 0; +END_ENTITY; + +ENTITY IfcRelDefinesByTemplate + SUBTYPE OF (IfcRelDefines); + RelatedPropertySets : SET [1:?] OF IfcPropertySetDefinition; + RelatingTemplate : IfcPropertySetTemplate; +END_ENTITY; + +ENTITY IfcRelDefinesByType + SUBTYPE OF (IfcRelDefines); + RelatedObjects : SET [1:?] OF IfcObject; + 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 IfcRelInterferesElements + SUBTYPE OF (IfcRelConnects); + RelatingElement : IfcInterferenceSelect; + RelatedElement : IfcInterferenceSelect; + InterferenceGeometry : OPTIONAL IfcConnectionGeometry; + InterferenceSpace : OPTIONAL IfcSpatialZone; + InterferenceType : OPTIONAL IfcIdentifier; + ImpliedOrder : IfcLogical; + WHERE + NoSelfReference : RelatingElement :<>: RelatedElement; +END_ENTITY; + +ENTITY IfcRelNests + SUBTYPE OF (IfcRelDecomposes); + RelatingObject : IfcObjectDefinition; + RelatedObjects : LIST [1:?] OF IfcObjectDefinition; + WHERE + NoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0; +END_ENTITY; + +ENTITY IfcRelPositions + SUBTYPE OF (IfcRelConnects); + RelatingPositioningElement : IfcPositioningElement; + RelatedProducts : SET [1:?] OF IfcProduct; + WHERE + NoSelfReference : SIZEOF(QUERY(temp <* RelatedProducts | RelatingPositioningElement :=: temp)) = 0; +END_ENTITY; + +ENTITY IfcRelProjectsElement + SUBTYPE OF (IfcRelDecomposes); + RelatingElement : IfcElement; + RelatedFeatureElement : IfcFeatureElementAddition; +END_ENTITY; + +ENTITY IfcRelReferencedInSpatialStructure + SUBTYPE OF (IfcRelConnects); + RelatedElements : SET [1:?] OF IfcSpatialReferenceSelect; + RelatingStructure : IfcSpatialElement; + WHERE + AllowedRelatedElements : SIZEOF(QUERY(temp <* RelatedElements | ('IFC4X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp)) AND (NOT ('IFC4X3.IFCSPACE' IN TYPEOF(temp))) +)) = 0; +END_ENTITY; + +ENTITY IfcRelSequence + SUBTYPE OF (IfcRelConnects); + RelatingProcess : IfcProcess; + RelatedProcess : IfcProcess; + TimeLag : OPTIONAL IfcLagTime; + SequenceType : OPTIONAL IfcSequenceEnum; + UserDefinedSequenceType : OPTIONAL IfcLabel; + WHERE + AvoidInconsistentSequence : RelatingProcess :<>: RelatedProcess; + CorrectSequenceType : (SequenceType <> IfcSequenceEnum.USERDEFINED) OR ((SequenceType = IfcSequenceEnum.USERDEFINED) AND EXISTS(UserDefinedSequenceType)); +END_ENTITY; + +ENTITY IfcRelServicesBuildings + SUBTYPE OF (IfcRelConnects); + RelatingSystem : IfcSystem; + RelatedBuildings : SET [1:?] OF IfcSpatialElement; +END_ENTITY; + +ENTITY IfcRelSpaceBoundary + SUPERTYPE OF (ONEOF + (IfcRelSpaceBoundary1stLevel)) + SUBTYPE OF (IfcRelConnects); + RelatingSpace : IfcSpaceBoundarySelect; + RelatedBuildingElement : IfcElement; + ConnectionGeometry : OPTIONAL IfcConnectionGeometry; + PhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum; + InternalOrExternalBoundary : IfcInternalOrExternalEnum; + WHERE + CorrectPhysOrVirt : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) + AND (NOT('IFC4X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) +OR +((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) + AND (('IFC4X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) + OR ('IFC4X3.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) +OR +(PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined); +END_ENTITY; + +ENTITY IfcRelSpaceBoundary1stLevel + SUPERTYPE OF (ONEOF + (IfcRelSpaceBoundary2ndLevel)) + SUBTYPE OF (IfcRelSpaceBoundary); + ParentBoundary : OPTIONAL IfcRelSpaceBoundary1stLevel; + INVERSE + InnerBoundaries : SET [0:?] OF IfcRelSpaceBoundary1stLevel FOR ParentBoundary; +END_ENTITY; + +ENTITY IfcRelSpaceBoundary2ndLevel + SUBTYPE OF (IfcRelSpaceBoundary1stLevel); + CorrespondingBoundary : OPTIONAL IfcRelSpaceBoundary2ndLevel; + INVERSE + Corresponds : SET [0:1] OF IfcRelSpaceBoundary2ndLevel FOR CorrespondingBoundary; +END_ENTITY; + +ENTITY IfcRelVoidsElement + SUBTYPE OF (IfcRelDecomposes); + RelatingBuildingElement : IfcElement; + RelatedOpeningElement : IfcFeatureElementSubtraction; +END_ENTITY; + +ENTITY IfcRelationship + ABSTRACT SUPERTYPE OF (ONEOF + (IfcRelAssigns + ,IfcRelAssociates + ,IfcRelConnects + ,IfcRelDeclares + ,IfcRelDecomposes + ,IfcRelDefines)) + SUBTYPE OF (IfcRoot); +END_ENTITY; + +ENTITY IfcReparametrisedCompositeCurveSegment + SUBTYPE OF (IfcCompositeCurveSegment); + ParamLength : IfcParameterValue; + WHERE + PositiveLengthParameter : ParamLength > 0.0; +END_ENTITY; + +ENTITY IfcRepresentation + ABSTRACT 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:?] OF IfcProductRepresentation FOR Representations; +END_ENTITY; + +ENTITY IfcRepresentationContext + ABSTRACT 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 + LayerAssignment : SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems; + StyledByItem : SET [0:1] OF IfcStyledItem FOR Item; +END_ENTITY; + +ENTITY IfcRepresentationMap; + MappingOrigin : IfcAxis2Placement; + MappedRepresentation : IfcRepresentation; + INVERSE + HasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape; + MapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource; + WHERE + ApplicableMappedRepr : 'IFC4X3.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation); +END_ENTITY; + +ENTITY IfcResource + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConstructionResource)) + SUBTYPE OF (IfcObject); + Identification : OPTIONAL IfcIdentifier; + LongDescription : OPTIONAL IfcText; + INVERSE + ResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource; +END_ENTITY; + +ENTITY IfcResourceApprovalRelationship + SUBTYPE OF (IfcResourceLevelRelationship); + RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect; + RelatingApproval : IfcApproval; +END_ENTITY; + +ENTITY IfcResourceConstraintRelationship + SUBTYPE OF (IfcResourceLevelRelationship); + RelatingConstraint : IfcConstraint; + RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect; +END_ENTITY; + +ENTITY IfcResourceLevelRelationship + ABSTRACT SUPERTYPE OF (ONEOF + (IfcApprovalRelationship + ,IfcCurrencyRelationship + ,IfcDocumentInformationRelationship + ,IfcExternalReferenceRelationship + ,IfcMaterialRelationship + ,IfcOrganizationRelationship + ,IfcPropertyDependencyRelationship + ,IfcResourceApprovalRelationship + ,IfcResourceConstraintRelationship)); + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; +END_ENTITY; + +ENTITY IfcResourceTime + SUBTYPE OF (IfcSchedulingTime); + ScheduleWork : OPTIONAL IfcDuration; + ScheduleUsage : OPTIONAL IfcPositiveRatioMeasure; + ScheduleStart : OPTIONAL IfcDateTime; + ScheduleFinish : OPTIONAL IfcDateTime; + ScheduleContour : OPTIONAL IfcLabel; + LevelingDelay : OPTIONAL IfcDuration; + IsOverAllocated : OPTIONAL IfcBoolean; + StatusTime : OPTIONAL IfcDateTime; + ActualWork : OPTIONAL IfcDuration; + ActualUsage : OPTIONAL IfcPositiveRatioMeasure; + ActualStart : OPTIONAL IfcDateTime; + ActualFinish : OPTIONAL IfcDateTime; + RemainingWork : OPTIONAL IfcDuration; + RemainingUsage : OPTIONAL IfcPositiveRatioMeasure; + Completion : OPTIONAL IfcPositiveRatioMeasure; +END_ENTITY; + +ENTITY IfcRevolvedAreaSolid + SUPERTYPE OF (ONEOF + (IfcRevolvedAreaSolidTapered)) + SUBTYPE OF (IfcSweptAreaSolid); + Axis : IfcAxis1Placement; + Angle : IfcPlaneAngleMeasure; + DERIVE + AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, + IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0)); + WHERE + AxisDirectionInXY : Axis.Z.DirectionRatios[3] = 0.0; + AxisStartInXY : Axis.Location.Coordinates[3] = 0.0; +END_ENTITY; + +ENTITY IfcRevolvedAreaSolidTapered + SUBTYPE OF (IfcRevolvedAreaSolid); + EndSweptArea : IfcProfileDef; + WHERE + CorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea); +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 IfcRoad + SUBTYPE OF (IfcFacility); + PredefinedType : OPTIONAL IfcRoadTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRoadTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRoadTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcRoadTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcRoadPart + SUBTYPE OF (IfcFacilityPart); + PredefinedType : OPTIONAL IfcRoadPartTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRoadPartTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRoadPartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcRoof + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcRoofTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCROOFTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcRoofType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcRoofTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcRoot + ABSTRACT SUPERTYPE OF (ONEOF + (IfcObjectDefinition + ,IfcPropertyDefinition + ,IfcRelationship)); + GlobalId : IfcGloballyUniqueId; + OwnerHistory : OPTIONAL IfcOwnerHistory; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + UNIQUE + UR1 : GlobalId; +END_ENTITY; + +ENTITY IfcRoundedRectangleProfileDef + SUBTYPE OF (IfcRectangleProfileDef); + RoundingRadius : IfcPositiveLengthMeasure; + WHERE + ValidRadius : ((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 IfcSanitaryTerminal + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcSanitaryTerminalTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSANITARYTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSanitaryTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcSanitaryTerminalTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSchedulingTime + ABSTRACT SUPERTYPE OF (ONEOF + (IfcEventTime + ,IfcLagTime + ,IfcResourceTime + ,IfcTaskTime + ,IfcWorkTime)); + Name : OPTIONAL IfcLabel; + DataOrigin : OPTIONAL IfcDataOriginEnum; + UserDefinedDataOrigin : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcSeamCurve + SUBTYPE OF (IfcSurfaceCurve); + WHERE + SameSurface : IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[1]) = IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[2]); + TwoPCurves : SIZEOF(SELF\IfcSurfaceCurve.AssociatedGeometry) = 2; +END_ENTITY; + +ENTITY IfcSecondOrderPolynomialSpiral + SUBTYPE OF (IfcSpiral); + QuadraticTerm : IfcLengthMeasure; + LinearTerm : OPTIONAL IfcLengthMeasure; + ConstantTerm : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcSectionProperties + SUBTYPE OF (IfcPreDefinedProperties); + SectionType : IfcSectionTypeEnum; + StartProfile : IfcProfileDef; + EndProfile : OPTIONAL IfcProfileDef; +END_ENTITY; + +ENTITY IfcSectionReinforcementProperties + SUBTYPE OF (IfcPreDefinedProperties); + LongitudinalStartPosition : IfcLengthMeasure; + LongitudinalEndPosition : IfcLengthMeasure; + TransversePosition : OPTIONAL IfcLengthMeasure; + ReinforcementRole : IfcReinforcingBarRoleEnum; + SectionDefinition : IfcSectionProperties; + CrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties; +END_ENTITY; + +ENTITY IfcSectionedSolid + ABSTRACT SUPERTYPE OF (ONEOF + (IfcSectionedSolidHorizontal)) + SUBTYPE OF (IfcSolidModel); + Directrix : IfcCurve; + CrossSections : LIST [2:?] OF IfcProfileDef; + WHERE + ConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0; + DirectrixIs3D : Directrix.Dim = 3; + SectionsSameType : SIZEOF(QUERY(temp <* CrossSections | TYPEOF(CrossSections[1]) :<>: TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcSectionedSolidHorizontal + SUBTYPE OF (IfcSectionedSolid); + CrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear; + WHERE + CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions); + NoLongitudinalOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLongitudinal))) = 0; +END_ENTITY; + +ENTITY IfcSectionedSpine + SUBTYPE OF (IfcGeometricRepresentationItem); + SpineCurve : IfcCompositeCurve; + CrossSections : LIST [2:?] OF IfcProfileDef; + CrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D; + DERIVE + Dim : IfcDimensionCount := 3; + WHERE + ConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0; + CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions); + SpineCurveDim : SpineCurve.Dim = 3; +END_ENTITY; + +ENTITY IfcSectionedSurface + SUBTYPE OF (IfcSurface); + Directrix : IfcCurve; + CrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear; + CrossSections : LIST [2:?] OF IfcProfileDef; + WHERE + AreaProfileTypes : SIZEOF(QUERY(temp <* CrossSections | temp.ProfileType = IfcProfileTypeEnum.CURVE)) = 0; + CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions); + DirectrixIs3D : Directrix.Dim = 3; + NoOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLateral) OR EXISTS(temp.Location.OffsetVertical) OR EXISTS(temp.Location.OffsetLongitudinal))) = 0; + SectionsSameType : SIZEOF(QUERY(temp <* CrossSections | TYPEOF(CrossSections[1]) :<>: TYPEOF(temp))) = 0; +END_ENTITY; + +ENTITY IfcSegment + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCompositeCurveSegment + ,IfcCurveSegment)) + SUBTYPE OF (IfcGeometricRepresentationItem); + Transition : IfcTransitionCode; + INVERSE + UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments; +END_ENTITY; + +ENTITY IfcSegmentedReferenceCurve + SUBTYPE OF (IfcCompositeCurve); + BaseCurve : IfcBoundedCurve; + EndPoint : OPTIONAL IfcPlacement; +END_ENTITY; + +ENTITY IfcSensor + SUBTYPE OF (IfcDistributionControlElement); + PredefinedType : OPTIONAL IfcSensorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSENSORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSensorType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcSensorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSeventhOrderPolynomialSpiral + SUBTYPE OF (IfcSpiral); + SepticTerm : IfcLengthMeasure; + SexticTerm : OPTIONAL IfcLengthMeasure; + QuinticTerm : OPTIONAL IfcLengthMeasure; + QuarticTerm : OPTIONAL IfcLengthMeasure; + CubicTerm : OPTIONAL IfcLengthMeasure; + QuadraticTerm : OPTIONAL IfcLengthMeasure; + LinearTerm : OPTIONAL IfcLengthMeasure; + ConstantTerm : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcShadingDevice + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcShadingDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSHADINGDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcShadingDeviceType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcShadingDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcShapeAspect; + ShapeRepresentations : LIST [1:?] OF IfcShapeModel; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + ProductDefinitional : IfcLogical; + PartOfProductDefinitionShape : OPTIONAL IfcProductRepresentationSelect; + INVERSE + HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; +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 + CorrectContext : 'IFC4X3.IFCGEOMETRICREPRESENTATIONCONTEXT' +IN TYPEOF(SELF\IfcRepresentation.ContextOfItems); + CorrectItemsForType : IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); + HasRepresentationIdentifier : EXISTS(SELF\IfcRepresentation.RepresentationIdentifier); + HasRepresentationType : EXISTS(SELF\IfcRepresentation.RepresentationType); + NoTopologicalItem : SIZEOF(QUERY(temp <* Items | + ('IFC4X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) + AND (NOT(SIZEOF( + ['IFC4X3.IFCVERTEXPOINT', + 'IFC4X3.IFCEDGECURVE', + 'IFC4X3.IFCFACESURFACE'] * TYPEOF(temp)) = 1)) +)) = 0; +END_ENTITY; + +ENTITY IfcShellBasedSurfaceModel + SUBTYPE OF (IfcGeometricRepresentationItem); + SbsmBoundary : SET [1:?] OF IfcShell; + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcSign + SUBTYPE OF (IfcElementComponent); + PredefinedType : OPTIONAL IfcSignTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSignTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSignTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSIGNTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSignType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcSignTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSignTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSignTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSignal + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcSignalTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSignalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSignalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSIGNALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSignalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcSignalTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSignalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSignalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSimpleProperty + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPropertyBoundedValue + ,IfcPropertyEnumeratedValue + ,IfcPropertyListValue + ,IfcPropertyReferenceValue + ,IfcPropertySingleValue + ,IfcPropertyTableValue)) + SUBTYPE OF (IfcProperty); +END_ENTITY; + +ENTITY IfcSimplePropertyTemplate + SUBTYPE OF (IfcPropertyTemplate); + TemplateType : OPTIONAL IfcSimplePropertyTemplateTypeEnum; + PrimaryMeasureType : OPTIONAL IfcLabel; + SecondaryMeasureType : OPTIONAL IfcLabel; + Enumerators : OPTIONAL IfcPropertyEnumeration; + PrimaryUnit : OPTIONAL IfcUnit; + SecondaryUnit : OPTIONAL IfcUnit; + Expression : OPTIONAL IfcLabel; + AccessState : OPTIONAL IfcStateEnum; +END_ENTITY; + +ENTITY IfcSineSpiral + SUBTYPE OF (IfcSpiral); + SineTerm : IfcLengthMeasure; + LinearTerm : OPTIONAL IfcLengthMeasure; + ConstantTerm : OPTIONAL IfcLengthMeasure; +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 (IfcBuiltElement); + PredefinedType : OPTIONAL IfcSlabTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSLABTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSlabType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcSlabTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSlippageConnectionCondition + SUBTYPE OF (IfcStructuralConnectionCondition); + SlippageX : OPTIONAL IfcLengthMeasure; + SlippageY : OPTIONAL IfcLengthMeasure; + SlippageZ : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcSolarDevice + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcSolarDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSOLARDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSolarDeviceType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcSolarDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSolidModel + ABSTRACT SUPERTYPE OF (ONEOF + (IfcCsgSolid + ,IfcManifoldSolidBrep + ,IfcSectionedSolid + ,IfcSweptAreaSolid + ,IfcSweptDiskSolid)) + SUBTYPE OF (IfcGeometricRepresentationItem); + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcSpace + SUBTYPE OF (IfcSpatialStructureElement); + PredefinedType : OPTIONAL IfcSpaceTypeEnum; + ElevationWithFlooring : OPTIONAL IfcLengthMeasure; + INVERSE + HasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatingSpace; + BoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSPACETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSpaceHeater + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcSpaceHeaterTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSPACEHEATERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSpaceHeaterType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcSpaceHeaterTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSpaceType + SUBTYPE OF (IfcSpatialStructureElementType); + PredefinedType : IfcSpaceTypeEnum; + LongName : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcSpatialElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSpatialElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcExternalSpatialStructureElement + ,IfcSpatialStructureElement + ,IfcSpatialZone)) + SUBTYPE OF (IfcProduct); + LongName : OPTIONAL IfcLabel; + INVERSE + ContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure; + ServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings; + ReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure; + IsInterferedByElements : SET [0:?] OF IfcRelInterferesElements FOR RelatedElement; + InterferesElements : SET [0:?] OF IfcRelInterferesElements FOR RelatingElement; +END_ENTITY; + +ENTITY IfcSpatialElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcSpatialStructureElementType + ,IfcSpatialZoneType)) + SUBTYPE OF (IfcTypeProduct); + ElementType : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcSpatialStructureElement + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBuildingStorey + ,IfcFacility + ,IfcFacilityPart + ,IfcSite + ,IfcSpace)) + SUBTYPE OF (IfcSpatialElement); + CompositionType : OPTIONAL IfcElementCompositionEnum; + WHERE + WR41 : (HIINDEX(SELF\IfcObjectDefinition.Decomposes) = 1) +AND +('IFC4X3.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1])) +AND +(('IFC4X3.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR + ('IFC4X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) +); +END_ENTITY; + +ENTITY IfcSpatialStructureElementType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcSpaceType)) + SUBTYPE OF (IfcSpatialElementType); +END_ENTITY; + +ENTITY IfcSpatialZone + SUBTYPE OF (IfcSpatialElement); + PredefinedType : OPTIONAL IfcSpatialZoneTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSPATIALZONETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSpatialZoneType + SUBTYPE OF (IfcSpatialElementType); + PredefinedType : IfcSpatialZoneTypeEnum; + LongName : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR +((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcSpatialElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSphere + SUBTYPE OF (IfcCsgPrimitive3D); + Radius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcSphericalSurface + SUBTYPE OF (IfcElementarySurface); + Radius : IfcPositiveLengthMeasure; +END_ENTITY; + +ENTITY IfcSpiral + ABSTRACT SUPERTYPE OF (ONEOF + (IfcClothoid + ,IfcCosineSpiral + ,IfcSecondOrderPolynomialSpiral + ,IfcSeventhOrderPolynomialSpiral + ,IfcSineSpiral + ,IfcThirdOrderPolynomialSpiral)) + SUBTYPE OF (IfcCurve); + Position : OPTIONAL IfcAxis2Placement; +END_ENTITY; + +ENTITY IfcStackTerminal + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcStackTerminalTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSTACKTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcStackTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcStackTerminalTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcStair + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcStairTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSTAIRTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcStairFlight + SUBTYPE OF (IfcBuiltElement); + NumberOfRisers : OPTIONAL IfcInteger; + NumberOfTreads : OPTIONAL IfcInteger; + RiserHeight : OPTIONAL IfcPositiveLengthMeasure; + TreadLength : OPTIONAL IfcPositiveLengthMeasure; + PredefinedType : OPTIONAL IfcStairFlightTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSTAIRFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcStairFlightType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcStairFlightTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcStairType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcStairTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcStructuralAction + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralCurveAction + ,IfcStructuralPointAction + ,IfcStructuralSurfaceAction)) + SUBTYPE OF (IfcStructuralActivity); + DestabilizingLoad : OPTIONAL IfcBoolean; +END_ENTITY; + +ENTITY IfcStructuralActivity + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralAction + ,IfcStructuralReaction)) + SUBTYPE OF (IfcProduct); + AppliedLoad : IfcStructuralLoad; + GlobalOrLocal : IfcGlobalOrLocalEnum; + INVERSE + AssignedToStructuralItem : SET [0:1] OF 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; + SharedPlacement : OPTIONAL IfcObjectPlacement; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcAnalysisModelTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcAnalysisModelTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + HasObjectType : (PredefinedType <> IfcAnalysisModelTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +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 IfcStructuralCurveAction + SUPERTYPE OF (ONEOF + (IfcStructuralLinearAction)) + SUBTYPE OF (IfcStructuralAction); + ProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum; + PredefinedType : IfcStructuralCurveActivityTypeEnum; + WHERE + HasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); + ProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR +((ProjectedOrTrue <> PROJECTED_LENGTH) OR + (SELF\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS)); + SuitablePredefinedType : PredefinedType <> IfcStructuralCurveActivityTypeEnum.EQUIDISTANT; +END_ENTITY; + +ENTITY IfcStructuralCurveConnection + SUBTYPE OF (IfcStructuralConnection); + AxisDirection : IfcDirection; +END_ENTITY; + +ENTITY IfcStructuralCurveMember + SUPERTYPE OF (ONEOF + (IfcStructuralCurveMemberVarying)) + SUBTYPE OF (IfcStructuralMember); + PredefinedType : IfcStructuralCurveMemberTypeEnum; + Axis : IfcDirection; + WHERE + HasObjectType : (PredefinedType <> IfcStructuralCurveMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcStructuralCurveMemberVarying + SUBTYPE OF (IfcStructuralCurveMember); +END_ENTITY; + +ENTITY IfcStructuralCurveReaction + SUBTYPE OF (IfcStructuralReaction); + PredefinedType : IfcStructuralCurveActivityTypeEnum; + WHERE + HasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); + SuitablePredefinedType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.SINUS) AND (PredefinedType <> IfcStructuralCurveActivityTypeEnum.PARABOLA); +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 + SUBTYPE OF (IfcStructuralCurveAction); + WHERE + ConstPredefinedType : SELF\IfcStructuralCurveAction.PredefinedType = IfcStructuralCurveActivityTypeEnum.CONST; + SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADLINEARFORCE', 'IFC4X3.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralLoad + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralLoadConfiguration + ,IfcStructuralLoadOrResult)); + Name : OPTIONAL IfcLabel; +END_ENTITY; + +ENTITY IfcStructuralLoadCase + SUBTYPE OF (IfcStructuralLoadGroup); + SelfWeightCoefficients : OPTIONAL LIST [3:3] OF IfcRatioMeasure; + WHERE + IsLoadCasePredefinedType : SELF\IfcStructuralLoadGroup.PredefinedType = IfcLoadGroupTypeEnum.LOAD_CASE; +END_ENTITY; + +ENTITY IfcStructuralLoadConfiguration + SUBTYPE OF (IfcStructuralLoad); + Values : LIST [1:?] OF IfcStructuralLoadOrResult; + Locations : OPTIONAL LIST [1:?] OF UNIQUE LIST [1:2] OF IfcLengthMeasure; + WHERE + ValidListSize : NOT EXISTS(Locations) OR (SIZEOF(Locations) = SIZEOF(Values)); +END_ENTITY; + +ENTITY IfcStructuralLoadGroup + SUPERTYPE OF (ONEOF + (IfcStructuralLoadCase)) + SUBTYPE OF (IfcGroup); + PredefinedType : IfcLoadGroupTypeEnum; + ActionType : IfcActionTypeEnum; + ActionSource : IfcActionSourceTypeEnum; + Coefficient : OPTIONAL IfcRatioMeasure; + Purpose : OPTIONAL IfcLabel; + INVERSE + SourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup; + LoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy; + WHERE + HasObjectType : ( + (PredefinedType <> IfcLoadGroupTypeEnum.USERDEFINED) AND + (ActionType <> IfcActionTypeEnum.USERDEFINED) AND + (ActionSource <> IfcActionSourceTypeEnum.USERDEFINED) +) OR EXISTS(SELF\IfcObject.ObjectType); +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 IfcStructuralLoadOrResult + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralLoadStatic + ,IfcSurfaceReinforcementArea)) + SUBTYPE OF (IfcStructuralLoad); +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 (IfcStructuralLoadOrResult); +END_ENTITY; + +ENTITY IfcStructuralLoadTemperature + SUBTYPE OF (IfcStructuralLoadStatic); + DeltaTConstant : OPTIONAL IfcThermodynamicTemperatureMeasure; + DeltaTY : OPTIONAL IfcThermodynamicTemperatureMeasure; + DeltaTZ : OPTIONAL IfcThermodynamicTemperatureMeasure; +END_ENTITY; + +ENTITY IfcStructuralMember + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralCurveMember + ,IfcStructuralSurfaceMember)) + SUBTYPE OF (IfcStructuralItem); + INVERSE + ConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember; +END_ENTITY; + +ENTITY IfcStructuralPlanarAction + SUBTYPE OF (IfcStructuralSurfaceAction); + WHERE + ConstPredefinedType : SELF\IfcStructuralSurfaceAction.PredefinedType = IfcStructuralSurfaceActivityTypeEnum.CONST; + SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADPLANARFORCE', 'IFC4X3.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralPointAction + SUBTYPE OF (IfcStructuralAction); + WHERE + SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralPointConnection + SUBTYPE OF (IfcStructuralConnection); + ConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D; +END_ENTITY; + +ENTITY IfcStructuralPointReaction + SUBTYPE OF (IfcStructuralReaction); + WHERE + SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; +END_ENTITY; + +ENTITY IfcStructuralReaction + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStructuralCurveReaction + ,IfcStructuralPointReaction + ,IfcStructuralSurfaceReaction)) + SUBTYPE OF (IfcStructuralActivity); +END_ENTITY; + +ENTITY IfcStructuralResultGroup + SUBTYPE OF (IfcGroup); + TheoryType : IfcAnalysisTheoryTypeEnum; + ResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup; + IsLinear : IfcBoolean; + INVERSE + ResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults; + WHERE + HasObjectType : (TheoryType <> IfcAnalysisTheoryTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcStructuralSurfaceAction + SUPERTYPE OF (ONEOF + (IfcStructuralPlanarAction)) + SUBTYPE OF (IfcStructuralAction); + ProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum; + PredefinedType : IfcStructuralSurfaceActivityTypeEnum; + WHERE + HasObjectType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); + ProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR +((ProjectedOrTrue <> PROJECTED_LENGTH) OR + (SELF\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS)); +END_ENTITY; + +ENTITY IfcStructuralSurfaceConnection + SUBTYPE OF (IfcStructuralConnection); +END_ENTITY; + +ENTITY IfcStructuralSurfaceMember + SUPERTYPE OF (ONEOF + (IfcStructuralSurfaceMemberVarying)) + SUBTYPE OF (IfcStructuralMember); + PredefinedType : IfcStructuralSurfaceMemberTypeEnum; + Thickness : OPTIONAL IfcPositiveLengthMeasure; + WHERE + HasObjectType : (PredefinedType <> IfcStructuralSurfaceMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcStructuralSurfaceMemberVarying + SUBTYPE OF (IfcStructuralSurfaceMember); +END_ENTITY; + +ENTITY IfcStructuralSurfaceReaction + SUBTYPE OF (IfcStructuralReaction); + PredefinedType : IfcStructuralSurfaceActivityTypeEnum; + WHERE + HasPredefinedType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcStyleModel + ABSTRACT SUPERTYPE OF (ONEOF + (IfcStyledRepresentation)) + SUBTYPE OF (IfcRepresentation); +END_ENTITY; + +ENTITY IfcStyledItem + SUBTYPE OF (IfcRepresentationItem); + Item : OPTIONAL IfcRepresentationItem; + Styles : SET [1:?] OF IfcPresentationStyle; + Name : OPTIONAL IfcLabel; + WHERE + ApplicableItem : NOT('IFC4X3.IFCSTYLEDITEM' IN TYPEOF(Item)); +END_ENTITY; + +ENTITY IfcStyledRepresentation + SUBTYPE OF (IfcStyleModel); + WHERE + OnlyStyledItems : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | + (NOT('IFC4X3.IFCSTYLEDITEM' IN TYPEOF(temp))) +)) = 0; +END_ENTITY; + +ENTITY IfcSubContractResource + SUBTYPE OF (IfcConstructionResource); + PredefinedType : OPTIONAL IfcSubContractResourceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcSubContractResourceType + SUBTYPE OF (IfcConstructionResourceType); + PredefinedType : IfcSubContractResourceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR +((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); +END_ENTITY; + +ENTITY IfcSubedge + SUBTYPE OF (IfcEdge); + ParentEdge : IfcEdge; +END_ENTITY; + +ENTITY IfcSurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBoundedSurface + ,IfcElementarySurface + ,IfcSectionedSurface + ,IfcSweptSurface)) + SUBTYPE OF (IfcGeometricRepresentationItem); + DERIVE + Dim : IfcDimensionCount := 3; +END_ENTITY; + +ENTITY IfcSurfaceCurve + SUPERTYPE OF (ONEOF + (IfcIntersectionCurve + ,IfcSeamCurve)) + SUBTYPE OF (IfcCurve); + Curve3D : IfcCurve; + AssociatedGeometry : LIST [1:2] OF IfcPcurve; + MasterRepresentation : IfcPreferredSurfaceCurveRepresentation; + DERIVE + BasisSurface : SET [1:2] OF IfcSurface := IfcGetBasisSurface(SELF); + WHERE + CurveIs3D : Curve3D.Dim = 3; + CurveIsNotPcurve : NOT ('IFC4X3.IFCPCURVE' IN TYPEOF(Curve3D)); +END_ENTITY; + +ENTITY IfcSurfaceCurveSweptAreaSolid + SUBTYPE OF (IfcDirectrixCurveSweptAreaSolid); + ReferenceSurface : IfcSurface; +END_ENTITY; + +ENTITY IfcSurfaceFeature + SUBTYPE OF (IfcFeatureElement); + PredefinedType : OPTIONAL IfcSurfaceFeatureTypeEnum; + INVERSE + AdheresToElement : IfcRelAdheresToElement FOR RelatedSurfaceFeatures; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSurfaceFeatureTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSurfaceFeatureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcSurfaceFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcSurfaceOfLinearExtrusion + SUBTYPE OF (IfcSweptSurface); + ExtrudedDirection : IfcDirection; + Depth : IfcLengthMeasure; + DERIVE + ExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth); + WHERE + DepthGreaterZero : 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 IfcSurfaceReinforcementArea + SUBTYPE OF (IfcStructuralLoadOrResult); + SurfaceReinforcement1 : OPTIONAL LIST [2:3] OF IfcLengthMeasure; + SurfaceReinforcement2 : OPTIONAL LIST [2:3] OF IfcLengthMeasure; + ShearReinforcement : OPTIONAL IfcRatioMeasure; + WHERE + NonnegativeArea1 : (NOT EXISTS(SurfaceReinforcement1)) OR ( + (SurfaceReinforcement1[1] >= 0.) AND + (SurfaceReinforcement1[2] >= 0.) AND + ((SIZEOF(SurfaceReinforcement1) = 1) OR (SurfaceReinforcement1[1] >= 0.)) +); + NonnegativeArea2 : (NOT EXISTS(SurfaceReinforcement2)) OR ( + (SurfaceReinforcement2[1] >= 0.) AND + (SurfaceReinforcement2[2] >= 0.) AND + ((SIZEOF(SurfaceReinforcement2) = 1) OR (SurfaceReinforcement2[1] >= 0.)) +); + NonnegativeArea3 : (NOT EXISTS(ShearReinforcement)) OR (ShearReinforcement >= 0.); + SurfaceAndOrShearAreaSpecified : EXISTS(SurfaceReinforcement1) OR EXISTS(SurfaceReinforcement2) OR EXISTS(ShearReinforcement); +END_ENTITY; + +ENTITY IfcSurfaceStyle + SUBTYPE OF (IfcPresentationStyle); + Side : IfcSurfaceSide; + Styles : SET [1:5] OF IfcSurfaceStyleElementSelect; + WHERE + MaxOneExtDefined : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC4X3.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN + TYPEOF(Style) + )) <= 1; + MaxOneLighting : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC4X3.IFCSURFACESTYLELIGHTING' IN + TYPEOF(Style) + )) <= 1; + MaxOneRefraction : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC4X3.IFCSURFACESTYLEREFRACTION' IN + TYPEOF(Style) + )) <= 1; + MaxOneShading : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC4X3.IFCSURFACESTYLESHADING' IN + TYPEOF(Style) + )) <= 1; + MaxOneTextures : SIZEOF(QUERY(Style <* SELF.Styles | + 'IFC4X3.IFCSURFACESTYLEWITHTEXTURES' IN + TYPEOF(Style) + )) <= 1; +END_ENTITY; + +ENTITY IfcSurfaceStyleLighting + SUBTYPE OF (IfcPresentationItem); + DiffuseTransmissionColour : IfcColourRgb; + DiffuseReflectionColour : IfcColourRgb; + TransmissionColour : IfcColourRgb; + ReflectanceColour : IfcColourRgb; +END_ENTITY; + +ENTITY IfcSurfaceStyleRefraction + SUBTYPE OF (IfcPresentationItem); + RefractionIndex : OPTIONAL IfcReal; + DispersionFactor : OPTIONAL IfcReal; +END_ENTITY; + +ENTITY IfcSurfaceStyleRendering + SUBTYPE OF (IfcSurfaceStyleShading); + 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)) + SUBTYPE OF (IfcPresentationItem); + SurfaceColour : IfcColourRgb; + Transparency : OPTIONAL IfcNormalisedRatioMeasure; +END_ENTITY; + +ENTITY IfcSurfaceStyleWithTextures + SUBTYPE OF (IfcPresentationItem); + Textures : LIST [1:?] OF IfcSurfaceTexture; +END_ENTITY; + +ENTITY IfcSurfaceTexture + ABSTRACT SUPERTYPE OF (ONEOF + (IfcBlobTexture + ,IfcImageTexture + ,IfcPixelTexture)) + SUBTYPE OF (IfcPresentationItem); + RepeatS : IfcBoolean; + RepeatT : IfcBoolean; + Mode : OPTIONAL IfcIdentifier; + TextureTransform : OPTIONAL IfcCartesianTransformationOperator2D; + Parameter : OPTIONAL LIST [1:?] OF IfcIdentifier; + INVERSE + IsMappedBy : SET [0:?] OF IfcTextureCoordinate FOR Maps; + UsedInStyles : SET [0:?] OF IfcSurfaceStyleWithTextures FOR Textures; +END_ENTITY; + +ENTITY IfcSweptAreaSolid + ABSTRACT SUPERTYPE OF (ONEOF + (IfcDirectrixCurveSweptAreaSolid + ,IfcExtrudedAreaSolid + ,IfcRevolvedAreaSolid)) + SUBTYPE OF (IfcSolidModel); + SweptArea : IfcProfileDef; + Position : OPTIONAL IfcAxis2Placement3D; + WHERE + SweptAreaType : SweptArea.ProfileType = IfcProfileTypeEnum.Area; +END_ENTITY; + +ENTITY IfcSweptDiskSolid + SUPERTYPE OF (ONEOF + (IfcSweptDiskSolidPolygonal)) + SUBTYPE OF (IfcSolidModel); + Directrix : IfcCurve; + Radius : IfcPositiveLengthMeasure; + InnerRadius : OPTIONAL IfcPositiveLengthMeasure; + StartParam : OPTIONAL IfcParameterValue; + EndParam : OPTIONAL IfcParameterValue; + WHERE + DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR +(SIZEOF(['IFC4X3.IFCCONIC', 'IFC4X3.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1); + DirectrixDim : Directrix.Dim = 3; + InnerRadiusSize : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius); +END_ENTITY; + +ENTITY IfcSweptDiskSolidPolygonal + SUBTYPE OF (IfcSweptDiskSolid); + FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + WHERE + CorrectRadii : NOT(EXISTS(FilletRadius)) OR (FilletRadius >= SELF\IfcSweptDiskSolid.Radius); + DirectrixIsPolyline : ('IFC4X3.IFCPOLYLINE' IN TYPEOF(SELF\IfcSweptDiskSolid.Directrix)) OR +(('IFC4X3.IFCINDEXEDPOLYCURVE' IN TYPEOF(SELF\IfcSweptDiskSolid.Directrix)) AND NOT(EXISTS(SELF\IfcSweptDiskSolid.Directrix.Segments))); +END_ENTITY; + +ENTITY IfcSweptSurface + ABSTRACT SUPERTYPE OF (ONEOF + (IfcSurfaceOfLinearExtrusion + ,IfcSurfaceOfRevolution)) + SUBTYPE OF (IfcSurface); + SweptCurve : IfcProfileDef; + Position : OPTIONAL IfcAxis2Placement3D; + WHERE + SweptCurveType : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve; +END_ENTITY; + +ENTITY IfcSwitchingDevice + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcSwitchingDeviceTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSWITCHINGDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSwitchingDeviceType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcSwitchingDeviceTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcSystem + SUPERTYPE OF (ONEOF + (IfcBuildingSystem + ,IfcBuiltSystem + ,IfcDistributionSystem + ,IfcStructuralAnalysisModel + ,IfcZone)) + SUBTYPE OF (IfcGroup); + INVERSE + ServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem; + ServicesFacilities : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements; +END_ENTITY; + +ENTITY IfcSystemFurnitureElement + SUBTYPE OF (IfcFurnishingElement); + PredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCSYSTEMFURNITUREELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcSystemFurnitureElementType + SUBTYPE OF (IfcFurnishingElementType); + PredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + FlangeWidth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + FlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + WebEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + WebSlope : OPTIONAL IfcPlaneAngleMeasure; + FlangeSlope : OPTIONAL IfcPlaneAngleMeasure; + WHERE + ValidFlangeThickness : FlangeThickness < Depth; + ValidWebThickness : WebThickness < FlangeWidth; +END_ENTITY; + +ENTITY IfcTable; + Name : OPTIONAL IfcLabel; + Rows : OPTIONAL LIST [1:?] OF IfcTableRow; + Columns : OPTIONAL LIST [1:?] OF IfcTableColumn; + DERIVE + NumberOfCellsInRow : IfcInteger := HIINDEX(Rows[1].RowCells); + NumberOfHeadings : IfcInteger := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading)); + NumberOfDataRows : IfcInteger := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading))); + WHERE + WR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0; + WR2 : { 0 <= NumberOfHeadings <= 1 }; +END_ENTITY; + +ENTITY IfcTableColumn; + Identifier : OPTIONAL IfcIdentifier; + Name : OPTIONAL IfcLabel; + Description : OPTIONAL IfcText; + Unit : OPTIONAL IfcUnit; + ReferencePath : OPTIONAL IfcReference; +END_ENTITY; + +ENTITY IfcTableRow; + RowCells : OPTIONAL LIST [1:?] OF IfcValue; + IsHeading : OPTIONAL IfcBoolean; +END_ENTITY; + +ENTITY IfcTank + SUBTYPE OF (IfcFlowStorageDevice); + PredefinedType : OPTIONAL IfcTankTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTANKTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTankType + SUBTYPE OF (IfcFlowStorageDeviceType); + PredefinedType : IfcTankTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTask + SUBTYPE OF (IfcProcess); + Status : OPTIONAL IfcLabel; + WorkMethod : OPTIONAL IfcLabel; + IsMilestone : IfcBoolean; + Priority : OPTIONAL IfcInteger; + TaskTime : OPTIONAL IfcTaskTime; + PredefinedType : OPTIONAL IfcTaskTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); + HasName : EXISTS(SELF\IfcRoot.Name); +END_ENTITY; + +ENTITY IfcTaskTime + SUPERTYPE OF (ONEOF + (IfcTaskTimeRecurring)) + SUBTYPE OF (IfcSchedulingTime); + DurationType : OPTIONAL IfcTaskDurationEnum; + ScheduleDuration : OPTIONAL IfcDuration; + ScheduleStart : OPTIONAL IfcDateTime; + ScheduleFinish : OPTIONAL IfcDateTime; + EarlyStart : OPTIONAL IfcDateTime; + EarlyFinish : OPTIONAL IfcDateTime; + LateStart : OPTIONAL IfcDateTime; + LateFinish : OPTIONAL IfcDateTime; + FreeFloat : OPTIONAL IfcDuration; + TotalFloat : OPTIONAL IfcDuration; + IsCritical : OPTIONAL IfcBoolean; + StatusTime : OPTIONAL IfcDateTime; + ActualDuration : OPTIONAL IfcDuration; + ActualStart : OPTIONAL IfcDateTime; + ActualFinish : OPTIONAL IfcDateTime; + RemainingTime : OPTIONAL IfcDuration; + Completion : OPTIONAL IfcPositiveRatioMeasure; +END_ENTITY; + +ENTITY IfcTaskTimeRecurring + SUBTYPE OF (IfcTaskTime); + Recurrence : IfcRecurrencePattern; +END_ENTITY; + +ENTITY IfcTaskType + SUBTYPE OF (IfcTypeProcess); + PredefinedType : IfcTaskTypeEnum; + WorkMethod : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType)); +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 IfcURIReference; + MessagingIDs : OPTIONAL LIST [1:?] OF IfcURIReference; + WHERE + MinimumDataProvided : EXISTS (TelephoneNumbers) OR +EXISTS (FacsimileNumbers) OR +EXISTS (PagerNumber) OR +EXISTS (ElectronicMailAddresses) OR +EXISTS (WWWHomePageURL) OR +EXISTS (MessagingIDs); +END_ENTITY; + +ENTITY IfcTendon + SUBTYPE OF (IfcReinforcingElement); + PredefinedType : OPTIONAL IfcTendonTypeEnum; + NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + CrossSectionArea : OPTIONAL IfcAreaMeasure; + TensionForce : OPTIONAL IfcForceMeasure; + PreStress : OPTIONAL IfcPressureMeasure; + FrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure; + AnchorageSlip : OPTIONAL IfcPositiveLengthMeasure; + MinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTENDONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTendonAnchor + SUBTYPE OF (IfcReinforcingElement); + PredefinedType : OPTIONAL IfcTendonAnchorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTENDONANCHORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTendonAnchorType + SUBTYPE OF (IfcReinforcingElementType); + PredefinedType : IfcTendonAnchorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTendonConduit + SUBTYPE OF (IfcReinforcingElement); + PredefinedType : IfcTendonConduitTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTendonConduitTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTendonConduitTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTENDONCONDUITTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTendonConduitType + SUBTYPE OF (IfcReinforcingElementType); + PredefinedType : IfcTendonConduitTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTendonConduitTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTendonConduitTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTendonType + SUBTYPE OF (IfcReinforcingElementType); + PredefinedType : IfcTendonTypeEnum; + NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; + CrossSectionArea : OPTIONAL IfcAreaMeasure; + SheathDiameter : OPTIONAL IfcPositiveLengthMeasure; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTessellatedFaceSet + ABSTRACT SUPERTYPE OF (ONEOF + (IfcPolygonalFaceSet + ,IfcTriangulatedFaceSet)) + SUBTYPE OF (IfcTessellatedItem); + Coordinates : IfcCartesianPointList3D; + Closed : OPTIONAL IfcBoolean; + DERIVE + Dim : IfcDimensionCount := 3; + INVERSE + HasColours : SET [0:1] OF IfcIndexedColourMap FOR MappedTo; + HasTextures : SET [0:?] OF IfcIndexedTextureMap FOR MappedTo; +END_ENTITY; + +ENTITY IfcTessellatedItem + ABSTRACT SUPERTYPE OF (ONEOF + (IfcIndexedPolygonalFace + ,IfcTessellatedFaceSet)) + SUBTYPE OF (IfcGeometricRepresentationItem); +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('IFC4X3.IFCPLANARBOX' IN TYPEOF(Extent)); +END_ENTITY; + +ENTITY IfcTextStyle + SUBTYPE OF (IfcPresentationStyle); + TextCharacterAppearance : OPTIONAL IfcTextStyleForDefinedFont; + TextStyle : OPTIONAL IfcTextStyleTextModel; + TextFontStyle : IfcTextFontSelect; + ModelOrDraughting : OPTIONAL IfcBoolean; +END_ENTITY; + +ENTITY IfcTextStyleFontModel + SUBTYPE OF (IfcPreDefinedTextFont); + FontFamily : LIST [1:?] OF IfcTextFontName; + FontStyle : OPTIONAL IfcFontStyle; + FontVariant : OPTIONAL IfcFontVariant; + FontWeight : OPTIONAL IfcFontWeight; + FontSize : IfcSizeSelect; + WHERE + MeasureOfFontSize : ('IFC4X3.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND +(SELF.FontSize > 0.); +END_ENTITY; + +ENTITY IfcTextStyleForDefinedFont + SUBTYPE OF (IfcPresentationItem); + Colour : IfcColour; + BackgroundColour : OPTIONAL IfcColour; +END_ENTITY; + +ENTITY IfcTextStyleTextModel + SUBTYPE OF (IfcPresentationItem); + TextIndent : OPTIONAL IfcSizeSelect; + TextAlign : OPTIONAL IfcTextAlignment; + TextDecoration : OPTIONAL IfcTextDecoration; + LetterSpacing : OPTIONAL IfcSizeSelect; + WordSpacing : OPTIONAL IfcSizeSelect; + TextTransform : OPTIONAL IfcTextTransformation; + LineHeight : OPTIONAL IfcSizeSelect; +END_ENTITY; + +ENTITY IfcTextureCoordinate + ABSTRACT SUPERTYPE OF (ONEOF + (IfcIndexedTextureMap + ,IfcTextureCoordinateGenerator + ,IfcTextureMap)) + SUBTYPE OF (IfcPresentationItem); + Maps : LIST [1:?] OF IfcSurfaceTexture; +END_ENTITY; + +ENTITY IfcTextureCoordinateGenerator + SUBTYPE OF (IfcTextureCoordinate); + Mode : IfcLabel; + Parameter : OPTIONAL LIST [1:?] OF IfcReal; +END_ENTITY; + +ENTITY IfcTextureCoordinateIndices + SUPERTYPE OF (ONEOF + (IfcTextureCoordinateIndicesWithVoids)); + TexCoordIndex : LIST [3:?] OF IfcPositiveInteger; + TexCoordsOf : IfcIndexedPolygonalFace; + INVERSE + ToTexMap : IfcIndexedPolygonalTextureMap FOR TexCoordIndices; +END_ENTITY; + +ENTITY IfcTextureCoordinateIndicesWithVoids + SUBTYPE OF (IfcTextureCoordinateIndices); + InnerTexCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger; +END_ENTITY; + +ENTITY IfcTextureMap + SUBTYPE OF (IfcTextureCoordinate); + Vertices : LIST [3:?] OF IfcTextureVertex; + MappedTo : IfcFace; +END_ENTITY; + +ENTITY IfcTextureVertex + SUBTYPE OF (IfcPresentationItem); + Coordinates : LIST [2:2] OF IfcParameterValue; +END_ENTITY; + +ENTITY IfcTextureVertexList + SUBTYPE OF (IfcPresentationItem); + TexCoordsList : LIST [1:?] OF LIST [2:2] OF IfcParameterValue; +END_ENTITY; + +ENTITY IfcThirdOrderPolynomialSpiral + SUBTYPE OF (IfcSpiral); + CubicTerm : IfcLengthMeasure; + QuadraticTerm : OPTIONAL IfcLengthMeasure; + LinearTerm : OPTIONAL IfcLengthMeasure; + ConstantTerm : OPTIONAL IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcTimePeriod; + StartTime : IfcTime; + EndTime : IfcTime; +END_ENTITY; + +ENTITY IfcTimeSeries + ABSTRACT SUPERTYPE OF (ONEOF + (IfcIrregularTimeSeries + ,IfcRegularTimeSeries)); + Name : IfcLabel; + Description : OPTIONAL IfcText; + StartTime : IfcDateTime; + EndTime : IfcDateTime; + TimeSeriesDataType : IfcTimeSeriesDataTypeEnum; + DataOrigin : IfcDataOriginEnum; + UserDefinedDataOrigin : OPTIONAL IfcLabel; + Unit : OPTIONAL IfcUnit; + INVERSE + HasExternalReference : SET [1:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; +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('IFC4X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) +)) = 0 + +; + WR22 : EXISTS(SELF\IfcRepresentation.RepresentationType); + WR23 : IfcTopologyRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); +END_ENTITY; + +ENTITY IfcToroidalSurface + SUBTYPE OF (IfcElementarySurface); + MajorRadius : IfcPositiveLengthMeasure; + MinorRadius : IfcPositiveLengthMeasure; + WHERE + MajorLargerMinor : MinorRadius < MajorRadius; +END_ENTITY; + +ENTITY IfcTrackElement + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcTrackElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcTrackElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTrackElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTRACKELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTrackElementType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcTrackElementTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTrackElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTrackElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTransformer + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcTransformerTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTRANSFORMERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTransformerType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcTransformerTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTransportElement + SUBTYPE OF (IfcTransportationDevice); + PredefinedType : OPTIONAL IfcTransportElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTransportElementType + SUBTYPE OF (IfcTransportationDeviceType); + PredefinedType : IfcTransportElementTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTransportationDevice + ABSTRACT SUPERTYPE OF (ONEOF + (IfcTransportElement + ,IfcVehicle)) + SUBTYPE OF (IfcElement); +END_ENTITY; + +ENTITY IfcTransportationDeviceType + ABSTRACT SUPERTYPE OF (ONEOF + (IfcTransportElementType + ,IfcVehicleType)) + SUBTYPE OF (IfcElementType); +END_ENTITY; + +ENTITY IfcTrapeziumProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + BottomXDim : IfcPositiveLengthMeasure; + TopXDim : IfcPositiveLengthMeasure; + YDim : IfcPositiveLengthMeasure; + TopXOffset : IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcTriangulatedFaceSet + SUPERTYPE OF (ONEOF + (IfcTriangulatedIrregularNetwork)) + SUBTYPE OF (IfcTessellatedFaceSet); + Normals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue; + CoordIndex : LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger; + PnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger; + DERIVE + NumberOfTriangles : IfcInteger := SIZEOF(CoordIndex); +END_ENTITY; + +ENTITY IfcTriangulatedIrregularNetwork + SUBTYPE OF (IfcTriangulatedFaceSet); + Flags : LIST [1:?] OF IfcInteger; + WHERE + NotClosed : SELF\IfcTriangulatedFaceSet.Closed = FALSE; +END_ENTITY; + +ENTITY IfcTrimmedCurve + SUBTYPE OF (IfcBoundedCurve); + BasisCurve : IfcCurve; + Trim1 : SET [1:2] OF IfcTrimmingSelect; + Trim2 : SET [1:2] OF IfcTrimmingSelect; + SenseAgreement : IfcBoolean; + MasterRepresentation : IfcTrimmingPreference; + WHERE + NoTrimOfBoundedCurves : NOT('IFC4X3.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve)); + Trim1ValuesConsistent : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2])); + Trim2ValuesConsistent : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2])); +END_ENTITY; + +ENTITY IfcTubeBundle + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcTubeBundleTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCTUBEBUNDLETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcTubeBundleType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcTubeBundleTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcTypeObject + SUPERTYPE OF (ONEOF + (IfcTypeProcess + ,IfcTypeProduct + ,IfcTypeResource)) + SUBTYPE OF (IfcObjectDefinition); + ApplicableOccurrence : OPTIONAL IfcIdentifier; + HasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition; + INVERSE + Types : SET [0:1] OF IfcRelDefinesByType FOR RelatingType; + WHERE + NameRequired : EXISTS(SELF\IfcRoot.Name); + UniquePropertySetNames : (NOT(EXISTS(HasPropertySets))) OR IfcUniquePropertySetNames(HasPropertySets); +END_ENTITY; + +ENTITY IfcTypeProcess + ABSTRACT SUPERTYPE OF (ONEOF + (IfcEventType + ,IfcProcedureType + ,IfcTaskType)) + SUBTYPE OF (IfcTypeObject); + Identification : OPTIONAL IfcIdentifier; + LongDescription : OPTIONAL IfcText; + ProcessType : OPTIONAL IfcLabel; + INVERSE + OperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess; +END_ENTITY; + +ENTITY IfcTypeProduct + SUPERTYPE OF (ONEOF + (IfcElementType + ,IfcSpatialElementType)) + SUBTYPE OF (IfcTypeObject); + RepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap; + Tag : OPTIONAL IfcLabel; + INVERSE + ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct; + WHERE + ApplicableOccurrence : NOT(EXISTS(SELF\IfcTypeObject.Types[1])) OR +(SIZEOF(QUERY(temp <* SELF\IfcTypeObject.Types[1].RelatedObjects | + NOT('IFC4X3.IFCPRODUCT' IN TYPEOF(temp))) +) = 0); +END_ENTITY; + +ENTITY IfcTypeResource + ABSTRACT SUPERTYPE OF (ONEOF + (IfcConstructionResourceType)) + SUBTYPE OF (IfcTypeObject); + Identification : OPTIONAL IfcIdentifier; + LongDescription : OPTIONAL IfcText; + ResourceType : OPTIONAL IfcLabel; + INVERSE + ResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource; +END_ENTITY; + +ENTITY IfcUShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + FlangeWidth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + EdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + FlangeSlope : OPTIONAL IfcPlaneAngleMeasure; + WHERE + ValidFlangeThickness : FlangeThickness < (Depth / 2.); + ValidWebThickness : WebThickness < FlangeWidth; +END_ENTITY; + +ENTITY IfcUnitAssignment; + Units : SET [1:?] OF IfcUnit; + WHERE + WR01 : IfcCorrectUnitAssignment(Units); +END_ENTITY; + +ENTITY IfcUnitaryControlElement + SUBTYPE OF (IfcDistributionControlElement); + PredefinedType : OPTIONAL IfcUnitaryControlElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCUNITARYCONTROLELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcUnitaryControlElementType + SUBTYPE OF (IfcDistributionControlElementType); + PredefinedType : IfcUnitaryControlElementTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcUnitaryEquipment + SUBTYPE OF (IfcEnergyConversionDevice); + PredefinedType : OPTIONAL IfcUnitaryEquipmentTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCUNITARYEQUIPMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcUnitaryEquipmentType + SUBTYPE OF (IfcEnergyConversionDeviceType); + PredefinedType : IfcUnitaryEquipmentTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcValve + SUBTYPE OF (IfcFlowController); + PredefinedType : OPTIONAL IfcValveTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCVALVETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcValveType + SUBTYPE OF (IfcFlowControllerType); + PredefinedType : IfcValveTypeEnum; + WHERE + CorrectPredefinedType : (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 + MagGreaterOrEqualZero : Magnitude >= 0.0; +END_ENTITY; + +ENTITY IfcVehicle + SUBTYPE OF (IfcTransportationDevice); + PredefinedType : OPTIONAL IfcVehicleTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcVehicleTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVehicleTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCVEHICLETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcVehicleType + SUBTYPE OF (IfcTransportationDeviceType); + PredefinedType : IfcVehicleTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcVehicleTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVehicleTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcVertex + SUPERTYPE OF (ONEOF + (IfcVertexPoint)) + SUBTYPE OF (IfcTopologicalRepresentationItem); +END_ENTITY; + +ENTITY IfcVertexLoop + SUBTYPE OF (IfcLoop); + LoopVertex : IfcVertex; +END_ENTITY; + +ENTITY IfcVertexPoint + SUBTYPE OF (IfcVertex); + VertexGeometry : IfcPoint; +END_ENTITY; + +ENTITY IfcVibrationDamper + SUBTYPE OF (IfcElementComponent); + PredefinedType : OPTIONAL IfcDamperTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCVIBRATIONDAMPERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcVibrationDamperType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcVibrationDamperTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcVibrationDamperTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVibrationDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcVibrationIsolator + SUBTYPE OF (IfcElementComponent); + PredefinedType : OPTIONAL IfcVibrationIsolatorTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCVIBRATIONISOLATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcVibrationIsolatorType + SUBTYPE OF (IfcElementComponentType); + PredefinedType : IfcVibrationIsolatorTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcVirtualElement + SUBTYPE OF (IfcElement); + PredefinedType : OPTIONAL IfcVirtualElementTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcVirtualElementTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVirtualElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcVirtualGridIntersection; + IntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis; + OffsetDistances : LIST [2:3] OF IfcLengthMeasure; +END_ENTITY; + +ENTITY IfcVoidingFeature + SUBTYPE OF (IfcFeatureElementSubtraction); + PredefinedType : OPTIONAL IfcVoidingFeatureTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcVoidingFeatureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); +END_ENTITY; + +ENTITY IfcWall + SUPERTYPE OF (ONEOF + (IfcWallStandardCase)) + SUBTYPE OF (IfcBuiltElement); + PredefinedType : OPTIONAL IfcWallTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcWallStandardCase + SUBTYPE OF (IfcWall); + WHERE + HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4X3.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC4X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC4X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + )) = 1; +END_ENTITY; + +ENTITY IfcWallType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcWallTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcWasteTerminal + SUBTYPE OF (IfcFlowTerminal); + PredefinedType : OPTIONAL IfcWasteTerminalTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCWASTETERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcWasteTerminalType + SUBTYPE OF (IfcFlowTerminalType); + PredefinedType : IfcWasteTerminalTypeEnum; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcWindow + SUBTYPE OF (IfcBuiltElement); + OverallHeight : OPTIONAL IfcPositiveLengthMeasure; + OverallWidth : OPTIONAL IfcPositiveLengthMeasure; + PredefinedType : OPTIONAL IfcWindowTypeEnum; + PartitioningType : OPTIONAL IfcWindowTypePartitioningEnum; + UserDefinedPartitioningType : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR + (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4X3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); +END_ENTITY; + +ENTITY IfcWindowLiningProperties + SUBTYPE OF (IfcPreDefinedPropertySet); + LiningDepth : OPTIONAL IfcPositiveLengthMeasure; + LiningThickness : OPTIONAL IfcNonNegativeLengthMeasure; + TransomThickness : OPTIONAL IfcNonNegativeLengthMeasure; + MullionThickness : OPTIONAL IfcNonNegativeLengthMeasure; + FirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure; + SecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure; + FirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure; + SecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; + LiningOffset : OPTIONAL IfcLengthMeasure; + LiningToPanelOffsetX : OPTIONAL IfcLengthMeasure; + LiningToPanelOffsetY : OPTIONAL IfcLengthMeasure; + WHERE + WR31 : NOT(EXISTS(LiningDepth) AND NOT(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 +( + ('IFC4X3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + OR + ('IFC4X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) +); +END_ENTITY; + +ENTITY IfcWindowPanelProperties + SUBTYPE OF (IfcPreDefinedPropertySet); + OperationType : IfcWindowPanelOperationEnum; + PanelPosition : IfcWindowPanelPositionEnum; + FrameDepth : OPTIONAL IfcPositiveLengthMeasure; + FrameThickness : OPTIONAL IfcPositiveLengthMeasure; + ShapeAspectStyle : OPTIONAL IfcShapeAspect; + WHERE + ApplicableToType : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) +AND +( + ('IFC4X3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + OR + ('IFC4X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) +); +END_ENTITY; + +ENTITY IfcWindowType + SUBTYPE OF (IfcBuiltElementType); + PredefinedType : IfcWindowTypeEnum; + PartitioningType : IfcWindowTypePartitioningEnum; + ParameterTakesPrecedence : OPTIONAL IfcBoolean; + UserDefinedPartitioningType : OPTIONAL IfcLabel; + WHERE + CorrectPredefinedType : (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR + ((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType)); +END_ENTITY; + +ENTITY IfcWorkCalendar + SUBTYPE OF (IfcControl); + WorkingTimes : OPTIONAL SET [1:?] OF IfcWorkTime; + ExceptionTimes : OPTIONAL SET [1:?] OF IfcWorkTime; + PredefinedType : OPTIONAL IfcWorkCalendarTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkCalendarTypeEnum.USERDEFINED) OR +((PredefinedType = IfcWorkCalendarTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcWorkControl + ABSTRACT SUPERTYPE OF (ONEOF + (IfcWorkPlan + ,IfcWorkSchedule)) + SUBTYPE OF (IfcControl); + CreationDate : IfcDateTime; + Creators : OPTIONAL SET [1:?] OF IfcPerson; + Purpose : OPTIONAL IfcLabel; + Duration : OPTIONAL IfcDuration; + TotalFloat : OPTIONAL IfcDuration; + StartTime : IfcDateTime; + FinishTime : OPTIONAL IfcDateTime; +END_ENTITY; + +ENTITY IfcWorkPlan + SUBTYPE OF (IfcWorkControl); + PredefinedType : OPTIONAL IfcWorkPlanTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkPlanTypeEnum.USERDEFINED) OR +((PredefinedType = IfcWorkPlanTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcWorkSchedule + SUBTYPE OF (IfcWorkControl); + PredefinedType : OPTIONAL IfcWorkScheduleTypeEnum; + WHERE + CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkScheduleTypeEnum.USERDEFINED) OR +((PredefinedType = IfcWorkScheduleTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); +END_ENTITY; + +ENTITY IfcWorkTime + SUBTYPE OF (IfcSchedulingTime); + RecurrencePattern : OPTIONAL IfcRecurrencePattern; + StartDate : OPTIONAL IfcDate; + FinishDate : OPTIONAL IfcDate; +END_ENTITY; + +ENTITY IfcZShapeProfileDef + SUBTYPE OF (IfcParameterizedProfileDef); + Depth : IfcPositiveLengthMeasure; + FlangeWidth : IfcPositiveLengthMeasure; + WebThickness : IfcPositiveLengthMeasure; + FlangeThickness : IfcPositiveLengthMeasure; + FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; + EdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; + WHERE + ValidFlangeThickness : FlangeThickness < (Depth / 2.); +END_ENTITY; + +ENTITY IfcZone + SUBTYPE OF (IfcSystem); + LongName : OPTIONAL IfcLabel; + WHERE + WR1 : (SIZEOF(SELF\IfcGroup.IsGroupedBy) = 0) OR + (SIZEOF (QUERY (temp <* SELF\IfcGroup.IsGroupedBy[1].RelatedObjects | + NOT(('IFC4X3.IFCZONE' IN TYPEOF(temp)) OR + ('IFC4X3.IFCSPACE' IN TYPEOF(temp)) OR + ('IFC4X3.IFCSPATIALZONE' IN TYPEOF(temp)) + ))) = 0); +END_ENTITY; + +FUNCTION IfcAssociatedSurface +(Arg : IfcPcurve) : IfcSurface; + + LOCAL + Surf : IfcSurface; + END_LOCAL; + + Surf := Arg\IfcPcurve.BasisSurface; + + RETURN(Surf); + +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))\IfcVector.Orientation, D1]); + +END_FUNCTION; + +FUNCTION IfcConsecutiveSegments + (Segments : LIST [1:?] OF IfcSegmentIndexSelect) + : BOOLEAN; + + LOCAL + Result : BOOLEAN := TRUE; + END_LOCAL; + + REPEAT i := 1 TO (HIINDEX(Segments)-1); + IF Segments[i][HIINDEX(Segments[i])] <> Segments[i+1][1] THEN + BEGIN + Result := FALSE; + ESCAPE; + END; + END_IF; + END_REPEAT; + + RETURN (Result); + +END_FUNCTION; + +FUNCTION IfcConstraintsParamBSpline +( Degree, UpKnots, UpCp : INTEGER; + KnotMult : LIST OF INTEGER; + Knots : LIST OF IfcParameterValue ) +: BOOLEAN; + + + LOCAL + Result : BOOLEAN := TRUE; + K, Sum : INTEGER; + END_LOCAL; + + (* Find sum of knot multiplicities. *) + Sum := KnotMult[1]; + REPEAT i := 2 TO UpKnots; + Sum := Sum + KnotMult[i]; + END_REPEAT; + + (* Check limits holding for all B-spline parametrisations *) + IF (Degree < 1) OR (UpKnots < 2) OR (UpCp < Degree) OR + (Sum <> (Degree + UpCp + 2)) THEN + Result := FALSE; + RETURN(Result); + END_IF; + + K := KnotMult[1]; + IF (K < 1) OR (K > Degree + 1) THEN + Result := FALSE; + RETURN(Result); + END_IF; + + REPEAT i := 2 TO UpKnots; + IF (KnotMult[i] < 1) OR (Knots[i] <= Knots[i-1]) THEN + Result := FALSE; + RETURN(Result); + END_IF; + K := KnotMult[i]; + IF (i < UpKnots) AND (K > Degree) THEN + Result := FALSE; + RETURN(Result); + END_IF; + IF (i = UpKnots) AND (K > Degree + 1) THEN + Result := FALSE; + RETURN(Result); + END_IF; + END_REPEAT; + + RETURN(result); + +END_FUNCTION; + +FUNCTION IfcConvertDirectionInto2D + (Direction : IfcDirection) + : IfcDirection; + + LOCAL + Direction2D : IfcDirection := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,1.]); + END_LOCAL; + + Direction2D.DirectionRatios[1] := Direction.DirectionRatios[1]; + Direction2D.DirectionRatios[2] := Direction.DirectionRatios[2]; + + RETURN (Direction2D); + +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, 2, 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 IfcCorrectFillAreaStyle + (Styles : SET[1:?] OF IfcFillStyleSelect) + :LOGICAL; + +LOCAL + Hatching : INTEGER := 0; + Tiles : INTEGER := 0; + Colour : INTEGER := 0; + External : INTEGER := 0; +END_LOCAL; + + +External := SIZEOF(QUERY(Style <* Styles | + 'IFC4X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN + TYPEOF(Style))); + +Hatching := SIZEOF(QUERY(Style <* Styles | + 'IFC4X3.IFCFILLAREASTYLEHATCHING' IN + TYPEOF(Style))); + +Tiles := SIZEOF(QUERY(Style <* Styles | + 'IFC4X3.IFCFILLAREASTYLETILES' IN + TYPEOF(Style))); + +Colour := SIZEOF(QUERY(Style <* Styles | + 'IFC4X3.IFCCOLOUR' IN + TYPEOF(Style))); + + +IF (External > 1) THEN + RETURN (FALSE); +END_IF; + + +IF ((External = 1) AND ((Hatching > 0) OR (Tiles > 0) OR (Colour > 0))) THEN + RETURN (FALSE); +END_IF; + + +IF (Colour > 1) THEN + RETURN (FALSE); +END_IF; + +IF ((Hatching > 0) AND (Tiles >0)) THEN + RETURN (FALSE); +END_IF; + +RETURN(TRUE); + +END_FUNCTION; + +FUNCTION IfcCorrectLocalPlacement + (AxisPlacement:IfcAxis2Placement; + RelPlacement : IfcObjectPlacement):LOGICAL; + + IF (EXISTS(RelPlacement)) THEN + IF ('IFC4X3.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN + RETURN(?); + END_IF; + IF ('IFC4X3.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN + IF ('IFC4X3.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN + RETURN(TRUE); + END_IF; + IF ('IFC4X3.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN + IF (RelPlacement\IfcLocalPlacement.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('IFC4X3.IFCPRODUCT' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.PROCESS : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCPROCESS' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.CONTROL : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCCONTROL' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.RESOURCE : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCRESOURCE' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.ACTOR : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCACTOR' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.GROUP : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCGROUP' IN TYPEOF(temp)))); + RETURN(Count = 0); + END; + IfcObjectTypeEnum.PROJECT : + BEGIN + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.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 | ('IFC4X3.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED))); + DerivedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC4X3.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED))); + MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units | 'IFC4X3.IFCMONETARYUNIT' IN TYPEOF(temp))); + + REPEAT i := 1 TO SIZEOF(Units); + IF (('IFC4X3.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN + NamedUnitNames := NamedUnitNames + Units[i]\IfcNamedUnit.UnitType; + END_IF; + IF (('IFC4X3.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN + DerivedUnitNames := DerivedUnitNames + Units[i]\IfcDerivedUnit.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)\IfcDirection.DirectionRatios; + + V2 := IfcNormalise(Arg2)\IfcDirection.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 ('IFC4X3.IFCLINE' IN TYPEOF(Curve)) + THEN RETURN(Curve\IfcLine.Pnt.Dim); + END_IF; + IF ('IFC4X3.IFCCONIC' IN TYPEOF(Curve)) + THEN RETURN(Curve\IfcConic.Position.Dim); + END_IF; + IF ('IFC4X3.IFCPOLYLINE' IN TYPEOF(Curve)) + THEN RETURN(Curve\IfcPolyline.Points[1].Dim); + END_IF; + IF ('IFC4X3.IFCTRIMMEDCURVE' IN TYPEOF(Curve)) + THEN RETURN(IfcCurveDim(Curve\IfcTrimmedCurve.BasisCurve)); + END_IF; + IF ('IFC4X3.IFCGRADIENTCURVE' IN TYPEOF(Curve)) + THEN RETURN(3); + END_IF; + IF ('IFC4X3.IFCSEGMENTEDREFERENCECURVE' IN TYPEOF(Curve)) + THEN RETURN(3); + END_IF; + IF ('IFC4X3.IFCCOMPOSITECURVE' IN TYPEOF(Curve)) + THEN RETURN(Curve\IfcCompositeCurve.Segments[1].Dim); + END_IF; + IF ('IFC4X3.IFCBSPLINECURVE' IN TYPEOF(Curve)) + THEN RETURN(Curve\IfcBSplineCurve.ControlPointsList[1].Dim); + END_IF; + IF ('IFC4X3.IFCOFFSETCURVE2D' IN TYPEOF(Curve)) + THEN RETURN(2); + END_IF; + IF ('IFC4X3.IFCOFFSETCURVE3D' IN TYPEOF(Curve)) + THEN RETURN(3); + END_IF; + IF ('IFC4X3.IFCOFFSETCURVEBYDISTANCES' IN TYPEOF(Curve)) + THEN RETURN(3); + END_IF; + IF ('IFC4X3.IFCCURVESEGMENT2D' IN TYPEOF(Curve)) + THEN RETURN(2); + END_IF; + IF ('IFC4X3.IFCPOLYNOMIALCURVE' IN TYPEOF(Curve)) THEN + IF ( NOT EXISTS(Curve\IfcPolynomialCurve.CoefficientsZ) AND (Curve\IfcPolynomialCurve.Position.Dim = 2 )) + THEN RETURN(2); + END_IF; + RETURN(3); + END_IF; + IF ('IFC4X3.IFCPCURVE' IN TYPEOF(Curve)) + THEN RETURN(3); + END_IF; + IF ('IFC4X3.IFCINDEXEDPOLYCURVE' IN TYPEOF(Curve)) + THEN RETURN(Curve\IfcIndexedPolyCurve.Points.Dim); + END_IF; +RETURN (?); + +END_FUNCTION; + +FUNCTION IfcCurveWeightsPositive +( B: IfcRationalBSplineCurveWithKnots) +: 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 + (UnitElements : SET [1:?] OF IfcDerivedUnitElement) + : IfcDimensionalExponents; + LOCAL + Result : IfcDimensionalExponents := + IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0); + END_LOCAL; + REPEAT i := LOINDEX(UnitElements) TO HIINDEX(UnitElements); + Result.LengthExponent := Result.LengthExponent + + (UnitElements[i].Exponent * + UnitElements[i].Unit.Dimensions.LengthExponent); + Result.MassExponent := Result.MassExponent + + (UnitElements[i].Exponent * + UnitElements[i].Unit.Dimensions.MassExponent); + Result.TimeExponent := Result.TimeExponent + + (UnitElements[i].Exponent * + UnitElements[i].Unit.Dimensions.TimeExponent); + Result.ElectricCurrentExponent := Result.ElectricCurrentExponent + + (UnitElements[i].Exponent * + UnitElements[i].Unit.Dimensions.ElectricCurrentExponent); + Result.ThermodynamicTemperatureExponent := Result.ThermodynamicTemperatureExponent + + (UnitElements[i].Exponent * + UnitElements[i].Unit.Dimensions.ThermodynamicTemperatureExponent); + Result.AmountOfSubstanceExponent := Result.AmountOfSubstanceExponent + + (UnitElements[i].Exponent * + UnitElements[i].Unit.Dimensions.AmountOfSubstanceExponent); + Result.LuminousIntensityExponent := Result.LuminousIntensityExponent + + (UnitElements[i].Exponent * + UnitElements[i].Unit.Dimensions.LuminousIntensityExponent); + END_REPEAT; + 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, 2, 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 IfcGetBasisSurface +(C : IfcCurveOnSurface) : SET[0:2] OF IfcSurface; + + LOCAL + Surfs : SET[0:2] OF IfcSurface; + N : INTEGER; + END_LOCAL; + + Surfs := []; + IF 'IFC4X3.IFCPCURVE' IN TYPEOF (C) THEN + Surfs := [C\IfcPCurve.BasisSurface]; + ELSE + IF 'IFC4X3.IFCSURFACECURVE' IN TYPEOF (C) THEN + N := SIZEOF(C\IfcSurfaceCurve.AssociatedGeometry); + REPEAT i := 1 TO N; + Surfs := Surfs + IfcAssociatedSurface(C\IfcSurfaceCurve.AssociatedGeometry[i]); + END_REPEAT; + END_IF; + END_IF; + IF 'IFC4X3.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN + + (* For an IfcCompositeCurveOnSurface the BasisSurface is the intersection of the BasisSurface of all the segments. *) + + N := SIZEOF(C\IfcCompositeCurve.Segments); + Surfs := IfcGetBasisSurface(C\IfcCompositeCurve.Segments[1].ParentCurve); + IF N > 1 THEN + REPEAT i := 2 TO N; + Surfs := Surfs * IfcGetBasisSurface(C\IfcCompositeCurve.Segments[1].ParentCurve); + END_REPEAT; + END_IF; + END_IF; + RETURN(Surfs); + +END_FUNCTION; + +FUNCTION IfcGradient +(GradientCurve : IfcGradientCurve) : IfcLengthMeasure; + RETURN(1); + +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 IfcMakeArrayOfArray +(Lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T; + Low1, U1, Low2, U2 : INTEGER): +ARRAY [Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T; + + LOCAL + Res : ARRAY[Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T; + END_LOCAL; + + (* Check input dimensions for consistency *) + IF (U1-Low1+1) <> SIZEOF(Lis) THEN + RETURN (?); + END_IF; + IF (U2 - Low2 + 1 ) <> SIZEOF(Lis[1]) THEN + RETURN (?) ; + END_IF; + + (* Initialise Res with values from Lis[1] *) + Res := [IfcListToArray(Lis[1], Low2, U2) : (U1-Low1 + 1)]; + REPEAT i := 2 TO HIINDEX(Lis); + IF (U2-Low2+1) <> SIZEOF(Lis[i]) THEN + RETURN (?); + END_IF; + Res[Low1+i-1] := IfcListToArray(Lis[i], Low2, U2); + END_REPEAT; + RETURN (Res); + +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 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 + IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg) THEN + BEGIN + Ndim := Arg\IfcVector.Dim; + V.DirectionRatios := Arg\IfcVector.Orientation.DirectionRatios; + Vec.Magnitude := Arg\IfcVector.Magnitude; + Vec.Orientation := V; + IF Arg\IfcVector.Magnitude = 0.0 THEN + RETURN(?); + ELSE + Vec.Magnitude := 1.0; + END_IF; + END; + ELSE + BEGIN + Ndim := Arg\IfcDirection.Dim; + V.DirectionRatios := Arg\IfcDirection.DirectionRatios; + END; + 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 'IFC4X3.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 IfcPointListDim +(PointList : IfcCartesianPointList) + : IfcDimensionCount; + + IF ('IFC4X3.IFCCARTESIANPOINTLIST2D' IN TYPEOF(PointList)) + THEN RETURN(2); + END_IF; + IF ('IFC4X3.IFCCARTESIANPOINTLIST3D' IN TYPEOF(PointList)) + THEN RETURN(3); + END_IF; + RETURN (?); + +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 'IFC4X3.IFCVECTOR' IN TYPEOF (Vec) THEN + V := Vec\IfcVector.Orientation; + Mag := Scalar * Vec\IfcVector.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 + 'Point' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCPOINT' IN TYPEOF(temp)))); + END; + + 'PointCloud' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp)))); + END; + + 'Curve' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCURVE' IN TYPEOF(temp)))); + END; + + 'Curve2D' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCURVE' IN TYPEOF(temp)) + AND (temp\IfcCurve.Dim = 2))); + END; + + 'Curve3D' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCURVE' IN TYPEOF(temp)) + AND (temp\IfcCurve.Dim = 3))); + END; + + 'Segment' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSEGMENT' IN TYPEOF(temp)))); + END; + + 'Surface' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSURFACE' IN TYPEOF(temp)))); + END; + + 'Surface2D' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSURFACE' IN TYPEOF(temp)) + AND (temp\IfcSurface.Dim = 2))); + END; + + 'Surface3D' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSURFACE' IN TYPEOF(temp)) + AND (temp\IfcSurface.Dim = 3))); + END; + + 'SectionedSurface' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3.IFCSECTIONEDSURFACE' IN TYPEOF(temp))); + END; + + 'FillArea' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCANNOTATIONFILLAREA' IN TYPEOF(temp)))); + END; + + 'Text' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCTEXTLITERAL' IN TYPEOF(temp)))); + END; + + 'AdvancedSurface' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3.IFCBSPLINESURFACE' IN TYPEOF(temp))); + END; + + 'Annotation2D' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ( + SIZEOF(TYPEOF(temp) * [ + 'IFC4X3.IFCPOINT', + 'IFC4X3.IFCCURVE', + 'IFC4X3.IFCGEOMETRICCURVESET', + 'IFC4X3.IFCANNOTATIONFILLAREA', + 'IFC4X3.IFCTEXTLITERAL']) = 1) + )); + END; + + 'GeometricSet' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCGEOMETRICSET' IN TYPEOF(temp)) + OR ('IFC4X3.IFCPOINT' IN TYPEOF(temp)) + OR ('IFC4X3.IFCCURVE' IN TYPEOF(temp)) + OR ('IFC4X3.IFCSURFACE' IN TYPEOF(temp)))); + END; + + 'GeometricCurveSet' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCGEOMETRICCURVESET' IN TYPEOF(temp)) + OR ('IFC4X3.IFCGEOMETRICSET' IN TYPEOF(temp)) + OR ('IFC4X3.IFCPOINT' IN TYPEOF(temp)) + OR ('IFC4X3.IFCCURVE' IN TYPEOF(temp)))); + REPEAT i:=1 TO HIINDEX(Items); + IF ('IFC4X3.IFCGEOMETRICSET' IN TYPEOF(Items[i])) + THEN + IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC4X3.IFCSURFACE' IN TYPEOF(temp))) > 0) + THEN + Count := Count - 1; + END_IF; + END_IF; + END_REPEAT; + END; + + 'Tessellation' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3.IFCTESSELLATEDITEM' IN TYPEOF(temp))); + END; + + 'SurfaceOrSolidModel' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ + 'IFC4X3.IFCTESSELLATEDITEM', + 'IFC4X3.IFCSHELLBASEDSURFACEMODEL', + 'IFC4X3.IFCFACEBASEDSURFACEMODEL', + 'IFC4X3.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1 + )); + END; + + 'SurfaceModel' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ + 'IFC4X3.IFCTESSELLATEDITEM', + 'IFC4X3.IFCSHELLBASEDSURFACEMODEL', + 'IFC4X3.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1 + )); + END; + + 'SolidModel' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSOLIDMODEL' IN TYPEOF(temp)))); + END; + + 'SweptSolid' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([ + 'IFC4X3.IFCEXTRUDEDAREASOLID', + 'IFC4X3.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1 + ) AND (SIZEOF([ + 'IFC4X3.IFCEXTRUDEDAREASOLIDTAPERED', + 'IFC4X3.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0 + ) + )); + END; + + 'AdvancedSweptSolid' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ + 'IFC4X3.IFCSWEPTAREASOLID', + 'IFC4X3.IFCSWEPTDISKSOLID', + 'IFC4X3.IFCSECTIONEDSOLIDHORIZONTAL'] * TYPEOF(temp)) >= 1 + )); + END; + + 'CSG' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ + 'IFC4X3.IFCBOOLEANRESULT', + 'IFC4X3.IFCCSGPRIMITIVE3D', + 'IFC4X3.IFCCSGSOLID'] * TYPEOF(temp)) >= 1 + )); + END; + + 'Clipping' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ + 'IFC4X3.IFCCSGSOLID', + 'IFC4X3.IFCBOOLEANCLIPPINGRESULT'] * TYPEOF(temp)) >= 1 + )); + END; + + 'Brep' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCFACETEDBREP' IN TYPEOF(temp)))); + END; + + 'AdvancedBrep' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp)))); + END; + + 'BoundingBox' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCBOUNDINGBOX' IN TYPEOF(temp)))); + IF (SIZEOF(Items) > 1) + THEN + Count := 0; + END_IF; + END; + + 'SectionedSpine' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSECTIONEDSPINE' IN TYPEOF(temp)))); + END; + + 'LightSource' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCLIGHTSOURCE' IN TYPEOF(temp)))); + END; + + 'MappedRepresentation' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCMAPPEDITEM' IN TYPEOF(temp)))); + END; + + OTHERWISE : RETURN(?); + END_CASE; + RETURN (Count = SIZEOF(Items)); + +END_FUNCTION; + +FUNCTION IfcSurfaceWeightsPositive +( B: IfcRationalBSplineSurfaceWithKnots) +: BOOLEAN; + + LOCAL + Result : BOOLEAN := TRUE; + Weights : ARRAY [ 0 : B\IfcBSplineSurface.UUpper ] OF ARRAY [ 0 : B\IfcBSplineSurface.VUpper ] OF REAL := B.Weights; + END_LOCAL; + + REPEAT i := 0 TO B\IfcBSplineSurface.UUpper; + REPEAT j := 0 TO B\IfcBSplineSurface.VUpper; + IF (Weights[i][j] <= 0.0) THEN + Result := FALSE; + RETURN(Result); + END_IF; + END_REPEAT; + END_REPEAT; + RETURN(Result); + +END_FUNCTION; + +FUNCTION IfcTaperedSweptAreaProfiles +(StartArea, EndArea : IfcProfileDef) + : LOGICAL; + +LOCAL + Result : LOGICAL := FALSE; +END_LOCAL; + +IF ('IFC4X3.IFCPARAMETERIZEDPROFILEDEF' IN TYPEOF(StartArea)) THEN + IF ('IFC4X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN + Result := (StartArea :=: EndArea\IfcDerivedProfileDef.ParentProfile); + ELSE + Result := (TYPEOF(StartArea) = TYPEOF(EndArea)); + END_IF; +ELSE + IF ('IFC4X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN + Result := (StartArea :=: EndArea\IfcDerivedProfileDef.ParentProfile); + ELSE + Result := FALSE; + END_IF; +END_IF; + +RETURN(Result); + +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 | + ('IFC4X3.IFCVERTEX' IN TYPEOF(temp)))); + END; + 'Edge' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC4X3.IFCEDGE' IN TYPEOF(temp)))); + END; + 'Path' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC4X3.IFCPATH' IN TYPEOF(temp)))); + END; + 'Face' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC4X3.IFCFACE' IN TYPEOF(temp)))); + END; + 'Shell' : + BEGIN + Count := SIZEOF(QUERY(temp <* Items | + ('IFC4X3.IFCOPENSHELL' IN TYPEOF(temp)) + OR ('IFC4X3.IFCCLOSEDSHELL' IN TYPEOF(temp)))); + END; + 'Undefined': RETURN(TRUE); + OTHERWISE : RETURN(?); + END_CASE; + RETURN (Count = SIZEOF(Items)); + +END_FUNCTION; + +FUNCTION IfcUniqueDefinitionNames +(Relations : SET [1:?] OF IfcRelDefinesByProperties) +:LOGICAL; + +LOCAL + Definition : IfcPropertySetDefinitionSelect; + DefinitionSet : IfcPropertySetDefinitionSet; + Properties : SET OF IfcPropertySetDefinition := []; + Result : LOGICAL; +END_LOCAL; + +IF SIZEOF(Relations) = 0 THEN + RETURN(TRUE); +END_IF; + +REPEAT i:=1 TO HIINDEX(Relations); + Definition := Relations[i].RelatingPropertyDefinition; + IF 'IFC4X3.IFCPROPERTYSETDEFINITION' IN TYPEOF(Definition) THEN + Properties := Properties + Definition; + ELSE + IF 'IFC4X3.IFCPROPERTYSETDEFINITIONSET' IN TYPEOF(Definition) THEN + BEGIN + DefinitionSet := Definition; + REPEAT j:= 1 TO HIINDEX(DefinitionSet); + Properties := Properties + DefinitionSet[j]; + END_REPEAT; + END; + END_IF; + END_IF; +END_REPEAT; + +Result := IfcUniquePropertySetNames(Properties); +RETURN (Result); + +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 IfcUniquePropertySetNames +(Properties : SET [1:?] OF IfcPropertySetDefinition) +:LOGICAL; + +LOCAL + Names : SET OF IfcLabel := []; + Unnamed : INTEGER := 0; +END_LOCAL; + +REPEAT i:=1 TO HIINDEX(Properties); + IF 'IFC4X3.IFCPROPERTYSET' IN TYPEOF(Properties[i]) THEN + Names := Names + Properties[i]\IfcRoot.Name; + ELSE + Unnamed := Unnamed + 1; + END_IF; +END_REPEAT; + +RETURN (SIZEOF(Names) + Unnamed = SIZEOF(Properties)); + +END_FUNCTION; + +FUNCTION IfcUniquePropertyTemplateNames +(Properties : SET [1:?] OF IfcPropertyTemplate) +:LOGICAL; + +LOCAL + Names : SET OF IfcLabel := []; +END_LOCAL; + +REPEAT i:=1 TO HIINDEX(Properties); + Names := Names + Properties[i].Name; +END_REPEAT; +RETURN (SIZEOF(Names) = SIZEOF(Properties)); + +END_FUNCTION; + +FUNCTION IfcUniqueQuantityNames +(Properties : SET [1:?] OF IfcPhysicalQuantity) +:LOGICAL; + +LOCAL + Names : SET OF IfcLabel := []; +END_LOCAL; + +REPEAT i:=1 TO HIINDEX(Properties); + Names := Names + Properties[i].Name; +END_REPEAT; +RETURN (SIZEOF(Names) = SIZEOF(Properties)); + +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 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg1) THEN + Mag1 := Arg1\IfcVector.Magnitude; + Vec1 := Arg1\IfcVector.Orientation; + ELSE + Mag1 := 1.0; + Vec1 := Arg1; + END_IF; + IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg2) THEN + Mag2 := Arg2\IfcVector.Magnitude; + Vec2 := Arg2\IfcVector.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 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg1) THEN + Mag1 := Arg1\IfcVector.Magnitude; + Vec1 := Arg1\IfcVector.Orientation; + ELSE + Mag1 := 1.0; + Vec1 := Arg1; + END_IF; + IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg2) THEN + Mag2 := Arg2\IfcVector.Magnitude; + Vec2 := Arg2\IfcVector.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; diff --git a/UnitTests/Utilities/ScreenShotMaker/src/main.cpp b/UnitTests/Utilities/ScreenShotMaker/src/main.cpp index 395473c83..34082114d 100644 --- a/UnitTests/Utilities/ScreenShotMaker/src/main.cpp +++ b/UnitTests/Utilities/ScreenShotMaker/src/main.cpp @@ -81,6 +81,10 @@ using OpenInfraPlatform::Core::IfcGeometryConverter::IfcPeekStepReader; #include #endif +#ifdef OIP_MODULE_EARLYBINDING_IFC4X3 +#include +#include +#endif template buw::ReferenceCounted setUpRenderer( @@ -219,6 +223,14 @@ int main(int argc, char **argv) { #else // OIP_MODULE_EARLYBINDING_IFC4X3_RC4 throw std::exception("IFC4X3_RC4 not compiled"); #endif //OIP_MODULE_EARLYBINDING_IFC4X3_RC4 + } + else if (ifcSchema == IfcPeekStepReader::IfcSchema::IFC4X3) { +#ifdef OIP_MODULE_EARLYBINDING_IFC4X3 + renderer = + setUpRenderer(filepath); +#else // OIP_MODULE_EARLYBINDING_IFC4X3 + throw std::exception("IFC4X3 not compiled"); +#endif //OIP_MODULE_EARLYBINDING_IFC4X3 } else {