diff options
author | sanine <sanine.not@pm.me> | 2022-04-16 11:55:09 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2022-04-16 11:55:09 -0500 |
commit | db81b925d776103326128bf629cbdda576a223e7 (patch) | |
tree | 58bea8155c686733310009f6bed7363f91fbeb9d /libs/assimp/scripts/StepImporter/schema_ifc2x3.exp | |
parent | 55860037b14fb3893ba21cf2654c83d349cc1082 (diff) |
move 3rd-party librarys into libs/ and add built-in honeysuckle
Diffstat (limited to 'libs/assimp/scripts/StepImporter/schema_ifc2x3.exp')
-rw-r--r-- | libs/assimp/scripts/StepImporter/schema_ifc2x3.exp | 9571 |
1 files changed, 9571 insertions, 0 deletions
diff --git a/libs/assimp/scripts/StepImporter/schema_ifc2x3.exp b/libs/assimp/scripts/StepImporter/schema_ifc2x3.exp new file mode 100644 index 0000000..ae978a6 --- /dev/null +++ b/libs/assimp/scripts/StepImporter/schema_ifc2x3.exp @@ -0,0 +1,9571 @@ +(*
+Copyright by:
+International Alliance for Interoperability, 1996-2005
+
+All rights reserved. No part of this documentation may be
+reproduced, stored in a retrieval system, or transmitted
+in any form or by any means, without the prior written
+permission of the owner.
+
+Contents:
+full IFC object model EXPRESS definitions for the IFC2x Edition 3 final version
+
+
+- express longform distribution
+- compiled for EXPRESS version 1 technical corrigendum 2
+
+Issue date:
+December 15, 2005
+
+Development Team:
+Modeling Support Group of the
+International Alliance for Interoperability
+compiled by Thomas Liebich tl@aec3.com
+*)
+SCHEMA IFC2X3;
+
+TYPE IfcAbsorbedDoseMeasure = REAL;
+END_TYPE;
+
+TYPE IfcAccelerationMeasure = REAL;
+END_TYPE;
+
+TYPE IfcAmountOfSubstanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcAngularVelocityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcAreaMeasure = REAL;
+END_TYPE;
+
+TYPE IfcBoolean = BOOLEAN;
+END_TYPE;
+
+TYPE IfcBoxAlignment = IfcLabel;
+ WHERE
+ WR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right'];
+END_TYPE;
+
+TYPE IfcComplexNumber = ARRAY [1:2] OF REAL;
+END_TYPE;
+
+TYPE IfcCompoundPlaneAngleMeasure = LIST [3:3] OF INTEGER;
+ WHERE
+ WR1 : { -360 <= SELF[1] < 360 };
+ WR2 : { -60 <= SELF[2] < 60 };
+ WR3 : { -60 <= SELF[3] < 60 };
+ WR4 : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0)) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0));
+END_TYPE;
+
+TYPE IfcContextDependentMeasure = REAL;
+END_TYPE;
+
+TYPE IfcCountMeasure = NUMBER;
+END_TYPE;
+
+TYPE IfcCurvatureMeasure = REAL;
+END_TYPE;
+
+TYPE IfcDayInMonthNumber = INTEGER;
+END_TYPE;
+
+TYPE IfcDaylightSavingHour = INTEGER;
+ WHERE
+ WR1 : { 0 <= SELF <= 2 };
+END_TYPE;
+
+TYPE IfcDescriptiveMeasure = STRING;
+END_TYPE;
+
+TYPE IfcDimensionCount = INTEGER;
+ WHERE
+ WR1 : { 0 < SELF <= 3 };
+END_TYPE;
+
+TYPE IfcDoseEquivalentMeasure = REAL;
+END_TYPE;
+
+TYPE IfcDynamicViscosityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcElectricCapacitanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcElectricChargeMeasure = REAL;
+END_TYPE;
+
+TYPE IfcElectricConductanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcElectricCurrentMeasure = REAL;
+END_TYPE;
+
+TYPE IfcElectricResistanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcElectricVoltageMeasure = REAL;
+END_TYPE;
+
+TYPE IfcEnergyMeasure = REAL;
+END_TYPE;
+
+TYPE IfcFontStyle = STRING;
+ WHERE
+ WR1 : SELF IN ['normal','italic','oblique'];
+END_TYPE;
+
+TYPE IfcFontVariant = STRING;
+ WHERE
+ WR1 : SELF IN ['normal','small-caps'];
+END_TYPE;
+
+TYPE IfcFontWeight = STRING;
+ WHERE
+ WR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900'];
+END_TYPE;
+
+TYPE IfcForceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcFrequencyMeasure = REAL;
+END_TYPE;
+
+TYPE IfcGloballyUniqueId = STRING(22) FIXED;
+END_TYPE;
+
+TYPE IfcHeatFluxDensityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcHeatingValueMeasure = REAL;
+ WHERE
+ WR1 : SELF > 0.;
+END_TYPE;
+
+TYPE IfcHourInDay = INTEGER;
+ WHERE
+ WR1 : { 0 <= SELF < 24 };
+END_TYPE;
+
+TYPE IfcIdentifier = STRING;
+END_TYPE;
+
+TYPE IfcIlluminanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcInductanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcInteger = INTEGER;
+END_TYPE;
+
+TYPE IfcIntegerCountRateMeasure = INTEGER;
+END_TYPE;
+
+TYPE IfcIonConcentrationMeasure = REAL;
+END_TYPE;
+
+TYPE IfcIsothermalMoistureCapacityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcKinematicViscosityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLabel = STRING;
+END_TYPE;
+
+TYPE IfcLengthMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLinearForceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLinearMomentMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLinearStiffnessMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLinearVelocityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLogical = LOGICAL;
+END_TYPE;
+
+TYPE IfcLuminousFluxMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLuminousIntensityDistributionMeasure = REAL;
+END_TYPE;
+
+TYPE IfcLuminousIntensityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMagneticFluxDensityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMagneticFluxMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMassDensityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMassFlowRateMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMassMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMassPerLengthMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMinuteInHour = INTEGER;
+ WHERE
+ WR1 : {0 <= SELF <= 59 };
+END_TYPE;
+
+TYPE IfcModulusOfElasticityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;
+END_TYPE;
+
+TYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;
+END_TYPE;
+
+TYPE IfcModulusOfSubgradeReactionMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMoistureDiffusivityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMolecularWeightMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMomentOfInertiaMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMonetaryMeasure = REAL;
+END_TYPE;
+
+TYPE IfcMonthInYearNumber = INTEGER;
+ WHERE
+ WR1 : { 1<= SELF <= 12 };
+END_TYPE;
+
+TYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;
+ WHERE
+ WR1 : {0.0 <= SELF <= 1.0};
+END_TYPE;
+
+TYPE IfcNumericMeasure = NUMBER;
+END_TYPE;
+
+TYPE IfcPHMeasure = REAL;
+ WHERE
+ WR21 : {0.0 <= SELF <= 14.0};
+END_TYPE;
+
+TYPE IfcParameterValue = REAL;
+END_TYPE;
+
+TYPE IfcPlanarForceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcPlaneAngleMeasure = REAL;
+END_TYPE;
+
+TYPE IfcPositiveLengthMeasure = IfcLengthMeasure;
+ WHERE
+ WR1 : SELF > 0.;
+END_TYPE;
+
+TYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;
+ WHERE
+ WR1 : SELF > 0.;
+END_TYPE;
+
+TYPE IfcPositiveRatioMeasure = IfcRatioMeasure;
+ WHERE
+ WR1 : SELF > 0.;
+END_TYPE;
+
+TYPE IfcPowerMeasure = REAL;
+END_TYPE;
+
+TYPE IfcPresentableText = STRING;
+END_TYPE;
+
+TYPE IfcPressureMeasure = REAL;
+END_TYPE;
+
+TYPE IfcRadioActivityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcRatioMeasure = REAL;
+END_TYPE;
+
+TYPE IfcReal = REAL;
+END_TYPE;
+
+TYPE IfcRotationalFrequencyMeasure = REAL;
+END_TYPE;
+
+TYPE IfcRotationalMassMeasure = REAL;
+END_TYPE;
+
+TYPE IfcRotationalStiffnessMeasure = REAL;
+END_TYPE;
+
+TYPE IfcSecondInMinute = REAL;
+ WHERE
+ WR1 : { 0. <= SELF < 60. };
+END_TYPE;
+
+TYPE IfcSectionModulusMeasure = REAL;
+END_TYPE;
+
+TYPE IfcSectionalAreaIntegralMeasure = REAL;
+END_TYPE;
+
+TYPE IfcShearModulusMeasure = REAL;
+END_TYPE;
+
+TYPE IfcSolidAngleMeasure = REAL;
+END_TYPE;
+
+TYPE IfcSoundPowerMeasure = REAL;
+END_TYPE;
+
+TYPE IfcSoundPressureMeasure = REAL;
+END_TYPE;
+
+TYPE IfcSpecificHeatCapacityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcSpecularExponent = REAL;
+END_TYPE;
+
+TYPE IfcSpecularRoughness = REAL;
+ WHERE
+ WR1 : {0.0 <= SELF <= 1.0};
+END_TYPE;
+
+TYPE IfcTemperatureGradientMeasure = REAL;
+END_TYPE;
+
+TYPE IfcText = STRING;
+END_TYPE;
+
+TYPE IfcTextAlignment = STRING;
+ WHERE
+ WR1 : SELF IN ['left', 'right', 'center', 'justify'];
+END_TYPE;
+
+TYPE IfcTextDecoration = STRING;
+ WHERE
+ WR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink'];
+END_TYPE;
+
+TYPE IfcTextFontName = STRING;
+END_TYPE;
+
+TYPE IfcTextTransformation = STRING;
+ WHERE
+ WR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none'];
+END_TYPE;
+
+TYPE IfcThermalAdmittanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcThermalConductivityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcThermalExpansionCoefficientMeasure = REAL;
+END_TYPE;
+
+TYPE IfcThermalResistanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcThermalTransmittanceMeasure = REAL;
+END_TYPE;
+
+TYPE IfcThermodynamicTemperatureMeasure = REAL;
+END_TYPE;
+
+TYPE IfcTimeMeasure = REAL;
+END_TYPE;
+
+TYPE IfcTimeStamp = INTEGER;
+END_TYPE;
+
+TYPE IfcTorqueMeasure = REAL;
+END_TYPE;
+
+TYPE IfcVaporPermeabilityMeasure = REAL;
+END_TYPE;
+
+TYPE IfcVolumeMeasure = REAL;
+END_TYPE;
+
+TYPE IfcVolumetricFlowRateMeasure = REAL;
+END_TYPE;
+
+TYPE IfcWarpingConstantMeasure = REAL;
+END_TYPE;
+
+TYPE IfcWarpingMomentMeasure = REAL;
+END_TYPE;
+
+TYPE IfcYearNumber = INTEGER;
+END_TYPE;
+
+TYPE IfcActionSourceTypeEnum = ENUMERATION OF
+ (DEAD_LOAD_G
+ ,COMPLETION_G1
+ ,LIVE_LOAD_Q
+ ,SNOW_S
+ ,WIND_W
+ ,PRESTRESSING_P
+ ,SETTLEMENT_U
+ ,TEMPERATURE_T
+ ,EARTHQUAKE_E
+ ,FIRE
+ ,IMPULSE
+ ,IMPACT
+ ,TRANSPORT
+ ,ERECTION
+ ,PROPPING
+ ,SYSTEM_IMPERFECTION
+ ,SHRINKAGE
+ ,CREEP
+ ,LACK_OF_FIT
+ ,BUOYANCY
+ ,ICE
+ ,CURRENT
+ ,WAVE
+ ,RAIN
+ ,BRAKES
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcActionTypeEnum = ENUMERATION OF
+ (PERMANENT_G
+ ,VARIABLE_Q
+ ,EXTRAORDINARY_A
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcActuatorTypeEnum = ENUMERATION OF
+ (ELECTRICACTUATOR
+ ,HANDOPERATEDACTUATOR
+ ,HYDRAULICACTUATOR
+ ,PNEUMATICACTUATOR
+ ,THERMOSTATICACTUATOR
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcAddressTypeEnum = ENUMERATION OF
+ (OFFICE
+ ,SITE
+ ,HOME
+ ,DISTRIBUTIONPOINT
+ ,USERDEFINED);
+END_TYPE;
+
+TYPE IfcAheadOrBehind = ENUMERATION OF
+ (AHEAD
+ ,BEHIND);
+END_TYPE;
+
+TYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF
+ (CONSTANTFLOW
+ ,VARIABLEFLOWPRESSUREDEPENDANT
+ ,VARIABLEFLOWPRESSUREINDEPENDANT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcAirTerminalTypeEnum = ENUMERATION OF
+ (GRILLE
+ ,REGISTER
+ ,DIFFUSER
+ ,EYEBALL
+ ,IRIS
+ ,LINEARGRILLE
+ ,LINEARDIFFUSER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF
+ (FIXEDPLATECOUNTERFLOWEXCHANGER
+ ,FIXEDPLATECROSSFLOWEXCHANGER
+ ,FIXEDPLATEPARALLELFLOWEXCHANGER
+ ,ROTARYWHEEL
+ ,RUNAROUNDCOILLOOP
+ ,HEATPIPE
+ ,TWINTOWERENTHALPYRECOVERYLOOPS
+ ,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS
+ ,THERMOSIPHONCOILTYPEHEATEXCHANGERS
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcAlarmTypeEnum = ENUMERATION OF
+ (BELL
+ ,BREAKGLASSBUTTON
+ ,LIGHT
+ ,MANUALPULLBOX
+ ,SIREN
+ ,WHISTLE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcAnalysisModelTypeEnum = ENUMERATION OF
+ (IN_PLANE_LOADING_2D
+ ,OUT_PLANE_LOADING_2D
+ ,LOADING_3D
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF
+ (FIRST_ORDER_THEORY
+ ,SECOND_ORDER_THEORY
+ ,THIRD_ORDER_THEORY
+ ,FULL_NONLINEAR_THEORY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcArithmeticOperatorEnum = ENUMERATION OF
+ (ADD
+ ,DIVIDE
+ ,MULTIPLY
+ ,SUBTRACT);
+END_TYPE;
+
+TYPE IfcAssemblyPlaceEnum = ENUMERATION OF
+ (SITE
+ ,FACTORY
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcBSplineCurveForm = ENUMERATION OF
+ (POLYLINE_FORM
+ ,CIRCULAR_ARC
+ ,ELLIPTIC_ARC
+ ,PARABOLIC_ARC
+ ,HYPERBOLIC_ARC
+ ,UNSPECIFIED);
+END_TYPE;
+
+TYPE IfcBeamTypeEnum = ENUMERATION OF
+ (BEAM
+ ,JOIST
+ ,LINTEL
+ ,T_BEAM
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcBenchmarkEnum = ENUMERATION OF
+ (GREATERTHAN
+ ,GREATERTHANOREQUALTO
+ ,LESSTHAN
+ ,LESSTHANOREQUALTO
+ ,EQUALTO
+ ,NOTEQUALTO);
+END_TYPE;
+
+TYPE IfcBoilerTypeEnum = ENUMERATION OF
+ (WATER
+ ,STEAM
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcBooleanOperator = ENUMERATION OF
+ (UNION
+ ,INTERSECTION
+ ,DIFFERENCE);
+END_TYPE;
+
+TYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF
+ (USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF
+ (BEND
+ ,CROSS
+ ,REDUCER
+ ,TEE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF
+ (CABLELADDERSEGMENT
+ ,CABLETRAYSEGMENT
+ ,CABLETRUNKINGSEGMENT
+ ,CONDUITSEGMENT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCableSegmentTypeEnum = ENUMERATION OF
+ (CABLESEGMENT
+ ,CONDUCTORSEGMENT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcChangeActionEnum = ENUMERATION OF
+ (NOCHANGE
+ ,MODIFIED
+ ,ADDED
+ ,DELETED
+ ,MODIFIEDADDED
+ ,MODIFIEDDELETED);
+END_TYPE;
+
+TYPE IfcChillerTypeEnum = ENUMERATION OF
+ (AIRCOOLED
+ ,WATERCOOLED
+ ,HEATRECOVERY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCoilTypeEnum = ENUMERATION OF
+ (DXCOOLINGCOIL
+ ,WATERCOOLINGCOIL
+ ,STEAMHEATINGCOIL
+ ,WATERHEATINGCOIL
+ ,ELECTRICHEATINGCOIL
+ ,GASHEATINGCOIL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcColumnTypeEnum = ENUMERATION OF
+ (COLUMN
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCompressorTypeEnum = ENUMERATION OF
+ (DYNAMIC
+ ,RECIPROCATING
+ ,ROTARY
+ ,SCROLL
+ ,TROCHOIDAL
+ ,SINGLESTAGE
+ ,BOOSTER
+ ,OPENTYPE
+ ,HERMETIC
+ ,SEMIHERMETIC
+ ,WELDEDSHELLHERMETIC
+ ,ROLLINGPISTON
+ ,ROTARYVANE
+ ,SINGLESCREW
+ ,TWINSCREW
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCondenserTypeEnum = ENUMERATION OF
+ (WATERCOOLEDSHELLTUBE
+ ,WATERCOOLEDSHELLCOIL
+ ,WATERCOOLEDTUBEINTUBE
+ ,WATERCOOLEDBRAZEDPLATE
+ ,AIRCOOLED
+ ,EVAPORATIVECOOLED
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcConnectionTypeEnum = ENUMERATION OF
+ (ATPATH
+ ,ATSTART
+ ,ATEND
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcConstraintEnum = ENUMERATION OF
+ (HARD
+ ,SOFT
+ ,ADVISORY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcControllerTypeEnum = ENUMERATION OF
+ (FLOATING
+ ,PROPORTIONAL
+ ,PROPORTIONALINTEGRAL
+ ,PROPORTIONALINTEGRALDERIVATIVE
+ ,TIMEDTWOPOSITION
+ ,TWOPOSITION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCooledBeamTypeEnum = ENUMERATION OF
+ (ACTIVE
+ ,PASSIVE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCoolingTowerTypeEnum = ENUMERATION OF
+ (NATURALDRAFT
+ ,MECHANICALINDUCEDDRAFT
+ ,MECHANICALFORCEDDRAFT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCostScheduleTypeEnum = ENUMERATION OF
+ (BUDGET
+ ,COSTPLAN
+ ,ESTIMATE
+ ,TENDER
+ ,PRICEDBILLOFQUANTITIES
+ ,UNPRICEDBILLOFQUANTITIES
+ ,SCHEDULEOFRATES
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCoveringTypeEnum = ENUMERATION OF
+ (CEILING
+ ,FLOORING
+ ,CLADDING
+ ,ROOFING
+ ,INSULATION
+ ,MEMBRANE
+ ,SLEEVING
+ ,WRAPPING
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcCurrencyEnum = ENUMERATION OF
+ (AED
+ ,AES
+ ,ATS
+ ,AUD
+ ,BBD
+ ,BEG
+ ,BGL
+ ,BHD
+ ,BMD
+ ,BND
+ ,BRL
+ ,BSD
+ ,BWP
+ ,BZD
+ ,CAD
+ ,CBD
+ ,CHF
+ ,CLP
+ ,CNY
+ ,CYS
+ ,CZK
+ ,DDP
+ ,DEM
+ ,DKK
+ ,EGL
+ ,EST
+ ,EUR
+ ,FAK
+ ,FIM
+ ,FJD
+ ,FKP
+ ,FRF
+ ,GBP
+ ,GIP
+ ,GMD
+ ,GRX
+ ,HKD
+ ,HUF
+ ,ICK
+ ,IDR
+ ,ILS
+ ,INR
+ ,IRP
+ ,ITL
+ ,JMD
+ ,JOD
+ ,JPY
+ ,KES
+ ,KRW
+ ,KWD
+ ,KYD
+ ,LKR
+ ,LUF
+ ,MTL
+ ,MUR
+ ,MXN
+ ,MYR
+ ,NLG
+ ,NZD
+ ,OMR
+ ,PGK
+ ,PHP
+ ,PKR
+ ,PLN
+ ,PTN
+ ,QAR
+ ,RUR
+ ,SAR
+ ,SCR
+ ,SEK
+ ,SGD
+ ,SKP
+ ,THB
+ ,TRL
+ ,TTD
+ ,TWD
+ ,USD
+ ,VEB
+ ,VND
+ ,XEU
+ ,ZAR
+ ,ZWD
+ ,NOK);
+END_TYPE;
+
+TYPE IfcCurtainWallTypeEnum = ENUMERATION OF
+ (USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDamperTypeEnum = ENUMERATION OF
+ (CONTROLDAMPER
+ ,FIREDAMPER
+ ,SMOKEDAMPER
+ ,FIRESMOKEDAMPER
+ ,BACKDRAFTDAMPER
+ ,RELIEFDAMPER
+ ,BLASTDAMPER
+ ,GRAVITYDAMPER
+ ,GRAVITYRELIEFDAMPER
+ ,BALANCINGDAMPER
+ ,FUMEHOODEXHAUST
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDataOriginEnum = ENUMERATION OF
+ (MEASURED
+ ,PREDICTED
+ ,SIMULATED
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDerivedUnitEnum = ENUMERATION OF
+ (ANGULARVELOCITYUNIT
+ ,COMPOUNDPLANEANGLEUNIT
+ ,DYNAMICVISCOSITYUNIT
+ ,HEATFLUXDENSITYUNIT
+ ,INTEGERCOUNTRATEUNIT
+ ,ISOTHERMALMOISTURECAPACITYUNIT
+ ,KINEMATICVISCOSITYUNIT
+ ,LINEARVELOCITYUNIT
+ ,MASSDENSITYUNIT
+ ,MASSFLOWRATEUNIT
+ ,MOISTUREDIFFUSIVITYUNIT
+ ,MOLECULARWEIGHTUNIT
+ ,SPECIFICHEATCAPACITYUNIT
+ ,THERMALADMITTANCEUNIT
+ ,THERMALCONDUCTANCEUNIT
+ ,THERMALRESISTANCEUNIT
+ ,THERMALTRANSMITTANCEUNIT
+ ,VAPORPERMEABILITYUNIT
+ ,VOLUMETRICFLOWRATEUNIT
+ ,ROTATIONALFREQUENCYUNIT
+ ,TORQUEUNIT
+ ,MOMENTOFINERTIAUNIT
+ ,LINEARMOMENTUNIT
+ ,LINEARFORCEUNIT
+ ,PLANARFORCEUNIT
+ ,MODULUSOFELASTICITYUNIT
+ ,SHEARMODULUSUNIT
+ ,LINEARSTIFFNESSUNIT
+ ,ROTATIONALSTIFFNESSUNIT
+ ,MODULUSOFSUBGRADEREACTIONUNIT
+ ,ACCELERATIONUNIT
+ ,CURVATUREUNIT
+ ,HEATINGVALUEUNIT
+ ,IONCONCENTRATIONUNIT
+ ,LUMINOUSINTENSITYDISTRIBUTIONUNIT
+ ,MASSPERLENGTHUNIT
+ ,MODULUSOFLINEARSUBGRADEREACTIONUNIT
+ ,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT
+ ,PHUNIT
+ ,ROTATIONALMASSUNIT
+ ,SECTIONAREAINTEGRALUNIT
+ ,SECTIONMODULUSUNIT
+ ,SOUNDPOWERUNIT
+ ,SOUNDPRESSUREUNIT
+ ,TEMPERATUREGRADIENTUNIT
+ ,THERMALEXPANSIONCOEFFICIENTUNIT
+ ,WARPINGCONSTANTUNIT
+ ,WARPINGMOMENTUNIT
+ ,USERDEFINED);
+END_TYPE;
+
+TYPE IfcDimensionExtentUsage = ENUMERATION OF
+ (ORIGIN
+ ,TARGET);
+END_TYPE;
+
+TYPE IfcDirectionSenseEnum = ENUMERATION OF
+ (POSITIVE
+ ,NEGATIVE);
+END_TYPE;
+
+TYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF
+ (FORMEDDUCT
+ ,INSPECTIONCHAMBER
+ ,INSPECTIONPIT
+ ,MANHOLE
+ ,METERCHAMBER
+ ,SUMP
+ ,TRENCH
+ ,VALVECHAMBER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDocumentConfidentialityEnum = ENUMERATION OF
+ (PUBLIC
+ ,RESTRICTED
+ ,CONFIDENTIAL
+ ,PERSONAL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDocumentStatusEnum = ENUMERATION OF
+ (DRAFT
+ ,FINALDRAFT
+ ,FINAL
+ ,REVISION
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDoorPanelOperationEnum = ENUMERATION OF
+ (SWINGING
+ ,DOUBLE_ACTING
+ ,SLIDING
+ ,FOLDING
+ ,REVOLVING
+ ,ROLLINGUP
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDoorPanelPositionEnum = ENUMERATION OF
+ (LEFT
+ ,MIDDLE
+ ,RIGHT
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDoorStyleConstructionEnum = ENUMERATION OF
+ (ALUMINIUM
+ ,HIGH_GRADE_STEEL
+ ,STEEL
+ ,WOOD
+ ,ALUMINIUM_WOOD
+ ,ALUMINIUM_PLASTIC
+ ,PLASTIC
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDoorStyleOperationEnum = ENUMERATION OF
+ (SINGLE_SWING_LEFT
+ ,SINGLE_SWING_RIGHT
+ ,DOUBLE_DOOR_SINGLE_SWING
+ ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT
+ ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT
+ ,DOUBLE_SWING_LEFT
+ ,DOUBLE_SWING_RIGHT
+ ,DOUBLE_DOOR_DOUBLE_SWING
+ ,SLIDING_TO_LEFT
+ ,SLIDING_TO_RIGHT
+ ,DOUBLE_DOOR_SLIDING
+ ,FOLDING_TO_LEFT
+ ,FOLDING_TO_RIGHT
+ ,DOUBLE_DOOR_FOLDING
+ ,REVOLVING
+ ,ROLLINGUP
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDuctFittingTypeEnum = ENUMERATION OF
+ (BEND
+ ,CONNECTOR
+ ,ENTRY
+ ,EXIT
+ ,JUNCTION
+ ,OBSTRUCTION
+ ,TRANSITION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDuctSegmentTypeEnum = ENUMERATION OF
+ (RIGIDSEGMENT
+ ,FLEXIBLESEGMENT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcDuctSilencerTypeEnum = ENUMERATION OF
+ (FLATOVAL
+ ,RECTANGULAR
+ ,ROUND
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricApplianceTypeEnum = ENUMERATION OF
+ (COMPUTER
+ ,DIRECTWATERHEATER
+ ,DISHWASHER
+ ,ELECTRICCOOKER
+ ,ELECTRICHEATER
+ ,FACSIMILE
+ ,FREESTANDINGFAN
+ ,FREEZER
+ ,FRIDGE_FREEZER
+ ,HANDDRYER
+ ,INDIRECTWATERHEATER
+ ,MICROWAVE
+ ,PHOTOCOPIER
+ ,PRINTER
+ ,REFRIGERATOR
+ ,RADIANTHEATER
+ ,SCANNER
+ ,TELEPHONE
+ ,TUMBLEDRYER
+ ,TV
+ ,VENDINGMACHINE
+ ,WASHINGMACHINE
+ ,WATERHEATER
+ ,WATERCOOLER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricCurrentEnum = ENUMERATION OF
+ (ALTERNATING
+ ,DIRECT
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricDistributionPointFunctionEnum = ENUMERATION OF
+ (ALARMPANEL
+ ,CONSUMERUNIT
+ ,CONTROLPANEL
+ ,DISTRIBUTIONBOARD
+ ,GASDETECTORPANEL
+ ,INDICATORPANEL
+ ,MIMICPANEL
+ ,MOTORCONTROLCENTRE
+ ,SWITCHBOARD
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF
+ (BATTERY
+ ,CAPACITORBANK
+ ,HARMONICFILTER
+ ,INDUCTORBANK
+ ,UPS
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF
+ (USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricHeaterTypeEnum = ENUMERATION OF
+ (ELECTRICPOINTHEATER
+ ,ELECTRICCABLEHEATER
+ ,ELECTRICMATHEATER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricMotorTypeEnum = ENUMERATION OF
+ (DC
+ ,INDUCTION
+ ,POLYPHASE
+ ,RELUCTANCESYNCHRONOUS
+ ,SYNCHRONOUS
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF
+ (TIMECLOCK
+ ,TIMEDELAY
+ ,RELAY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElementAssemblyTypeEnum = ENUMERATION OF
+ (ACCESSORY_ASSEMBLY
+ ,ARCH
+ ,BEAM_GRID
+ ,BRACED_FRAME
+ ,GIRDER
+ ,REINFORCEMENT_UNIT
+ ,RIGID_FRAME
+ ,SLAB_FIELD
+ ,TRUSS
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcElementCompositionEnum = ENUMERATION OF
+ (COMPLEX
+ ,ELEMENT
+ ,PARTIAL);
+END_TYPE;
+
+TYPE IfcEnergySequenceEnum = ENUMERATION OF
+ (PRIMARY
+ ,SECONDARY
+ ,TERTIARY
+ ,AUXILIARY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcEnvironmentalImpactCategoryEnum = ENUMERATION OF
+ (COMBINEDVALUE
+ ,DISPOSAL
+ ,EXTRACTION
+ ,INSTALLATION
+ ,MANUFACTURE
+ ,TRANSPORTATION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF
+ (DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER
+ ,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER
+ ,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER
+ ,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER
+ ,DIRECTEVAPORATIVEAIRWASHER
+ ,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER
+ ,INDIRECTEVAPORATIVEWETCOIL
+ ,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER
+ ,INDIRECTDIRECTCOMBINATION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcEvaporatorTypeEnum = ENUMERATION OF
+ (DIRECTEXPANSIONSHELLANDTUBE
+ ,DIRECTEXPANSIONTUBEINTUBE
+ ,DIRECTEXPANSIONBRAZEDPLATE
+ ,FLOODEDSHELLANDTUBE
+ ,SHELLANDCOIL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcFanTypeEnum = ENUMERATION OF
+ (CENTRIFUGALFORWARDCURVED
+ ,CENTRIFUGALRADIAL
+ ,CENTRIFUGALBACKWARDINCLINEDCURVED
+ ,CENTRIFUGALAIRFOIL
+ ,TUBEAXIAL
+ ,VANEAXIAL
+ ,PROPELLORAXIAL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcFilterTypeEnum = ENUMERATION OF
+ (AIRPARTICLEFILTER
+ ,ODORFILTER
+ ,OILFILTER
+ ,STRAINER
+ ,WATERFILTER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF
+ (BREECHINGINLET
+ ,FIREHYDRANT
+ ,HOSEREEL
+ ,SPRINKLER
+ ,SPRINKLERDEFLECTOR
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcFlowDirectionEnum = ENUMERATION OF
+ (SOURCE
+ ,SINK
+ ,SOURCEANDSINK
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF
+ (PRESSUREGAUGE
+ ,THERMOMETER
+ ,AMMETER
+ ,FREQUENCYMETER
+ ,POWERFACTORMETER
+ ,PHASEANGLEMETER
+ ,VOLTMETER_PEAK
+ ,VOLTMETER_RMS
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcFlowMeterTypeEnum = ENUMERATION OF
+ (ELECTRICMETER
+ ,ENERGYMETER
+ ,FLOWMETER
+ ,GASMETER
+ ,OILMETER
+ ,WATERMETER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcFootingTypeEnum = ENUMERATION OF
+ (FOOTING_BEAM
+ ,PAD_FOOTING
+ ,PILE_CAP
+ ,STRIP_FOOTING
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcGasTerminalTypeEnum = ENUMERATION OF
+ (GASAPPLIANCE
+ ,GASBOOSTER
+ ,GASBURNER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcGeometricProjectionEnum = ENUMERATION OF
+ (GRAPH_VIEW
+ ,SKETCH_VIEW
+ ,MODEL_VIEW
+ ,PLAN_VIEW
+ ,REFLECTED_PLAN_VIEW
+ ,SECTION_VIEW
+ ,ELEVATION_VIEW
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcGlobalOrLocalEnum = ENUMERATION OF
+ (GLOBAL_COORDS
+ ,LOCAL_COORDS);
+END_TYPE;
+
+TYPE IfcHeatExchangerTypeEnum = ENUMERATION OF
+ (PLATE
+ ,SHELLANDTUBE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcHumidifierTypeEnum = ENUMERATION OF
+ (STEAMINJECTION
+ ,ADIABATICAIRWASHER
+ ,ADIABATICPAN
+ ,ADIABATICWETTEDELEMENT
+ ,ADIABATICATOMIZING
+ ,ADIABATICULTRASONIC
+ ,ADIABATICRIGIDMEDIA
+ ,ADIABATICCOMPRESSEDAIRNOZZLE
+ ,ASSISTEDELECTRIC
+ ,ASSISTEDNATURALGAS
+ ,ASSISTEDPROPANE
+ ,ASSISTEDBUTANE
+ ,ASSISTEDSTEAM
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcInternalOrExternalEnum = ENUMERATION OF
+ (INTERNAL
+ ,EXTERNAL
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcInventoryTypeEnum = ENUMERATION OF
+ (ASSETINVENTORY
+ ,SPACEINVENTORY
+ ,FURNITUREINVENTORY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcJunctionBoxTypeEnum = ENUMERATION OF
+ (USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcLampTypeEnum = ENUMERATION OF
+ (COMPACTFLUORESCENT
+ ,FLUORESCENT
+ ,HIGHPRESSUREMERCURY
+ ,HIGHPRESSURESODIUM
+ ,METALHALIDE
+ ,TUNGSTENFILAMENT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcLayerSetDirectionEnum = ENUMERATION OF
+ (AXIS1
+ ,AXIS2
+ ,AXIS3);
+END_TYPE;
+
+TYPE IfcLightDistributionCurveEnum = ENUMERATION OF
+ (TYPE_A
+ ,TYPE_B
+ ,TYPE_C
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcLightEmissionSourceEnum = ENUMERATION OF
+ (COMPACTFLUORESCENT
+ ,FLUORESCENT
+ ,HIGHPRESSUREMERCURY
+ ,HIGHPRESSURESODIUM
+ ,LIGHTEMITTINGDIODE
+ ,LOWPRESSURESODIUM
+ ,LOWVOLTAGEHALOGEN
+ ,MAINVOLTAGEHALOGEN
+ ,METALHALIDE
+ ,TUNGSTENFILAMENT
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcLightFixtureTypeEnum = ENUMERATION OF
+ (POINTSOURCE
+ ,DIRECTIONSOURCE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcLoadGroupTypeEnum = ENUMERATION OF
+ (LOAD_GROUP
+ ,LOAD_CASE
+ ,LOAD_COMBINATION_GROUP
+ ,LOAD_COMBINATION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcLogicalOperatorEnum = ENUMERATION OF
+ (LOGICALAND
+ ,LOGICALOR);
+END_TYPE;
+
+TYPE IfcMemberTypeEnum = ENUMERATION OF
+ (BRACE
+ ,CHORD
+ ,COLLAR
+ ,MEMBER
+ ,MULLION
+ ,PLATE
+ ,POST
+ ,PURLIN
+ ,RAFTER
+ ,STRINGER
+ ,STRUT
+ ,STUD
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcMotorConnectionTypeEnum = ENUMERATION OF
+ (BELTDRIVE
+ ,COUPLING
+ ,DIRECTDRIVE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcNullStyle = ENUMERATION OF
+ (NULL);
+END_TYPE;
+
+TYPE IfcObjectTypeEnum = ENUMERATION OF
+ (PRODUCT
+ ,PROCESS
+ ,CONTROL
+ ,RESOURCE
+ ,ACTOR
+ ,GROUP
+ ,PROJECT
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcObjectiveEnum = ENUMERATION OF
+ (CODECOMPLIANCE
+ ,DESIGNINTENT
+ ,HEALTHANDSAFETY
+ ,REQUIREMENT
+ ,SPECIFICATION
+ ,TRIGGERCONDITION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcOccupantTypeEnum = ENUMERATION OF
+ (ASSIGNEE
+ ,ASSIGNOR
+ ,LESSEE
+ ,LESSOR
+ ,LETTINGAGENT
+ ,OWNER
+ ,TENANT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcOutletTypeEnum = ENUMERATION OF
+ (AUDIOVISUALOUTLET
+ ,COMMUNICATIONSOUTLET
+ ,POWEROUTLET
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF
+ (GRILL
+ ,LOUVER
+ ,SCREEN
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF
+ (PHYSICAL
+ ,VIRTUAL
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPileConstructionEnum = ENUMERATION OF
+ (CAST_IN_PLACE
+ ,COMPOSITE
+ ,PRECAST_CONCRETE
+ ,PREFAB_STEEL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPileTypeEnum = ENUMERATION OF
+ (COHESION
+ ,FRICTION
+ ,SUPPORT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPipeFittingTypeEnum = ENUMERATION OF
+ (BEND
+ ,CONNECTOR
+ ,ENTRY
+ ,EXIT
+ ,JUNCTION
+ ,OBSTRUCTION
+ ,TRANSITION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPipeSegmentTypeEnum = ENUMERATION OF
+ (FLEXIBLESEGMENT
+ ,RIGIDSEGMENT
+ ,GUTTER
+ ,SPOOL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPlateTypeEnum = ENUMERATION OF
+ (CURTAIN_PANEL
+ ,SHEET
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcProcedureTypeEnum = ENUMERATION OF
+ (ADVICE_CAUTION
+ ,ADVICE_NOTE
+ ,ADVICE_WARNING
+ ,CALIBRATION
+ ,DIAGNOSTIC
+ ,SHUTDOWN
+ ,STARTUP
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcProfileTypeEnum = ENUMERATION OF
+ (CURVE
+ ,AREA);
+END_TYPE;
+
+TYPE IfcProjectOrderRecordTypeEnum = ENUMERATION OF
+ (CHANGE
+ ,MAINTENANCE
+ ,MOVE
+ ,PURCHASE
+ ,WORK
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcProjectOrderTypeEnum = ENUMERATION OF
+ (CHANGEORDER
+ ,MAINTENANCEWORKORDER
+ ,MOVEORDER
+ ,PURCHASEORDER
+ ,WORKORDER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF
+ (PROJECTED_LENGTH
+ ,TRUE_LENGTH);
+END_TYPE;
+
+TYPE IfcPropertySourceEnum = ENUMERATION OF
+ (DESIGN
+ ,DESIGNMAXIMUM
+ ,DESIGNMINIMUM
+ ,SIMULATED
+ ,ASBUILT
+ ,COMMISSIONING
+ ,MEASURED
+ ,USERDEFINED
+ ,NOTKNOWN);
+END_TYPE;
+
+TYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF
+ (FUSEDISCONNECTOR
+ ,CIRCUITBREAKER
+ ,EARTHFAILUREDEVICE
+ ,RESIDUALCURRENTCIRCUITBREAKER
+ ,RESIDUALCURRENTSWITCH
+ ,VARISTOR
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcPumpTypeEnum = ENUMERATION OF
+ (CIRCULATOR
+ ,ENDSUCTION
+ ,SPLITCASE
+ ,VERTICALINLINE
+ ,VERTICALTURBINE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcRailingTypeEnum = ENUMERATION OF
+ (HANDRAIL
+ ,GUARDRAIL
+ ,BALUSTRADE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcRampFlightTypeEnum = ENUMERATION OF
+ (STRAIGHT
+ ,SPIRAL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcRampTypeEnum = ENUMERATION OF
+ (STRAIGHT_RUN_RAMP
+ ,TWO_STRAIGHT_RUN_RAMP
+ ,QUARTER_TURN_RAMP
+ ,TWO_QUARTER_TURN_RAMP
+ ,HALF_TURN_RAMP
+ ,SPIRAL_RAMP
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcReflectanceMethodEnum = ENUMERATION OF
+ (BLINN
+ ,FLAT
+ ,GLASS
+ ,MATT
+ ,METAL
+ ,MIRROR
+ ,PHONG
+ ,PLASTIC
+ ,STRAUSS
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcReinforcingBarRoleEnum = ENUMERATION OF
+ (MAIN
+ ,SHEAR
+ ,LIGATURE
+ ,STUD
+ ,PUNCHING
+ ,EDGE
+ ,RING
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF
+ (PLAIN
+ ,TEXTURED);
+END_TYPE;
+
+TYPE IfcResourceConsumptionEnum = ENUMERATION OF
+ (CONSUMED
+ ,PARTIALLYCONSUMED
+ ,NOTCONSUMED
+ ,OCCUPIED
+ ,PARTIALLYOCCUPIED
+ ,NOTOCCUPIED
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcRibPlateDirectionEnum = ENUMERATION OF
+ (DIRECTION_X
+ ,DIRECTION_Y);
+END_TYPE;
+
+TYPE IfcRoleEnum = ENUMERATION OF
+ (SUPPLIER
+ ,MANUFACTURER
+ ,CONTRACTOR
+ ,SUBCONTRACTOR
+ ,ARCHITECT
+ ,STRUCTURALENGINEER
+ ,COSTENGINEER
+ ,CLIENT
+ ,BUILDINGOWNER
+ ,BUILDINGOPERATOR
+ ,MECHANICALENGINEER
+ ,ELECTRICALENGINEER
+ ,PROJECTMANAGER
+ ,FACILITIESMANAGER
+ ,CIVILENGINEER
+ ,COMISSIONINGENGINEER
+ ,ENGINEER
+ ,OWNER
+ ,CONSULTANT
+ ,CONSTRUCTIONMANAGER
+ ,FIELDCONSTRUCTIONMANAGER
+ ,RESELLER
+ ,USERDEFINED);
+END_TYPE;
+
+TYPE IfcRoofTypeEnum = ENUMERATION OF
+ (FLAT_ROOF
+ ,SHED_ROOF
+ ,GABLE_ROOF
+ ,HIP_ROOF
+ ,HIPPED_GABLE_ROOF
+ ,GAMBREL_ROOF
+ ,MANSARD_ROOF
+ ,BARREL_ROOF
+ ,RAINBOW_ROOF
+ ,BUTTERFLY_ROOF
+ ,PAVILION_ROOF
+ ,DOME_ROOF
+ ,FREEFORM
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSIPrefix = ENUMERATION OF
+ (EXA
+ ,PETA
+ ,TERA
+ ,GIGA
+ ,MEGA
+ ,KILO
+ ,HECTO
+ ,DECA
+ ,DECI
+ ,CENTI
+ ,MILLI
+ ,MICRO
+ ,NANO
+ ,PICO
+ ,FEMTO
+ ,ATTO);
+END_TYPE;
+
+TYPE IfcSIUnitName = ENUMERATION OF
+ (AMPERE
+ ,BECQUEREL
+ ,CANDELA
+ ,COULOMB
+ ,CUBIC_METRE
+ ,DEGREE_CELSIUS
+ ,FARAD
+ ,GRAM
+ ,GRAY
+ ,HENRY
+ ,HERTZ
+ ,JOULE
+ ,KELVIN
+ ,LUMEN
+ ,LUX
+ ,METRE
+ ,MOLE
+ ,NEWTON
+ ,OHM
+ ,PASCAL
+ ,RADIAN
+ ,SECOND
+ ,SIEMENS
+ ,SIEVERT
+ ,SQUARE_METRE
+ ,STERADIAN
+ ,TESLA
+ ,VOLT
+ ,WATT
+ ,WEBER);
+END_TYPE;
+
+TYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF
+ (BATH
+ ,BIDET
+ ,CISTERN
+ ,SHOWER
+ ,SINK
+ ,SANITARYFOUNTAIN
+ ,TOILETPAN
+ ,URINAL
+ ,WASHHANDBASIN
+ ,WCSEAT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSectionTypeEnum = ENUMERATION OF
+ (UNIFORM
+ ,TAPERED);
+END_TYPE;
+
+TYPE IfcSensorTypeEnum = ENUMERATION OF
+ (CO2SENSOR
+ ,FIRESENSOR
+ ,FLOWSENSOR
+ ,GASSENSOR
+ ,HEATSENSOR
+ ,HUMIDITYSENSOR
+ ,LIGHTSENSOR
+ ,MOISTURESENSOR
+ ,MOVEMENTSENSOR
+ ,PRESSURESENSOR
+ ,SMOKESENSOR
+ ,SOUNDSENSOR
+ ,TEMPERATURESENSOR
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSequenceEnum = ENUMERATION OF
+ (START_START
+ ,START_FINISH
+ ,FINISH_START
+ ,FINISH_FINISH
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcServiceLifeFactorTypeEnum = ENUMERATION OF
+ (A_QUALITYOFCOMPONENTS
+ ,B_DESIGNLEVEL
+ ,C_WORKEXECUTIONLEVEL
+ ,D_INDOORENVIRONMENT
+ ,E_OUTDOORENVIRONMENT
+ ,F_INUSECONDITIONS
+ ,G_MAINTENANCELEVEL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcServiceLifeTypeEnum = ENUMERATION OF
+ (ACTUALSERVICELIFE
+ ,EXPECTEDSERVICELIFE
+ ,OPTIMISTICREFERENCESERVICELIFE
+ ,PESSIMISTICREFERENCESERVICELIFE
+ ,REFERENCESERVICELIFE);
+END_TYPE;
+
+TYPE IfcSlabTypeEnum = ENUMERATION OF
+ (FLOOR
+ ,ROOF
+ ,LANDING
+ ,BASESLAB
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSoundScaleEnum = ENUMERATION OF
+ (DBA
+ ,DBB
+ ,DBC
+ ,NC
+ ,NR
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF
+ (SECTIONALRADIATOR
+ ,PANELRADIATOR
+ ,TUBULARRADIATOR
+ ,CONVECTOR
+ ,BASEBOARDHEATER
+ ,FINNEDTUBEUNIT
+ ,UNITHEATER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSpaceTypeEnum = ENUMERATION OF
+ (USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcStackTerminalTypeEnum = ENUMERATION OF
+ (BIRDCAGE
+ ,COWL
+ ,RAINWATERHOPPER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcStairFlightTypeEnum = ENUMERATION OF
+ (STRAIGHT
+ ,WINDER
+ ,SPIRAL
+ ,CURVED
+ ,FREEFORM
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcStairTypeEnum = ENUMERATION OF
+ (STRAIGHT_RUN_STAIR
+ ,TWO_STRAIGHT_RUN_STAIR
+ ,QUARTER_WINDING_STAIR
+ ,QUARTER_TURN_STAIR
+ ,HALF_WINDING_STAIR
+ ,HALF_TURN_STAIR
+ ,TWO_QUARTER_WINDING_STAIR
+ ,TWO_QUARTER_TURN_STAIR
+ ,THREE_QUARTER_WINDING_STAIR
+ ,THREE_QUARTER_TURN_STAIR
+ ,SPIRAL_STAIR
+ ,DOUBLE_RETURN_STAIR
+ ,CURVED_RUN_STAIR
+ ,TWO_CURVED_RUN_STAIR
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcStateEnum = ENUMERATION OF
+ (READWRITE
+ ,READONLY
+ ,LOCKED
+ ,READWRITELOCKED
+ ,READONLYLOCKED);
+END_TYPE;
+
+TYPE IfcStructuralCurveTypeEnum = ENUMERATION OF
+ (RIGID_JOINED_MEMBER
+ ,PIN_JOINED_MEMBER
+ ,CABLE
+ ,TENSION_MEMBER
+ ,COMPRESSION_MEMBER
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcStructuralSurfaceTypeEnum = ENUMERATION OF
+ (BENDING_ELEMENT
+ ,MEMBRANE_ELEMENT
+ ,SHELL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSurfaceSide = ENUMERATION OF
+ (POSITIVE
+ ,NEGATIVE
+ ,BOTH);
+END_TYPE;
+
+TYPE IfcSurfaceTextureEnum = ENUMERATION OF
+ (BUMP
+ ,OPACITY
+ ,REFLECTION
+ ,SELFILLUMINATION
+ ,SHININESS
+ ,SPECULAR
+ ,TEXTURE
+ ,TRANSPARENCYMAP
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF
+ (CONTACTOR
+ ,EMERGENCYSTOP
+ ,STARTER
+ ,SWITCHDISCONNECTOR
+ ,TOGGLESWITCH
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTankTypeEnum = ENUMERATION OF
+ (PREFORMED
+ ,SECTIONAL
+ ,EXPANSION
+ ,PRESSUREVESSEL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTendonTypeEnum = ENUMERATION OF
+ (STRAND
+ ,WIRE
+ ,BAR
+ ,COATED
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTextPath = ENUMERATION OF
+ (LEFT
+ ,RIGHT
+ ,UP
+ ,DOWN);
+END_TYPE;
+
+TYPE IfcThermalLoadSourceEnum = ENUMERATION OF
+ (PEOPLE
+ ,LIGHTING
+ ,EQUIPMENT
+ ,VENTILATIONINDOORAIR
+ ,VENTILATIONOUTSIDEAIR
+ ,RECIRCULATEDAIR
+ ,EXHAUSTAIR
+ ,AIREXCHANGERATE
+ ,DRYBULBTEMPERATURE
+ ,RELATIVEHUMIDITY
+ ,INFILTRATION
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcThermalLoadTypeEnum = ENUMERATION OF
+ (SENSIBLE
+ ,LATENT
+ ,RADIANT
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF
+ (CONTINUOUS
+ ,DISCRETE
+ ,DISCRETEBINARY
+ ,PIECEWISEBINARY
+ ,PIECEWISECONSTANT
+ ,PIECEWISECONTINUOUS
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTimeSeriesScheduleTypeEnum = ENUMERATION OF
+ (ANNUAL
+ ,MONTHLY
+ ,WEEKLY
+ ,DAILY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTransformerTypeEnum = ENUMERATION OF
+ (CURRENT
+ ,FREQUENCY
+ ,VOLTAGE
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTransitionCode = ENUMERATION OF
+ (DISCONTINUOUS
+ ,CONTINUOUS
+ ,CONTSAMEGRADIENT
+ ,CONTSAMEGRADIENTSAMECURVATURE);
+END_TYPE;
+
+TYPE IfcTransportElementTypeEnum = ENUMERATION OF
+ (ELEVATOR
+ ,ESCALATOR
+ ,MOVINGWALKWAY
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcTrimmingPreference = ENUMERATION OF
+ (CARTESIAN
+ ,PARAMETER
+ ,UNSPECIFIED);
+END_TYPE;
+
+TYPE IfcTubeBundleTypeEnum = ENUMERATION OF
+ (FINNED
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcUnitEnum = ENUMERATION OF
+ (ABSORBEDDOSEUNIT
+ ,AMOUNTOFSUBSTANCEUNIT
+ ,AREAUNIT
+ ,DOSEEQUIVALENTUNIT
+ ,ELECTRICCAPACITANCEUNIT
+ ,ELECTRICCHARGEUNIT
+ ,ELECTRICCONDUCTANCEUNIT
+ ,ELECTRICCURRENTUNIT
+ ,ELECTRICRESISTANCEUNIT
+ ,ELECTRICVOLTAGEUNIT
+ ,ENERGYUNIT
+ ,FORCEUNIT
+ ,FREQUENCYUNIT
+ ,ILLUMINANCEUNIT
+ ,INDUCTANCEUNIT
+ ,LENGTHUNIT
+ ,LUMINOUSFLUXUNIT
+ ,LUMINOUSINTENSITYUNIT
+ ,MAGNETICFLUXDENSITYUNIT
+ ,MAGNETICFLUXUNIT
+ ,MASSUNIT
+ ,PLANEANGLEUNIT
+ ,POWERUNIT
+ ,PRESSUREUNIT
+ ,RADIOACTIVITYUNIT
+ ,SOLIDANGLEUNIT
+ ,THERMODYNAMICTEMPERATUREUNIT
+ ,TIMEUNIT
+ ,VOLUMEUNIT
+ ,USERDEFINED);
+END_TYPE;
+
+TYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF
+ (AIRHANDLER
+ ,AIRCONDITIONINGUNIT
+ ,SPLITSYSTEM
+ ,ROOFTOPUNIT
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcValveTypeEnum = ENUMERATION OF
+ (AIRRELEASE
+ ,ANTIVACUUM
+ ,CHANGEOVER
+ ,CHECK
+ ,COMMISSIONING
+ ,DIVERTING
+ ,DRAWOFFCOCK
+ ,DOUBLECHECK
+ ,DOUBLEREGULATING
+ ,FAUCET
+ ,FLUSHING
+ ,GASCOCK
+ ,GASTAP
+ ,ISOLATING
+ ,MIXING
+ ,PRESSUREREDUCING
+ ,PRESSURERELIEF
+ ,REGULATING
+ ,SAFETYCUTOFF
+ ,STEAMTRAP
+ ,STOPCOCK
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF
+ (COMPRESSION
+ ,SPRING
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcWallTypeEnum = ENUMERATION OF
+ (STANDARD
+ ,POLYGONAL
+ ,SHEAR
+ ,ELEMENTEDWALL
+ ,PLUMBINGWALL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcWasteTerminalTypeEnum = ENUMERATION OF
+ (FLOORTRAP
+ ,FLOORWASTE
+ ,GULLYSUMP
+ ,GULLYTRAP
+ ,GREASEINTERCEPTOR
+ ,OILINTERCEPTOR
+ ,PETROLINTERCEPTOR
+ ,ROOFDRAIN
+ ,WASTEDISPOSALUNIT
+ ,WASTETRAP
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcWindowPanelOperationEnum = ENUMERATION OF
+ (SIDEHUNGRIGHTHAND
+ ,SIDEHUNGLEFTHAND
+ ,TILTANDTURNRIGHTHAND
+ ,TILTANDTURNLEFTHAND
+ ,TOPHUNG
+ ,BOTTOMHUNG
+ ,PIVOTHORIZONTAL
+ ,PIVOTVERTICAL
+ ,SLIDINGHORIZONTAL
+ ,SLIDINGVERTICAL
+ ,REMOVABLECASEMENT
+ ,FIXEDCASEMENT
+ ,OTHEROPERATION
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcWindowPanelPositionEnum = ENUMERATION OF
+ (LEFT
+ ,MIDDLE
+ ,RIGHT
+ ,BOTTOM
+ ,TOP
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcWindowStyleConstructionEnum = ENUMERATION OF
+ (ALUMINIUM
+ ,HIGH_GRADE_STEEL
+ ,STEEL
+ ,WOOD
+ ,ALUMINIUM_WOOD
+ ,PLASTIC
+ ,OTHER_CONSTRUCTION
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcWindowStyleOperationEnum = ENUMERATION OF
+ (SINGLE_PANEL
+ ,DOUBLE_PANEL_VERTICAL
+ ,DOUBLE_PANEL_HORIZONTAL
+ ,TRIPLE_PANEL_VERTICAL
+ ,TRIPLE_PANEL_BOTTOM
+ ,TRIPLE_PANEL_TOP
+ ,TRIPLE_PANEL_LEFT
+ ,TRIPLE_PANEL_RIGHT
+ ,TRIPLE_PANEL_HORIZONTAL
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcWorkControlTypeEnum = ENUMERATION OF
+ (ACTUAL
+ ,BASELINE
+ ,PLANNED
+ ,USERDEFINED
+ ,NOTDEFINED);
+END_TYPE;
+
+TYPE IfcActorSelect = SELECT
+ (IfcOrganization
+ ,IfcPerson
+ ,IfcPersonAndOrganization);
+END_TYPE;
+
+TYPE IfcAppliedValueSelect = SELECT
+ (IfcRatioMeasure
+ ,IfcMeasureWithUnit
+ ,IfcMonetaryMeasure);
+END_TYPE;
+
+TYPE IfcAxis2Placement = SELECT
+ (IfcAxis2Placement2D
+ ,IfcAxis2Placement3D);
+END_TYPE;
+
+TYPE IfcBooleanOperand = SELECT
+ (IfcSolidModel
+ ,IfcHalfSpaceSolid
+ ,IfcBooleanResult
+ ,IfcCsgPrimitive3D);
+END_TYPE;
+
+TYPE IfcCharacterStyleSelect = SELECT
+ (IfcTextStyleForDefinedFont);
+END_TYPE;
+
+TYPE IfcClassificationNotationSelect = SELECT
+ (IfcClassificationNotation
+ ,IfcClassificationReference);
+END_TYPE;
+
+TYPE IfcColour = SELECT
+ (IfcColourSpecification
+ ,IfcPreDefinedColour);
+END_TYPE;
+
+TYPE IfcColourOrFactor = SELECT
+ (IfcColourRgb
+ ,IfcNormalisedRatioMeasure);
+END_TYPE;
+
+TYPE IfcConditionCriterionSelect = SELECT
+ (IfcLabel
+ ,IfcMeasureWithUnit);
+END_TYPE;
+
+TYPE IfcCsgSelect = SELECT
+ (IfcBooleanResult
+ ,IfcCsgPrimitive3D);
+END_TYPE;
+
+TYPE IfcCurveFontOrScaledCurveFontSelect = SELECT
+ (IfcCurveStyleFontSelect
+ ,IfcCurveStyleFontAndScaling);
+END_TYPE;
+
+TYPE IfcCurveOrEdgeCurve = SELECT
+ (IfcBoundedCurve
+ ,IfcEdgeCurve);
+END_TYPE;
+
+TYPE IfcCurveStyleFontSelect = SELECT
+ (IfcPreDefinedCurveFont
+ ,IfcCurveStyleFont);
+END_TYPE;
+
+TYPE IfcDateTimeSelect = SELECT
+ (IfcCalendarDate
+ ,IfcLocalTime
+ ,IfcDateAndTime);
+END_TYPE;
+
+TYPE IfcDefinedSymbolSelect = SELECT
+ (IfcPreDefinedSymbol
+ ,IfcExternallyDefinedSymbol);
+END_TYPE;
+
+TYPE IfcDerivedMeasureValue = SELECT
+ (IfcVolumetricFlowRateMeasure
+ ,IfcTimeStamp
+ ,IfcThermalTransmittanceMeasure
+ ,IfcThermalResistanceMeasure
+ ,IfcThermalAdmittanceMeasure
+ ,IfcPressureMeasure
+ ,IfcPowerMeasure
+ ,IfcMassFlowRateMeasure
+ ,IfcMassDensityMeasure
+ ,IfcLinearVelocityMeasure
+ ,IfcKinematicViscosityMeasure
+ ,IfcIntegerCountRateMeasure
+ ,IfcHeatFluxDensityMeasure
+ ,IfcFrequencyMeasure
+ ,IfcEnergyMeasure
+ ,IfcElectricVoltageMeasure
+ ,IfcDynamicViscosityMeasure
+ ,IfcCompoundPlaneAngleMeasure
+ ,IfcAngularVelocityMeasure
+ ,IfcThermalConductivityMeasure
+ ,IfcMolecularWeightMeasure
+ ,IfcVaporPermeabilityMeasure
+ ,IfcMoistureDiffusivityMeasure
+ ,IfcIsothermalMoistureCapacityMeasure
+ ,IfcSpecificHeatCapacityMeasure
+ ,IfcMonetaryMeasure
+ ,IfcMagneticFluxDensityMeasure
+ ,IfcMagneticFluxMeasure
+ ,IfcLuminousFluxMeasure
+ ,IfcForceMeasure
+ ,IfcInductanceMeasure
+ ,IfcIlluminanceMeasure
+ ,IfcElectricResistanceMeasure
+ ,IfcElectricConductanceMeasure
+ ,IfcElectricChargeMeasure
+ ,IfcDoseEquivalentMeasure
+ ,IfcElectricCapacitanceMeasure
+ ,IfcAbsorbedDoseMeasure
+ ,IfcRadioActivityMeasure
+ ,IfcRotationalFrequencyMeasure
+ ,IfcTorqueMeasure
+ ,IfcAccelerationMeasure
+ ,IfcLinearForceMeasure
+ ,IfcLinearStiffnessMeasure
+ ,IfcModulusOfSubgradeReactionMeasure
+ ,IfcModulusOfElasticityMeasure
+ ,IfcMomentOfInertiaMeasure
+ ,IfcPlanarForceMeasure
+ ,IfcRotationalStiffnessMeasure
+ ,IfcShearModulusMeasure
+ ,IfcLinearMomentMeasure
+ ,IfcLuminousIntensityDistributionMeasure
+ ,IfcCurvatureMeasure
+ ,IfcMassPerLengthMeasure
+ ,IfcModulusOfLinearSubgradeReactionMeasure
+ ,IfcModulusOfRotationalSubgradeReactionMeasure
+ ,IfcRotationalMassMeasure
+ ,IfcSectionalAreaIntegralMeasure
+ ,IfcSectionModulusMeasure
+ ,IfcTemperatureGradientMeasure
+ ,IfcThermalExpansionCoefficientMeasure
+ ,IfcWarpingConstantMeasure
+ ,IfcWarpingMomentMeasure
+ ,IfcSoundPowerMeasure
+ ,IfcSoundPressureMeasure
+ ,IfcHeatingValueMeasure
+ ,IfcPHMeasure
+ ,IfcIonConcentrationMeasure);
+END_TYPE;
+
+TYPE IfcDocumentSelect = SELECT
+ (IfcDocumentReference
+ ,IfcDocumentInformation);
+END_TYPE;
+
+TYPE IfcDraughtingCalloutElement = SELECT
+ (IfcAnnotationCurveOccurrence
+ ,IfcAnnotationTextOccurrence
+ ,IfcAnnotationSymbolOccurrence);
+END_TYPE;
+
+TYPE IfcFillAreaStyleTileShapeSelect = SELECT
+ (IfcFillAreaStyleTileSymbolWithStyle);
+END_TYPE;
+
+TYPE IfcFillStyleSelect = SELECT
+ (IfcFillAreaStyleHatching
+ ,IfcFillAreaStyleTiles
+ ,IfcColour
+ ,IfcExternallyDefinedHatchStyle);
+END_TYPE;
+
+TYPE IfcGeometricSetSelect = SELECT
+ (IfcPoint
+ ,IfcCurve
+ ,IfcSurface);
+END_TYPE;
+
+TYPE IfcHatchLineDistanceSelect = SELECT
+ (IfcOneDirectionRepeatFactor
+ ,IfcPositiveLengthMeasure);
+END_TYPE;
+
+TYPE IfcLayeredItem = SELECT
+ (IfcRepresentationItem
+ ,IfcRepresentation);
+END_TYPE;
+
+TYPE IfcLibrarySelect = SELECT
+ (IfcLibraryReference
+ ,IfcLibraryInformation);
+END_TYPE;
+
+TYPE IfcLightDistributionDataSourceSelect = SELECT
+ (IfcExternalReference
+ ,IfcLightIntensityDistribution);
+END_TYPE;
+
+TYPE IfcMaterialSelect = SELECT
+ (IfcMaterial
+ ,IfcMaterialList
+ ,IfcMaterialLayerSetUsage
+ ,IfcMaterialLayerSet
+ ,IfcMaterialLayer);
+END_TYPE;
+
+TYPE IfcMeasureValue = SELECT
+ (IfcVolumeMeasure
+ ,IfcTimeMeasure
+ ,IfcThermodynamicTemperatureMeasure
+ ,IfcSolidAngleMeasure
+ ,IfcPositiveRatioMeasure
+ ,IfcRatioMeasure
+ ,IfcPositivePlaneAngleMeasure
+ ,IfcPlaneAngleMeasure
+ ,IfcParameterValue
+ ,IfcNumericMeasure
+ ,IfcMassMeasure
+ ,IfcPositiveLengthMeasure
+ ,IfcLengthMeasure
+ ,IfcElectricCurrentMeasure
+ ,IfcDescriptiveMeasure
+ ,IfcCountMeasure
+ ,IfcContextDependentMeasure
+ ,IfcAreaMeasure
+ ,IfcAmountOfSubstanceMeasure
+ ,IfcLuminousIntensityMeasure
+ ,IfcNormalisedRatioMeasure
+ ,IfcComplexNumber);
+END_TYPE;
+
+TYPE IfcMetricValueSelect = SELECT
+ (IfcDateTimeSelect
+ ,IfcMeasureWithUnit
+ ,IfcTable
+ ,IfcText
+ ,IfcTimeSeries
+ ,IfcCostValue);
+END_TYPE;
+
+TYPE IfcObjectReferenceSelect = SELECT
+ (IfcMaterial
+ ,IfcPerson
+ ,IfcDateAndTime
+ ,IfcMaterialList
+ ,IfcOrganization
+ ,IfcCalendarDate
+ ,IfcLocalTime
+ ,IfcPersonAndOrganization
+ ,IfcMaterialLayer
+ ,IfcExternalReference
+ ,IfcTimeSeries
+ ,IfcAddress
+ ,IfcAppliedValue);
+END_TYPE;
+
+TYPE IfcOrientationSelect = SELECT
+ (IfcPlaneAngleMeasure
+ ,IfcDirection);
+END_TYPE;
+
+TYPE IfcPointOrVertexPoint = SELECT
+ (IfcPoint
+ ,IfcVertexPoint);
+END_TYPE;
+
+TYPE IfcPresentationStyleSelect = SELECT
+ (IfcNullStyle
+ ,IfcCurveStyle
+ ,IfcSymbolStyle
+ ,IfcFillAreaStyle
+ ,IfcTextStyle
+ ,IfcSurfaceStyle);
+END_TYPE;
+
+TYPE IfcShell = SELECT
+ (IfcClosedShell
+ ,IfcOpenShell);
+END_TYPE;
+
+TYPE IfcSimpleValue = SELECT
+ (IfcInteger
+ ,IfcReal
+ ,IfcBoolean
+ ,IfcIdentifier
+ ,IfcText
+ ,IfcLabel
+ ,IfcLogical);
+END_TYPE;
+
+TYPE IfcSizeSelect = SELECT
+ (IfcRatioMeasure
+ ,IfcLengthMeasure
+ ,IfcDescriptiveMeasure
+ ,IfcPositiveLengthMeasure
+ ,IfcNormalisedRatioMeasure
+ ,IfcPositiveRatioMeasure);
+END_TYPE;
+
+TYPE IfcSpecularHighlightSelect = SELECT
+ (IfcSpecularExponent
+ ,IfcSpecularRoughness);
+END_TYPE;
+
+TYPE IfcStructuralActivityAssignmentSelect = SELECT
+ (IfcStructuralItem
+ ,IfcElement);
+END_TYPE;
+
+TYPE IfcSurfaceOrFaceSurface = SELECT
+ (IfcSurface
+ ,IfcFaceSurface
+ ,IfcFaceBasedSurfaceModel);
+END_TYPE;
+
+TYPE IfcSurfaceStyleElementSelect = SELECT
+ (IfcSurfaceStyleShading
+ ,IfcSurfaceStyleLighting
+ ,IfcSurfaceStyleWithTextures
+ ,IfcExternallyDefinedSurfaceStyle
+ ,IfcSurfaceStyleRefraction);
+END_TYPE;
+
+TYPE IfcSymbolStyleSelect = SELECT
+ (IfcColour);
+END_TYPE;
+
+TYPE IfcTextFontSelect = SELECT
+ (IfcPreDefinedTextFont
+ ,IfcExternallyDefinedTextFont);
+END_TYPE;
+
+TYPE IfcTextStyleSelect = SELECT
+ (IfcTextStyleWithBoxCharacteristics
+ ,IfcTextStyleTextModel);
+END_TYPE;
+
+TYPE IfcTrimmingSelect = SELECT
+ (IfcCartesianPoint
+ ,IfcParameterValue);
+END_TYPE;
+
+TYPE IfcUnit = SELECT
+ (IfcDerivedUnit
+ ,IfcNamedUnit
+ ,IfcMonetaryUnit);
+END_TYPE;
+
+TYPE IfcValue = SELECT
+ (IfcMeasureValue
+ ,IfcSimpleValue
+ ,IfcDerivedMeasureValue);
+END_TYPE;
+
+TYPE IfcVectorOrDirection = SELECT
+ (IfcDirection
+ ,IfcVector);
+END_TYPE;
+
+ENTITY Ifc2DCompositeCurve
+ SUBTYPE OF (IfcCompositeCurve);
+ WHERE
+ WR1 : SELF\IfcCompositeCurve.ClosedCurve;
+ WR2 : SELF\IfcCurve.Dim = 2;
+END_ENTITY;
+
+ENTITY IfcActionRequest
+ SUBTYPE OF (IfcControl);
+ RequestID : IfcIdentifier;
+ UNIQUE
+ UR2 : RequestID;
+END_ENTITY;
+
+ENTITY IfcActor
+ SUPERTYPE OF (ONEOF
+ (IfcOccupant))
+ SUBTYPE OF (IfcObject);
+ TheActor : IfcActorSelect;
+ INVERSE
+ IsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;
+END_ENTITY;
+
+ENTITY IfcActorRole;
+ Role : IfcRoleEnum;
+ UserDefinedRole : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ WHERE
+ WR1 : (Role <> IfcRoleEnum.USERDEFINED) OR
+ ((Role = IfcRoleEnum.USERDEFINED) AND
+ EXISTS(SELF.UserDefinedRole));
+END_ENTITY;
+
+ENTITY IfcActuatorType
+ SUBTYPE OF (IfcDistributionControlElementType);
+ PredefinedType : IfcActuatorTypeEnum;
+END_ENTITY;
+
+ENTITY IfcAddress
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcPostalAddress
+ ,IfcTelecomAddress));
+ Purpose : OPTIONAL IfcAddressTypeEnum;
+ Description : OPTIONAL IfcText;
+ UserDefinedPurpose : OPTIONAL IfcLabel;
+ INVERSE
+ OfPerson : SET [0:?] OF IfcPerson FOR Addresses;
+ OfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;
+ WHERE
+ WR1 : (NOT(EXISTS(Purpose))) OR
+ ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR
+ ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND
+ EXISTS(SELF.UserDefinedPurpose)));
+END_ENTITY;
+
+ENTITY IfcAirTerminalBoxType
+ SUBTYPE OF (IfcFlowControllerType);
+ PredefinedType : IfcAirTerminalBoxTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcAirTerminalType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcAirTerminalTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcAirToAirHeatRecoveryType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcAirToAirHeatRecoveryTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcAlarmType
+ SUBTYPE OF (IfcDistributionControlElementType);
+ PredefinedType : IfcAlarmTypeEnum;
+END_ENTITY;
+
+ENTITY IfcAngularDimension
+ SUBTYPE OF (IfcDimensionCurveDirectedCallout);
+END_ENTITY;
+
+ENTITY IfcAnnotation
+ SUBTYPE OF (IfcProduct);
+ INVERSE
+ ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
+END_ENTITY;
+
+ENTITY IfcAnnotationCurveOccurrence
+ SUPERTYPE OF (ONEOF
+ (IfcDimensionCurve
+ ,IfcProjectionCurve))
+ SUBTYPE OF (IfcAnnotationOccurrence);
+ WHERE
+ WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR
+ ('IFC2X3.IFCCURVE' IN TYPEOF (SELF\IfcStyledItem.Item));
+END_ENTITY;
+
+ENTITY IfcAnnotationFillArea
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ OuterBoundary : IfcCurve;
+ InnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve;
+END_ENTITY;
+
+ENTITY IfcAnnotationFillAreaOccurrence
+ SUBTYPE OF (IfcAnnotationOccurrence);
+ FillStyleTarget : OPTIONAL IfcPoint;
+ GlobalOrLocal : OPTIONAL IfcGlobalOrLocalEnum;
+ WHERE
+ WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR
+ ('IFC2X3.IFCANNOTATIONFILLAREA' IN TYPEOF (SELF\IfcStyledItem.Item));
+END_ENTITY;
+
+ENTITY IfcAnnotationOccurrence
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcAnnotationCurveOccurrence
+ ,IfcAnnotationFillAreaOccurrence
+ ,IfcAnnotationSurfaceOccurrence
+ ,IfcAnnotationSymbolOccurrence
+ ,IfcAnnotationTextOccurrence))
+ SUBTYPE OF (IfcStyledItem);
+END_ENTITY;
+
+ENTITY IfcAnnotationSurface
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Item : IfcGeometricRepresentationItem;
+ TextureCoordinates : OPTIONAL IfcTextureCoordinate;
+ WHERE
+ WR01 : SIZEOF([
+ 'IFC2X3.IFCSURFACE',
+ 'IFC2X3.IFCSHELLBASEDSURFACEMODEL',
+ 'IFC2X3.IFCFACEBASEDSURFACEMODEL',
+ 'IFC2X3.IFCSOLIDMODEL',
+ 'IFC2X3.IFCBOOLEANRESULT',
+ 'IFC2X3.IFCCSGPRIMITIVE3D']
+ * TYPEOF(Item)
+ ) >= 1;
+END_ENTITY;
+
+ENTITY IfcAnnotationSurfaceOccurrence
+ SUBTYPE OF (IfcAnnotationOccurrence);
+ WHERE
+ WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR
+ (SIZEOF(
+ ['IFC2X3.IFCSURFACE',
+ 'IFC2X3.IFCFACEBASEDSURFACEMODEL',
+ 'IFC2X3.IFCSHELLBASEDSURFACEMODEL',
+ 'IFC2X3.IFCSOLIDMODEL'] *
+ TYPEOF(SELF\IfcStyledItem.Item)) > 0);
+END_ENTITY;
+
+ENTITY IfcAnnotationSymbolOccurrence
+ SUPERTYPE OF (ONEOF
+ (IfcTerminatorSymbol))
+ SUBTYPE OF (IfcAnnotationOccurrence);
+ WHERE
+ WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR
+ ('IFC2X3.IFCDEFINEDSYMBOL' IN TYPEOF (SELF\IfcStyledItem.Item));
+END_ENTITY;
+
+ENTITY IfcAnnotationTextOccurrence
+ SUBTYPE OF (IfcAnnotationOccurrence);
+ WHERE
+ WR31 : NOT(EXISTS(SELF\IfcStyledItem.Item)) OR
+ ('IFC2X3.IFCTEXTLITERAL' IN TYPEOF (SELF\IfcStyledItem.Item));
+END_ENTITY;
+
+ENTITY IfcApplication;
+ ApplicationDeveloper : IfcOrganization;
+ Version : IfcLabel;
+ ApplicationFullName : IfcLabel;
+ ApplicationIdentifier : IfcIdentifier;
+ UNIQUE
+ UR1 : ApplicationIdentifier;
+ UR2 : ApplicationFullName, Version;
+END_ENTITY;
+
+ENTITY IfcAppliedValue
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCostValue
+ ,IfcEnvironmentalImpactValue));
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ AppliedValue : OPTIONAL IfcAppliedValueSelect;
+ UnitBasis : OPTIONAL IfcMeasureWithUnit;
+ ApplicableDate : OPTIONAL IfcDateTimeSelect;
+ FixedUntilDate : OPTIONAL IfcDateTimeSelect;
+ INVERSE
+ ValuesReferenced : SET [0:?] OF IfcReferencesValueDocument FOR ReferencingValues;
+ ValueOfComponents : SET [0:?] OF IfcAppliedValueRelationship FOR ComponentOfTotal;
+ IsComponentIn : SET [0:?] OF IfcAppliedValueRelationship FOR Components;
+ WHERE
+ WR1 : EXISTS (AppliedValue) OR
+ EXISTS (ValueOfComponents);
+END_ENTITY;
+
+ENTITY IfcAppliedValueRelationship;
+ ComponentOfTotal : IfcAppliedValue;
+ Components : SET [1:?] OF IfcAppliedValue;
+ ArithmeticOperator : IfcArithmeticOperatorEnum;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+END_ENTITY;
+
+ENTITY IfcApproval;
+ Description : OPTIONAL IfcText;
+ ApprovalDateTime : IfcDateTimeSelect;
+ ApprovalStatus : OPTIONAL IfcLabel;
+ ApprovalLevel : OPTIONAL IfcLabel;
+ ApprovalQualifier : OPTIONAL IfcText;
+ Name : IfcLabel;
+ Identifier : IfcIdentifier;
+ INVERSE
+ Actors : SET [0:?] OF IfcApprovalActorRelationship FOR Approval;
+ IsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApproval;
+ Relates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;
+END_ENTITY;
+
+ENTITY IfcApprovalActorRelationship;
+ Actor : IfcActorSelect;
+ Approval : IfcApproval;
+ Role : IfcActorRole;
+END_ENTITY;
+
+ENTITY IfcApprovalPropertyRelationship;
+ ApprovedProperties : SET [1:?] OF IfcProperty;
+ Approval : IfcApproval;
+END_ENTITY;
+
+ENTITY IfcApprovalRelationship;
+ RelatedApproval : IfcApproval;
+ RelatingApproval : IfcApproval;
+ Description : OPTIONAL IfcText;
+ Name : IfcLabel;
+END_ENTITY;
+
+ENTITY IfcArbitraryClosedProfileDef
+ SUPERTYPE OF (ONEOF
+ (IfcArbitraryProfileDefWithVoids))
+ SUBTYPE OF (IfcProfileDef);
+ OuterCurve : IfcCurve;
+ WHERE
+ WR1 : OuterCurve.Dim = 2;
+ WR2 : NOT('IFC2X3.IFCLINE' IN TYPEOF(OuterCurve));
+ WR3 : NOT('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));
+END_ENTITY;
+
+ENTITY IfcArbitraryOpenProfileDef
+ SUPERTYPE OF (ONEOF
+ (IfcCenterLineProfileDef))
+ SUBTYPE OF (IfcProfileDef);
+ Curve : IfcBoundedCurve;
+ WHERE
+ WR11 : ('IFC2X3.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR
+ (SELF\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE);
+ WR12 : Curve.Dim = 2;
+END_ENTITY;
+
+ENTITY IfcArbitraryProfileDefWithVoids
+ SUBTYPE OF (IfcArbitraryClosedProfileDef);
+ InnerCurves : SET [1:?] OF IfcCurve;
+ WHERE
+ WR1 : SELF\IfcProfileDef.ProfileType = AREA;
+ WR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;
+ WR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC2X3.IFCLINE' IN TYPEOF(temp))) = 0;
+END_ENTITY;
+
+ENTITY IfcAsset
+ SUBTYPE OF (IfcGroup);
+ AssetID : IfcIdentifier;
+ OriginalValue : IfcCostValue;
+ CurrentValue : IfcCostValue;
+ TotalReplacementCost : IfcCostValue;
+ Owner : IfcActorSelect;
+ User : IfcActorSelect;
+ ResponsiblePerson : IfcPerson;
+ IncorporationDate : IfcCalendarDate;
+ DepreciatedValue : IfcCostValue;
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects | NOT('IFC2X3.IFCELEMENT' IN TYPEOF(Temp)))) = 0;
+END_ENTITY;
+
+ENTITY IfcAsymmetricIShapeProfileDef
+ SUBTYPE OF (IfcIShapeProfileDef);
+ TopFlangeWidth : IfcPositiveLengthMeasure;
+ TopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;
+ TopFlangeFilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcAxis1Placement
+ SUBTYPE OF (IfcPlacement);
+ Axis : OPTIONAL IfcDirection;
+ DERIVE
+ Z : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
+ WHERE
+ WR1 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
+ WR2 : SELF\IfcPlacement.Location.Dim = 3;
+END_ENTITY;
+
+ENTITY IfcAxis2Placement2D
+ SUBTYPE OF (IfcPlacement);
+ RefDirection : OPTIONAL IfcDirection;
+ DERIVE
+ P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);
+ WHERE
+ WR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);
+ WR2 : SELF\IfcPlacement.Location.Dim = 2;
+END_ENTITY;
+
+ENTITY IfcAxis2Placement3D
+ SUBTYPE OF (IfcPlacement);
+ Axis : OPTIONAL IfcDirection;
+ RefDirection : OPTIONAL IfcDirection;
+ DERIVE
+ P : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);
+ WHERE
+ WR1 : SELF\IfcPlacement.Location.Dim = 3;
+ WR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
+ WR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);
+ WR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
+ WR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));
+END_ENTITY;
+
+ENTITY IfcBSplineCurve
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBezierCurve))
+ SUBTYPE OF (IfcBoundedCurve);
+ Degree : INTEGER;
+ ControlPointsList : LIST [2:?] OF IfcCartesianPoint;
+ CurveForm : IfcBSplineCurveForm;
+ ClosedCurve : LOGICAL;
+ SelfIntersect : LOGICAL;
+ DERIVE
+ ControlPoints : ARRAY [0:255] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);
+ UpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1);
+ WHERE
+ WR41 : SIZEOF(QUERY(Temp <* ControlPointsList |
+ Temp.Dim <> ControlPointsList[1].Dim))
+ = 0;
+END_ENTITY;
+
+ENTITY IfcBeam
+ SUBTYPE OF (IfcBuildingElement);
+END_ENTITY;
+
+ENTITY IfcBeamType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcBeamTypeEnum;
+END_ENTITY;
+
+ENTITY IfcBezierCurve
+ SUPERTYPE OF (ONEOF
+ (IfcRationalBezierCurve))
+ SUBTYPE OF (IfcBSplineCurve);
+END_ENTITY;
+
+ENTITY IfcBlobTexture
+ SUBTYPE OF (IfcSurfaceTexture);
+ RasterFormat : IfcIdentifier;
+ RasterCode : BOOLEAN;
+ WHERE
+ WR11 : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG'];
+END_ENTITY;
+
+ENTITY IfcBlock
+ SUBTYPE OF (IfcCsgPrimitive3D);
+ XLength : IfcPositiveLengthMeasure;
+ YLength : IfcPositiveLengthMeasure;
+ ZLength : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcBoilerType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcBoilerTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcBooleanClippingResult
+ SUBTYPE OF (IfcBooleanResult);
+ WHERE
+ WR1 : ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));
+ WR2 : ('IFC2X3.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));
+ WR3 : Operator = DIFFERENCE;
+END_ENTITY;
+
+ENTITY IfcBooleanResult
+ SUPERTYPE OF (ONEOF
+ (IfcBooleanClippingResult))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Operator : IfcBooleanOperator;
+ FirstOperand : IfcBooleanOperand;
+ SecondOperand : IfcBooleanOperand;
+ DERIVE
+ Dim : IfcDimensionCount := FirstOperand.Dim;
+ WHERE
+ WR1 : FirstOperand.Dim = SecondOperand.Dim;
+END_ENTITY;
+
+ENTITY IfcBoundaryCondition
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBoundaryEdgeCondition
+ ,IfcBoundaryFaceCondition
+ ,IfcBoundaryNodeCondition));
+ Name : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcBoundaryEdgeCondition
+ SUBTYPE OF (IfcBoundaryCondition);
+ LinearStiffnessByLengthX : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;
+ LinearStiffnessByLengthY : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;
+ LinearStiffnessByLengthZ : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;
+ RotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;
+ RotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;
+ RotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;
+END_ENTITY;
+
+ENTITY IfcBoundaryFaceCondition
+ SUBTYPE OF (IfcBoundaryCondition);
+ LinearStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionMeasure;
+ LinearStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionMeasure;
+ LinearStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionMeasure;
+END_ENTITY;
+
+ENTITY IfcBoundaryNodeCondition
+ SUPERTYPE OF (ONEOF
+ (IfcBoundaryNodeConditionWarping))
+ SUBTYPE OF (IfcBoundaryCondition);
+ LinearStiffnessX : OPTIONAL IfcLinearStiffnessMeasure;
+ LinearStiffnessY : OPTIONAL IfcLinearStiffnessMeasure;
+ LinearStiffnessZ : OPTIONAL IfcLinearStiffnessMeasure;
+ RotationalStiffnessX : OPTIONAL IfcRotationalStiffnessMeasure;
+ RotationalStiffnessY : OPTIONAL IfcRotationalStiffnessMeasure;
+ RotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessMeasure;
+END_ENTITY;
+
+ENTITY IfcBoundaryNodeConditionWarping
+ SUBTYPE OF (IfcBoundaryNodeCondition);
+ WarpingStiffness : OPTIONAL IfcWarpingMomentMeasure;
+END_ENTITY;
+
+ENTITY IfcBoundedCurve
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBSplineCurve
+ ,IfcCompositeCurve
+ ,IfcPolyline
+ ,IfcTrimmedCurve))
+ SUBTYPE OF (IfcCurve);
+END_ENTITY;
+
+ENTITY IfcBoundedSurface
+ SUPERTYPE OF (ONEOF
+ (IfcCurveBoundedPlane
+ ,IfcRectangularTrimmedSurface))
+ SUBTYPE OF (IfcSurface);
+END_ENTITY;
+
+ENTITY IfcBoundingBox
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Corner : IfcCartesianPoint;
+ XDim : IfcPositiveLengthMeasure;
+ YDim : IfcPositiveLengthMeasure;
+ ZDim : IfcPositiveLengthMeasure;
+ DERIVE
+ Dim : IfcDimensionCount := 3;
+END_ENTITY;
+
+ENTITY IfcBoxedHalfSpace
+ SUBTYPE OF (IfcHalfSpaceSolid);
+ Enclosure : IfcBoundingBox;
+ WHERE
+ WR1 : NOT ('IFC2X3.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface));
+END_ENTITY;
+
+ENTITY IfcBuilding
+ SUBTYPE OF (IfcSpatialStructureElement);
+ ElevationOfRefHeight : OPTIONAL IfcLengthMeasure;
+ ElevationOfTerrain : OPTIONAL IfcLengthMeasure;
+ BuildingAddress : OPTIONAL IfcPostalAddress;
+END_ENTITY;
+
+ENTITY IfcBuildingElement
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBeam
+ ,IfcBuildingElementComponent
+ ,IfcBuildingElementProxy
+ ,IfcColumn
+ ,IfcCovering
+ ,IfcCurtainWall
+ ,IfcDoor
+ ,IfcFooting
+ ,IfcMember
+ ,IfcPile
+ ,IfcPlate
+ ,IfcRailing
+ ,IfcRamp
+ ,IfcRampFlight
+ ,IfcRoof
+ ,IfcSlab
+ ,IfcStair
+ ,IfcStairFlight
+ ,IfcWall
+ ,IfcWindow))
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcBuildingElementComponent
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBuildingElementPart
+ ,IfcReinforcingElement))
+ SUBTYPE OF (IfcBuildingElement);
+END_ENTITY;
+
+ENTITY IfcBuildingElementPart
+ SUBTYPE OF (IfcBuildingElementComponent);
+END_ENTITY;
+
+ENTITY IfcBuildingElementProxy
+ SUBTYPE OF (IfcBuildingElement);
+ CompositionType : OPTIONAL IfcElementCompositionEnum;
+ WHERE
+ WR1 : EXISTS(SELF\IfcRoot.Name);
+END_ENTITY;
+
+ENTITY IfcBuildingElementProxyType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcBuildingElementProxyTypeEnum;
+END_ENTITY;
+
+ENTITY IfcBuildingElementType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBeamType
+ ,IfcBuildingElementProxyType
+ ,IfcColumnType
+ ,IfcCoveringType
+ ,IfcCurtainWallType
+ ,IfcMemberType
+ ,IfcPlateType
+ ,IfcRailingType
+ ,IfcRampFlightType
+ ,IfcSlabType
+ ,IfcStairFlightType
+ ,IfcWallType))
+ SUBTYPE OF (IfcElementType);
+END_ENTITY;
+
+ENTITY IfcBuildingStorey
+ SUBTYPE OF (IfcSpatialStructureElement);
+ Elevation : OPTIONAL IfcLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcCShapeProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ Depth : IfcPositiveLengthMeasure;
+ Width : IfcPositiveLengthMeasure;
+ WallThickness : IfcPositiveLengthMeasure;
+ Girth : IfcPositiveLengthMeasure;
+ InternalFilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ CentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR1 : Girth < (Depth / 2.);
+ WR2 : NOT(EXISTS(InternalFilletRadius)) OR
+ ((InternalFilletRadius <= Width/2.) AND (InternalFilletRadius <= Depth/2.));
+ WR3 : (WallThickness < Width/2.) AND (WallThickness < Depth/2.);
+END_ENTITY;
+
+ENTITY IfcCableCarrierFittingType
+ SUBTYPE OF (IfcFlowFittingType);
+ PredefinedType : IfcCableCarrierFittingTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcCableCarrierSegmentType
+ SUBTYPE OF (IfcFlowSegmentType);
+ PredefinedType : IfcCableCarrierSegmentTypeEnum;
+END_ENTITY;
+
+ENTITY IfcCableSegmentType
+ SUBTYPE OF (IfcFlowSegmentType);
+ PredefinedType : IfcCableSegmentTypeEnum;
+END_ENTITY;
+
+ENTITY IfcCalendarDate;
+ DayComponent : IfcDayInMonthNumber;
+ MonthComponent : IfcMonthInYearNumber;
+ YearComponent : IfcYearNumber;
+ WHERE
+ WR21 : IfcValidCalendarDate (SELF);
+END_ENTITY;
+
+ENTITY IfcCartesianPoint
+ SUBTYPE OF (IfcPoint);
+ Coordinates : LIST [1:3] OF IfcLengthMeasure;
+ DERIVE
+ Dim : IfcDimensionCount := HIINDEX(Coordinates);
+ WHERE
+ WR1 : HIINDEX(Coordinates) >= 2;
+END_ENTITY;
+
+ENTITY IfcCartesianTransformationOperator
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCartesianTransformationOperator2D
+ ,IfcCartesianTransformationOperator3D))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Axis1 : OPTIONAL IfcDirection;
+ Axis2 : OPTIONAL IfcDirection;
+ LocalOrigin : IfcCartesianPoint;
+ Scale : OPTIONAL REAL;
+ DERIVE
+ Scl : REAL := NVL(Scale, 1.0);
+ Dim : IfcDimensionCount := LocalOrigin.Dim;
+ WHERE
+ WR1 : Scl > 0.0;
+END_ENTITY;
+
+ENTITY IfcCartesianTransformationOperator2D
+ SUPERTYPE OF (ONEOF
+ (IfcCartesianTransformationOperator2DnonUniform))
+ SUBTYPE OF (IfcCartesianTransformationOperator);
+ DERIVE
+ U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\IfcCartesianTransformationOperator.Axis1,
+ SELF\IfcCartesianTransformationOperator.Axis2,?);
+ WHERE
+ WR1 : SELF\IfcCartesianTransformationOperator.Dim = 2;
+ WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR
+ (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2);
+ WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR
+ (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 2);
+END_ENTITY;
+
+ENTITY IfcCartesianTransformationOperator2DnonUniform
+ SUBTYPE OF (IfcCartesianTransformationOperator2D);
+ Scale2 : OPTIONAL REAL;
+ DERIVE
+ Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl);
+ WHERE
+ WR1 : Scl2 > 0.0;
+END_ENTITY;
+
+ENTITY IfcCartesianTransformationOperator3D
+ SUPERTYPE OF (ONEOF
+ (IfcCartesianTransformationOperator3DnonUniform))
+ SUBTYPE OF (IfcCartesianTransformationOperator);
+ Axis3 : OPTIONAL IfcDirection;
+ DERIVE
+ U : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\IfcCartesianTransformationOperator.Axis1,
+ SELF\IfcCartesianTransformationOperator.Axis2,Axis3);
+ WHERE
+ WR1 : SELF\IfcCartesianTransformationOperator.Dim = 3;
+ WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR
+ (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3);
+ WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR
+ (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3);
+ WR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);
+END_ENTITY;
+
+ENTITY IfcCartesianTransformationOperator3DnonUniform
+ SUBTYPE OF (IfcCartesianTransformationOperator3D);
+ Scale2 : OPTIONAL REAL;
+ Scale3 : OPTIONAL REAL;
+ DERIVE
+ Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl);
+ Scl3 : REAL := NVL(Scale3, SELF\IfcCartesianTransformationOperator.Scl);
+ WHERE
+ WR1 : Scl2 > 0.0;
+ WR2 : Scl3 > 0.0;
+END_ENTITY;
+
+ENTITY IfcCenterLineProfileDef
+ SUBTYPE OF (IfcArbitraryOpenProfileDef);
+ Thickness : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcChamferEdgeFeature
+ SUBTYPE OF (IfcEdgeFeature);
+ Width : OPTIONAL IfcPositiveLengthMeasure;
+ Height : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcChillerType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcChillerTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcCircle
+ SUBTYPE OF (IfcConic);
+ Radius : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcCircleHollowProfileDef
+ SUBTYPE OF (IfcCircleProfileDef);
+ WallThickness : IfcPositiveLengthMeasure;
+ WHERE
+ WR1 : WallThickness < SELF\IfcCircleProfileDef.Radius;
+END_ENTITY;
+
+ENTITY IfcCircleProfileDef
+ SUPERTYPE OF (ONEOF
+ (IfcCircleHollowProfileDef))
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ Radius : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcClassification;
+ Source : IfcLabel;
+ Edition : IfcLabel;
+ EditionDate : OPTIONAL IfcCalendarDate;
+ Name : IfcLabel;
+ INVERSE
+ Contains : SET [0:?] OF IfcClassificationItem FOR ItemOf;
+END_ENTITY;
+
+ENTITY IfcClassificationItem;
+ Notation : IfcClassificationNotationFacet;
+ ItemOf : OPTIONAL IfcClassification;
+ Title : IfcLabel;
+ INVERSE
+ IsClassifiedItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatedItems;
+ IsClassifyingItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatingItem;
+END_ENTITY;
+
+ENTITY IfcClassificationItemRelationship;
+ RelatingItem : IfcClassificationItem;
+ RelatedItems : SET [1:?] OF IfcClassificationItem;
+END_ENTITY;
+
+ENTITY IfcClassificationNotation;
+ NotationFacets : SET [1:?] OF IfcClassificationNotationFacet;
+END_ENTITY;
+
+ENTITY IfcClassificationNotationFacet;
+ NotationValue : IfcLabel;
+END_ENTITY;
+
+ENTITY IfcClassificationReference
+ SUBTYPE OF (IfcExternalReference);
+ ReferencedSource : OPTIONAL IfcClassification;
+END_ENTITY;
+
+ENTITY IfcClosedShell
+ SUBTYPE OF (IfcConnectedFaceSet);
+END_ENTITY;
+
+ENTITY IfcCoilType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcCoilTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcColourRgb
+ SUBTYPE OF (IfcColourSpecification);
+ Red : IfcNormalisedRatioMeasure;
+ Green : IfcNormalisedRatioMeasure;
+ Blue : IfcNormalisedRatioMeasure;
+END_ENTITY;
+
+ENTITY IfcColourSpecification
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcColourRgb));
+ Name : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcColumn
+ SUBTYPE OF (IfcBuildingElement);
+END_ENTITY;
+
+ENTITY IfcColumnType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcColumnTypeEnum;
+END_ENTITY;
+
+ENTITY IfcComplexProperty
+ SUBTYPE OF (IfcProperty);
+ UsageName : IfcIdentifier;
+ HasProperties : SET [1:?] OF IfcProperty;
+ WHERE
+ WR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;
+ WR22 : IfcUniquePropertyName(HasProperties);
+END_ENTITY;
+
+ENTITY IfcCompositeCurve
+ SUPERTYPE OF (ONEOF
+ (Ifc2DCompositeCurve))
+ SUBTYPE OF (IfcBoundedCurve);
+ Segments : LIST [1:?] OF IfcCompositeCurveSegment;
+ SelfIntersect : LOGICAL;
+ DERIVE
+ NSegments : INTEGER := SIZEOF(Segments);
+ ClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous;
+ WHERE
+ WR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));
+ WR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;
+END_ENTITY;
+
+ENTITY IfcCompositeCurveSegment
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Transition : IfcTransitionCode;
+ SameSense : BOOLEAN;
+ ParentCurve : IfcCurve;
+ DERIVE
+ Dim : IfcDimensionCount := ParentCurve.Dim;
+ INVERSE
+ UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;
+ WHERE
+ WR1 : ('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));
+END_ENTITY;
+
+ENTITY IfcCompositeProfileDef
+ SUBTYPE OF (IfcProfileDef);
+ Profiles : SET [2:?] OF IfcProfileDef;
+ Label : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;
+ WR2 : SIZEOF(QUERY(temp <* Profiles | 'IFC2X3.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;
+END_ENTITY;
+
+ENTITY IfcCompressorType
+ SUBTYPE OF (IfcFlowMovingDeviceType);
+ PredefinedType : IfcCompressorTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcCondenserType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcCondenserTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcCondition
+ SUBTYPE OF (IfcGroup);
+END_ENTITY;
+
+ENTITY IfcConditionCriterion
+ SUBTYPE OF (IfcControl);
+ Criterion : IfcConditionCriterionSelect;
+ CriterionDateTime : IfcDateTimeSelect;
+ WHERE
+ WR1 : EXISTS(SELF\IfcRoot.Name);
+END_ENTITY;
+
+ENTITY IfcConic
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCircle
+ ,IfcEllipse))
+ SUBTYPE OF (IfcCurve);
+ Position : IfcAxis2Placement;
+END_ENTITY;
+
+ENTITY IfcConnectedFaceSet
+ SUPERTYPE OF (ONEOF
+ (IfcClosedShell
+ ,IfcOpenShell))
+ SUBTYPE OF (IfcTopologicalRepresentationItem);
+ CfsFaces : SET [1:?] OF IfcFace;
+END_ENTITY;
+
+ENTITY IfcConnectionCurveGeometry
+ SUBTYPE OF (IfcConnectionGeometry);
+ CurveOnRelatingElement : IfcCurveOrEdgeCurve;
+ CurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve;
+END_ENTITY;
+
+ENTITY IfcConnectionGeometry
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcConnectionCurveGeometry
+ ,IfcConnectionPointGeometry
+ ,IfcConnectionPortGeometry
+ ,IfcConnectionSurfaceGeometry));
+END_ENTITY;
+
+ENTITY IfcConnectionPointEccentricity
+ SUBTYPE OF (IfcConnectionPointGeometry);
+ EccentricityInX : OPTIONAL IfcLengthMeasure;
+ EccentricityInY : OPTIONAL IfcLengthMeasure;
+ EccentricityInZ : OPTIONAL IfcLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcConnectionPointGeometry
+ SUPERTYPE OF (ONEOF
+ (IfcConnectionPointEccentricity))
+ SUBTYPE OF (IfcConnectionGeometry);
+ PointOnRelatingElement : IfcPointOrVertexPoint;
+ PointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint;
+END_ENTITY;
+
+ENTITY IfcConnectionPortGeometry
+ SUBTYPE OF (IfcConnectionGeometry);
+ LocationAtRelatingElement : IfcAxis2Placement;
+ LocationAtRelatedElement : OPTIONAL IfcAxis2Placement;
+ ProfileOfPort : IfcProfileDef;
+END_ENTITY;
+
+ENTITY IfcConnectionSurfaceGeometry
+ SUBTYPE OF (IfcConnectionGeometry);
+ SurfaceOnRelatingElement : IfcSurfaceOrFaceSurface;
+ SurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface;
+END_ENTITY;
+
+ENTITY IfcConstraint
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcMetric
+ ,IfcObjective));
+ Name : IfcLabel;
+ Description : OPTIONAL IfcText;
+ ConstraintGrade : IfcConstraintEnum;
+ ConstraintSource : OPTIONAL IfcLabel;
+ CreatingActor : OPTIONAL IfcActorSelect;
+ CreationTime : OPTIONAL IfcDateTimeSelect;
+ UserDefinedGrade : OPTIONAL IfcLabel;
+ INVERSE
+ ClassifiedAs : SET [0:?] OF IfcConstraintClassificationRelationship FOR ClassifiedConstraint;
+ RelatesConstraints : SET [0:?] OF IfcConstraintRelationship FOR RelatingConstraint;
+ IsRelatedWith : SET [0:?] OF IfcConstraintRelationship FOR RelatedConstraints;
+ PropertiesForConstraint : SET [0:?] OF IfcPropertyConstraintRelationship FOR RelatingConstraint;
+ Aggregates : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatingConstraint;
+ IsAggregatedIn : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatedConstraints;
+ WHERE
+ WR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR
+ ((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\IfcConstraint.UserDefinedGrade));
+END_ENTITY;
+
+ENTITY IfcConstraintAggregationRelationship;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ RelatingConstraint : IfcConstraint;
+ RelatedConstraints : LIST [1:?] OF UNIQUE IfcConstraint;
+ LogicalAggregator : IfcLogicalOperatorEnum;
+ WHERE
+ WR11 : SIZEOF(QUERY(temp <* RelatedConstraints |
+ temp :=: RelatingConstraint
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcConstraintClassificationRelationship;
+ ClassifiedConstraint : IfcConstraint;
+ RelatedClassifications : SET [1:?] OF IfcClassificationNotationSelect;
+END_ENTITY;
+
+ENTITY IfcConstraintRelationship;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ RelatingConstraint : IfcConstraint;
+ RelatedConstraints : SET [1:?] OF IfcConstraint;
+ WHERE
+ WR11 : SIZEOF(QUERY(temp <* RelatedConstraints | temp :=: RelatingConstraint )) = 0;
+END_ENTITY;
+
+ENTITY IfcConstructionEquipmentResource
+ SUBTYPE OF (IfcConstructionResource);
+END_ENTITY;
+
+ENTITY IfcConstructionMaterialResource
+ SUBTYPE OF (IfcConstructionResource);
+ Suppliers : OPTIONAL SET [1:?] OF IfcActorSelect;
+ UsageRatio : OPTIONAL IfcRatioMeasure;
+ WHERE
+ WR1 : SIZEOF(SELF\IfcResource.ResourceOf) <=1;
+ WR2 : NOT(EXISTS(SELF\IfcResource.ResourceOf[1])) OR
+ (SELF\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);
+END_ENTITY;
+
+ENTITY IfcConstructionProductResource
+ SUBTYPE OF (IfcConstructionResource);
+ WHERE
+ WR1 : SIZEOF(SELF\IfcResource.ResourceOf) <=1;
+ WR2 : NOT(EXISTS(SELF\IfcResource.ResourceOf[1])) OR
+ (SELF\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);
+END_ENTITY;
+
+ENTITY IfcConstructionResource
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcConstructionEquipmentResource
+ ,IfcConstructionMaterialResource
+ ,IfcConstructionProductResource
+ ,IfcCrewResource
+ ,IfcLaborResource
+ ,IfcSubContractResource))
+ SUBTYPE OF (IfcResource);
+ ResourceIdentifier : OPTIONAL IfcIdentifier;
+ ResourceGroup : OPTIONAL IfcLabel;
+ ResourceConsumption : OPTIONAL IfcResourceConsumptionEnum;
+ BaseQuantity : OPTIONAL IfcMeasureWithUnit;
+END_ENTITY;
+
+ENTITY IfcContextDependentUnit
+ SUBTYPE OF (IfcNamedUnit);
+ Name : IfcLabel;
+END_ENTITY;
+
+ENTITY IfcControl
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcActionRequest
+ ,IfcConditionCriterion
+ ,IfcCostItem
+ ,IfcCostSchedule
+ ,IfcEquipmentStandard
+ ,IfcFurnitureStandard
+ ,IfcPerformanceHistory
+ ,IfcPermit
+ ,IfcProjectOrder
+ ,IfcProjectOrderRecord
+ ,IfcScheduleTimeControl
+ ,IfcServiceLife
+ ,IfcSpaceProgram
+ ,IfcTimeSeriesSchedule
+ ,IfcWorkControl))
+ SUBTYPE OF (IfcObject);
+ INVERSE
+ Controls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;
+END_ENTITY;
+
+ENTITY IfcControllerType
+ SUBTYPE OF (IfcDistributionControlElementType);
+ PredefinedType : IfcControllerTypeEnum;
+END_ENTITY;
+
+ENTITY IfcConversionBasedUnit
+ SUBTYPE OF (IfcNamedUnit);
+ Name : IfcLabel;
+ ConversionFactor : IfcMeasureWithUnit;
+END_ENTITY;
+
+ENTITY IfcCooledBeamType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcCooledBeamTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcCoolingTowerType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcCoolingTowerTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcCoordinatedUniversalTimeOffset;
+ HourOffset : IfcHourInDay;
+ MinuteOffset : OPTIONAL IfcMinuteInHour;
+ Sense : IfcAheadOrBehind;
+END_ENTITY;
+
+ENTITY IfcCostItem
+ SUBTYPE OF (IfcControl);
+END_ENTITY;
+
+ENTITY IfcCostSchedule
+ SUBTYPE OF (IfcControl);
+ SubmittedBy : OPTIONAL IfcActorSelect;
+ PreparedBy : OPTIONAL IfcActorSelect;
+ SubmittedOn : OPTIONAL IfcDateTimeSelect;
+ Status : OPTIONAL IfcLabel;
+ TargetUsers : OPTIONAL SET [1:?] OF IfcActorSelect;
+ UpdateDate : OPTIONAL IfcDateTimeSelect;
+ ID : IfcIdentifier;
+ PredefinedType : IfcCostScheduleTypeEnum;
+ UNIQUE
+ UR2 : ID;
+END_ENTITY;
+
+ENTITY IfcCostValue
+ SUBTYPE OF (IfcAppliedValue);
+ CostType : IfcLabel;
+ Condition : OPTIONAL IfcText;
+END_ENTITY;
+
+ENTITY IfcCovering
+ SUBTYPE OF (IfcBuildingElement);
+ PredefinedType : OPTIONAL IfcCoveringTypeEnum;
+ INVERSE
+ CoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;
+ Covers : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;
+END_ENTITY;
+
+ENTITY IfcCoveringType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcCoveringTypeEnum;
+END_ENTITY;
+
+ENTITY IfcCraneRailAShapeProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ OverallHeight : IfcPositiveLengthMeasure;
+ BaseWidth2 : IfcPositiveLengthMeasure;
+ Radius : OPTIONAL IfcPositiveLengthMeasure;
+ HeadWidth : IfcPositiveLengthMeasure;
+ HeadDepth2 : IfcPositiveLengthMeasure;
+ HeadDepth3 : IfcPositiveLengthMeasure;
+ WebThickness : IfcPositiveLengthMeasure;
+ BaseWidth4 : IfcPositiveLengthMeasure;
+ BaseDepth1 : IfcPositiveLengthMeasure;
+ BaseDepth2 : IfcPositiveLengthMeasure;
+ BaseDepth3 : IfcPositiveLengthMeasure;
+ CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcCraneRailFShapeProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ OverallHeight : IfcPositiveLengthMeasure;
+ HeadWidth : IfcPositiveLengthMeasure;
+ Radius : OPTIONAL IfcPositiveLengthMeasure;
+ HeadDepth2 : IfcPositiveLengthMeasure;
+ HeadDepth3 : IfcPositiveLengthMeasure;
+ WebThickness : IfcPositiveLengthMeasure;
+ BaseDepth1 : IfcPositiveLengthMeasure;
+ BaseDepth2 : IfcPositiveLengthMeasure;
+ CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcCrewResource
+ SUBTYPE OF (IfcConstructionResource);
+END_ENTITY;
+
+ENTITY IfcCsgPrimitive3D
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBlock
+ ,IfcRectangularPyramid
+ ,IfcRightCircularCone
+ ,IfcRightCircularCylinder
+ ,IfcSphere))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Position : IfcAxis2Placement3D;
+ DERIVE
+ Dim : IfcDimensionCount := 3;
+END_ENTITY;
+
+ENTITY IfcCsgSolid
+ SUBTYPE OF (IfcSolidModel);
+ TreeRootExpression : IfcCsgSelect;
+END_ENTITY;
+
+ENTITY IfcCurrencyRelationship;
+ RelatingMonetaryUnit : IfcMonetaryUnit;
+ RelatedMonetaryUnit : IfcMonetaryUnit;
+ ExchangeRate : IfcPositiveRatioMeasure;
+ RateDateTime : IfcDateAndTime;
+ RateSource : OPTIONAL IfcLibraryInformation;
+END_ENTITY;
+
+ENTITY IfcCurtainWall
+ SUBTYPE OF (IfcBuildingElement);
+END_ENTITY;
+
+ENTITY IfcCurtainWallType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcCurtainWallTypeEnum;
+END_ENTITY;
+
+ENTITY IfcCurve
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBoundedCurve
+ ,IfcConic
+ ,IfcLine
+ ,IfcOffsetCurve2D
+ ,IfcOffsetCurve3D))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ DERIVE
+ Dim : IfcDimensionCount := IfcCurveDim(SELF);
+END_ENTITY;
+
+ENTITY IfcCurveBoundedPlane
+ SUBTYPE OF (IfcBoundedSurface);
+ BasisSurface : IfcPlane;
+ OuterBoundary : IfcCurve;
+ InnerBoundaries : SET [0:?] OF IfcCurve;
+ DERIVE
+ Dim : IfcDimensionCount := BasisSurface.Dim;
+END_ENTITY;
+
+ENTITY IfcCurveStyle
+ SUBTYPE OF (IfcPresentationStyle);
+ CurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;
+ CurveWidth : OPTIONAL IfcSizeSelect;
+ CurveColour : OPTIONAL IfcColour;
+ WHERE
+ WR11 : (NOT(EXISTS(CurveWidth))) OR
+ ('IFC2X3.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR
+ (('IFC2X3.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND
+ (CurveWidth = 'by layer'));
+END_ENTITY;
+
+ENTITY IfcCurveStyleFont;
+ Name : OPTIONAL IfcLabel;
+ PatternList : LIST [1:?] OF IfcCurveStyleFontPattern;
+END_ENTITY;
+
+ENTITY IfcCurveStyleFontAndScaling;
+ Name : OPTIONAL IfcLabel;
+ CurveFont : IfcCurveStyleFontSelect;
+ CurveFontScaling : IfcPositiveRatioMeasure;
+END_ENTITY;
+
+ENTITY IfcCurveStyleFontPattern;
+ VisibleSegmentLength : IfcLengthMeasure;
+ InvisibleSegmentLength : IfcPositiveLengthMeasure;
+ WHERE
+ WR01 : VisibleSegmentLength >= 0.;
+END_ENTITY;
+
+ENTITY IfcDamperType
+ SUBTYPE OF (IfcFlowControllerType);
+ PredefinedType : IfcDamperTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcDateAndTime;
+ DateComponent : IfcCalendarDate;
+ TimeComponent : IfcLocalTime;
+END_ENTITY;
+
+ENTITY IfcDefinedSymbol
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Definition : IfcDefinedSymbolSelect;
+ Target : IfcCartesianTransformationOperator2D;
+END_ENTITY;
+
+ENTITY IfcDerivedProfileDef
+ SUBTYPE OF (IfcProfileDef);
+ ParentProfile : IfcProfileDef;
+ Operator : IfcCartesianTransformationOperator2D;
+ Label : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : SELF\IfcProfileDef.ProfileType = ParentProfile.ProfileType;
+END_ENTITY;
+
+ENTITY IfcDerivedUnit;
+ Elements : SET [1:?] OF IfcDerivedUnitElement;
+ UnitType : IfcDerivedUnitEnum;
+ UserDefinedType : OPTIONAL IfcLabel;
+ DERIVE
+ Dimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(SELF);
+ WHERE
+ WR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));
+ WR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR
+ ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND
+ (EXISTS(SELF.UserDefinedType)));
+END_ENTITY;
+
+ENTITY IfcDerivedUnitElement;
+ Unit : IfcNamedUnit;
+ Exponent : INTEGER;
+END_ENTITY;
+
+ENTITY IfcDiameterDimension
+ SUBTYPE OF (IfcDimensionCurveDirectedCallout);
+END_ENTITY;
+
+ENTITY IfcDimensionCalloutRelationship
+ SUBTYPE OF (IfcDraughtingCalloutRelationship);
+ WHERE
+ WR11 : SELF\IfcDraughtingCalloutRelationship.Name IN ['primary','secondary'];
+ WR12 : SIZEOF(TYPEOF(SELF\IfcDraughtingCalloutRelationship.RelatingDraughtingCallout) * [
+ 'IFC2X3.IFCANGULARDIMENSION',
+ 'IFC2X3.IFCDIAMETERDIMENSION',
+ 'IFC2X3.IFCLINEARDIMENSION',
+ 'IFC2X3.IFCRADIUSDIMENSION']) = 1;
+ WR13 : NOT ('IFC2X3.IFCDIMENSIONCURVEDIRECTEDCALLOUT'
+ IN TYPEOF (SELF\IfcDraughtingCalloutRelationship.RelatedDraughtingCallout));
+END_ENTITY;
+
+ENTITY IfcDimensionCurve
+ SUBTYPE OF (IfcAnnotationCurveOccurrence);
+ INVERSE
+ AnnotatedBySymbols : SET [0:2] OF IfcTerminatorSymbol FOR AnnotatedCurve;
+ WHERE
+ WR51 : SIZEOF(USEDIN(SELF,'IFC2X3.IFCDRAUGHTINGCALLOUT.CONTENTS'))
+ >= 1;
+ WR52 : (SIZEOF(QUERY (Dct1 <* USEDIN(SELF,'IFC2X3.' +
+ 'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct1.Role = IfcDimensionExtentUsage.ORIGIN))) <= 1)
+ AND
+ (SIZEOF(QUERY (Dct2 <* USEDIN(SELF,'IFC2X3.' +
+ 'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct2.Role = IfcDimensionExtentUsage.TARGET))) <= 1);
+ WR53 : SIZEOF(QUERY (Dct <* AnnotatedBySymbols |
+ NOT('IFC2X3.IFCDIMENSIONCURVETERMINATOR' IN TYPEOF(Dct))))
+ = 0;
+END_ENTITY;
+
+ENTITY IfcDimensionCurveDirectedCallout
+ SUPERTYPE OF (ONEOF
+ (IfcAngularDimension
+ ,IfcDiameterDimension
+ ,IfcLinearDimension
+ ,IfcRadiusDimension))
+ SUBTYPE OF (IfcDraughtingCallout);
+ WHERE
+ WR41 : SIZEOF(QUERY (Dc <* SELF\IfcDraughtingCallout.Contents | (
+ 'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF(Dc))))
+ = 1;
+ WR42 : SIZEOF (QUERY (Dc <* SELF.contents |
+ ('IFC2X3.IFCPROJECTIONCURVE' IN
+ TYPEOF (Dc)))) <= 2;
+END_ENTITY;
+
+ENTITY IfcDimensionCurveTerminator
+ SUBTYPE OF (IfcTerminatorSymbol);
+ Role : IfcDimensionExtentUsage;
+ WHERE
+ WR61 : 'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF
+ (SELF\IfcTerminatorSymbol.AnnotatedCurve);
+END_ENTITY;
+
+ENTITY IfcDimensionPair
+ SUBTYPE OF (IfcDraughtingCalloutRelationship);
+ WHERE
+ WR11 : SELF.Name IN ['chained','parallel'];
+ WR12 : SIZEOF(TYPEOF(SELF.RelatingDraughtingCallout) * [
+ 'IFC2X3.IFCANGULARDIMENSION',
+ 'IFC2X3.IFCDIAMETERDIMENSION',
+ 'IFC2X3.IFCLINEARDIMENSION',
+ 'IFC2X3.IFCRADIUSDIMENSION']) = 1;
+ WR13 : SIZEOF(TYPEOF(SELF.RelatedDraughtingCallout) * [
+ 'IFC2X3.IFCANGULARDIMENSION',
+ 'IFC2X3.IFCDIAMETERDIMENSION',
+ 'IFC2X3.IFCLINEARDIMENSION',
+ 'IFC2X3.IFCRADIUSDIMENSION']) = 1;
+END_ENTITY;
+
+ENTITY IfcDimensionalExponents;
+ LengthExponent : INTEGER;
+ MassExponent : INTEGER;
+ TimeExponent : INTEGER;
+ ElectricCurrentExponent : INTEGER;
+ ThermodynamicTemperatureExponent : INTEGER;
+ AmountOfSubstanceExponent : INTEGER;
+ LuminousIntensityExponent : INTEGER;
+END_ENTITY;
+
+ENTITY IfcDirection
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ DirectionRatios : LIST [2:3] OF REAL;
+ DERIVE
+ Dim : IfcDimensionCount := HIINDEX(DirectionRatios);
+END_ENTITY;
+
+ENTITY IfcDiscreteAccessory
+ SUBTYPE OF (IfcElementComponent);
+END_ENTITY;
+
+ENTITY IfcDiscreteAccessoryType
+ SUPERTYPE OF (ONEOF
+ (IfcVibrationIsolatorType))
+ SUBTYPE OF (IfcElementComponentType);
+END_ENTITY;
+
+ENTITY IfcDistributionChamberElement
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcDistributionChamberElementType
+ SUBTYPE OF (IfcDistributionFlowElementType);
+ PredefinedType : IfcDistributionChamberElementTypeEnum;
+END_ENTITY;
+
+ENTITY IfcDistributionControlElement
+ SUBTYPE OF (IfcDistributionElement);
+ ControlElementId : OPTIONAL IfcIdentifier;
+ INVERSE
+ AssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;
+END_ENTITY;
+
+ENTITY IfcDistributionControlElementType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcActuatorType
+ ,IfcAlarmType
+ ,IfcControllerType
+ ,IfcFlowInstrumentType
+ ,IfcSensorType))
+ SUBTYPE OF (IfcDistributionElementType);
+END_ENTITY;
+
+ENTITY IfcDistributionElement
+ SUPERTYPE OF (ONEOF
+ (IfcDistributionControlElement
+ ,IfcDistributionFlowElement))
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcDistributionElementType
+ SUPERTYPE OF (ONEOF
+ (IfcDistributionControlElementType
+ ,IfcDistributionFlowElementType))
+ SUBTYPE OF (IfcElementType);
+END_ENTITY;
+
+ENTITY IfcDistributionFlowElement
+ SUPERTYPE OF (ONEOF
+ (IfcDistributionChamberElement
+ ,IfcEnergyConversionDevice
+ ,IfcFlowController
+ ,IfcFlowFitting
+ ,IfcFlowMovingDevice
+ ,IfcFlowSegment
+ ,IfcFlowStorageDevice
+ ,IfcFlowTerminal
+ ,IfcFlowTreatmentDevice))
+ SUBTYPE OF (IfcDistributionElement);
+ INVERSE
+ HasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;
+END_ENTITY;
+
+ENTITY IfcDistributionFlowElementType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDistributionChamberElementType
+ ,IfcEnergyConversionDeviceType
+ ,IfcFlowControllerType
+ ,IfcFlowFittingType
+ ,IfcFlowMovingDeviceType
+ ,IfcFlowSegmentType
+ ,IfcFlowStorageDeviceType
+ ,IfcFlowTerminalType
+ ,IfcFlowTreatmentDeviceType))
+ SUBTYPE OF (IfcDistributionElementType);
+END_ENTITY;
+
+ENTITY IfcDistributionPort
+ SUBTYPE OF (IfcPort);
+ FlowDirection : OPTIONAL IfcFlowDirectionEnum;
+END_ENTITY;
+
+ENTITY IfcDocumentElectronicFormat;
+ FileExtension : OPTIONAL IfcLabel;
+ MimeContentType : OPTIONAL IfcLabel;
+ MimeSubtype : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : EXISTS(FileExtension) OR EXISTS(MimeContentType);
+END_ENTITY;
+
+ENTITY IfcDocumentInformation;
+ DocumentId : IfcIdentifier;
+ Name : IfcLabel;
+ Description : OPTIONAL IfcText;
+ DocumentReferences : OPTIONAL SET [1:?] OF IfcDocumentReference;
+ Purpose : OPTIONAL IfcText;
+ IntendedUse : OPTIONAL IfcText;
+ Scope : OPTIONAL IfcText;
+ Revision : OPTIONAL IfcLabel;
+ DocumentOwner : OPTIONAL IfcActorSelect;
+ Editors : OPTIONAL SET [1:?] OF IfcActorSelect;
+ CreationTime : OPTIONAL IfcDateAndTime;
+ LastRevisionTime : OPTIONAL IfcDateAndTime;
+ ElectronicFormat : OPTIONAL IfcDocumentElectronicFormat;
+ ValidFrom : OPTIONAL IfcCalendarDate;
+ ValidUntil : OPTIONAL IfcCalendarDate;
+ Confidentiality : OPTIONAL IfcDocumentConfidentialityEnum;
+ Status : OPTIONAL IfcDocumentStatusEnum;
+ INVERSE
+ IsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;
+ IsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;
+END_ENTITY;
+
+ENTITY IfcDocumentInformationRelationship;
+ RelatingDocument : IfcDocumentInformation;
+ RelatedDocuments : SET [1:?] OF IfcDocumentInformation;
+ RelationshipType : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcDocumentReference
+ SUBTYPE OF (IfcExternalReference);
+ INVERSE
+ ReferenceToDocument : SET [0:1] OF IfcDocumentInformation FOR DocumentReferences;
+ WHERE
+ WR1 : EXISTS(Name) XOR EXISTS(ReferenceToDocument[1]);
+END_ENTITY;
+
+ENTITY IfcDoor
+ SUBTYPE OF (IfcBuildingElement);
+ OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
+ OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcDoorLiningProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ LiningDepth : OPTIONAL IfcPositiveLengthMeasure;
+ LiningThickness : OPTIONAL IfcPositiveLengthMeasure;
+ ThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;
+ ThresholdThickness : OPTIONAL IfcPositiveLengthMeasure;
+ TransomThickness : OPTIONAL IfcPositiveLengthMeasure;
+ TransomOffset : OPTIONAL IfcLengthMeasure;
+ LiningOffset : OPTIONAL IfcLengthMeasure;
+ ThresholdOffset : OPTIONAL IfcLengthMeasure;
+ CasingThickness : OPTIONAL IfcPositiveLengthMeasure;
+ CasingDepth : OPTIONAL IfcPositiveLengthMeasure;
+ ShapeAspectStyle : OPTIONAL IfcShapeAspect;
+ WHERE
+ WR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness));
+ WR32 : NOT(NOT(EXISTS(ThresholdDepth)) AND EXISTS(ThresholdThickness));
+ WR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR
+ (NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));
+ WR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR
+ (NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));
+ WR35 : EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1]) AND
+ ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1]));
+END_ENTITY;
+
+ENTITY IfcDoorPanelProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ PanelDepth : OPTIONAL IfcPositiveLengthMeasure;
+ PanelOperation : IfcDoorPanelOperationEnum;
+ PanelWidth : OPTIONAL IfcNormalisedRatioMeasure;
+ PanelPosition : IfcDoorPanelPositionEnum;
+ ShapeAspectStyle : OPTIONAL IfcShapeAspect;
+ WHERE
+ WR31 : EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1]) AND
+ ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1]));
+END_ENTITY;
+
+ENTITY IfcDoorStyle
+ SUBTYPE OF (IfcTypeProduct);
+ OperationType : IfcDoorStyleOperationEnum;
+ ConstructionType : IfcDoorStyleConstructionEnum;
+ ParameterTakesPrecedence : BOOLEAN;
+ Sizeable : BOOLEAN;
+END_ENTITY;
+
+ENTITY IfcDraughtingCallout
+ SUPERTYPE OF (ONEOF
+ (IfcDimensionCurveDirectedCallout
+ ,IfcStructuredDimensionCallout))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Contents : SET [1:?] OF IfcDraughtingCalloutElement;
+ INVERSE
+ IsRelatedFromCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatedDraughtingCallout;
+ IsRelatedToCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatingDraughtingCallout;
+END_ENTITY;
+
+ENTITY IfcDraughtingCalloutRelationship
+ SUPERTYPE OF (ONEOF
+ (IfcDimensionCalloutRelationship
+ ,IfcDimensionPair));
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ RelatingDraughtingCallout : IfcDraughtingCallout;
+ RelatedDraughtingCallout : IfcDraughtingCallout;
+END_ENTITY;
+
+ENTITY IfcDraughtingPreDefinedColour
+ SUBTYPE OF (IfcPreDefinedColour);
+ WHERE
+ WR31 : SELF\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',
+ 'magenta','cyan','white','by layer'];
+END_ENTITY;
+
+ENTITY IfcDraughtingPreDefinedCurveFont
+ SUBTYPE OF (IfcPreDefinedCurveFont);
+ WHERE
+ WR31 : SELF\IfcPredefinedItem.Name IN
+ ['continuous',
+ 'chain',
+ 'chain double dash',
+ 'dashed',
+ 'dotted',
+ 'by layer'];
+END_ENTITY;
+
+ENTITY IfcDraughtingPreDefinedTextFont
+ SUBTYPE OF (IfcPreDefinedTextFont);
+ WHERE
+ WR31 : SELF\IfcPreDefinedItem.Name IN ['ISO 3098-1 font A','ISO 3098-1 font B'];
+END_ENTITY;
+
+ENTITY IfcDuctFittingType
+ SUBTYPE OF (IfcFlowFittingType);
+ PredefinedType : IfcDuctFittingTypeEnum;
+ WHERE
+ WR2 : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcDuctSegmentType
+ SUBTYPE OF (IfcFlowSegmentType);
+ PredefinedType : IfcDuctSegmentTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcDuctSilencerType
+ SUBTYPE OF (IfcFlowTreatmentDeviceType);
+ PredefinedType : IfcDuctSilencerTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcEdge
+ SUPERTYPE OF (ONEOF
+ (IfcEdgeCurve
+ ,IfcOrientedEdge
+ ,IfcSubedge))
+ SUBTYPE OF (IfcTopologicalRepresentationItem);
+ EdgeStart : IfcVertex;
+ EdgeEnd : IfcVertex;
+END_ENTITY;
+
+ENTITY IfcEdgeCurve
+ SUBTYPE OF (IfcEdge);
+ EdgeGeometry : IfcCurve;
+ SameSense : BOOLEAN;
+END_ENTITY;
+
+ENTITY IfcEdgeFeature
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcChamferEdgeFeature
+ ,IfcRoundedEdgeFeature))
+ SUBTYPE OF (IfcFeatureElementSubtraction);
+ FeatureLength : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcEdgeLoop
+ SUBTYPE OF (IfcLoop);
+ EdgeList : LIST [1:?] OF IfcOrientedEdge;
+ DERIVE
+ Ne : INTEGER := SIZEOF(EdgeList);
+ WHERE
+ WR1 : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);
+ WR2 : IfcLoopHeadToTail(SELF);
+END_ENTITY;
+
+ENTITY IfcElectricApplianceType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcElectricApplianceTypeEnum;
+END_ENTITY;
+
+ENTITY IfcElectricDistributionPoint
+ SUBTYPE OF (IfcFlowController);
+ DistributionPointFunction : IfcElectricDistributionPointFunctionEnum;
+ UserDefinedFunction : OPTIONAL IfcLabel;
+ WHERE
+ WR31 : (DistributionPointFunction <> IfcElectricDistributionPointFunctionEnum.USERDEFINED) OR
+ ((DistributionPointFunction = IfcElectricDistributionPointFunctionEnum.USERDEFINED) AND EXISTS(SELF\IfcElectricDistributionPoint.UserDefinedFunction));
+END_ENTITY;
+
+ENTITY IfcElectricFlowStorageDeviceType
+ SUBTYPE OF (IfcFlowStorageDeviceType);
+ PredefinedType : IfcElectricFlowStorageDeviceTypeEnum;
+END_ENTITY;
+
+ENTITY IfcElectricGeneratorType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcElectricGeneratorTypeEnum;
+END_ENTITY;
+
+ENTITY IfcElectricHeaterType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcElectricHeaterTypeEnum;
+END_ENTITY;
+
+ENTITY IfcElectricMotorType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcElectricMotorTypeEnum;
+END_ENTITY;
+
+ENTITY IfcElectricTimeControlType
+ SUBTYPE OF (IfcFlowControllerType);
+ PredefinedType : IfcElectricTimeControlTypeEnum;
+END_ENTITY;
+
+ENTITY IfcElectricalBaseProperties
+ SUBTYPE OF (IfcEnergyProperties);
+ ElectricCurrentType : OPTIONAL IfcElectricCurrentEnum;
+ InputVoltage : IfcElectricVoltageMeasure;
+ InputFrequency : IfcFrequencyMeasure;
+ FullLoadCurrent : OPTIONAL IfcElectricCurrentMeasure;
+ MinimumCircuitCurrent : OPTIONAL IfcElectricCurrentMeasure;
+ MaximumPowerInput : OPTIONAL IfcPowerMeasure;
+ RatedPowerInput : OPTIONAL IfcPowerMeasure;
+ InputPhase : INTEGER;
+END_ENTITY;
+
+ENTITY IfcElectricalCircuit
+ SUBTYPE OF (IfcSystem);
+END_ENTITY;
+
+ENTITY IfcElectricalElement
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcElement
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBuildingElement
+ ,IfcDistributionElement
+ ,IfcElectricalElement
+ ,IfcElementAssembly
+ ,IfcElementComponent
+ ,IfcEquipmentElement
+ ,IfcFeatureElement
+ ,IfcFurnishingElement
+ ,IfcTransportElement
+ ,IfcVirtualElement))
+ SUBTYPE OF (IfcProduct);
+ Tag : OPTIONAL IfcIdentifier;
+ INVERSE
+ FillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;
+ ConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;
+ HasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;
+ HasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;
+ HasStructuralMember : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatingElement;
+ ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;
+ HasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;
+ HasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;
+ IsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;
+ ProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;
+ ConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;
+ ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
+END_ENTITY;
+
+ENTITY IfcElementAssembly
+ SUBTYPE OF (IfcElement);
+ AssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;
+ PredefinedType : IfcElementAssemblyTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
+END_ENTITY;
+
+ENTITY IfcElementComponent
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDiscreteAccessory
+ ,IfcFastener))
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcElementComponentType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDiscreteAccessoryType
+ ,IfcFastenerType))
+ SUBTYPE OF (IfcElementType);
+END_ENTITY;
+
+ENTITY IfcElementQuantity
+ SUBTYPE OF (IfcPropertySetDefinition);
+ MethodOfMeasurement : OPTIONAL IfcLabel;
+ Quantities : SET [1:?] OF IfcPhysicalQuantity;
+END_ENTITY;
+
+ENTITY IfcElementType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBuildingElementType
+ ,IfcDistributionElementType
+ ,IfcElementComponentType
+ ,IfcFurnishingElementType
+ ,IfcSpatialStructureElementType
+ ,IfcTransportElementType))
+ SUBTYPE OF (IfcTypeProduct);
+ ElementType : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcElementarySurface
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcPlane))
+ SUBTYPE OF (IfcSurface);
+ Position : IfcAxis2Placement3D;
+ DERIVE
+ Dim : IfcDimensionCount := Position.Dim;
+END_ENTITY;
+
+ENTITY IfcEllipse
+ SUBTYPE OF (IfcConic);
+ SemiAxis1 : IfcPositiveLengthMeasure;
+ SemiAxis2 : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcEllipseProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ SemiAxis1 : IfcPositiveLengthMeasure;
+ SemiAxis2 : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcEnergyConversionDevice
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcEnergyConversionDeviceType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcAirToAirHeatRecoveryType
+ ,IfcBoilerType
+ ,IfcChillerType
+ ,IfcCoilType
+ ,IfcCondenserType
+ ,IfcCooledBeamType
+ ,IfcCoolingTowerType
+ ,IfcElectricGeneratorType
+ ,IfcElectricMotorType
+ ,IfcEvaporativeCoolerType
+ ,IfcEvaporatorType
+ ,IfcHeatExchangerType
+ ,IfcHumidifierType
+ ,IfcMotorConnectionType
+ ,IfcSpaceHeaterType
+ ,IfcTransformerType
+ ,IfcTubeBundleType
+ ,IfcUnitaryEquipmentType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcEnergyProperties
+ SUPERTYPE OF (ONEOF
+ (IfcElectricalBaseProperties))
+ SUBTYPE OF (IfcPropertySetDefinition);
+ EnergySequence : OPTIONAL IfcEnergySequenceEnum;
+ UserDefinedEnergySequence : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcEnvironmentalImpactValue
+ SUBTYPE OF (IfcAppliedValue);
+ ImpactType : IfcLabel;
+ Category : IfcEnvironmentalImpactCategoryEnum;
+ UserDefinedCategory : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : (Category <> IfcEnvironmentalImpactCategoryEnum.USERDEFINED) OR
+ ((Category = IfcEnvironmentalImpactCategoryEnum.USERDEFINED) AND EXISTS(SELF\IfcEnvironmentalImpactValue.UserDefinedCategory));
+END_ENTITY;
+
+ENTITY IfcEquipmentElement
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcEquipmentStandard
+ SUBTYPE OF (IfcControl);
+END_ENTITY;
+
+ENTITY IfcEvaporativeCoolerType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcEvaporativeCoolerTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcEvaporatorType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcEvaporatorTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcExtendedMaterialProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ ExtendedProperties : SET [1:?] OF IfcProperty;
+ Description : OPTIONAL IfcText;
+ Name : IfcLabel;
+END_ENTITY;
+
+ENTITY IfcExternalReference
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcClassificationReference
+ ,IfcDocumentReference
+ ,IfcExternallyDefinedHatchStyle
+ ,IfcExternallyDefinedSurfaceStyle
+ ,IfcExternallyDefinedSymbol
+ ,IfcExternallyDefinedTextFont
+ ,IfcLibraryReference));
+ Location : OPTIONAL IfcLabel;
+ ItemReference : OPTIONAL IfcIdentifier;
+ Name : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : EXISTS(ItemReference) OR EXISTS(Location) OR EXISTS(Name);
+END_ENTITY;
+
+ENTITY IfcExternallyDefinedHatchStyle
+ SUBTYPE OF (IfcExternalReference);
+END_ENTITY;
+
+ENTITY IfcExternallyDefinedSurfaceStyle
+ SUBTYPE OF (IfcExternalReference);
+END_ENTITY;
+
+ENTITY IfcExternallyDefinedSymbol
+ SUBTYPE OF (IfcExternalReference);
+END_ENTITY;
+
+ENTITY IfcExternallyDefinedTextFont
+ SUBTYPE OF (IfcExternalReference);
+END_ENTITY;
+
+ENTITY IfcExtrudedAreaSolid
+ SUBTYPE OF (IfcSweptAreaSolid);
+ ExtrudedDirection : IfcDirection;
+ Depth : IfcPositiveLengthMeasure;
+ WHERE
+ WR31 : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;
+END_ENTITY;
+
+ENTITY IfcFace
+ SUPERTYPE OF (ONEOF
+ (IfcFaceSurface))
+ SUBTYPE OF (IfcTopologicalRepresentationItem);
+ Bounds : SET [1:?] OF IfcFaceBound;
+ WHERE
+ WR1 : SIZEOF(QUERY(temp <* Bounds | 'IFC2X3.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;
+END_ENTITY;
+
+ENTITY IfcFaceBasedSurfaceModel
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ FbsmFaces : SET [1:?] OF IfcConnectedFaceSet;
+ DERIVE
+ Dim : IfcDimensionCount := 3;
+END_ENTITY;
+
+ENTITY IfcFaceBound
+ SUPERTYPE OF (ONEOF
+ (IfcFaceOuterBound))
+ SUBTYPE OF (IfcTopologicalRepresentationItem);
+ Bound : IfcLoop;
+ Orientation : BOOLEAN;
+END_ENTITY;
+
+ENTITY IfcFaceOuterBound
+ SUBTYPE OF (IfcFaceBound);
+END_ENTITY;
+
+ENTITY IfcFaceSurface
+ SUBTYPE OF (IfcFace);
+ FaceSurface : IfcSurface;
+ SameSense : BOOLEAN;
+END_ENTITY;
+
+ENTITY IfcFacetedBrep
+ SUBTYPE OF (IfcManifoldSolidBrep);
+END_ENTITY;
+
+ENTITY IfcFacetedBrepWithVoids
+ SUBTYPE OF (IfcManifoldSolidBrep);
+ Voids : SET [1:?] OF IfcClosedShell;
+END_ENTITY;
+
+ENTITY IfcFailureConnectionCondition
+ SUBTYPE OF (IfcStructuralConnectionCondition);
+ TensionFailureX : OPTIONAL IfcForceMeasure;
+ TensionFailureY : OPTIONAL IfcForceMeasure;
+ TensionFailureZ : OPTIONAL IfcForceMeasure;
+ CompressionFailureX : OPTIONAL IfcForceMeasure;
+ CompressionFailureY : OPTIONAL IfcForceMeasure;
+ CompressionFailureZ : OPTIONAL IfcForceMeasure;
+END_ENTITY;
+
+ENTITY IfcFanType
+ SUBTYPE OF (IfcFlowMovingDeviceType);
+ PredefinedType : IfcFanTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcFastener
+ SUPERTYPE OF (ONEOF
+ (IfcMechanicalFastener))
+ SUBTYPE OF (IfcElementComponent);
+END_ENTITY;
+
+ENTITY IfcFastenerType
+ SUPERTYPE OF (ONEOF
+ (IfcMechanicalFastenerType))
+ SUBTYPE OF (IfcElementComponentType);
+END_ENTITY;
+
+ENTITY IfcFeatureElement
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcFeatureElementAddition
+ ,IfcFeatureElementSubtraction))
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcFeatureElementAddition
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcProjectionElement))
+ SUBTYPE OF (IfcFeatureElement);
+ INVERSE
+ ProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;
+END_ENTITY;
+
+ENTITY IfcFeatureElementSubtraction
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcEdgeFeature
+ ,IfcOpeningElement))
+ SUBTYPE OF (IfcFeatureElement);
+ INVERSE
+ VoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;
+END_ENTITY;
+
+ENTITY IfcFillAreaStyle
+ SUBTYPE OF (IfcPresentationStyle);
+ FillStyles : SET [1:?] OF IfcFillStyleSelect;
+ WHERE
+ WR11 : SIZEOF(QUERY(Style <* SELF.FillStyles |
+ 'IFC2X3.IFCCOLOUR' IN
+ TYPEOF(Style)
+ )) <= 1;
+ WR12 : SIZEOF(QUERY(Style <* SELF.FillStyles |
+ 'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN
+ TYPEOF(Style)
+ )) <= 1;
+ WR13 : (SIZEOF(QUERY(Style <* SELF.FillStyles |
+ 'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN
+ TYPEOF(Style)
+ )) >= 1)
+ XOR
+ (SIZEOF(QUERY(Style <* SELF.FillStyles |
+ 'IFC2X3.IFCFILLAREASTYLEHATCHING' IN
+ TYPEOF(Style)
+ )) >= 1)
+ XOR
+ (SIZEOF(QUERY(Style <* SELF.FillStyles |
+ 'IFC2X3.IFCFILLAREASTYLETILES' IN
+ TYPEOF(Style)
+ )) >= 1);
+END_ENTITY;
+
+ENTITY IfcFillAreaStyleHatching
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ HatchLineAppearance : IfcCurveStyle;
+ StartOfNextHatchLine : IfcHatchLineDistanceSelect;
+ PointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint;
+ PatternStart : OPTIONAL IfcCartesianPoint;
+ HatchLineAngle : IfcPlaneAngleMeasure;
+ WHERE
+ WR21 : NOT(
+ 'IFC2X3.IFCTWODIRECTIONREPEATFACTOR'
+ IN TYPEOF(StartOfNextHatchLine)
+ );
+ WR22 : NOT(EXISTS(PatternStart))
+ OR (PatternStart.Dim = 2);
+ WR23 : NOT(EXISTS(PointOfReferenceHatchLine))
+ OR (PointOfReferenceHatchLine.Dim = 2);
+END_ENTITY;
+
+ENTITY IfcFillAreaStyleTileSymbolWithStyle
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Symbol : IfcAnnotationSymbolOccurrence;
+END_ENTITY;
+
+ENTITY IfcFillAreaStyleTiles
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ TilingPattern : IfcOneDirectionRepeatFactor;
+ Tiles : SET [1:?] OF IfcFillAreaStyleTileShapeSelect;
+ TilingScale : IfcPositiveRatioMeasure;
+END_ENTITY;
+
+ENTITY IfcFilterType
+ SUBTYPE OF (IfcFlowTreatmentDeviceType);
+ PredefinedType : IfcFilterTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcFireSuppressionTerminalType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcFireSuppressionTerminalTypeEnum;
+END_ENTITY;
+
+ENTITY IfcFlowController
+ SUPERTYPE OF (ONEOF
+ (IfcElectricDistributionPoint))
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcFlowControllerType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcAirTerminalBoxType
+ ,IfcDamperType
+ ,IfcElectricTimeControlType
+ ,IfcFlowMeterType
+ ,IfcProtectiveDeviceType
+ ,IfcSwitchingDeviceType
+ ,IfcValveType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcFlowFitting
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcFlowFittingType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCableCarrierFittingType
+ ,IfcDuctFittingType
+ ,IfcJunctionBoxType
+ ,IfcPipeFittingType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcFlowInstrumentType
+ SUBTYPE OF (IfcDistributionControlElementType);
+ PredefinedType : IfcFlowInstrumentTypeEnum;
+END_ENTITY;
+
+ENTITY IfcFlowMeterType
+ SUBTYPE OF (IfcFlowControllerType);
+ PredefinedType : IfcFlowMeterTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcFlowMovingDevice
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcFlowMovingDeviceType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCompressorType
+ ,IfcFanType
+ ,IfcPumpType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcFlowSegment
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcFlowSegmentType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCableCarrierSegmentType
+ ,IfcCableSegmentType
+ ,IfcDuctSegmentType
+ ,IfcPipeSegmentType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcFlowStorageDevice
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcFlowStorageDeviceType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcElectricFlowStorageDeviceType
+ ,IfcTankType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcFlowTerminal
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcFlowTerminalType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcAirTerminalType
+ ,IfcElectricApplianceType
+ ,IfcElectricHeaterType
+ ,IfcFireSuppressionTerminalType
+ ,IfcGasTerminalType
+ ,IfcLampType
+ ,IfcLightFixtureType
+ ,IfcOutletType
+ ,IfcSanitaryTerminalType
+ ,IfcStackTerminalType
+ ,IfcWasteTerminalType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcFlowTreatmentDevice
+ SUBTYPE OF (IfcDistributionFlowElement);
+END_ENTITY;
+
+ENTITY IfcFlowTreatmentDeviceType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDuctSilencerType
+ ,IfcFilterType))
+ SUBTYPE OF (IfcDistributionFlowElementType);
+END_ENTITY;
+
+ENTITY IfcFluidFlowProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ PropertySource : IfcPropertySourceEnum;
+ FlowConditionTimeSeries : OPTIONAL IfcTimeSeries;
+ VelocityTimeSeries : OPTIONAL IfcTimeSeries;
+ FlowrateTimeSeries : OPTIONAL IfcTimeSeries;
+ Fluid : IfcMaterial;
+ PressureTimeSeries : OPTIONAL IfcTimeSeries;
+ UserDefinedPropertySource : OPTIONAL IfcLabel;
+ TemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;
+ WetBulbTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;
+ WetBulbTemperatureTimeSeries : OPTIONAL IfcTimeSeries;
+ TemperatureTimeSeries : OPTIONAL IfcTimeSeries;
+ FlowrateSingleValue : OPTIONAL IfcDerivedMeasureValue;
+ FlowConditionSingleValue : OPTIONAL IfcPositiveRatioMeasure;
+ VelocitySingleValue : OPTIONAL IfcLinearVelocityMeasure;
+ PressureSingleValue : OPTIONAL IfcPressureMeasure;
+END_ENTITY;
+
+ENTITY IfcFooting
+ SUBTYPE OF (IfcBuildingElement);
+ PredefinedType : IfcFootingTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
+END_ENTITY;
+
+ENTITY IfcFuelProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ CombustionTemperature : OPTIONAL IfcThermodynamicTemperatureMeasure;
+ CarbonContent : OPTIONAL IfcPositiveRatioMeasure;
+ LowerHeatingValue : OPTIONAL IfcHeatingValueMeasure;
+ HigherHeatingValue : OPTIONAL IfcHeatingValueMeasure;
+ UNIQUE
+ UR11 : Material;
+END_ENTITY;
+
+ENTITY IfcFurnishingElement
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcFurnishingElementType
+ SUPERTYPE OF (ONEOF
+ (IfcFurnitureType
+ ,IfcSystemFurnitureElementType))
+ SUBTYPE OF (IfcElementType);
+END_ENTITY;
+
+ENTITY IfcFurnitureStandard
+ SUBTYPE OF (IfcControl);
+END_ENTITY;
+
+ENTITY IfcFurnitureType
+ SUBTYPE OF (IfcFurnishingElementType);
+ AssemblyPlace : IfcAssemblyPlaceEnum;
+END_ENTITY;
+
+ENTITY IfcGasTerminalType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcGasTerminalTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcGasTerminalTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcGasTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcGeneralMaterialProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ MolecularWeight : OPTIONAL IfcMolecularWeightMeasure;
+ Porosity : OPTIONAL IfcNormalisedRatioMeasure;
+ MassDensity : OPTIONAL IfcMassDensityMeasure;
+ UNIQUE
+ UR11 : Material;
+END_ENTITY;
+
+ENTITY IfcGeneralProfileProperties
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralProfileProperties))
+ SUBTYPE OF (IfcProfileProperties);
+ PhysicalWeight : OPTIONAL IfcMassPerLengthMeasure;
+ Perimeter : OPTIONAL IfcPositiveLengthMeasure;
+ MinimumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;
+ MaximumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;
+ CrossSectionArea : OPTIONAL IfcAreaMeasure;
+ WHERE
+ WR1 : NOT(EXISTS(CrossSectionArea)) OR (CrossSectionArea > 0.);
+END_ENTITY;
+
+ENTITY IfcGeometricCurveSet
+ SUBTYPE OF (IfcGeometricSet);
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcGeometricSet.Elements |
+ 'IFC2X3.IFCSURFACE' IN TYPEOF(Temp))) = 0;
+END_ENTITY;
+
+ENTITY IfcGeometricRepresentationContext
+ SUPERTYPE OF (ONEOF
+ (IfcGeometricRepresentationSubContext))
+ SUBTYPE OF (IfcRepresentationContext);
+ CoordinateSpaceDimension : IfcDimensionCount;
+ Precision : OPTIONAL REAL;
+ WorldCoordinateSystem : IfcAxis2Placement;
+ TrueNorth : OPTIONAL IfcDirection;
+ INVERSE
+ HasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext;
+END_ENTITY;
+
+ENTITY IfcGeometricRepresentationItem
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcAnnotationFillArea
+ ,IfcAnnotationSurface
+ ,IfcBooleanResult
+ ,IfcBoundingBox
+ ,IfcCartesianTransformationOperator
+ ,IfcCompositeCurveSegment
+ ,IfcCsgPrimitive3D
+ ,IfcCurve
+ ,IfcDefinedSymbol
+ ,IfcDirection
+ ,IfcDraughtingCallout
+ ,IfcFaceBasedSurfaceModel
+ ,IfcFillAreaStyleHatching
+ ,IfcFillAreaStyleTileSymbolWithStyle
+ ,IfcFillAreaStyleTiles
+ ,IfcGeometricSet
+ ,IfcHalfSpaceSolid
+ ,IfcLightSource
+ ,IfcOneDirectionRepeatFactor
+ ,IfcPlacement
+ ,IfcPlanarExtent
+ ,IfcPoint
+ ,IfcSectionedSpine
+ ,IfcShellBasedSurfaceModel
+ ,IfcSolidModel
+ ,IfcSurface
+ ,IfcTextLiteral
+ ,IfcVector))
+ SUBTYPE OF (IfcRepresentationItem);
+END_ENTITY;
+
+ENTITY IfcGeometricRepresentationSubContext
+ SUBTYPE OF (IfcGeometricRepresentationContext);
+ ParentContext : IfcGeometricRepresentationContext;
+ TargetScale : OPTIONAL IfcPositiveRatioMeasure;
+ TargetView : IfcGeometricProjectionEnum;
+ UserDefinedTargetView : OPTIONAL IfcLabel;
+ DERIVE
+ SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;
+ SELF\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;
+ SELF\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth,SELF.WorldCoordinateSystem.P[2]);
+ SELF\IfcGeometricRepresentationContext.Precision : REAL := NVL(ParentContext.Precision,1.E-5);
+ WHERE
+ WR31 : NOT('IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));
+ WR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR
+ ((TargetView = IfcGeometricProjectionEnum.USERDEFINED) AND
+ EXISTS(UserDefinedTargetView));
+END_ENTITY;
+
+ENTITY IfcGeometricSet
+ SUPERTYPE OF (ONEOF
+ (IfcGeometricCurveSet))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Elements : SET [1:?] OF IfcGeometricSetSelect;
+ DERIVE
+ Dim : IfcDimensionCount := Elements[1].Dim;
+ WHERE
+ WR21 : SIZEOF(QUERY(Temp <* Elements |
+ Temp.Dim <> Elements[1].Dim))
+ = 0;
+END_ENTITY;
+
+ENTITY IfcGrid
+ SUBTYPE OF (IfcProduct);
+ UAxes : LIST [1:?] OF UNIQUE IfcGridAxis;
+ VAxes : LIST [1:?] OF UNIQUE IfcGridAxis;
+ WAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;
+ INVERSE
+ ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
+ WHERE
+ WR41 : EXISTS(SELF\IfcProduct.ObjectPlacement);
+END_ENTITY;
+
+ENTITY IfcGridAxis;
+ AxisTag : OPTIONAL IfcLabel;
+ AxisCurve : IfcCurve;
+ SameSense : IfcBoolean;
+ INVERSE
+ PartOfW : SET [0:1] OF IfcGrid FOR WAxes;
+ PartOfV : SET [0:1] OF IfcGrid FOR VAxes;
+ PartOfU : SET [0:1] OF IfcGrid FOR UAxes;
+ HasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes;
+ WHERE
+ WR1 : AxisCurve.Dim = 2;
+ WR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);
+END_ENTITY;
+
+ENTITY IfcGridPlacement
+ SUBTYPE OF (IfcObjectPlacement);
+ PlacementLocation : IfcVirtualGridIntersection;
+ PlacementRefDirection : OPTIONAL IfcVirtualGridIntersection;
+END_ENTITY;
+
+ENTITY IfcGroup
+ SUPERTYPE OF (ONEOF
+ (IfcAsset
+ ,IfcCondition
+ ,IfcInventory
+ ,IfcStructuralLoadGroup
+ ,IfcStructuralResultGroup
+ ,IfcSystem
+ ,IfcZone))
+ SUBTYPE OF (IfcObject);
+ INVERSE
+ IsGroupedBy : IfcRelAssignsToGroup FOR RelatingGroup;
+END_ENTITY;
+
+ENTITY IfcHalfSpaceSolid
+ SUPERTYPE OF (ONEOF
+ (IfcBoxedHalfSpace
+ ,IfcPolygonalBoundedHalfSpace))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ BaseSurface : IfcSurface;
+ AgreementFlag : BOOLEAN;
+ DERIVE
+ Dim : IfcDimensionCount := 3;
+END_ENTITY;
+
+ENTITY IfcHeatExchangerType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcHeatExchangerTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcHumidifierType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcHumidifierTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcHygroscopicMaterialProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ UpperVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;
+ LowerVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;
+ IsothermalMoistureCapacity : OPTIONAL IfcIsothermalMoistureCapacityMeasure;
+ VaporPermeability : OPTIONAL IfcVaporPermeabilityMeasure;
+ MoistureDiffusivity : OPTIONAL IfcMoistureDiffusivityMeasure;
+ UNIQUE
+ UR11 : Material;
+END_ENTITY;
+
+ENTITY IfcIShapeProfileDef
+ SUPERTYPE OF (ONEOF
+ (IfcAsymmetricIShapeProfileDef))
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ OverallWidth : IfcPositiveLengthMeasure;
+ OverallDepth : IfcPositiveLengthMeasure;
+ WebThickness : IfcPositiveLengthMeasure;
+ FlangeThickness : IfcPositiveLengthMeasure;
+ FilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR1 : FlangeThickness < (OverallDepth / 2.);
+ WR2 : WebThickness < OverallWidth;
+ WR3 : NOT(EXISTS(FilletRadius)) OR
+ ((FilletRadius <= (OverallWidth - WebThickness)/2.) AND
+ (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.));
+END_ENTITY;
+
+ENTITY IfcImageTexture
+ SUBTYPE OF (IfcSurfaceTexture);
+ UrlReference : IfcIdentifier;
+END_ENTITY;
+
+ENTITY IfcInventory
+ SUBTYPE OF (IfcGroup);
+ InventoryType : IfcInventoryTypeEnum;
+ Jurisdiction : IfcActorSelect;
+ ResponsiblePersons : SET [1:?] OF IfcPerson;
+ LastUpdateDate : IfcCalendarDate;
+ CurrentValue : OPTIONAL IfcCostValue;
+ OriginalValue : OPTIONAL IfcCostValue;
+ WHERE
+ WR41 : SIZEOF(QUERY(temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects |
+ NOT( ('IFC2X3.IFCSPACE' IN TYPEOF (temp)) OR
+ ('IFC2X3.IFCASSET' IN TYPEOF (temp)) OR
+ ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp))
+ ))) = 0;
+END_ENTITY;
+
+ENTITY IfcIrregularTimeSeries
+ SUBTYPE OF (IfcTimeSeries);
+ Values : LIST [1:?] OF IfcIrregularTimeSeriesValue;
+END_ENTITY;
+
+ENTITY IfcIrregularTimeSeriesValue;
+ TimeStamp : IfcDateTimeSelect;
+ ListValues : LIST [1:?] OF IfcValue;
+END_ENTITY;
+
+ENTITY IfcJunctionBoxType
+ SUBTYPE OF (IfcFlowFittingType);
+ PredefinedType : IfcJunctionBoxTypeEnum;
+END_ENTITY;
+
+ENTITY IfcLShapeProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ Depth : IfcPositiveLengthMeasure;
+ Width : OPTIONAL IfcPositiveLengthMeasure;
+ Thickness : IfcPositiveLengthMeasure;
+ FilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ EdgeRadius : OPTIONAL IfcPositiveLengthMeasure;
+ LegSlope : OPTIONAL IfcPlaneAngleMeasure;
+ CentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;
+ CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR21 : Thickness < Depth;
+ WR22 : NOT(EXISTS(Width)) OR (Thickness < Width);
+END_ENTITY;
+
+ENTITY IfcLaborResource
+ SUBTYPE OF (IfcConstructionResource);
+ SkillSet : OPTIONAL IfcText;
+END_ENTITY;
+
+ENTITY IfcLampType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcLampTypeEnum;
+END_ENTITY;
+
+ENTITY IfcLibraryInformation;
+ Name : IfcLabel;
+ Version : OPTIONAL IfcLabel;
+ Publisher : OPTIONAL IfcOrganization;
+ VersionDate : OPTIONAL IfcCalendarDate;
+ LibraryReference : OPTIONAL SET [1:?] OF IfcLibraryReference;
+END_ENTITY;
+
+ENTITY IfcLibraryReference
+ SUBTYPE OF (IfcExternalReference);
+ INVERSE
+ ReferenceIntoLibrary : SET [0:1] OF IfcLibraryInformation FOR LibraryReference;
+END_ENTITY;
+
+ENTITY IfcLightDistributionData;
+ MainPlaneAngle : IfcPlaneAngleMeasure;
+ SecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;
+ LuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;
+END_ENTITY;
+
+ENTITY IfcLightFixtureType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcLightFixtureTypeEnum;
+END_ENTITY;
+
+ENTITY IfcLightIntensityDistribution;
+ LightDistributionCurve : IfcLightDistributionCurveEnum;
+ DistributionData : LIST [1:?] OF IfcLightDistributionData;
+END_ENTITY;
+
+ENTITY IfcLightSource
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcLightSourceAmbient
+ ,IfcLightSourceDirectional
+ ,IfcLightSourceGoniometric
+ ,IfcLightSourcePositional))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Name : OPTIONAL IfcLabel;
+ LightColour : IfcColourRgb;
+ AmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;
+ Intensity : OPTIONAL IfcNormalisedRatioMeasure;
+END_ENTITY;
+
+ENTITY IfcLightSourceAmbient
+ SUBTYPE OF (IfcLightSource);
+END_ENTITY;
+
+ENTITY IfcLightSourceDirectional
+ SUBTYPE OF (IfcLightSource);
+ Orientation : IfcDirection;
+END_ENTITY;
+
+ENTITY IfcLightSourceGoniometric
+ SUBTYPE OF (IfcLightSource);
+ Position : IfcAxis2Placement3D;
+ ColourAppearance : OPTIONAL IfcColourRgb;
+ ColourTemperature : IfcThermodynamicTemperatureMeasure;
+ LuminousFlux : IfcLuminousFluxMeasure;
+ LightEmissionSource : IfcLightEmissionSourceEnum;
+ LightDistributionDataSource : IfcLightDistributionDataSourceSelect;
+END_ENTITY;
+
+ENTITY IfcLightSourcePositional
+ SUPERTYPE OF (ONEOF
+ (IfcLightSourceSpot))
+ SUBTYPE OF (IfcLightSource);
+ Position : IfcCartesianPoint;
+ Radius : IfcPositiveLengthMeasure;
+ ConstantAttenuation : IfcReal;
+ DistanceAttenuation : IfcReal;
+ QuadricAttenuation : IfcReal;
+END_ENTITY;
+
+ENTITY IfcLightSourceSpot
+ SUBTYPE OF (IfcLightSourcePositional);
+ Orientation : IfcDirection;
+ ConcentrationExponent : OPTIONAL IfcReal;
+ SpreadAngle : IfcPositivePlaneAngleMeasure;
+ BeamWidthAngle : IfcPositivePlaneAngleMeasure;
+END_ENTITY;
+
+ENTITY IfcLine
+ SUBTYPE OF (IfcCurve);
+ Pnt : IfcCartesianPoint;
+ Dir : IfcVector;
+ WHERE
+ WR1 : Dir.Dim = Pnt.Dim;
+END_ENTITY;
+
+ENTITY IfcLinearDimension
+ SUBTYPE OF (IfcDimensionCurveDirectedCallout);
+END_ENTITY;
+
+ENTITY IfcLocalPlacement
+ SUBTYPE OF (IfcObjectPlacement);
+ PlacementRelTo : OPTIONAL IfcObjectPlacement;
+ RelativePlacement : IfcAxis2Placement;
+ WHERE
+ WR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);
+END_ENTITY;
+
+ENTITY IfcLocalTime;
+ HourComponent : IfcHourInDay;
+ MinuteComponent : OPTIONAL IfcMinuteInHour;
+ SecondComponent : OPTIONAL IfcSecondInMinute;
+ Zone : OPTIONAL IfcCoordinatedUniversalTimeOffset;
+ DaylightSavingOffset : OPTIONAL IfcDaylightSavingHour;
+ WHERE
+ WR21 : IfcValidTime (SELF);
+END_ENTITY;
+
+ENTITY IfcLoop
+ SUPERTYPE OF (ONEOF
+ (IfcEdgeLoop
+ ,IfcPolyLoop
+ ,IfcVertexLoop))
+ SUBTYPE OF (IfcTopologicalRepresentationItem);
+END_ENTITY;
+
+ENTITY IfcManifoldSolidBrep
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcFacetedBrep
+ ,IfcFacetedBrepWithVoids))
+ SUBTYPE OF (IfcSolidModel);
+ Outer : IfcClosedShell;
+END_ENTITY;
+
+ENTITY IfcMappedItem
+ SUBTYPE OF (IfcRepresentationItem);
+ MappingSource : IfcRepresentationMap;
+ MappingTarget : IfcCartesianTransformationOperator;
+END_ENTITY;
+
+ENTITY IfcMaterial;
+ Name : IfcLabel;
+ INVERSE
+ HasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;
+ ClassifiedAs : SET [0:1] OF IfcMaterialClassificationRelationship FOR ClassifiedMaterial;
+END_ENTITY;
+
+ENTITY IfcMaterialClassificationRelationship;
+ MaterialClassifications : SET [1:?] OF IfcClassificationNotationSelect;
+ ClassifiedMaterial : IfcMaterial;
+END_ENTITY;
+
+ENTITY IfcMaterialDefinitionRepresentation
+ SUBTYPE OF (IfcProductRepresentation);
+ RepresentedMaterial : IfcMaterial;
+ WHERE
+ WR11 : SIZEOF(QUERY(temp <* Representations |
+ (NOT('IFC2X3.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp)))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcMaterialLayer;
+ Material : OPTIONAL IfcMaterial;
+ LayerThickness : IfcPositiveLengthMeasure;
+ IsVentilated : OPTIONAL IfcLogical;
+ INVERSE
+ ToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;
+END_ENTITY;
+
+ENTITY IfcMaterialLayerSet;
+ MaterialLayers : LIST [1:?] OF IfcMaterialLayer;
+ LayerSetName : OPTIONAL IfcLabel;
+ DERIVE
+ TotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);
+END_ENTITY;
+
+ENTITY IfcMaterialLayerSetUsage;
+ ForLayerSet : IfcMaterialLayerSet;
+ LayerSetDirection : IfcLayerSetDirectionEnum;
+ DirectionSense : IfcDirectionSenseEnum;
+ OffsetFromReferenceLine : IfcLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcMaterialList;
+ Materials : LIST [1:?] OF IfcMaterial;
+END_ENTITY;
+
+ENTITY IfcMaterialProperties
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcExtendedMaterialProperties
+ ,IfcFuelProperties
+ ,IfcGeneralMaterialProperties
+ ,IfcHygroscopicMaterialProperties
+ ,IfcMechanicalMaterialProperties
+ ,IfcOpticalMaterialProperties
+ ,IfcProductsOfCombustionProperties
+ ,IfcThermalMaterialProperties
+ ,IfcWaterProperties));
+ Material : IfcMaterial;
+END_ENTITY;
+
+ENTITY IfcMeasureWithUnit;
+ ValueComponent : IfcValue;
+ UnitComponent : IfcUnit;
+END_ENTITY;
+
+ENTITY IfcMechanicalConcreteMaterialProperties
+ SUBTYPE OF (IfcMechanicalMaterialProperties);
+ CompressiveStrength : OPTIONAL IfcPressureMeasure;
+ MaxAggregateSize : OPTIONAL IfcPositiveLengthMeasure;
+ AdmixturesDescription : OPTIONAL IfcText;
+ Workability : OPTIONAL IfcText;
+ ProtectivePoreRatio : OPTIONAL IfcNormalisedRatioMeasure;
+ WaterImpermeability : OPTIONAL IfcText;
+END_ENTITY;
+
+ENTITY IfcMechanicalFastener
+ SUBTYPE OF (IfcFastener);
+ NominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
+ NominalLength : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcMechanicalFastenerType
+ SUBTYPE OF (IfcFastenerType);
+END_ENTITY;
+
+ENTITY IfcMechanicalMaterialProperties
+ SUPERTYPE OF (ONEOF
+ (IfcMechanicalConcreteMaterialProperties
+ ,IfcMechanicalSteelMaterialProperties))
+ SUBTYPE OF (IfcMaterialProperties);
+ DynamicViscosity : OPTIONAL IfcDynamicViscosityMeasure;
+ YoungModulus : OPTIONAL IfcModulusOfElasticityMeasure;
+ ShearModulus : OPTIONAL IfcModulusOfElasticityMeasure;
+ PoissonRatio : OPTIONAL IfcPositiveRatioMeasure;
+ ThermalExpansionCoefficient : OPTIONAL IfcThermalExpansionCoefficientMeasure;
+ UNIQUE
+ UR11 : Material;
+ WHERE
+ WR21 : NOT(EXISTS(YoungModulus)) OR (YoungModulus >= 0.0);
+ WR22 : NOT(EXISTS(ShearModulus)) OR (ShearModulus >= 0.0);
+END_ENTITY;
+
+ENTITY IfcMechanicalSteelMaterialProperties
+ SUBTYPE OF (IfcMechanicalMaterialProperties);
+ YieldStress : OPTIONAL IfcPressureMeasure;
+ UltimateStress : OPTIONAL IfcPressureMeasure;
+ UltimateStrain : OPTIONAL IfcPositiveRatioMeasure;
+ HardeningModule : OPTIONAL IfcModulusOfElasticityMeasure;
+ ProportionalStress : OPTIONAL IfcPressureMeasure;
+ PlasticStrain : OPTIONAL IfcPositiveRatioMeasure;
+ Relaxations : OPTIONAL SET [1:?] OF IfcRelaxation;
+ WHERE
+ WR31 : NOT(EXISTS(YieldStress)) OR (YieldStress >= 0.);
+ WR32 : NOT(EXISTS(UltimateStress)) OR (UltimateStress >= 0.);
+ WR33 : NOT(EXISTS(HardeningModule)) OR (HardeningModule >= 0.);
+ WR34 : NOT(EXISTS(ProportionalStress)) OR (ProportionalStress >= 0.);
+END_ENTITY;
+
+ENTITY IfcMember
+ SUBTYPE OF (IfcBuildingElement);
+END_ENTITY;
+
+ENTITY IfcMemberType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcMemberTypeEnum;
+END_ENTITY;
+
+ENTITY IfcMetric
+ SUBTYPE OF (IfcConstraint);
+ Benchmark : IfcBenchmarkEnum;
+ ValueSource : OPTIONAL IfcLabel;
+ DataValue : IfcMetricValueSelect;
+END_ENTITY;
+
+ENTITY IfcMonetaryUnit;
+ Currency : IfcCurrencyEnum;
+END_ENTITY;
+
+ENTITY IfcMotorConnectionType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcMotorConnectionTypeEnum;
+END_ENTITY;
+
+ENTITY IfcMove
+ SUBTYPE OF (IfcTask);
+ MoveFrom : IfcSpatialStructureElement;
+ MoveTo : IfcSpatialStructureElement;
+ PunchList : OPTIONAL LIST [1:?] OF UNIQUE IfcText;
+ WHERE
+ WR1 : SIZEOF(SELF\IfcProcess.OperatesOn) >= 1;
+ WR2 : SIZEOF(QUERY(temp <* OperatesOn |
+ SIZEOF(QUERY(temp2 <* temp.RelatedObjects |
+ ('IFC2X3.IFCACTOR' IN TYPEOF (temp2)) OR
+ ('IFC2X3.IFCEQUIPMENTELEMENT' IN TYPEOF (temp2)) OR
+ ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp2)) )) >=1
+ )) >= 1;
+ WR3 : EXISTS(SELF\IfcRoot.Name);
+END_ENTITY;
+
+ENTITY IfcNamedUnit
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcContextDependentUnit
+ ,IfcConversionBasedUnit
+ ,IfcSIUnit));
+ Dimensions : IfcDimensionalExponents;
+ UnitType : IfcUnitEnum;
+ WHERE
+ WR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);
+END_ENTITY;
+
+ENTITY IfcObject
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcActor
+ ,IfcControl
+ ,IfcGroup
+ ,IfcProcess
+ ,IfcProduct
+ ,IfcProject
+ ,IfcResource))
+ SUBTYPE OF (IfcObjectDefinition);
+ ObjectType : OPTIONAL IfcLabel;
+ INVERSE
+ IsDefinedBy : SET [0:?] OF IfcRelDefines FOR RelatedObjects;
+ WHERE
+ WR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X3.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;
+END_ENTITY;
+
+ENTITY IfcObjectDefinition
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcObject
+ ,IfcTypeObject))
+ SUBTYPE OF (IfcRoot);
+ INVERSE
+ HasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;
+ IsDecomposedBy : SET [0:?] OF IfcRelDecomposes FOR RelatingObject;
+ Decomposes : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects;
+ HasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;
+END_ENTITY;
+
+ENTITY IfcObjectPlacement
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcGridPlacement
+ ,IfcLocalPlacement));
+ INVERSE
+ PlacesObject : SET [1:1] OF IfcProduct FOR ObjectPlacement;
+ ReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo;
+END_ENTITY;
+
+ENTITY IfcObjective
+ SUBTYPE OF (IfcConstraint);
+ BenchmarkValues : OPTIONAL IfcMetric;
+ ResultValues : OPTIONAL IfcMetric;
+ ObjectiveQualifier : IfcObjectiveEnum;
+ UserDefinedQualifier : OPTIONAL IfcLabel;
+ WHERE
+ WR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR
+ ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\IfcObjective.UserDefinedQualifier));
+END_ENTITY;
+
+ENTITY IfcOccupant
+ SUBTYPE OF (IfcActor);
+ PredefinedType : IfcOccupantTypeEnum;
+ WHERE
+ WR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED)
+ OR EXISTS(SELF\IfcObject.ObjectType);
+END_ENTITY;
+
+ENTITY IfcOffsetCurve2D
+ SUBTYPE OF (IfcCurve);
+ BasisCurve : IfcCurve;
+ Distance : IfcLengthMeasure;
+ SelfIntersect : LOGICAL;
+ WHERE
+ WR1 : BasisCurve.Dim = 2;
+END_ENTITY;
+
+ENTITY IfcOffsetCurve3D
+ SUBTYPE OF (IfcCurve);
+ BasisCurve : IfcCurve;
+ Distance : IfcLengthMeasure;
+ SelfIntersect : LOGICAL;
+ RefDirection : IfcDirection;
+ WHERE
+ WR1 : BasisCurve.Dim = 3;
+END_ENTITY;
+
+ENTITY IfcOneDirectionRepeatFactor
+ SUPERTYPE OF (ONEOF
+ (IfcTwoDirectionRepeatFactor))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ RepeatFactor : IfcVector;
+END_ENTITY;
+
+ENTITY IfcOpenShell
+ SUBTYPE OF (IfcConnectedFaceSet);
+END_ENTITY;
+
+ENTITY IfcOpeningElement
+ SUBTYPE OF (IfcFeatureElementSubtraction);
+ INVERSE
+ HasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;
+END_ENTITY;
+
+ENTITY IfcOpticalMaterialProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ VisibleTransmittance : OPTIONAL IfcPositiveRatioMeasure;
+ SolarTransmittance : OPTIONAL IfcPositiveRatioMeasure;
+ ThermalIrTransmittance : OPTIONAL IfcPositiveRatioMeasure;
+ ThermalIrEmissivityBack : OPTIONAL IfcPositiveRatioMeasure;
+ ThermalIrEmissivityFront : OPTIONAL IfcPositiveRatioMeasure;
+ VisibleReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;
+ VisibleReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;
+ SolarReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;
+ SolarReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;
+ UNIQUE
+ UR11 : Material;
+END_ENTITY;
+
+ENTITY IfcOrderAction
+ SUBTYPE OF (IfcTask);
+ ActionID : IfcIdentifier;
+ UNIQUE
+ UR2 : ActionID;
+END_ENTITY;
+
+ENTITY IfcOrganization;
+ Id : OPTIONAL IfcIdentifier;
+ Name : IfcLabel;
+ Description : OPTIONAL IfcText;
+ Roles : OPTIONAL LIST [1:?] OF IfcActorRole;
+ Addresses : OPTIONAL LIST [1:?] OF IfcAddress;
+ INVERSE
+ IsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;
+ Relates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;
+ Engages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;
+END_ENTITY;
+
+ENTITY IfcOrganizationRelationship;
+ Name : IfcLabel;
+ Description : OPTIONAL IfcText;
+ RelatingOrganization : IfcOrganization;
+ RelatedOrganizations : SET [1:?] OF IfcOrganization;
+END_ENTITY;
+
+ENTITY IfcOrientedEdge
+ SUBTYPE OF (IfcEdge);
+ EdgeElement : IfcEdge;
+ Orientation : BOOLEAN;
+ DERIVE
+ SELF\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose
+ (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);
+ SELF\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose
+ (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);
+ WHERE
+ WR1 : NOT('IFC2X3.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));
+END_ENTITY;
+
+ENTITY IfcOutletType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcOutletTypeEnum;
+END_ENTITY;
+
+ENTITY IfcOwnerHistory;
+ OwningUser : IfcPersonAndOrganization;
+ OwningApplication : IfcApplication;
+ State : OPTIONAL IfcStateEnum;
+ ChangeAction : IfcChangeActionEnum;
+ LastModifiedDate : OPTIONAL IfcTimeStamp;
+ LastModifyingUser : OPTIONAL IfcPersonAndOrganization;
+ LastModifyingApplication : OPTIONAL IfcApplication;
+ CreationDate : IfcTimeStamp;
+END_ENTITY;
+
+ENTITY IfcParameterizedProfileDef
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCShapeProfileDef
+ ,IfcCircleProfileDef
+ ,IfcCraneRailAShapeProfileDef
+ ,IfcCraneRailFShapeProfileDef
+ ,IfcEllipseProfileDef
+ ,IfcIShapeProfileDef
+ ,IfcLShapeProfileDef
+ ,IfcRectangleProfileDef
+ ,IfcTShapeProfileDef
+ ,IfcTrapeziumProfileDef
+ ,IfcUShapeProfileDef
+ ,IfcZShapeProfileDef))
+ SUBTYPE OF (IfcProfileDef);
+ Position : IfcAxis2Placement2D;
+END_ENTITY;
+
+ENTITY IfcPath
+ SUBTYPE OF (IfcTopologicalRepresentationItem);
+ EdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;
+ WHERE
+ WR1 : IfcPathHeadToTail(SELF);
+END_ENTITY;
+
+ENTITY IfcPerformanceHistory
+ SUBTYPE OF (IfcControl);
+ LifeCyclePhase : IfcLabel;
+END_ENTITY;
+
+ENTITY IfcPermeableCoveringProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ OperationType : IfcPermeableCoveringOperationEnum;
+ PanelPosition : IfcWindowPanelPositionEnum;
+ FrameDepth : OPTIONAL IfcPositiveLengthMeasure;
+ FrameThickness : OPTIONAL IfcPositiveLengthMeasure;
+ ShapeAspectStyle : OPTIONAL IfcShapeAspect;
+END_ENTITY;
+
+ENTITY IfcPermit
+ SUBTYPE OF (IfcControl);
+ PermitID : IfcIdentifier;
+ UNIQUE
+ UR2 : PermitID;
+END_ENTITY;
+
+ENTITY IfcPerson;
+ Id : OPTIONAL IfcIdentifier;
+ FamilyName : OPTIONAL IfcLabel;
+ GivenName : OPTIONAL IfcLabel;
+ MiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;
+ PrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;
+ SuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;
+ Roles : OPTIONAL LIST [1:?] OF IfcActorRole;
+ Addresses : OPTIONAL LIST [1:?] OF IfcAddress;
+ INVERSE
+ EngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;
+ WHERE
+ WR1 : EXISTS(FamilyName) OR
+ EXISTS(GivenName);
+END_ENTITY;
+
+ENTITY IfcPersonAndOrganization;
+ ThePerson : IfcPerson;
+ TheOrganization : IfcOrganization;
+ Roles : OPTIONAL LIST [1:?] OF IfcActorRole;
+END_ENTITY;
+
+ENTITY IfcPhysicalComplexQuantity
+ SUBTYPE OF (IfcPhysicalQuantity);
+ HasQuantities : SET [1:?] OF IfcPhysicalQuantity;
+ Discrimination : IfcLabel;
+ Quality : OPTIONAL IfcLabel;
+ Usage : OPTIONAL IfcLabel;
+ WHERE
+ WR21 : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;
+END_ENTITY;
+
+ENTITY IfcPhysicalQuantity
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcPhysicalComplexQuantity
+ ,IfcPhysicalSimpleQuantity));
+ Name : IfcLabel;
+ Description : OPTIONAL IfcText;
+ INVERSE
+ PartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;
+END_ENTITY;
+
+ENTITY IfcPhysicalSimpleQuantity
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcQuantityArea
+ ,IfcQuantityCount
+ ,IfcQuantityLength
+ ,IfcQuantityTime
+ ,IfcQuantityVolume
+ ,IfcQuantityWeight))
+ SUBTYPE OF (IfcPhysicalQuantity);
+ Unit : OPTIONAL IfcNamedUnit;
+END_ENTITY;
+
+ENTITY IfcPile
+ SUBTYPE OF (IfcBuildingElement);
+ PredefinedType : IfcPileTypeEnum;
+ ConstructionType : OPTIONAL IfcPileConstructionEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
+END_ENTITY;
+
+ENTITY IfcPipeFittingType
+ SUBTYPE OF (IfcFlowFittingType);
+ PredefinedType : IfcPipeFittingTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcPipeSegmentType
+ SUBTYPE OF (IfcFlowSegmentType);
+ PredefinedType : IfcPipeSegmentTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcPixelTexture
+ SUBTYPE OF (IfcSurfaceTexture);
+ Width : IfcInteger;
+ Height : IfcInteger;
+ ColourComponents : IfcInteger;
+ Pixel : LIST [1:?] OF BINARY(32);
+ WHERE
+ WR21 : Width >= 1;
+ WR22 : Height >= 1;
+ WR23 : {1 <= ColourComponents <= 4};
+ WR24 : SIZEOF(Pixel) = (Width * Height);
+END_ENTITY;
+
+ENTITY IfcPlacement
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcAxis1Placement
+ ,IfcAxis2Placement2D
+ ,IfcAxis2Placement3D))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Location : IfcCartesianPoint;
+ DERIVE
+ Dim : IfcDimensionCount := Location.Dim;
+END_ENTITY;
+
+ENTITY IfcPlanarBox
+ SUBTYPE OF (IfcPlanarExtent);
+ Placement : IfcAxis2Placement;
+END_ENTITY;
+
+ENTITY IfcPlanarExtent
+ SUPERTYPE OF (ONEOF
+ (IfcPlanarBox))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ SizeInX : IfcLengthMeasure;
+ SizeInY : IfcLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcPlane
+ SUBTYPE OF (IfcElementarySurface);
+END_ENTITY;
+
+ENTITY IfcPlate
+ SUBTYPE OF (IfcBuildingElement);
+END_ENTITY;
+
+ENTITY IfcPlateType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcPlateTypeEnum;
+ WHERE
+ WR1 : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | 'IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) = 1;
+END_ENTITY;
+
+ENTITY IfcPoint
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCartesianPoint
+ ,IfcPointOnCurve
+ ,IfcPointOnSurface))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+END_ENTITY;
+
+ENTITY IfcPointOnCurve
+ SUBTYPE OF (IfcPoint);
+ BasisCurve : IfcCurve;
+ PointParameter : IfcParameterValue;
+ DERIVE
+ Dim : IfcDimensionCount := BasisCurve.Dim;
+END_ENTITY;
+
+ENTITY IfcPointOnSurface
+ SUBTYPE OF (IfcPoint);
+ BasisSurface : IfcSurface;
+ PointParameterU : IfcParameterValue;
+ PointParameterV : IfcParameterValue;
+ DERIVE
+ Dim : IfcDimensionCount := BasisSurface.Dim;
+END_ENTITY;
+
+ENTITY IfcPolyLoop
+ SUBTYPE OF (IfcLoop);
+ Polygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;
+ WHERE
+ WR21 : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;
+END_ENTITY;
+
+ENTITY IfcPolygonalBoundedHalfSpace
+ SUBTYPE OF (IfcHalfSpaceSolid);
+ Position : IfcAxis2Placement3D;
+ PolygonalBoundary : IfcBoundedCurve;
+ WHERE
+ WR41 : PolygonalBoundary.Dim = 2;
+ WR42 : SIZEOF(TYPEOF(PolygonalBoundary) * [
+ 'IFC2X3.IFCPOLYLINE',
+ 'IFC2X3.IFCCOMPOSITECURVE']
+ ) = 1;
+END_ENTITY;
+
+ENTITY IfcPolyline
+ SUBTYPE OF (IfcBoundedCurve);
+ Points : LIST [2:?] OF IfcCartesianPoint;
+ WHERE
+ WR41 : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;
+END_ENTITY;
+
+ENTITY IfcPort
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDistributionPort))
+ SUBTYPE OF (IfcProduct);
+ INVERSE
+ ContainedIn : IfcRelConnectsPortToElement FOR RelatingPort;
+ ConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;
+ ConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;
+END_ENTITY;
+
+ENTITY IfcPostalAddress
+ SUBTYPE OF (IfcAddress);
+ InternalLocation : OPTIONAL IfcLabel;
+ AddressLines : OPTIONAL LIST [1:?] OF IfcLabel;
+ PostalBox : OPTIONAL IfcLabel;
+ Town : OPTIONAL IfcLabel;
+ Region : OPTIONAL IfcLabel;
+ PostalCode : OPTIONAL IfcLabel;
+ Country : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : EXISTS (InternalLocation) OR
+ EXISTS (AddressLines) OR
+ EXISTS (PostalBox) OR
+ EXISTS (PostalCode) OR
+ EXISTS (Town) OR
+ EXISTS (Region) OR
+ EXISTS (Country);
+END_ENTITY;
+
+ENTITY IfcPreDefinedColour
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDraughtingPreDefinedColour))
+ SUBTYPE OF (IfcPreDefinedItem);
+END_ENTITY;
+
+ENTITY IfcPreDefinedCurveFont
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDraughtingPreDefinedCurveFont))
+ SUBTYPE OF (IfcPreDefinedItem);
+END_ENTITY;
+
+ENTITY IfcPreDefinedDimensionSymbol
+ SUBTYPE OF (IfcPreDefinedSymbol);
+ WHERE
+ WR31 : SELF\IfcPreDefinedItem.Name IN ['arc length','conical taper','counterbore',
+ 'countersink','depth','diameter','plus minus','radius',
+ 'slope','spherical diameter','spherical radius','square'];
+END_ENTITY;
+
+ENTITY IfcPreDefinedItem
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcPreDefinedColour
+ ,IfcPreDefinedCurveFont
+ ,IfcPreDefinedSymbol
+ ,IfcPreDefinedTextFont));
+ Name : IfcLabel;
+END_ENTITY;
+
+ENTITY IfcPreDefinedPointMarkerSymbol
+ SUBTYPE OF (IfcPreDefinedSymbol);
+ WHERE
+ WR31 : SELF\IfcPreDefinedItem.Name IN ['asterisk','circle','dot','plus','square','triangle','x'];
+END_ENTITY;
+
+ENTITY IfcPreDefinedSymbol
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcPreDefinedDimensionSymbol
+ ,IfcPreDefinedPointMarkerSymbol
+ ,IfcPreDefinedTerminatorSymbol))
+ SUBTYPE OF (IfcPreDefinedItem);
+END_ENTITY;
+
+ENTITY IfcPreDefinedTerminatorSymbol
+ SUBTYPE OF (IfcPreDefinedSymbol);
+ WHERE
+ WR31 : SELF\IfcPreDefinedItem.Name IN ['blanked arrow','blanked box',
+ 'blanked dot','dimension origin','filled arrow','filled box',
+ 'filled dot','integral symbol','open arrow','slash','unfilled arrow'];
+END_ENTITY;
+
+ENTITY IfcPreDefinedTextFont
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDraughtingPreDefinedTextFont
+ ,IfcTextStyleFontModel))
+ SUBTYPE OF (IfcPreDefinedItem);
+END_ENTITY;
+
+ENTITY IfcPresentationLayerAssignment
+ SUPERTYPE OF (ONEOF
+ (IfcPresentationLayerWithStyle));
+ Name : IfcLabel;
+ Description : OPTIONAL IfcText;
+ AssignedItems : SET [1:?] OF IfcLayeredItem;
+ Identifier : OPTIONAL IfcIdentifier;
+END_ENTITY;
+
+ENTITY IfcPresentationLayerWithStyle
+ SUBTYPE OF (IfcPresentationLayerAssignment);
+ LayerOn : LOGICAL;
+ LayerFrozen : LOGICAL;
+ LayerBlocked : LOGICAL;
+ LayerStyles : SET [0:?] OF IfcPresentationStyleSelect;
+END_ENTITY;
+
+ENTITY IfcPresentationStyle
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCurveStyle
+ ,IfcFillAreaStyle
+ ,IfcSurfaceStyle
+ ,IfcSymbolStyle
+ ,IfcTextStyle));
+ Name : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcPresentationStyleAssignment;
+ Styles : SET [1:?] OF IfcPresentationStyleSelect;
+END_ENTITY;
+
+ENTITY IfcProcedure
+ SUBTYPE OF (IfcProcess);
+ ProcedureID : IfcIdentifier;
+ ProcedureType : IfcProcedureTypeEnum;
+ UserDefinedProcedureType : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
+ WR2 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
+ WR3 : EXISTS(SELF\IfcRoot.Name);
+ WR4 : (ProcedureType <> IfcProcedureTypeEnum.USERDEFINED) OR
+ ((ProcedureType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcProcedure.UserDefinedProcedureType));
+END_ENTITY;
+
+ENTITY IfcProcess
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcProcedure
+ ,IfcTask))
+ SUBTYPE OF (IfcObject);
+ INVERSE
+ OperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;
+ IsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;
+ IsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;
+END_ENTITY;
+
+ENTITY IfcProduct
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcAnnotation
+ ,IfcElement
+ ,IfcGrid
+ ,IfcPort
+ ,IfcProxy
+ ,IfcSpatialStructureElement
+ ,IfcStructuralActivity
+ ,IfcStructuralItem))
+ SUBTYPE OF (IfcObject);
+ ObjectPlacement : OPTIONAL IfcObjectPlacement;
+ Representation : OPTIONAL IfcProductRepresentation;
+ INVERSE
+ ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;
+ WHERE
+ WR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))
+ OR (EXISTS(Representation) AND
+ (NOT('IFC2X3.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))
+ OR (NOT(EXISTS(Representation)));
+END_ENTITY;
+
+ENTITY IfcProductDefinitionShape
+ SUBTYPE OF (IfcProductRepresentation);
+ INVERSE
+ ShapeOfProduct : SET [1:1] OF IfcProduct FOR Representation;
+ HasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;
+ WHERE
+ WR11 : SIZEOF(QUERY(temp <* Representations |
+ (NOT('IFC2X3.IFCSHAPEMODEL' IN TYPEOF(temp)))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcProductRepresentation
+ SUPERTYPE OF (ONEOF
+ (IfcMaterialDefinitionRepresentation
+ ,IfcProductDefinitionShape));
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ Representations : LIST [1:?] OF IfcRepresentation;
+END_ENTITY;
+
+ENTITY IfcProductsOfCombustionProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ SpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;
+ N20Content : OPTIONAL IfcPositiveRatioMeasure;
+ COContent : OPTIONAL IfcPositiveRatioMeasure;
+ CO2Content : OPTIONAL IfcPositiveRatioMeasure;
+ UNIQUE
+ UR11 : Material;
+END_ENTITY;
+
+ENTITY IfcProfileDef
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcArbitraryClosedProfileDef
+ ,IfcArbitraryOpenProfileDef
+ ,IfcCompositeProfileDef
+ ,IfcDerivedProfileDef
+ ,IfcParameterizedProfileDef));
+ ProfileType : IfcProfileTypeEnum;
+ ProfileName : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcProfileProperties
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcGeneralProfileProperties
+ ,IfcRibPlateProfileProperties));
+ ProfileName : OPTIONAL IfcLabel;
+ ProfileDefinition : OPTIONAL IfcProfileDef;
+END_ENTITY;
+
+ENTITY IfcProject
+ SUBTYPE OF (IfcObject);
+ LongName : OPTIONAL IfcLabel;
+ Phase : OPTIONAL IfcLabel;
+ RepresentationContexts : SET [1:?] OF IfcRepresentationContext;
+ UnitsInContext : IfcUnitAssignment;
+ WHERE
+ WR31 : EXISTS(SELF\IfcRoot.Name);
+ WR32 : SIZEOF(QUERY(Temp <* RepresentationContexts |
+ 'IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp)
+ )) = 0;
+ WR33 : SIZEOF(SELF\IfcObjectDefinition.Decomposes) = 0;
+END_ENTITY;
+
+ENTITY IfcProjectOrder
+ SUBTYPE OF (IfcControl);
+ ID : IfcIdentifier;
+ PredefinedType : IfcProjectOrderTypeEnum;
+ Status : OPTIONAL IfcLabel;
+ UNIQUE
+ UR2 : ID;
+END_ENTITY;
+
+ENTITY IfcProjectOrderRecord
+ SUBTYPE OF (IfcControl);
+ Records : LIST [1:?] OF UNIQUE IfcRelAssignsToProjectOrder;
+ PredefinedType : IfcProjectOrderRecordTypeEnum;
+END_ENTITY;
+
+ENTITY IfcProjectionCurve
+ SUBTYPE OF (IfcAnnotationCurveOccurrence);
+END_ENTITY;
+
+ENTITY IfcProjectionElement
+ SUBTYPE OF (IfcFeatureElementAddition);
+END_ENTITY;
+
+ENTITY IfcProperty
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcComplexProperty
+ ,IfcSimpleProperty));
+ Name : IfcIdentifier;
+ Description : OPTIONAL IfcText;
+ INVERSE
+ PropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;
+ PropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;
+ PartOfComplex : SET [0:1] OF IfcComplexProperty FOR HasProperties;
+END_ENTITY;
+
+ENTITY IfcPropertyBoundedValue
+ SUBTYPE OF (IfcSimpleProperty);
+ UpperBoundValue : OPTIONAL IfcValue;
+ LowerBoundValue : OPTIONAL IfcValue;
+ Unit : OPTIONAL IfcUnit;
+ WHERE
+ WR21 : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR
+ (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));
+ WR22 : EXISTS(UpperBoundValue) OR EXISTS(LowerBoundValue);
+END_ENTITY;
+
+ENTITY IfcPropertyConstraintRelationship;
+ RelatingConstraint : IfcConstraint;
+ RelatedProperties : SET [1:?] OF IfcProperty;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+END_ENTITY;
+
+ENTITY IfcPropertyDefinition
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcPropertySetDefinition))
+ SUBTYPE OF (IfcRoot);
+ INVERSE
+ HasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;
+END_ENTITY;
+
+ENTITY IfcPropertyDependencyRelationship;
+ DependingProperty : IfcProperty;
+ DependantProperty : IfcProperty;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ Expression : OPTIONAL IfcText;
+ WHERE
+ WR1 : DependingProperty :<>: DependantProperty;
+END_ENTITY;
+
+ENTITY IfcPropertyEnumeratedValue
+ SUBTYPE OF (IfcSimpleProperty);
+ EnumerationValues : LIST [1:?] OF IfcValue;
+ EnumerationReference : OPTIONAL IfcPropertyEnumeration;
+ WHERE
+ WR1 : NOT(EXISTS(EnumerationReference)) OR
+ (SIZEOF(QUERY(temp <* EnumerationValues |
+ temp IN EnumerationReference.EnumerationValues))
+ = SIZEOF(EnumerationValues));
+END_ENTITY;
+
+ENTITY IfcPropertyEnumeration;
+ Name : IfcLabel;
+ EnumerationValues : LIST [1:?] OF UNIQUE IfcValue;
+ Unit : OPTIONAL IfcUnit;
+ UNIQUE
+ UR1 : Name;
+ WHERE
+ WR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues |
+ NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcPropertyListValue
+ SUBTYPE OF (IfcSimpleProperty);
+ ListValues : LIST [1:?] OF IfcValue;
+ Unit : OPTIONAL IfcUnit;
+ WHERE
+ WR31 : SIZEOF(QUERY(temp <* SELF.ListValues |
+ NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcPropertyReferenceValue
+ SUBTYPE OF (IfcSimpleProperty);
+ UsageName : OPTIONAL IfcLabel;
+ PropertyReference : IfcObjectReferenceSelect;
+END_ENTITY;
+
+ENTITY IfcPropertySet
+ SUBTYPE OF (IfcPropertySetDefinition);
+ HasProperties : SET [1:?] OF IfcProperty;
+ WHERE
+ WR31 : EXISTS(SELF\IfcRoot.Name);
+ WR32 : IfcUniquePropertyName(HasProperties);
+END_ENTITY;
+
+ENTITY IfcPropertySetDefinition
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcDoorLiningProperties
+ ,IfcDoorPanelProperties
+ ,IfcElementQuantity
+ ,IfcEnergyProperties
+ ,IfcFluidFlowProperties
+ ,IfcPermeableCoveringProperties
+ ,IfcPropertySet
+ ,IfcReinforcementDefinitionProperties
+ ,IfcServiceLifeFactor
+ ,IfcSoundProperties
+ ,IfcSoundValue
+ ,IfcSpaceThermalLoadProperties
+ ,IfcWindowLiningProperties
+ ,IfcWindowPanelProperties))
+ SUBTYPE OF (IfcPropertyDefinition);
+ INVERSE
+ PropertyDefinitionOf : SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;
+ DefinesType : SET [0:1] OF IfcTypeObject FOR HasPropertySets;
+END_ENTITY;
+
+ENTITY IfcPropertySingleValue
+ SUBTYPE OF (IfcSimpleProperty);
+ NominalValue : OPTIONAL IfcValue;
+ Unit : OPTIONAL IfcUnit;
+END_ENTITY;
+
+ENTITY IfcPropertyTableValue
+ SUBTYPE OF (IfcSimpleProperty);
+ DefiningValues : LIST [1:?] OF UNIQUE IfcValue;
+ DefinedValues : LIST [1:?] OF IfcValue;
+ Expression : OPTIONAL IfcText;
+ DefiningUnit : OPTIONAL IfcUnit;
+ DefinedUnit : OPTIONAL IfcUnit;
+ WHERE
+ WR1 : SIZEOF(DefiningValues) = SIZEOF(DefinedValues);
+ WR2 : SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])))=0;
+ WR3 : SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])))=0;
+END_ENTITY;
+
+ENTITY IfcProtectiveDeviceType
+ SUBTYPE OF (IfcFlowControllerType);
+ PredefinedType : IfcProtectiveDeviceTypeEnum;
+END_ENTITY;
+
+ENTITY IfcProxy
+ SUBTYPE OF (IfcProduct);
+ ProxyType : IfcObjectTypeEnum;
+ Tag : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : EXISTS(SELF\IfcRoot.Name);
+END_ENTITY;
+
+ENTITY IfcPumpType
+ SUBTYPE OF (IfcFlowMovingDeviceType);
+ PredefinedType : IfcPumpTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcQuantityArea
+ SUBTYPE OF (IfcPhysicalSimpleQuantity);
+ AreaValue : IfcAreaMeasure;
+ WHERE
+ WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
+ (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);
+ WR22 : AreaValue >= 0.;
+END_ENTITY;
+
+ENTITY IfcQuantityCount
+ SUBTYPE OF (IfcPhysicalSimpleQuantity);
+ CountValue : IfcCountMeasure;
+ WHERE
+ WR21 : CountValue >= 0.;
+END_ENTITY;
+
+ENTITY IfcQuantityLength
+ SUBTYPE OF (IfcPhysicalSimpleQuantity);
+ LengthValue : IfcLengthMeasure;
+ WHERE
+ WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
+ (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);
+ WR22 : LengthValue >= 0.;
+END_ENTITY;
+
+ENTITY IfcQuantityTime
+ SUBTYPE OF (IfcPhysicalSimpleQuantity);
+ TimeValue : IfcTimeMeasure;
+ WHERE
+ WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
+ (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);
+ WR22 : TimeValue >= 0.;
+END_ENTITY;
+
+ENTITY IfcQuantityVolume
+ SUBTYPE OF (IfcPhysicalSimpleQuantity);
+ VolumeValue : IfcVolumeMeasure;
+ WHERE
+ WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
+ (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);
+ WR22 : VolumeValue >= 0.;
+END_ENTITY;
+
+ENTITY IfcQuantityWeight
+ SUBTYPE OF (IfcPhysicalSimpleQuantity);
+ WeightValue : IfcMassMeasure;
+ WHERE
+ WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
+ (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);
+ WR22 : WeightValue >= 0.;
+END_ENTITY;
+
+ENTITY IfcRadiusDimension
+ SUBTYPE OF (IfcDimensionCurveDirectedCallout);
+END_ENTITY;
+
+ENTITY IfcRailing
+ SUBTYPE OF (IfcBuildingElement);
+ PredefinedType : OPTIONAL IfcRailingTypeEnum;
+END_ENTITY;
+
+ENTITY IfcRailingType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcRailingTypeEnum;
+END_ENTITY;
+
+ENTITY IfcRamp
+ SUBTYPE OF (IfcBuildingElement);
+ ShapeType : IfcRampTypeEnum;
+ WHERE
+ WR1 : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR
+ ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\IfcProduct.Representation))));
+END_ENTITY;
+
+ENTITY IfcRampFlight
+ SUBTYPE OF (IfcBuildingElement);
+END_ENTITY;
+
+ENTITY IfcRampFlightType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcRampFlightTypeEnum;
+END_ENTITY;
+
+ENTITY IfcRationalBezierCurve
+ SUBTYPE OF (IfcBezierCurve);
+ WeightsData : LIST [2:?] OF REAL;
+ DERIVE
+ Weights : ARRAY [0:255] OF REAL := IfcListToArray(WeightsData,0,SELF\IfcBSplineCurve.UpperIndexOnControlPoints);
+ WHERE
+ WR1 : SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineCurve.ControlPointsList);
+ WR2 : IfcCurveWeightsPositive(SELF);
+END_ENTITY;
+
+ENTITY IfcRectangleHollowProfileDef
+ SUBTYPE OF (IfcRectangleProfileDef);
+ WallThickness : IfcPositiveLengthMeasure;
+ InnerFilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ OuterFilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR31 : (WallThickness < (SELF\IfcRectangleProfileDef.XDim/2.)) AND
+ (WallThickness < (SELF\IfcRectangleProfileDef.YDim/2.));
+ WR32 : NOT(EXISTS(OuterFilletRadius)) OR
+ ((OuterFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2.)) AND
+ (OuterFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2.)));
+ WR33 : NOT(EXISTS(InnerFilletRadius)) OR
+ ((InnerFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND
+ (InnerFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2. - WallThickness)));
+END_ENTITY;
+
+ENTITY IfcRectangleProfileDef
+ SUPERTYPE OF (ONEOF
+ (IfcRectangleHollowProfileDef
+ ,IfcRoundedRectangleProfileDef))
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ XDim : IfcPositiveLengthMeasure;
+ YDim : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcRectangularPyramid
+ SUBTYPE OF (IfcCsgPrimitive3D);
+ XLength : IfcPositiveLengthMeasure;
+ YLength : IfcPositiveLengthMeasure;
+ Height : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcRectangularTrimmedSurface
+ SUBTYPE OF (IfcBoundedSurface);
+ BasisSurface : IfcSurface;
+ U1 : IfcParameterValue;
+ V1 : IfcParameterValue;
+ U2 : IfcParameterValue;
+ V2 : IfcParameterValue;
+ Usense : BOOLEAN;
+ Vsense : BOOLEAN;
+ DERIVE
+ Dim : IfcDimensionCount := BasisSurface.Dim;
+ WHERE
+ WR1 : U1 <> U2;
+ WR2 : V1 <> V2;
+ WR3 : (('IFC2X3.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND
+ (NOT ('IFC2X3.IFCPLANE' IN TYPEOF(BasisSurface)))) OR
+ ('IFC2X3.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR
+ (Usense = (U2 > U1));
+ WR4 : Vsense = (V2 > V1);
+END_ENTITY;
+
+ENTITY IfcReferencesValueDocument;
+ ReferencedDocument : IfcDocumentSelect;
+ ReferencingValues : SET [1:?] OF IfcAppliedValue;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+END_ENTITY;
+
+ENTITY IfcRegularTimeSeries
+ SUBTYPE OF (IfcTimeSeries);
+ TimeStep : IfcTimeMeasure;
+ Values : LIST [1:?] OF IfcTimeSeriesValue;
+END_ENTITY;
+
+ENTITY IfcReinforcementBarProperties;
+ TotalCrossSectionArea : IfcAreaMeasure;
+ SteelGrade : IfcLabel;
+ BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;
+ EffectiveDepth : OPTIONAL IfcLengthMeasure;
+ NominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;
+ BarCount : OPTIONAL IfcCountMeasure;
+END_ENTITY;
+
+ENTITY IfcReinforcementDefinitionProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ DefinitionType : OPTIONAL IfcLabel;
+ ReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;
+END_ENTITY;
+
+ENTITY IfcReinforcingBar
+ SUBTYPE OF (IfcReinforcingElement);
+ NominalDiameter : IfcPositiveLengthMeasure;
+ CrossSectionArea : IfcAreaMeasure;
+ BarLength : OPTIONAL IfcPositiveLengthMeasure;
+ BarRole : IfcReinforcingBarRoleEnum;
+ BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;
+ WHERE
+ WR1 : (BarRole <> IfcReinforcingBarRoleEnum.USERDEFINED) OR ((BarRole = IfcReinforcingBarRoleEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
+END_ENTITY;
+
+ENTITY IfcReinforcingElement
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcReinforcingBar
+ ,IfcReinforcingMesh
+ ,IfcTendon
+ ,IfcTendonAnchor))
+ SUBTYPE OF (IfcBuildingElementComponent);
+ SteelGrade : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcReinforcingMesh
+ SUBTYPE OF (IfcReinforcingElement);
+ MeshLength : OPTIONAL IfcPositiveLengthMeasure;
+ MeshWidth : OPTIONAL IfcPositiveLengthMeasure;
+ LongitudinalBarNominalDiameter : IfcPositiveLengthMeasure;
+ TransverseBarNominalDiameter : IfcPositiveLengthMeasure;
+ LongitudinalBarCrossSectionArea : IfcAreaMeasure;
+ TransverseBarCrossSectionArea : IfcAreaMeasure;
+ LongitudinalBarSpacing : IfcPositiveLengthMeasure;
+ TransverseBarSpacing : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcRelAggregates
+ SUBTYPE OF (IfcRelDecomposes);
+END_ENTITY;
+
+ENTITY IfcRelAssigns
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcRelAssignsToActor
+ ,IfcRelAssignsToControl
+ ,IfcRelAssignsToGroup
+ ,IfcRelAssignsToProcess
+ ,IfcRelAssignsToProduct
+ ,IfcRelAssignsToResource))
+ SUBTYPE OF (IfcRelationship);
+ RelatedObjects : SET [1:?] OF IfcObjectDefinition;
+ RelatedObjectsType : OPTIONAL IfcObjectTypeEnum;
+ WHERE
+ WR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);
+END_ENTITY;
+
+ENTITY IfcRelAssignsTasks
+ SUBTYPE OF (IfcRelAssignsToControl);
+ TimeForTask : OPTIONAL IfcScheduleTimeControl;
+ WHERE
+ WR1 : HIINDEX(SELF\IfcRelAssigns.RelatedObjects) = 1;
+ WR2 : 'IFC2X3.IFCTASK' IN TYPEOF(SELF\IfcRelAssigns.RelatedObjects[1]);
+ WR3 : 'IFC2X3.IFCWORKCONTROL' IN TYPEOF(SELF\IfcRelAssignsToControl.RelatingControl);
+END_ENTITY;
+
+ENTITY IfcRelAssignsToActor
+ SUPERTYPE OF (ONEOF
+ (IfcRelOccupiesSpaces))
+ SUBTYPE OF (IfcRelAssigns);
+ RelatingActor : IfcActor;
+ ActingRole : OPTIONAL IfcActorRole;
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssignsToControl
+ SUPERTYPE OF (ONEOF
+ (IfcRelAssignsTasks
+ ,IfcRelAssignsToProjectOrder
+ ,IfcRelSchedulesCostItems))
+ SUBTYPE OF (IfcRelAssigns);
+ RelatingControl : IfcControl;
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssignsToGroup
+ SUBTYPE OF (IfcRelAssigns);
+ RelatingGroup : IfcGroup;
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssignsToProcess
+ SUBTYPE OF (IfcRelAssigns);
+ RelatingProcess : IfcProcess;
+ QuantityInProcess : OPTIONAL IfcMeasureWithUnit;
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssignsToProduct
+ SUBTYPE OF (IfcRelAssigns);
+ RelatingProduct : IfcProduct;
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssignsToProjectOrder
+ SUBTYPE OF (IfcRelAssignsToControl);
+END_ENTITY;
+
+ENTITY IfcRelAssignsToResource
+ SUBTYPE OF (IfcRelAssigns);
+ RelatingResource : IfcResource;
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssociates
+ SUPERTYPE OF (ONEOF
+ (IfcRelAssociatesAppliedValue
+ ,IfcRelAssociatesApproval
+ ,IfcRelAssociatesClassification
+ ,IfcRelAssociatesConstraint
+ ,IfcRelAssociatesDocument
+ ,IfcRelAssociatesLibrary
+ ,IfcRelAssociatesMaterial
+ ,IfcRelAssociatesProfileProperties))
+ SUBTYPE OF (IfcRelationship);
+ RelatedObjects : SET [1:?] OF IfcRoot;
+ WHERE
+ WR21 : SIZEOF(QUERY(temp <* RelatedObjects |
+ NOT(('IFC2X3.IFCOBJECTDEFINITION' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCPROPERTYDEFINITION' IN TYPEOF(temp)))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesAppliedValue
+ SUBTYPE OF (IfcRelAssociates);
+ RelatingAppliedValue : IfcAppliedValue;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesApproval
+ SUBTYPE OF (IfcRelAssociates);
+ RelatingApproval : IfcApproval;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesClassification
+ SUBTYPE OF (IfcRelAssociates);
+ RelatingClassification : IfcClassificationNotationSelect;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesConstraint
+ SUBTYPE OF (IfcRelAssociates);
+ Intent : IfcLabel;
+ RelatingConstraint : IfcConstraint;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesDocument
+ SUBTYPE OF (IfcRelAssociates);
+ RelatingDocument : IfcDocumentSelect;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesLibrary
+ SUBTYPE OF (IfcRelAssociates);
+ RelatingLibrary : IfcLibrarySelect;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesMaterial
+ SUBTYPE OF (IfcRelAssociates);
+ RelatingMaterial : IfcMaterialSelect;
+ WHERE
+ WR21 : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects |
+ ('IFC2X3.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(temp))
+ )) = 0;
+ WR22 : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects |
+ (NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)) AND NOT('IFC2X3.IFCTYPEPRODUCT' IN TYPEOF(temp)))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcRelAssociatesProfileProperties
+ SUBTYPE OF (IfcRelAssociates);
+ RelatingProfileProperties : IfcProfileProperties;
+ ProfileSectionLocation : OPTIONAL IfcShapeAspect;
+ ProfileOrientation : OPTIONAL IfcOrientationSelect;
+END_ENTITY;
+
+ENTITY IfcRelConnects
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcRelConnectsElements
+ ,IfcRelConnectsPortToElement
+ ,IfcRelConnectsPorts
+ ,IfcRelConnectsStructuralActivity
+ ,IfcRelConnectsStructuralElement
+ ,IfcRelConnectsStructuralMember
+ ,IfcRelContainedInSpatialStructure
+ ,IfcRelCoversBldgElements
+ ,IfcRelCoversSpaces
+ ,IfcRelFillsElement
+ ,IfcRelFlowControlElements
+ ,IfcRelInteractionRequirements
+ ,IfcRelProjectsElement
+ ,IfcRelReferencedInSpatialStructure
+ ,IfcRelSequence
+ ,IfcRelServicesBuildings
+ ,IfcRelSpaceBoundary
+ ,IfcRelVoidsElement))
+ SUBTYPE OF (IfcRelationship);
+END_ENTITY;
+
+ENTITY IfcRelConnectsElements
+ SUPERTYPE OF (ONEOF
+ (IfcRelConnectsPathElements
+ ,IfcRelConnectsWithRealizingElements))
+ SUBTYPE OF (IfcRelConnects);
+ ConnectionGeometry : OPTIONAL IfcConnectionGeometry;
+ RelatingElement : IfcElement;
+ RelatedElement : IfcElement;
+ WHERE
+ WR31 : RelatingElement :<>: RelatedElement;
+END_ENTITY;
+
+ENTITY IfcRelConnectsPathElements
+ SUBTYPE OF (IfcRelConnectsElements);
+ RelatingPriorities : LIST [0:?] OF INTEGER;
+ RelatedPriorities : LIST [0:?] OF INTEGER;
+ RelatedConnectionType : IfcConnectionTypeEnum;
+ RelatingConnectionType : IfcConnectionTypeEnum;
+ DERIVE
+ RelatedLayerCount : INTEGER := IfcNoOfLayers(SELF\IfcRelConnectsElements.RelatedElement);
+ RelatingLayerCount : INTEGER := IfcNoOfLayers(SELF\IfcRelConnectsElements.RelatingElement);
+END_ENTITY;
+
+ENTITY IfcRelConnectsPortToElement
+ SUBTYPE OF (IfcRelConnects);
+ RelatingPort : IfcPort;
+ RelatedElement : IfcElement;
+END_ENTITY;
+
+ENTITY IfcRelConnectsPorts
+ SUBTYPE OF (IfcRelConnects);
+ RelatingPort : IfcPort;
+ RelatedPort : IfcPort;
+ RealizingElement : OPTIONAL IfcElement;
+END_ENTITY;
+
+ENTITY IfcRelConnectsStructuralActivity
+ SUBTYPE OF (IfcRelConnects);
+ RelatingElement : IfcStructuralActivityAssignmentSelect;
+ RelatedStructuralActivity : IfcStructuralActivity;
+END_ENTITY;
+
+ENTITY IfcRelConnectsStructuralElement
+ SUBTYPE OF (IfcRelConnects);
+ RelatingElement : IfcElement;
+ RelatedStructuralMember : IfcStructuralMember;
+END_ENTITY;
+
+ENTITY IfcRelConnectsStructuralMember
+ SUPERTYPE OF (ONEOF
+ (IfcRelConnectsWithEccentricity))
+ SUBTYPE OF (IfcRelConnects);
+ RelatingStructuralMember : IfcStructuralMember;
+ RelatedStructuralConnection : IfcStructuralConnection;
+ AppliedCondition : OPTIONAL IfcBoundaryCondition;
+ AdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;
+ SupportedLength : OPTIONAL IfcLengthMeasure;
+ ConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;
+END_ENTITY;
+
+ENTITY IfcRelConnectsWithEccentricity
+ SUBTYPE OF (IfcRelConnectsStructuralMember);
+ ConnectionConstraint : IfcConnectionGeometry;
+END_ENTITY;
+
+ENTITY IfcRelConnectsWithRealizingElements
+ SUBTYPE OF (IfcRelConnectsElements);
+ RealizingElements : SET [1:?] OF IfcElement;
+ ConnectionType : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcRelContainedInSpatialStructure
+ SUBTYPE OF (IfcRelConnects);
+ RelatedElements : SET [1:?] OF IfcProduct;
+ RelatingStructure : IfcSpatialStructureElement;
+ WHERE
+ WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;
+END_ENTITY;
+
+ENTITY IfcRelCoversBldgElements
+ SUBTYPE OF (IfcRelConnects);
+ RelatingBuildingElement : IfcElement;
+ RelatedCoverings : SET [1:?] OF IfcCovering;
+END_ENTITY;
+
+ENTITY IfcRelCoversSpaces
+ SUBTYPE OF (IfcRelConnects);
+ RelatedSpace : IfcSpace;
+ RelatedCoverings : SET [1:?] OF IfcCovering;
+END_ENTITY;
+
+ENTITY IfcRelDecomposes
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcRelAggregates
+ ,IfcRelNests))
+ SUBTYPE OF (IfcRelationship);
+ RelatingObject : IfcObjectDefinition;
+ RelatedObjects : SET [1:?] OF IfcObjectDefinition;
+ WHERE
+ WR31 : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;
+ WR32 : SIZEOF(QUERY(Temp <* RelatedObjects | 'IFC2X3.IFCTYPEOBJECT' IN TYPEOF(temp))) = 0;
+ WR33 : NOT('IFC2X3.IFCTYPEOBJECT' IN TYPEOF(RelatingObject));
+END_ENTITY;
+
+ENTITY IfcRelDefines
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcRelDefinesByProperties
+ ,IfcRelDefinesByType))
+ SUBTYPE OF (IfcRelationship);
+ RelatedObjects : SET [1:?] OF IfcObject;
+END_ENTITY;
+
+ENTITY IfcRelDefinesByProperties
+ SUPERTYPE OF (ONEOF
+ (IfcRelOverridesProperties))
+ SUBTYPE OF (IfcRelDefines);
+ RelatingPropertyDefinition : IfcPropertySetDefinition;
+END_ENTITY;
+
+ENTITY IfcRelDefinesByType
+ SUBTYPE OF (IfcRelDefines);
+ RelatingType : IfcTypeObject;
+END_ENTITY;
+
+ENTITY IfcRelFillsElement
+ SUBTYPE OF (IfcRelConnects);
+ RelatingOpeningElement : IfcOpeningElement;
+ RelatedBuildingElement : IfcElement;
+END_ENTITY;
+
+ENTITY IfcRelFlowControlElements
+ SUBTYPE OF (IfcRelConnects);
+ RelatedControlElements : SET [1:?] OF IfcDistributionControlElement;
+ RelatingFlowElement : IfcDistributionFlowElement;
+END_ENTITY;
+
+ENTITY IfcRelInteractionRequirements
+ SUBTYPE OF (IfcRelConnects);
+ DailyInteraction : OPTIONAL IfcCountMeasure;
+ ImportanceRating : OPTIONAL IfcNormalisedRatioMeasure;
+ LocationOfInteraction : OPTIONAL IfcSpatialStructureElement;
+ RelatedSpaceProgram : IfcSpaceProgram;
+ RelatingSpaceProgram : IfcSpaceProgram;
+END_ENTITY;
+
+ENTITY IfcRelNests
+ SUBTYPE OF (IfcRelDecomposes);
+ WHERE
+ WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelDecomposes.RelatedObjects |
+ NOT(TYPEOF(SELF\IfcRelDecomposes.RelatingObject) = TYPEOF(Temp)))) = 0;
+END_ENTITY;
+
+ENTITY IfcRelOccupiesSpaces
+ SUBTYPE OF (IfcRelAssignsToActor);
+END_ENTITY;
+
+ENTITY IfcRelOverridesProperties
+ SUBTYPE OF (IfcRelDefinesByProperties);
+ OverridingProperties : SET [1:?] OF IfcProperty;
+ WHERE
+ WR1 : SIZEOF(SELF\IfcRelDefines.RelatedObjects) = 1;
+END_ENTITY;
+
+ENTITY IfcRelProjectsElement
+ SUBTYPE OF (IfcRelConnects);
+ RelatingElement : IfcElement;
+ RelatedFeatureElement : IfcFeatureElementAddition;
+END_ENTITY;
+
+ENTITY IfcRelReferencedInSpatialStructure
+ SUBTYPE OF (IfcRelConnects);
+ RelatedElements : SET [1:?] OF IfcProduct;
+ RelatingStructure : IfcSpatialStructureElement;
+ WHERE
+ WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;
+END_ENTITY;
+
+ENTITY IfcRelSchedulesCostItems
+ SUBTYPE OF (IfcRelAssignsToControl);
+ WHERE
+ WR11 : SIZEOF(QUERY(temp <* SELF\IfcRelAssigns.RelatedObjects |
+ NOT('IFC2X3.IFCCOSTITEM' IN TYPEOF(temp))
+ )) = 0;
+ WR12 : 'IFC2X3.IFCCOSTSCHEDULE' IN TYPEOF (SELF\IfcRelAssignsToControl.RelatingControl);
+END_ENTITY;
+
+ENTITY IfcRelSequence
+ SUBTYPE OF (IfcRelConnects);
+ RelatingProcess : IfcProcess;
+ RelatedProcess : IfcProcess;
+ TimeLag : IfcTimeMeasure;
+ SequenceType : IfcSequenceEnum;
+ WHERE
+ WR1 : RelatingProcess :<>: RelatedProcess;
+END_ENTITY;
+
+ENTITY IfcRelServicesBuildings
+ SUBTYPE OF (IfcRelConnects);
+ RelatingSystem : IfcSystem;
+ RelatedBuildings : SET [1:?] OF IfcSpatialStructureElement;
+END_ENTITY;
+
+ENTITY IfcRelSpaceBoundary
+ SUBTYPE OF (IfcRelConnects);
+ RelatingSpace : IfcSpace;
+ RelatedBuildingElement : OPTIONAL IfcElement;
+ ConnectionGeometry : OPTIONAL IfcConnectionGeometry;
+ PhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;
+ InternalOrExternalBoundary : IfcInternalOrExternalEnum;
+ WHERE
+ WR1 : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) AND
+ (EXISTS(RelatedBuildingElement) AND NOT('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement))))
+ OR
+ ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND
+ (NOT(EXISTS(RelatedBuildingElement)) OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement))))
+ OR
+ (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);
+END_ENTITY;
+
+ENTITY IfcRelVoidsElement
+ SUBTYPE OF (IfcRelConnects);
+ RelatingBuildingElement : IfcElement;
+ RelatedOpeningElement : IfcFeatureElementSubtraction;
+END_ENTITY;
+
+ENTITY IfcRelationship
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcRelAssigns
+ ,IfcRelAssociates
+ ,IfcRelConnects
+ ,IfcRelDecomposes
+ ,IfcRelDefines))
+ SUBTYPE OF (IfcRoot);
+END_ENTITY;
+
+ENTITY IfcRelaxation;
+ RelaxationValue : IfcNormalisedRatioMeasure;
+ InitialStress : IfcNormalisedRatioMeasure;
+END_ENTITY;
+
+ENTITY IfcRepresentation
+ SUPERTYPE OF (ONEOF
+ (IfcShapeModel
+ ,IfcStyleModel));
+ ContextOfItems : IfcRepresentationContext;
+ RepresentationIdentifier : OPTIONAL IfcLabel;
+ RepresentationType : OPTIONAL IfcLabel;
+ Items : SET [1:?] OF IfcRepresentationItem;
+ INVERSE
+ RepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;
+ LayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR Assigneditems;
+ OfProductRepresentation : SET [0:1] OF IfcProductRepresentation FOR Representations;
+END_ENTITY;
+
+ENTITY IfcRepresentationContext
+ SUPERTYPE OF (ONEOF
+ (IfcGeometricRepresentationContext));
+ ContextIdentifier : OPTIONAL IfcLabel;
+ ContextType : OPTIONAL IfcLabel;
+ INVERSE
+ RepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;
+END_ENTITY;
+
+ENTITY IfcRepresentationItem
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcGeometricRepresentationItem
+ ,IfcMappedItem
+ ,IfcStyledItem
+ ,IfcTopologicalRepresentationItem));
+ INVERSE
+ LayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;
+ StyledByItem : SET [0:1] OF IfcStyledItem FOR Item;
+END_ENTITY;
+
+ENTITY IfcRepresentationMap;
+ MappingOrigin : IfcAxis2Placement;
+ MappedRepresentation : IfcRepresentation;
+ INVERSE
+ MapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;
+END_ENTITY;
+
+ENTITY IfcResource
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcConstructionResource))
+ SUBTYPE OF (IfcObject);
+ INVERSE
+ ResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;
+END_ENTITY;
+
+ENTITY IfcRevolvedAreaSolid
+ SUBTYPE OF (IfcSweptAreaSolid);
+ Axis : IfcAxis1Placement;
+ Angle : IfcPlaneAngleMeasure;
+ DERIVE
+ AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location,
+ IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));
+ WHERE
+ WR31 : Axis.Location.Coordinates[3] = 0.0;
+ WR32 : Axis.Z.DirectionRatios[3] = 0.0;
+END_ENTITY;
+
+ENTITY IfcRibPlateProfileProperties
+ SUBTYPE OF (IfcProfileProperties);
+ Thickness : OPTIONAL IfcPositiveLengthMeasure;
+ RibHeight : OPTIONAL IfcPositiveLengthMeasure;
+ RibWidth : OPTIONAL IfcPositiveLengthMeasure;
+ RibSpacing : OPTIONAL IfcPositiveLengthMeasure;
+ Direction : IfcRibPlateDirectionEnum;
+END_ENTITY;
+
+ENTITY IfcRightCircularCone
+ SUBTYPE OF (IfcCsgPrimitive3D);
+ Height : IfcPositiveLengthMeasure;
+ BottomRadius : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcRightCircularCylinder
+ SUBTYPE OF (IfcCsgPrimitive3D);
+ Height : IfcPositiveLengthMeasure;
+ Radius : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcRoof
+ SUBTYPE OF (IfcBuildingElement);
+ ShapeType : IfcRoofTypeEnum;
+ WHERE
+ WR1 : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR
+ ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\IfcProduct.Representation))));
+END_ENTITY;
+
+ENTITY IfcRoot
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcObjectDefinition
+ ,IfcPropertyDefinition
+ ,IfcRelationship));
+ GlobalId : IfcGloballyUniqueId;
+ OwnerHistory : IfcOwnerHistory;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ UNIQUE
+ UR1 : GlobalId;
+END_ENTITY;
+
+ENTITY IfcRoundedEdgeFeature
+ SUBTYPE OF (IfcEdgeFeature);
+ Radius : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcRoundedRectangleProfileDef
+ SUBTYPE OF (IfcRectangleProfileDef);
+ RoundingRadius : IfcPositiveLengthMeasure;
+ WHERE
+ WR31 : ((RoundingRadius <= (SELF\IfcRectangleProfileDef.XDim/2.)) AND
+ (RoundingRadius <= (SELF\IfcRectangleProfileDef.YDim/2.)));
+END_ENTITY;
+
+ENTITY IfcSIUnit
+ SUBTYPE OF (IfcNamedUnit);
+ Prefix : OPTIONAL IfcSIPrefix;
+ Name : IfcSIUnitName;
+ DERIVE
+ SELF\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);
+END_ENTITY;
+
+ENTITY IfcSanitaryTerminalType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcSanitaryTerminalTypeEnum;
+END_ENTITY;
+
+ENTITY IfcScheduleTimeControl
+ SUBTYPE OF (IfcControl);
+ ActualStart : OPTIONAL IfcDateTimeSelect;
+ EarlyStart : OPTIONAL IfcDateTimeSelect;
+ LateStart : OPTIONAL IfcDateTimeSelect;
+ ScheduleStart : OPTIONAL IfcDateTimeSelect;
+ ActualFinish : OPTIONAL IfcDateTimeSelect;
+ EarlyFinish : OPTIONAL IfcDateTimeSelect;
+ LateFinish : OPTIONAL IfcDateTimeSelect;
+ ScheduleFinish : OPTIONAL IfcDateTimeSelect;
+ ScheduleDuration : OPTIONAL IfcTimeMeasure;
+ ActualDuration : OPTIONAL IfcTimeMeasure;
+ RemainingTime : OPTIONAL IfcTimeMeasure;
+ FreeFloat : OPTIONAL IfcTimeMeasure;
+ TotalFloat : OPTIONAL IfcTimeMeasure;
+ IsCritical : OPTIONAL BOOLEAN;
+ StatusTime : OPTIONAL IfcDateTimeSelect;
+ StartFloat : OPTIONAL IfcTimeMeasure;
+ FinishFloat : OPTIONAL IfcTimeMeasure;
+ Completion : OPTIONAL IfcPositiveRatioMeasure;
+ INVERSE
+ ScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask;
+END_ENTITY;
+
+ENTITY IfcSectionProperties;
+ SectionType : IfcSectionTypeEnum;
+ StartProfile : IfcProfileDef;
+ EndProfile : OPTIONAL IfcProfileDef;
+END_ENTITY;
+
+ENTITY IfcSectionReinforcementProperties;
+ LongitudinalStartPosition : IfcLengthMeasure;
+ LongitudinalEndPosition : IfcLengthMeasure;
+ TransversePosition : OPTIONAL IfcLengthMeasure;
+ ReinforcementRole : IfcReinforcingBarRoleEnum;
+ SectionDefinition : IfcSectionProperties;
+ CrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;
+END_ENTITY;
+
+ENTITY IfcSectionedSpine
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ SpineCurve : IfcCompositeCurve;
+ CrossSections : LIST [2:?] OF IfcProfileDef;
+ CrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;
+ DERIVE
+ Dim : IfcDimensionCount := 3;
+ WHERE
+ WR1 : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);
+ WR2 : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;
+ WR3 : SpineCurve.Dim = 3;
+END_ENTITY;
+
+ENTITY IfcSensorType
+ SUBTYPE OF (IfcDistributionControlElementType);
+ PredefinedType : IfcSensorTypeEnum;
+END_ENTITY;
+
+ENTITY IfcServiceLife
+ SUBTYPE OF (IfcControl);
+ ServiceLifeType : IfcServiceLifeTypeEnum;
+ ServiceLifeDuration : IfcTimeMeasure;
+END_ENTITY;
+
+ENTITY IfcServiceLifeFactor
+ SUBTYPE OF (IfcPropertySetDefinition);
+ PredefinedType : IfcServiceLifeFactorTypeEnum;
+ UpperValue : OPTIONAL IfcMeasureValue;
+ MostUsedValue : IfcMeasureValue;
+ LowerValue : OPTIONAL IfcMeasureValue;
+ WHERE
+ WR31 : NOT(PredefinedType = IfcServiceLifeFactorTypeEnum.USERDEFINED)
+ OR EXISTS(SELF\IfcObject.ObjectType);
+END_ENTITY;
+
+ENTITY IfcShapeAspect;
+ ShapeRepresentations : LIST [1:?] OF IfcShapeModel;
+ Name : OPTIONAL IfcLabel;
+ Description : OPTIONAL IfcText;
+ ProductDefinitional : LOGICAL;
+ PartOfProductDefinitionShape : IfcProductDefinitionShape;
+END_ENTITY;
+
+ENTITY IfcShapeModel
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcShapeRepresentation
+ ,IfcTopologyRepresentation))
+ SUBTYPE OF (IfcRepresentation);
+ INVERSE
+ OfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;
+ WHERE
+ WR11 : (SIZEOF(SELF\IfcRepresentation.OfProductRepresentation) = 1) XOR
+ (SIZEOF(SELF\IfcRepresentation.RepresentationMap) = 1) XOR
+ (SIZEOF(OfShapeAspect) = 1);
+END_ENTITY;
+
+ENTITY IfcShapeRepresentation
+ SUBTYPE OF (IfcShapeModel);
+ WHERE
+ WR21 : 'IFC2X3.IFCGEOMETRICREPRESENTATIONCONTEXT'
+ IN TYPEOF(SELF\IfcRepresentation.ContextOfItems);
+ WR22 : SIZEOF(QUERY(temp <* Items |
+ ('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))
+ AND (NOT(SIZEOF(
+ ['IFC2X3.IFCVERTEXPOINT',
+ 'IFC2X3.IFCEDGECURVE',
+ 'IFC2X3.IFCFACESURFACE'] * TYPEOF(temp)) = 1))
+ )) = 0;
+ WR23 : EXISTS(SELF\IfcRepresentation.RepresentationType);
+ WR24 : IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items);
+END_ENTITY;
+
+ENTITY IfcShellBasedSurfaceModel
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ SbsmBoundary : SET [1:?] OF IfcShell;
+ DERIVE
+ Dim : IfcDimensionCount := 3;
+END_ENTITY;
+
+ENTITY IfcSimpleProperty
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcPropertyBoundedValue
+ ,IfcPropertyEnumeratedValue
+ ,IfcPropertyListValue
+ ,IfcPropertyReferenceValue
+ ,IfcPropertySingleValue
+ ,IfcPropertyTableValue))
+ SUBTYPE OF (IfcProperty);
+END_ENTITY;
+
+ENTITY IfcSite
+ SUBTYPE OF (IfcSpatialStructureElement);
+ RefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;
+ RefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;
+ RefElevation : OPTIONAL IfcLengthMeasure;
+ LandTitleNumber : OPTIONAL IfcLabel;
+ SiteAddress : OPTIONAL IfcPostalAddress;
+END_ENTITY;
+
+ENTITY IfcSlab
+ SUBTYPE OF (IfcBuildingElement);
+ PredefinedType : OPTIONAL IfcSlabTypeEnum;
+ WHERE
+ WR2 : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
+END_ENTITY;
+
+ENTITY IfcSlabType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcSlabTypeEnum;
+END_ENTITY;
+
+ENTITY IfcSlippageConnectionCondition
+ SUBTYPE OF (IfcStructuralConnectionCondition);
+ SlippageX : OPTIONAL IfcLengthMeasure;
+ SlippageY : OPTIONAL IfcLengthMeasure;
+ SlippageZ : OPTIONAL IfcLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcSolidModel
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcCsgSolid
+ ,IfcManifoldSolidBrep
+ ,IfcSweptAreaSolid
+ ,IfcSweptDiskSolid))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ DERIVE
+ Dim : IfcDimensionCount := 3;
+END_ENTITY;
+
+ENTITY IfcSoundProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ IsAttenuating : IfcBoolean;
+ SoundScale : OPTIONAL IfcSoundScaleEnum;
+ SoundValues : LIST [1:8] OF IfcSoundValue;
+END_ENTITY;
+
+ENTITY IfcSoundValue
+ SUBTYPE OF (IfcPropertySetDefinition);
+ SoundLevelTimeSeries : OPTIONAL IfcTimeSeries;
+ Frequency : IfcFrequencyMeasure;
+ SoundLevelSingleValue : OPTIONAL IfcDerivedMeasureValue;
+END_ENTITY;
+
+ENTITY IfcSpace
+ SUBTYPE OF (IfcSpatialStructureElement);
+ InteriorOrExteriorSpace : IfcInternalOrExternalEnum;
+ ElevationWithFlooring : OPTIONAL IfcLengthMeasure;
+ INVERSE
+ HasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatedSpace;
+ BoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;
+END_ENTITY;
+
+ENTITY IfcSpaceHeaterType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcSpaceHeaterTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcSpaceProgram
+ SUBTYPE OF (IfcControl);
+ SpaceProgramIdentifier : IfcIdentifier;
+ MaxRequiredArea : OPTIONAL IfcAreaMeasure;
+ MinRequiredArea : OPTIONAL IfcAreaMeasure;
+ RequestedLocation : OPTIONAL IfcSpatialStructureElement;
+ StandardRequiredArea : IfcAreaMeasure;
+ INVERSE
+ HasInteractionReqsFrom : SET [0:?] OF IfcRelInteractionRequirements FOR RelatedSpaceProgram;
+ HasInteractionReqsTo : SET [0:?] OF IfcRelInteractionRequirements FOR RelatingSpaceProgram;
+END_ENTITY;
+
+ENTITY IfcSpaceThermalLoadProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ ApplicableValueRatio : OPTIONAL IfcPositiveRatioMeasure;
+ ThermalLoadSource : IfcThermalLoadSourceEnum;
+ PropertySource : IfcPropertySourceEnum;
+ SourceDescription : OPTIONAL IfcText;
+ MaximumValue : IfcPowerMeasure;
+ MinimumValue : OPTIONAL IfcPowerMeasure;
+ ThermalLoadTimeSeriesValues : OPTIONAL IfcTimeSeries;
+ UserDefinedThermalLoadSource : OPTIONAL IfcLabel;
+ UserDefinedPropertySource : OPTIONAL IfcLabel;
+ ThermalLoadType : IfcThermalLoadTypeEnum;
+END_ENTITY;
+
+ENTITY IfcSpaceType
+ SUBTYPE OF (IfcSpatialStructureElementType);
+ PredefinedType : IfcSpaceTypeEnum;
+END_ENTITY;
+
+ENTITY IfcSpatialStructureElement
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBuilding
+ ,IfcBuildingStorey
+ ,IfcSite
+ ,IfcSpace))
+ SUBTYPE OF (IfcProduct);
+ LongName : OPTIONAL IfcLabel;
+ CompositionType : IfcElementCompositionEnum;
+ INVERSE
+ ReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure;
+ ServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;
+ ContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;
+ WHERE
+ WR41 : (HIINDEX(SELF\IfcObjectDefinition.Decomposes) = 1)
+ AND
+ ('IFC2X3.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1]))
+ AND
+ (('IFC2X3.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR
+ ('IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject))
+ );
+END_ENTITY;
+
+ENTITY IfcSpatialStructureElementType
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcSpaceType))
+ SUBTYPE OF (IfcElementType);
+END_ENTITY;
+
+ENTITY IfcSphere
+ SUBTYPE OF (IfcCsgPrimitive3D);
+ Radius : IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcStackTerminalType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcStackTerminalTypeEnum;
+END_ENTITY;
+
+ENTITY IfcStair
+ SUBTYPE OF (IfcBuildingElement);
+ ShapeType : IfcStairTypeEnum;
+ WHERE
+ WR1 : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR
+ ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\IfcProduct.Representation))));
+END_ENTITY;
+
+ENTITY IfcStairFlight
+ SUBTYPE OF (IfcBuildingElement);
+ NumberOfRiser : OPTIONAL INTEGER;
+ NumberOfTreads : OPTIONAL INTEGER;
+ RiserHeight : OPTIONAL IfcPositiveLengthMeasure;
+ TreadLength : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcStairFlightType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcStairFlightTypeEnum;
+END_ENTITY;
+
+ENTITY IfcStructuralAction
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralLinearAction
+ ,IfcStructuralPlanarAction
+ ,IfcStructuralPointAction))
+ SUBTYPE OF (IfcStructuralActivity);
+ DestabilizingLoad : BOOLEAN;
+ CausedBy : OPTIONAL IfcStructuralReaction;
+END_ENTITY;
+
+ENTITY IfcStructuralActivity
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralAction
+ ,IfcStructuralReaction))
+ SUBTYPE OF (IfcProduct);
+ AppliedLoad : IfcStructuralLoad;
+ GlobalOrLocal : IfcGlobalOrLocalEnum;
+ INVERSE
+ AssignedToStructuralItem : IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;
+END_ENTITY;
+
+ENTITY IfcStructuralAnalysisModel
+ SUBTYPE OF (IfcSystem);
+ PredefinedType : IfcAnalysisModelTypeEnum;
+ OrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;
+ LoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;
+ HasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;
+END_ENTITY;
+
+ENTITY IfcStructuralConnection
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralCurveConnection
+ ,IfcStructuralPointConnection
+ ,IfcStructuralSurfaceConnection))
+ SUBTYPE OF (IfcStructuralItem);
+ AppliedCondition : OPTIONAL IfcBoundaryCondition;
+ INVERSE
+ ConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;
+END_ENTITY;
+
+ENTITY IfcStructuralConnectionCondition
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcFailureConnectionCondition
+ ,IfcSlippageConnectionCondition));
+ Name : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcStructuralCurveConnection
+ SUBTYPE OF (IfcStructuralConnection);
+END_ENTITY;
+
+ENTITY IfcStructuralCurveMember
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralCurveMemberVarying))
+ SUBTYPE OF (IfcStructuralMember);
+ PredefinedType : IfcStructuralCurveTypeEnum;
+END_ENTITY;
+
+ENTITY IfcStructuralCurveMemberVarying
+ SUBTYPE OF (IfcStructuralCurveMember);
+END_ENTITY;
+
+ENTITY IfcStructuralItem
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralConnection
+ ,IfcStructuralMember))
+ SUBTYPE OF (IfcProduct);
+ INVERSE
+ AssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;
+END_ENTITY;
+
+ENTITY IfcStructuralLinearAction
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralLinearActionVarying))
+ SUBTYPE OF (IfcStructuralAction);
+ ProjectedOrTrue : IfcProjectedOrTrueLengthEnum;
+ WHERE
+ WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADLINEARFORCE',
+ 'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE']
+ * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
+END_ENTITY;
+
+ENTITY IfcStructuralLinearActionVarying
+ SUBTYPE OF (IfcStructuralLinearAction);
+ VaryingAppliedLoadLocation : IfcShapeAspect;
+ SubsequentAppliedLoads : LIST [1:?] OF IfcStructuralLoad;
+ DERIVE
+ VaryingAppliedLoads : LIST [2:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);
+END_ENTITY;
+
+ENTITY IfcStructuralLoad
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralLoadStatic));
+ Name : OPTIONAL IfcLabel;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadGroup
+ SUBTYPE OF (IfcGroup);
+ PredefinedType : IfcLoadGroupTypeEnum;
+ ActionType : IfcActionTypeEnum;
+ ActionSource : IfcActionSourceTypeEnum;
+ Coefficient : OPTIONAL IfcPositiveRatioMeasure;
+ Purpose : OPTIONAL IfcLabel;
+ INVERSE
+ SourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;
+ LoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadLinearForce
+ SUBTYPE OF (IfcStructuralLoadStatic);
+ LinearForceX : OPTIONAL IfcLinearForceMeasure;
+ LinearForceY : OPTIONAL IfcLinearForceMeasure;
+ LinearForceZ : OPTIONAL IfcLinearForceMeasure;
+ LinearMomentX : OPTIONAL IfcLinearMomentMeasure;
+ LinearMomentY : OPTIONAL IfcLinearMomentMeasure;
+ LinearMomentZ : OPTIONAL IfcLinearMomentMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadPlanarForce
+ SUBTYPE OF (IfcStructuralLoadStatic);
+ PlanarForceX : OPTIONAL IfcPlanarForceMeasure;
+ PlanarForceY : OPTIONAL IfcPlanarForceMeasure;
+ PlanarForceZ : OPTIONAL IfcPlanarForceMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadSingleDisplacement
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralLoadSingleDisplacementDistortion))
+ SUBTYPE OF (IfcStructuralLoadStatic);
+ DisplacementX : OPTIONAL IfcLengthMeasure;
+ DisplacementY : OPTIONAL IfcLengthMeasure;
+ DisplacementZ : OPTIONAL IfcLengthMeasure;
+ RotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;
+ RotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;
+ RotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadSingleDisplacementDistortion
+ SUBTYPE OF (IfcStructuralLoadSingleDisplacement);
+ Distortion : OPTIONAL IfcCurvatureMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadSingleForce
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralLoadSingleForceWarping))
+ SUBTYPE OF (IfcStructuralLoadStatic);
+ ForceX : OPTIONAL IfcForceMeasure;
+ ForceY : OPTIONAL IfcForceMeasure;
+ ForceZ : OPTIONAL IfcForceMeasure;
+ MomentX : OPTIONAL IfcTorqueMeasure;
+ MomentY : OPTIONAL IfcTorqueMeasure;
+ MomentZ : OPTIONAL IfcTorqueMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadSingleForceWarping
+ SUBTYPE OF (IfcStructuralLoadSingleForce);
+ WarpingMoment : OPTIONAL IfcWarpingMomentMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralLoadStatic
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralLoadLinearForce
+ ,IfcStructuralLoadPlanarForce
+ ,IfcStructuralLoadSingleDisplacement
+ ,IfcStructuralLoadSingleForce
+ ,IfcStructuralLoadTemperature))
+ SUBTYPE OF (IfcStructuralLoad);
+END_ENTITY;
+
+ENTITY IfcStructuralLoadTemperature
+ SUBTYPE OF (IfcStructuralLoadStatic);
+ DeltaT_Constant : OPTIONAL IfcThermodynamicTemperatureMeasure;
+ DeltaT_Y : OPTIONAL IfcThermodynamicTemperatureMeasure;
+ DeltaT_Z : OPTIONAL IfcThermodynamicTemperatureMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralMember
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralCurveMember
+ ,IfcStructuralSurfaceMember))
+ SUBTYPE OF (IfcStructuralItem);
+ INVERSE
+ ReferencesElement : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatedStructuralMember;
+ ConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;
+END_ENTITY;
+
+ENTITY IfcStructuralPlanarAction
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralPlanarActionVarying))
+ SUBTYPE OF (IfcStructuralAction);
+ ProjectedOrTrue : IfcProjectedOrTrueLengthEnum;
+ WHERE
+ WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADPLANARFORCE',
+ 'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE']
+ * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
+END_ENTITY;
+
+ENTITY IfcStructuralPlanarActionVarying
+ SUBTYPE OF (IfcStructuralPlanarAction);
+ VaryingAppliedLoadLocation : IfcShapeAspect;
+ SubsequentAppliedLoads : LIST [2:?] OF IfcStructuralLoad;
+ DERIVE
+ VaryingAppliedLoads : LIST [3:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);
+END_ENTITY;
+
+ENTITY IfcStructuralPointAction
+ SUBTYPE OF (IfcStructuralAction);
+ WHERE
+ WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE',
+ 'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']
+ * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
+END_ENTITY;
+
+ENTITY IfcStructuralPointConnection
+ SUBTYPE OF (IfcStructuralConnection);
+END_ENTITY;
+
+ENTITY IfcStructuralPointReaction
+ SUBTYPE OF (IfcStructuralReaction);
+ WHERE
+ WR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE',
+ 'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']
+ * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
+END_ENTITY;
+
+ENTITY IfcStructuralProfileProperties
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralSteelProfileProperties))
+ SUBTYPE OF (IfcGeneralProfileProperties);
+ TorsionalConstantX : OPTIONAL IfcMomentOfInertiaMeasure;
+ MomentOfInertiaYZ : OPTIONAL IfcMomentOfInertiaMeasure;
+ MomentOfInertiaY : OPTIONAL IfcMomentOfInertiaMeasure;
+ MomentOfInertiaZ : OPTIONAL IfcMomentOfInertiaMeasure;
+ WarpingConstant : OPTIONAL IfcWarpingConstantMeasure;
+ ShearCentreZ : OPTIONAL IfcLengthMeasure;
+ ShearCentreY : OPTIONAL IfcLengthMeasure;
+ ShearDeformationAreaZ : OPTIONAL IfcAreaMeasure;
+ ShearDeformationAreaY : OPTIONAL IfcAreaMeasure;
+ MaximumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;
+ MinimumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;
+ MaximumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;
+ MinimumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;
+ TorsionalSectionModulus : OPTIONAL IfcSectionModulusMeasure;
+ CentreOfGravityInX : OPTIONAL IfcLengthMeasure;
+ CentreOfGravityInY : OPTIONAL IfcLengthMeasure;
+ WHERE
+ WR21 : NOT(EXISTS(ShearDeformationAreaY)) OR (ShearDeformationAreaY >= 0.);
+ WR22 : NOT(EXISTS(ShearDeformationAreaZ)) OR (ShearDeformationAreaZ >= 0.);
+END_ENTITY;
+
+ENTITY IfcStructuralReaction
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStructuralPointReaction))
+ SUBTYPE OF (IfcStructuralActivity);
+ INVERSE
+ Causes : SET [0:?] OF IfcStructuralAction FOR CausedBy;
+END_ENTITY;
+
+ENTITY IfcStructuralResultGroup
+ SUBTYPE OF (IfcGroup);
+ TheoryType : IfcAnalysisTheoryTypeEnum;
+ ResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;
+ IsLinear : BOOLEAN;
+ INVERSE
+ ResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;
+END_ENTITY;
+
+ENTITY IfcStructuralSteelProfileProperties
+ SUBTYPE OF (IfcStructuralProfileProperties);
+ ShearAreaZ : OPTIONAL IfcAreaMeasure;
+ ShearAreaY : OPTIONAL IfcAreaMeasure;
+ PlasticShapeFactorY : OPTIONAL IfcPositiveRatioMeasure;
+ PlasticShapeFactorZ : OPTIONAL IfcPositiveRatioMeasure;
+ WHERE
+ WR31 : NOT(EXISTS(ShearAreaY)) OR (ShearAreaY >= 0.);
+ WR32 : NOT(EXISTS(ShearAreaZ)) OR (ShearAreaZ >= 0.);
+END_ENTITY;
+
+ENTITY IfcStructuralSurfaceConnection
+ SUBTYPE OF (IfcStructuralConnection);
+END_ENTITY;
+
+ENTITY IfcStructuralSurfaceMember
+ SUPERTYPE OF (ONEOF
+ (IfcStructuralSurfaceMemberVarying))
+ SUBTYPE OF (IfcStructuralMember);
+ PredefinedType : IfcStructuralSurfaceTypeEnum;
+ Thickness : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcStructuralSurfaceMemberVarying
+ SUBTYPE OF (IfcStructuralSurfaceMember);
+ SubsequentThickness : LIST [2:?] OF IfcPositiveLengthMeasure;
+ VaryingThicknessLocation : IfcShapeAspect;
+ DERIVE
+ VaryingThickness : LIST [3:?] OF IfcPositiveLengthMeasure := IfcAddToBeginOfList(SELF\IfcStructuralSurfaceMember.Thickness, SubsequentThickness);
+ WHERE
+ WR61 : EXISTS(SELF\IfcStructuralSurfaceMember.Thickness);
+ WR62 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |
+ NOT(SIZEOF(temp\IfcRepresentation.Items) = 1)
+ )) = 0;
+ WR63 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |
+ NOT(('IFC2X3.IFCCARTESIANPOINT' IN TYPEOF(temp\IfcRepresentation.Items[1]))
+ OR
+ ('IFC2X3.IFCPOINTONSURFACE' IN TYPEOF(temp\IfcRepresentation.Items[1])))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcStructuredDimensionCallout
+ SUBTYPE OF (IfcDraughtingCallout);
+ WHERE
+ WR31 : SIZEOF(QUERY ( Ato <* QUERY ( Con <* SELF.contents | (
+ 'IFC2X3.IFCANNOTATIONTEXTOCCURRENCE' IN
+ TYPEOF(Con)) ) | (NOT (Ato.Name IN ['dimension value',
+ 'tolerance value','unit text','prefix text','suffix text']))))
+ = 0;
+END_ENTITY;
+
+ENTITY IfcStyleModel
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcStyledRepresentation))
+ SUBTYPE OF (IfcRepresentation);
+END_ENTITY;
+
+ENTITY IfcStyledItem
+ SUPERTYPE OF (ONEOF
+ (IfcAnnotationOccurrence))
+ SUBTYPE OF (IfcRepresentationItem);
+ Item : OPTIONAL IfcRepresentationItem;
+ Styles : SET [1:?] OF IfcPresentationStyleAssignment;
+ Name : OPTIONAL IfcLabel;
+ WHERE
+ WR11 : SIZEOF(Styles) = 1;
+ WR12 : NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(Item));
+END_ENTITY;
+
+ENTITY IfcStyledRepresentation
+ SUBTYPE OF (IfcStyleModel);
+ WHERE
+ WR21 : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items |
+ (NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(temp)))
+ )) = 0;
+END_ENTITY;
+
+ENTITY IfcSubContractResource
+ SUBTYPE OF (IfcConstructionResource);
+ SubContractor : OPTIONAL IfcActorSelect;
+ JobDescription : OPTIONAL IfcText;
+END_ENTITY;
+
+ENTITY IfcSubedge
+ SUBTYPE OF (IfcEdge);
+ ParentEdge : IfcEdge;
+END_ENTITY;
+
+ENTITY IfcSurface
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBoundedSurface
+ ,IfcElementarySurface
+ ,IfcSweptSurface))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+END_ENTITY;
+
+ENTITY IfcSurfaceCurveSweptAreaSolid
+ SUBTYPE OF (IfcSweptAreaSolid);
+ Directrix : IfcCurve;
+ StartParam : IfcParameterValue;
+ EndParam : IfcParameterValue;
+ ReferenceSurface : IfcSurface;
+END_ENTITY;
+
+ENTITY IfcSurfaceOfLinearExtrusion
+ SUBTYPE OF (IfcSweptSurface);
+ ExtrudedDirection : IfcDirection;
+ Depth : IfcLengthMeasure;
+ DERIVE
+ ExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);
+ WHERE
+ WR41 : Depth > 0.;
+END_ENTITY;
+
+ENTITY IfcSurfaceOfRevolution
+ SUBTYPE OF (IfcSweptSurface);
+ AxisPosition : IfcAxis1Placement;
+ DERIVE
+ AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location,
+ IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));
+END_ENTITY;
+
+ENTITY IfcSurfaceStyle
+ SUBTYPE OF (IfcPresentationStyle);
+ Side : IfcSurfaceSide;
+ Styles : SET [1:5] OF IfcSurfaceStyleElementSelect;
+ WHERE
+ WR11 : SIZEOF(QUERY(Style <* SELF.Styles |
+ 'IFC2X3.IFCSURFACESTYLESHADING' IN
+ TYPEOF(Style)
+ )) <= 1;
+ WR12 : SIZEOF(QUERY(Style <* SELF.Styles |
+ 'IFC2X3.IFCSURFACESTYLELIGHTING' IN
+ TYPEOF(Style)
+ )) <= 1;
+ WR13 : SIZEOF(QUERY(Style <* SELF.Styles |
+ 'IFC2X3.IFCSURFACESTYLEREFRACTION' IN
+ TYPEOF(Style)
+ )) <= 1;
+ WR14 : SIZEOF(QUERY(Style <* SELF.Styles |
+ 'IFC2X3.IFCSURFACESTYLEWITHTEXTURES' IN
+ TYPEOF(Style)
+ )) <= 1;
+ WR15 : SIZEOF(QUERY(Style <* SELF.Styles |
+ 'IFC2X3.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN
+ TYPEOF(Style)
+ )) <= 1;
+END_ENTITY;
+
+ENTITY IfcSurfaceStyleLighting;
+ DiffuseTransmissionColour : IfcColourRgb;
+ DiffuseReflectionColour : IfcColourRgb;
+ TransmissionColour : IfcColourRgb;
+ ReflectanceColour : IfcColourRgb;
+END_ENTITY;
+
+ENTITY IfcSurfaceStyleRefraction;
+ RefractionIndex : OPTIONAL IfcReal;
+ DispersionFactor : OPTIONAL IfcReal;
+END_ENTITY;
+
+ENTITY IfcSurfaceStyleRendering
+ SUBTYPE OF (IfcSurfaceStyleShading);
+ Transparency : OPTIONAL IfcNormalisedRatioMeasure;
+ DiffuseColour : OPTIONAL IfcColourOrFactor;
+ TransmissionColour : OPTIONAL IfcColourOrFactor;
+ DiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;
+ ReflectionColour : OPTIONAL IfcColourOrFactor;
+ SpecularColour : OPTIONAL IfcColourOrFactor;
+ SpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;
+ ReflectanceMethod : IfcReflectanceMethodEnum;
+END_ENTITY;
+
+ENTITY IfcSurfaceStyleShading
+ SUPERTYPE OF (ONEOF
+ (IfcSurfaceStyleRendering));
+ SurfaceColour : IfcColourRgb;
+END_ENTITY;
+
+ENTITY IfcSurfaceStyleWithTextures;
+ Textures : LIST [1:?] OF IfcSurfaceTexture;
+END_ENTITY;
+
+ENTITY IfcSurfaceTexture
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcBlobTexture
+ ,IfcImageTexture
+ ,IfcPixelTexture));
+ RepeatS : BOOLEAN;
+ RepeatT : BOOLEAN;
+ TextureType : IfcSurfaceTextureEnum;
+ TextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;
+END_ENTITY;
+
+ENTITY IfcSweptAreaSolid
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcExtrudedAreaSolid
+ ,IfcRevolvedAreaSolid
+ ,IfcSurfaceCurveSweptAreaSolid))
+ SUBTYPE OF (IfcSolidModel);
+ SweptArea : IfcProfileDef;
+ Position : IfcAxis2Placement3D;
+ WHERE
+ WR22 : SweptArea.ProfileType = IfcProfileTypeEnum.Area;
+END_ENTITY;
+
+ENTITY IfcSweptDiskSolid
+ SUBTYPE OF (IfcSolidModel);
+ Directrix : IfcCurve;
+ Radius : IfcPositiveLengthMeasure;
+ InnerRadius : OPTIONAL IfcPositiveLengthMeasure;
+ StartParam : IfcParameterValue;
+ EndParam : IfcParameterValue;
+ WHERE
+ WR1 : Directrix.Dim = 3;
+ WR2 : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);
+END_ENTITY;
+
+ENTITY IfcSweptSurface
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcSurfaceOfLinearExtrusion
+ ,IfcSurfaceOfRevolution))
+ SUBTYPE OF (IfcSurface);
+ SweptCurve : IfcProfileDef;
+ Position : IfcAxis2Placement3D;
+ DERIVE
+ Dim : IfcDimensionCount := Position.Dim;
+ WHERE
+ WR1 : NOT('IFC2X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptCurve));
+ WR2 : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;
+END_ENTITY;
+
+ENTITY IfcSwitchingDeviceType
+ SUBTYPE OF (IfcFlowControllerType);
+ PredefinedType : IfcSwitchingDeviceTypeEnum;
+END_ENTITY;
+
+ENTITY IfcSymbolStyle
+ SUBTYPE OF (IfcPresentationStyle);
+ StyleOfSymbol : IfcSymbolStyleSelect;
+END_ENTITY;
+
+ENTITY IfcSystem
+ SUPERTYPE OF (ONEOF
+ (IfcElectricalCircuit
+ ,IfcStructuralAnalysisModel))
+ SUBTYPE OF (IfcGroup);
+ INVERSE
+ ServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;
+END_ENTITY;
+
+ENTITY IfcSystemFurnitureElementType
+ SUBTYPE OF (IfcFurnishingElementType);
+END_ENTITY;
+
+ENTITY IfcTShapeProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ Depth : IfcPositiveLengthMeasure;
+ FlangeWidth : IfcPositiveLengthMeasure;
+ WebThickness : IfcPositiveLengthMeasure;
+ FlangeThickness : IfcPositiveLengthMeasure;
+ FilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ FlangeEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;
+ WebEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;
+ WebSlope : OPTIONAL IfcPlaneAngleMeasure;
+ FlangeSlope : OPTIONAL IfcPlaneAngleMeasure;
+ CentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR1 : FlangeThickness < Depth;
+ WR2 : WebThickness < FlangeWidth;
+END_ENTITY;
+
+ENTITY IfcTable;
+ Name : STRING;
+ Rows : LIST [1:?] OF IfcTableRow;
+ DERIVE
+ NumberOfCellsInRow : INTEGER := HIINDEX(Rows[1].RowCells);
+ NumberOfHeadings : INTEGER := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));
+ NumberOfDataRows : INTEGER := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));
+ WHERE
+ WR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;
+ WR2 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;
+ WR3 : { 0 <= NumberOfHeadings <= 1 };
+END_ENTITY;
+
+ENTITY IfcTableRow;
+ RowCells : LIST [1:?] OF IfcValue;
+ IsHeading : BOOLEAN;
+ INVERSE
+ OfTable : IfcTable FOR Rows;
+END_ENTITY;
+
+ENTITY IfcTankType
+ SUBTYPE OF (IfcFlowStorageDeviceType);
+ PredefinedType : IfcTankTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcTask
+ SUPERTYPE OF (ONEOF
+ (IfcMove
+ ,IfcOrderAction))
+ SUBTYPE OF (IfcProcess);
+ TaskId : IfcIdentifier;
+ Status : OPTIONAL IfcLabel;
+ WorkMethod : OPTIONAL IfcLabel;
+ IsMilestone : BOOLEAN;
+ Priority : OPTIONAL INTEGER;
+ WHERE
+ WR1 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
+ WR2 : SIZEOF(QUERY(temp <* SELF\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
+ WR3 : EXISTS(SELF\IfcRoot.Name);
+END_ENTITY;
+
+ENTITY IfcTelecomAddress
+ SUBTYPE OF (IfcAddress);
+ TelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;
+ FacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;
+ PagerNumber : OPTIONAL IfcLabel;
+ ElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;
+ WWWHomePageURL : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : EXISTS (TelephoneNumbers) OR
+ EXISTS (PagerNumber) OR
+ EXISTS (FacsimileNumbers) OR
+ EXISTS (ElectronicMailAddresses) OR
+ EXISTS (WWWHomePageURL);
+END_ENTITY;
+
+ENTITY IfcTendon
+ SUBTYPE OF (IfcReinforcingElement);
+ PredefinedType : IfcTendonTypeEnum;
+ NominalDiameter : IfcPositiveLengthMeasure;
+ CrossSectionArea : IfcAreaMeasure;
+ TensionForce : OPTIONAL IfcForceMeasure;
+ PreStress : OPTIONAL IfcPressureMeasure;
+ FrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;
+ AnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;
+ MinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR1 : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
+END_ENTITY;
+
+ENTITY IfcTendonAnchor
+ SUBTYPE OF (IfcReinforcingElement);
+END_ENTITY;
+
+ENTITY IfcTerminatorSymbol
+ SUPERTYPE OF (ONEOF
+ (IfcDimensionCurveTerminator))
+ SUBTYPE OF (IfcAnnotationSymbolOccurrence);
+ AnnotatedCurve : IfcAnnotationCurveOccurrence;
+END_ENTITY;
+
+ENTITY IfcTextLiteral
+ SUPERTYPE OF (ONEOF
+ (IfcTextLiteralWithExtent))
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Literal : IfcPresentableText;
+ Placement : IfcAxis2Placement;
+ Path : IfcTextPath;
+END_ENTITY;
+
+ENTITY IfcTextLiteralWithExtent
+ SUBTYPE OF (IfcTextLiteral);
+ Extent : IfcPlanarExtent;
+ BoxAlignment : IfcBoxAlignment;
+ WHERE
+ WR31 : NOT('IFC2X3.IFCPLANARBOX' IN TYPEOF(Extent));
+END_ENTITY;
+
+ENTITY IfcTextStyle
+ SUBTYPE OF (IfcPresentationStyle);
+ TextCharacterAppearance : OPTIONAL IfcCharacterStyleSelect;
+ TextStyle : OPTIONAL IfcTextStyleSelect;
+ TextFontStyle : IfcTextFontSelect;
+END_ENTITY;
+
+ENTITY IfcTextStyleFontModel
+ SUBTYPE OF (IfcPreDefinedTextFont);
+ FontFamily : OPTIONAL LIST [1:?] OF IfcTextFontName;
+ FontStyle : OPTIONAL IfcFontStyle;
+ FontVariant : OPTIONAL IfcFontVariant;
+ FontWeight : OPTIONAL IfcFontWeight;
+ FontSize : IfcSizeSelect;
+ WHERE
+ WR31 : ('IFC2X3.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND
+ (SELF.FontSize > 0.);
+END_ENTITY;
+
+ENTITY IfcTextStyleForDefinedFont;
+ Colour : IfcColour;
+ BackgroundColour : OPTIONAL IfcColour;
+END_ENTITY;
+
+ENTITY IfcTextStyleTextModel;
+ TextIndent : OPTIONAL IfcSizeSelect;
+ TextAlign : OPTIONAL IfcTextAlignment;
+ TextDecoration : OPTIONAL IfcTextDecoration;
+ LetterSpacing : OPTIONAL IfcSizeSelect;
+ WordSpacing : OPTIONAL IfcSizeSelect;
+ TextTransform : OPTIONAL IfcTextTransformation;
+ LineHeight : OPTIONAL IfcSizeSelect;
+END_ENTITY;
+
+ENTITY IfcTextStyleWithBoxCharacteristics;
+ BoxHeight : OPTIONAL IfcPositiveLengthMeasure;
+ BoxWidth : OPTIONAL IfcPositiveLengthMeasure;
+ BoxSlantAngle : OPTIONAL IfcPlaneAngleMeasure;
+ BoxRotateAngle : OPTIONAL IfcPlaneAngleMeasure;
+ CharacterSpacing : OPTIONAL IfcSizeSelect;
+END_ENTITY;
+
+ENTITY IfcTextureCoordinate
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcTextureCoordinateGenerator
+ ,IfcTextureMap));
+ INVERSE
+ AnnotatedSurface : SET [1:1] OF IfcAnnotationSurface FOR TextureCoordinates;
+END_ENTITY;
+
+ENTITY IfcTextureCoordinateGenerator
+ SUBTYPE OF (IfcTextureCoordinate);
+ Mode : IfcLabel;
+ Parameter : LIST [1:?] OF IfcSimpleValue;
+END_ENTITY;
+
+ENTITY IfcTextureMap
+ SUBTYPE OF (IfcTextureCoordinate);
+ TextureMaps : SET [1:?] OF IfcVertexBasedTextureMap;
+ WHERE
+ WR11 : SIZEOF([
+ 'IFC2X3.IFCSHELLBASEDSURFACEMODEL',
+ 'IFC2X3.IFCFACEBASEDSURFACEMODEL',
+ 'IFC2X3.IFCFACETEDBREP',
+ 'IFC2X3.IFCFACETEDBREPWITHVOIDS']
+ * TYPEOF(SELF\IfcTextureCoordinate.AnnotatedSurface[1].Item)
+ ) >= 1;
+END_ENTITY;
+
+ENTITY IfcTextureVertex;
+ Coordinates : LIST [2:2] OF IfcParameterValue;
+END_ENTITY;
+
+ENTITY IfcThermalMaterialProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ SpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;
+ BoilingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;
+ FreezingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;
+ ThermalConductivity : OPTIONAL IfcThermalConductivityMeasure;
+ UNIQUE
+ UR11 : Material;
+END_ENTITY;
+
+ENTITY IfcTimeSeries
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcIrregularTimeSeries
+ ,IfcRegularTimeSeries));
+ Name : IfcLabel;
+ Description : OPTIONAL IfcText;
+ StartTime : IfcDateTimeSelect;
+ EndTime : IfcDateTimeSelect;
+ TimeSeriesDataType : IfcTimeSeriesDataTypeEnum;
+ DataOrigin : IfcDataOriginEnum;
+ UserDefinedDataOrigin : OPTIONAL IfcLabel;
+ Unit : OPTIONAL IfcUnit;
+ INVERSE
+ DocumentedBy : SET [0:1] OF IfcTimeSeriesReferenceRelationship FOR ReferencedTimeSeries;
+END_ENTITY;
+
+ENTITY IfcTimeSeriesReferenceRelationship;
+ ReferencedTimeSeries : IfcTimeSeries;
+ TimeSeriesReferences : SET [1:?] OF IfcDocumentSelect;
+END_ENTITY;
+
+ENTITY IfcTimeSeriesSchedule
+ SUBTYPE OF (IfcControl);
+ ApplicableDates : OPTIONAL LIST [1:?] OF IfcDateTimeSelect;
+ TimeSeriesScheduleType : IfcTimeSeriesScheduleTypeEnum;
+ TimeSeries : IfcTimeSeries;
+ WHERE
+ WR41 : NOT(TimeSeriesScheduleType=IfcTimeSeriesScheduleTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
+END_ENTITY;
+
+ENTITY IfcTimeSeriesValue;
+ ListValues : LIST [1:?] OF IfcValue;
+END_ENTITY;
+
+ENTITY IfcTopologicalRepresentationItem
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcConnectedFaceSet
+ ,IfcEdge
+ ,IfcFace
+ ,IfcFaceBound
+ ,IfcLoop
+ ,IfcPath
+ ,IfcVertex))
+ SUBTYPE OF (IfcRepresentationItem);
+END_ENTITY;
+
+ENTITY IfcTopologyRepresentation
+ SUBTYPE OF (IfcShapeModel);
+ WHERE
+ WR21 : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items |
+ NOT('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))
+ )) = 0;
+ WR22 : EXISTS(SELF\IfcRepresentation.RepresentationType);
+ WR23 : IfcTopologyRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items);
+END_ENTITY;
+
+ENTITY IfcTransformerType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcTransformerTypeEnum;
+END_ENTITY;
+
+ENTITY IfcTransportElement
+ SUBTYPE OF (IfcElement);
+ OperationType : OPTIONAL IfcTransportElementTypeEnum;
+ CapacityByWeight : OPTIONAL IfcMassMeasure;
+ CapacityByNumber : OPTIONAL IfcCountMeasure;
+END_ENTITY;
+
+ENTITY IfcTransportElementType
+ SUBTYPE OF (IfcElementType);
+ PredefinedType : IfcTransportElementTypeEnum;
+END_ENTITY;
+
+ENTITY IfcTrapeziumProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ BottomXDim : IfcPositiveLengthMeasure;
+ TopXDim : IfcPositiveLengthMeasure;
+ YDim : IfcPositiveLengthMeasure;
+ TopXOffset : IfcLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcTrimmedCurve
+ SUBTYPE OF (IfcBoundedCurve);
+ BasisCurve : IfcCurve;
+ Trim1 : SET [1:2] OF IfcTrimmingSelect;
+ Trim2 : SET [1:2] OF IfcTrimmingSelect;
+ SenseAgreement : BOOLEAN;
+ MasterRepresentation : IfcTrimmingPreference;
+ WHERE
+ WR41 : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));
+ WR42 : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));
+ WR43 : NOT('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));
+END_ENTITY;
+
+ENTITY IfcTubeBundleType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcTubeBundleTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcTwoDirectionRepeatFactor
+ SUBTYPE OF (IfcOneDirectionRepeatFactor);
+ SecondRepeatFactor : IfcVector;
+END_ENTITY;
+
+ENTITY IfcTypeObject
+ SUPERTYPE OF (ONEOF
+ (IfcTypeProduct))
+ SUBTYPE OF (IfcObjectDefinition);
+ ApplicableOccurrence : OPTIONAL IfcLabel;
+ HasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition;
+ INVERSE
+ ObjectTypeOf : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;
+ WHERE
+ WR1 : EXISTS(SELF\IfcRoot.Name);
+END_ENTITY;
+
+ENTITY IfcTypeProduct
+ SUPERTYPE OF (ONEOF
+ (IfcDoorStyle
+ ,IfcElementType
+ ,IfcWindowStyle))
+ SUBTYPE OF (IfcTypeObject);
+ RepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;
+ Tag : OPTIONAL IfcLabel;
+ WHERE
+ WR41 : NOT(EXISTS(SELF\IfcTypeObject.ObjectTypeOf[1])) OR
+ (SIZEOF(QUERY(temp <* SELF\IfcTypeObject.ObjectTypeOf[1].RelatedObjects |
+ NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)))
+ ) = 0);
+END_ENTITY;
+
+ENTITY IfcUShapeProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ Depth : IfcPositiveLengthMeasure;
+ FlangeWidth : IfcPositiveLengthMeasure;
+ WebThickness : IfcPositiveLengthMeasure;
+ FlangeThickness : IfcPositiveLengthMeasure;
+ FilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ EdgeRadius : OPTIONAL IfcPositiveLengthMeasure;
+ FlangeSlope : OPTIONAL IfcPlaneAngleMeasure;
+ CentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR21 : FlangeThickness < (Depth / 2.);
+ WR22 : WebThickness < FlangeWidth;
+END_ENTITY;
+
+ENTITY IfcUnitAssignment;
+ Units : SET [1:?] OF IfcUnit;
+ WHERE
+ WR01 : IfcCorrectUnitAssignment(Units);
+END_ENTITY;
+
+ENTITY IfcUnitaryEquipmentType
+ SUBTYPE OF (IfcEnergyConversionDeviceType);
+ PredefinedType : IfcUnitaryEquipmentTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcValveType
+ SUBTYPE OF (IfcFlowControllerType);
+ PredefinedType : IfcValveTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcVector
+ SUBTYPE OF (IfcGeometricRepresentationItem);
+ Orientation : IfcDirection;
+ Magnitude : IfcLengthMeasure;
+ DERIVE
+ Dim : IfcDimensionCount := Orientation.Dim;
+ WHERE
+ WR1 : Magnitude >= 0.0;
+END_ENTITY;
+
+ENTITY IfcVertex
+ SUPERTYPE OF (ONEOF
+ (IfcVertexPoint))
+ SUBTYPE OF (IfcTopologicalRepresentationItem);
+END_ENTITY;
+
+ENTITY IfcVertexBasedTextureMap;
+ TextureVertices : LIST [3:?] OF IfcTextureVertex;
+ TexturePoints : LIST [3:?] OF IfcCartesianPoint;
+END_ENTITY;
+
+ENTITY IfcVertexLoop
+ SUBTYPE OF (IfcLoop);
+ LoopVertex : IfcVertex;
+END_ENTITY;
+
+ENTITY IfcVertexPoint
+ SUBTYPE OF (IfcVertex);
+ VertexGeometry : IfcPoint;
+END_ENTITY;
+
+ENTITY IfcVibrationIsolatorType
+ SUBTYPE OF (IfcDiscreteAccessoryType);
+ PredefinedType : IfcVibrationIsolatorTypeEnum;
+ WHERE
+ WR1 : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR
+ ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
+END_ENTITY;
+
+ENTITY IfcVirtualElement
+ SUBTYPE OF (IfcElement);
+END_ENTITY;
+
+ENTITY IfcVirtualGridIntersection;
+ IntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;
+ OffsetDistances : LIST [2:3] OF IfcLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcWall
+ SUPERTYPE OF (ONEOF
+ (IfcWallStandardCase))
+ SUBTYPE OF (IfcBuildingElement);
+ WHERE
+ WR1 : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations |
+ 'IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)
+ )) <= 1;
+END_ENTITY;
+
+ENTITY IfcWallStandardCase
+ SUBTYPE OF (IfcWall);
+ WHERE
+ WR1 : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X3.IFCRELASSOCIATES.RELATEDOBJECTS') |
+ ('IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND
+ ('IFC2X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))
+ )) = 1;
+END_ENTITY;
+
+ENTITY IfcWallType
+ SUBTYPE OF (IfcBuildingElementType);
+ PredefinedType : IfcWallTypeEnum;
+END_ENTITY;
+
+ENTITY IfcWasteTerminalType
+ SUBTYPE OF (IfcFlowTerminalType);
+ PredefinedType : IfcWasteTerminalTypeEnum;
+END_ENTITY;
+
+ENTITY IfcWaterProperties
+ SUBTYPE OF (IfcMaterialProperties);
+ IsPotable : OPTIONAL BOOLEAN;
+ Hardness : OPTIONAL IfcIonConcentrationMeasure;
+ AlkalinityConcentration : OPTIONAL IfcIonConcentrationMeasure;
+ AcidityConcentration : OPTIONAL IfcIonConcentrationMeasure;
+ ImpuritiesContent : OPTIONAL IfcNormalisedRatioMeasure;
+ PHLevel : OPTIONAL IfcPHMeasure;
+ DissolvedSolidsContent : OPTIONAL IfcNormalisedRatioMeasure;
+ UNIQUE
+ UR11 : Material;
+END_ENTITY;
+
+ENTITY IfcWindow
+ SUBTYPE OF (IfcBuildingElement);
+ OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
+ OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
+END_ENTITY;
+
+ENTITY IfcWindowLiningProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ LiningDepth : OPTIONAL IfcPositiveLengthMeasure;
+ LiningThickness : OPTIONAL IfcPositiveLengthMeasure;
+ TransomThickness : OPTIONAL IfcPositiveLengthMeasure;
+ MullionThickness : OPTIONAL IfcPositiveLengthMeasure;
+ FirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;
+ SecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;
+ FirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;
+ SecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;
+ ShapeAspectStyle : OPTIONAL IfcShapeAspect;
+ WHERE
+ WR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness));
+ WR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset));
+ WR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset));
+ WR34 : EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1]) AND
+ ('IFC2X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1]));
+END_ENTITY;
+
+ENTITY IfcWindowPanelProperties
+ SUBTYPE OF (IfcPropertySetDefinition);
+ OperationType : IfcWindowPanelOperationEnum;
+ PanelPosition : IfcWindowPanelPositionEnum;
+ FrameDepth : OPTIONAL IfcPositiveLengthMeasure;
+ FrameThickness : OPTIONAL IfcPositiveLengthMeasure;
+ ShapeAspectStyle : OPTIONAL IfcShapeAspect;
+END_ENTITY;
+
+ENTITY IfcWindowStyle
+ SUBTYPE OF (IfcTypeProduct);
+ ConstructionType : IfcWindowStyleConstructionEnum;
+ OperationType : IfcWindowStyleOperationEnum;
+ ParameterTakesPrecedence : BOOLEAN;
+ Sizeable : BOOLEAN;
+END_ENTITY;
+
+ENTITY IfcWorkControl
+ ABSTRACT SUPERTYPE OF (ONEOF
+ (IfcWorkPlan
+ ,IfcWorkSchedule))
+ SUBTYPE OF (IfcControl);
+ Identifier : IfcIdentifier;
+ CreationDate : IfcDateTimeSelect;
+ Creators : OPTIONAL SET [1:?] OF IfcPerson;
+ Purpose : OPTIONAL IfcLabel;
+ Duration : OPTIONAL IfcTimeMeasure;
+ TotalFloat : OPTIONAL IfcTimeMeasure;
+ StartTime : IfcDateTimeSelect;
+ FinishTime : OPTIONAL IfcDateTimeSelect;
+ WorkControlType : OPTIONAL IfcWorkControlTypeEnum;
+ UserDefinedControlType : OPTIONAL IfcLabel;
+ WHERE
+ WR1 : (WorkControlType <> IfcWorkControlTypeEnum.USERDEFINED) OR
+ ((WorkControlType = IfcWorkControlTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcWorkControl.UserDefinedControlType));
+END_ENTITY;
+
+ENTITY IfcWorkPlan
+ SUBTYPE OF (IfcWorkControl);
+END_ENTITY;
+
+ENTITY IfcWorkSchedule
+ SUBTYPE OF (IfcWorkControl);
+END_ENTITY;
+
+ENTITY IfcZShapeProfileDef
+ SUBTYPE OF (IfcParameterizedProfileDef);
+ Depth : IfcPositiveLengthMeasure;
+ FlangeWidth : IfcPositiveLengthMeasure;
+ WebThickness : IfcPositiveLengthMeasure;
+ FlangeThickness : IfcPositiveLengthMeasure;
+ FilletRadius : OPTIONAL IfcPositiveLengthMeasure;
+ EdgeRadius : OPTIONAL IfcPositiveLengthMeasure;
+ WHERE
+ WR21 : FlangeThickness < (Depth / 2.);
+END_ENTITY;
+
+ENTITY IfcZone
+ SUBTYPE OF (IfcGroup);
+ WHERE
+ WR1 : SIZEOF (QUERY (temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects | NOT(('IFC2X3.IFCZONE' IN TYPEOF(temp)) OR ('IFC2X3.IFCSPACE' IN TYPEOF(temp))) )) = 0;
+END_ENTITY;
+
+FUNCTION IfcAddToBeginOfList
+ (AScalar : GENERIC;
+ AList : LIST OF GENERIC:AL)
+ : LIST[1:?] OF GENERIC:AL;
+
+ LOCAL
+ Result : LIST OF GENERIC:AL := [];
+ END_LOCAL;
+
+ IF NOT(EXISTS(AScalar)) THEN
+ Result := AList;
+ ELSE
+ Result := Result + AScalar;
+ IF (HIINDEX(AList) >= 1) THEN
+ REPEAT i:=1 TO HIINDEX(AList);
+ Result[i+1] := AList[i];
+ END_REPEAT;
+ END_IF;
+ END_IF;
+ RETURN(Result);
+END_FUNCTION;
+
+FUNCTION IfcBaseAxis
+ (Dim : INTEGER;
+ Axis1, Axis2, Axis3 : IfcDirection)
+ : LIST [2:3] OF IfcDirection;
+
+ LOCAL
+ U : LIST [2:3] OF IfcDirection;
+ Factor : REAL;
+ D1, D2 : IfcDirection;
+ END_LOCAL;
+
+ IF (Dim = 3) THEN
+ D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
+ D2 := IfcFirstProjAxis(D1, Axis1);
+ U := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];
+ ELSE
+ IF EXISTS(Axis1) THEN
+ D1 := IfcNormalise(Axis1);
+ U := [D1, IfcOrthogonalComplement(D1)];
+ IF EXISTS(Axis2) THEN
+ Factor := IfcDotProduct(Axis2, U[2]);
+ IF (Factor < 0.0) THEN
+ U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];
+ U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];
+ END_IF;
+ END_IF;
+ ELSE
+ IF EXISTS(Axis2) THEN
+ D1 := IfcNormalise(Axis2);
+ U := [IfcOrthogonalComplement(D1), D1];
+ U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];
+ U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];
+ ELSE
+ U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]),
+ IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];
+ END_IF;
+ END_IF;
+ END_IF;
+ RETURN(U);
+END_FUNCTION;
+
+FUNCTION IfcBooleanChoose
+ (B : BOOLEAN ;
+ Choice1, Choice2 : Generic : Item)
+ : Generic : Item;
+ IF B THEN
+ RETURN (Choice1);
+ ELSE
+ RETURN (Choice2);
+ END_IF;
+END_FUNCTION;
+
+FUNCTION IfcBuild2Axes
+ (RefDirection : IfcDirection)
+ : LIST [2:2] OF IfcDirection;
+ LOCAL
+ D : IfcDirection := NVL(IfcNormalise(RefDirection),
+ IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));
+ END_LOCAL;
+ RETURN([D, IfcOrthogonalComplement(D)]);
+END_FUNCTION;
+
+FUNCTION IfcBuildAxes
+ (Axis, RefDirection : IfcDirection)
+ : LIST [3:3] OF IfcDirection;
+ LOCAL
+ D1, D2 : IfcDirection;
+ END_LOCAL;
+ D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
+ D2 := IfcFirstProjAxis(D1, RefDirection);
+ RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2)).Orientation, D1]);
+END_FUNCTION;
+
+FUNCTION IfcCorrectDimensions
+ (m : IfcUnitEnum; Dim : IfcDimensionalExponents)
+ : LOGICAL;
+ CASE m OF
+ LENGTHUNIT : IF
+ Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ MASSUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ TIMEUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ELECTRICCURRENTUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ THERMODYNAMICTEMPERATUREUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ AMOUNTOFSUBSTANCEUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ LUMINOUSINTENSITYUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ PLANEANGLEUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ SOLIDANGLEUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ AREAUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ VOLUMEUNIT : IF
+ Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+
+ ABSORBEDDOSEUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ RADIOACTIVITYUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ELECTRICCAPACITANCEUNIT : IF
+ Dim = (IfcDimensionalExponents (-2, 1, 4, 1, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ DOSEEQUIVALENTUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ELECTRICCHARGEUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ELECTRICCONDUCTANCEUNIT : IF
+ Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ELECTRICVOLTAGEUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ELECTRICRESISTANCEUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ENERGYUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ FORCEUNIT : IF
+ Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ FREQUENCYUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ INDUCTANCEUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ ILLUMINANCEUNIT : IF
+ Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ LUMINOUSFLUXUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ MAGNETICFLUXUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ MAGNETICFLUXDENSITYUNIT : IF
+ Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ POWERUNIT : IF
+ Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+ PRESSUREUNIT : IF
+ Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))
+ THEN RETURN(TRUE);
+ ELSE RETURN(FALSE);
+ END_IF;
+
+ OTHERWISE :
+ RETURN (UNKNOWN);
+ END_CASE;
+END_FUNCTION;
+
+FUNCTION IfcCorrectLocalPlacement
+ (AxisPlacement:IfcAxis2Placement;
+ RelPlacement : IfcObjectPlacement)
+ : LOGICAL;
+
+ IF (EXISTS(RelPlacement)) THEN
+ IF ('IFC2X3.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN
+ RETURN(?);
+ END_IF;
+ IF ('IFC2X3.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN
+ IF ('IFC2X3.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN
+ RETURN(TRUE);
+ END_IF;
+ IF ('IFC2X3.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN
+ IF (RelPlacement.RelativePlacement.Dim = 3) THEN
+ RETURN(TRUE);
+ ELSE
+ RETURN(FALSE);
+ END_IF;
+ END_IF;
+ END_IF;
+ ELSE
+ RETURN(TRUE);
+ END_IF;
+ RETURN(?);
+END_FUNCTION;
+
+FUNCTION IfcCorrectObjectAssignment
+ (Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition)
+ : LOGICAL;
+
+ LOCAL
+ Count : INTEGER := 0;
+ END_LOCAL;
+
+ IF NOT(EXISTS(Constraint)) THEN
+ RETURN(TRUE);
+ END_IF;
+
+ CASE Constraint OF
+ IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);
+ IfcObjectTypeEnum.PRODUCT :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp))));
+ RETURN(Count = 0);
+ END;
+ IfcObjectTypeEnum.PROCESS :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROCESS' IN TYPEOF(temp))));
+ RETURN(Count = 0);
+ END;
+ IfcObjectTypeEnum.CONTROL :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCCONTROL' IN TYPEOF(temp))));
+ RETURN(Count = 0);
+ END;
+ IfcObjectTypeEnum.RESOURCE :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCRESOURCE' IN TYPEOF(temp))));
+ RETURN(Count = 0);
+ END;
+ IfcObjectTypeEnum.ACTOR :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCACTOR' IN TYPEOF(temp))));
+ RETURN(Count = 0);
+ END;
+ IfcObjectTypeEnum.GROUP :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCGROUP' IN TYPEOF(temp))));
+ RETURN(Count = 0);
+ END;
+ IfcObjectTypeEnum.PROJECT :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROJECT' IN TYPEOF(temp))));
+ RETURN(Count = 0);
+ END;
+ OTHERWISE : RETURN(?);
+ END_CASE;
+END_FUNCTION;
+
+FUNCTION IfcCorrectUnitAssignment
+ (Units : SET [1:?] OF IfcUnit)
+ : LOGICAL;
+
+ LOCAL
+ NamedUnitNumber : INTEGER := 0;
+ DerivedUnitNumber : INTEGER := 0;
+ MonetaryUnitNumber : INTEGER := 0;
+ NamedUnitNames : SET OF IfcUnitEnum := [];
+ DerivedUnitNames : SET OF IfcDerivedUnitEnum := [];
+ END_LOCAL;
+
+ NamedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp.UnitType = IfcUnitEnum.USERDEFINED)));
+ DerivedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp.UnitType = IfcDerivedUnitEnum.USERDEFINED)));
+ MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units | 'IFC2X3.IFCMONETARYUNIT' IN TYPEOF(temp)));
+
+ REPEAT i := 1 TO SIZEOF(Units);
+ IF (('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i].UnitType = IfcUnitEnum.USERDEFINED)) THEN
+ NamedUnitNames := NamedUnitNames + Units[i].UnitType;
+ END_IF;
+ IF (('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i].UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN
+ DerivedUnitNames := DerivedUnitNames + Units[i].UnitType;
+ END_IF;
+ END_REPEAT;
+
+ RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1));
+END_FUNCTION;
+
+FUNCTION IfcCrossProduct
+ (Arg1, Arg2 : IfcDirection)
+ : IfcVector;
+ LOCAL
+ Mag : REAL;
+ Res : IfcDirection;
+ V1,V2 : LIST[3:3] OF REAL;
+ Result : IfcVector;
+ END_LOCAL;
+
+ IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN
+ RETURN(?);
+ ELSE
+ BEGIN
+ V1 := IfcNormalise(Arg1).DirectionRatios;
+ V2 := IfcNormalise(Arg2).DirectionRatios;
+ Res := IfcRepresentationItem() || IfcGeometricRepresentationItem ()
+ || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);
+ Mag := 0.0;
+ REPEAT i := 1 TO 3;
+ Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];
+ END_REPEAT;
+ IF (Mag > 0.0) THEN
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));
+ ELSE
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);
+ END_IF;
+ RETURN(Result);
+ END;
+ END_IF;
+END_FUNCTION;
+
+FUNCTION IfcCurveDim
+ (Curve : IfcCurve)
+ : IfcDimensionCount;
+
+ IF ('IFC2X3.IFCLINE' IN TYPEOF(Curve))
+ THEN RETURN(Curve.Pnt.Dim);
+ END_IF;
+ IF ('IFC2X3.IFCCONIC' IN TYPEOF(Curve))
+ THEN RETURN(Curve.Position.Dim);
+ END_IF;
+ IF ('IFC2X3.IFCPOLYLINE' IN TYPEOF(Curve))
+ THEN RETURN(Curve.Points[1].Dim);
+ END_IF;
+ IF ('IFC2X3.IFCTRIMMEDCURVE' IN TYPEOF(Curve))
+ THEN RETURN(IfcCurveDim(Curve.BasisCurve));
+ END_IF;
+ IF ('IFC2X3.IFCCOMPOSITECURVE' IN TYPEOF(Curve))
+ THEN RETURN(Curve.Segments[1].Dim);
+ END_IF;
+ IF ('IFC2X3.IFCBSPLINECURVE' IN TYPEOF(Curve))
+ THEN RETURN(Curve.ControlPointsList[1].Dim);
+ END_IF;
+ IF ('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(Curve))
+ THEN RETURN(2);
+ END_IF;
+ IF ('IFC2X3.IFCOFFSETCURVE3D' IN TYPEOF(Curve))
+ THEN RETURN(3);
+ END_IF;
+ RETURN (?);
+END_FUNCTION;
+
+FUNCTION IfcCurveWeightsPositive
+ (B: IfcRationalBezierCurve)
+ : BOOLEAN;
+ LOCAL
+ Result : BOOLEAN := TRUE;
+ END_LOCAL;
+
+ REPEAT i := 0 TO B.UpperIndexOnControlPoints;
+ IF B.Weights[i] <= 0.0 THEN
+ Result := FALSE;
+ RETURN(Result);
+ END_IF;
+ END_REPEAT;
+ RETURN(Result);
+END_FUNCTION;
+
+FUNCTION IfcDeriveDimensionalExponents
+ (x : IfcUnit)
+ : IfcDimensionalExponents;
+ LOCAL
+ Result : IfcDimensionalExponents :=
+ IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);
+ END_LOCAL;
+ IF 'IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(x) THEN
+ REPEAT i := LOINDEX(x.Elements) TO HIINDEX(x.Elements);
+ Result.LengthExponent := Result.LengthExponent +
+ (x.Elements[i].Exponent *
+ x.Elements[i].Unit.Dimensions.LengthExponent);
+ Result.MassExponent := Result.MassExponent +
+ (x.Elements[i].Exponent *
+ x.Elements[i].Unit.Dimensions.MassExponent);
+ Result.TimeExponent := Result.TimeExponent +
+ (x.Elements[i].Exponent *
+ x.Elements[i].Unit.Dimensions.TimeExponent);
+ Result.ElectricCurrentExponent := Result.ElectricCurrentExponent +
+ (x.Elements[i].Exponent *
+ x.Elements[i].Unit.Dimensions.ElectricCurrentExponent);
+ Result.ThermodynamicTemperatureExponent :=
+ Result.ThermodynamicTemperatureExponent +
+ (x.Elements[i].Exponent *
+ x.Elements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);
+ Result.AmountOfSubstanceExponent :=
+ Result.AmountOfSubstanceExponent + (x.Elements[i].Exponent *
+ x.Elements[i].Unit.Dimensions.AmountOfSubstanceExponent);
+ Result.LuminousIntensityExponent :=
+ Result.LuminousIntensityExponent + (x.Elements[i].Exponent *
+ x.Elements[i].Unit.Dimensions.LuminousIntensityExponent);
+ END_REPEAT;
+ ELSE
+ Result := x.Dimensions;
+ END_IF;
+ RETURN (Result);
+END_FUNCTION;
+
+FUNCTION IfcDimensionsForSiUnit
+ (n : IfcSiUnitName )
+ : IfcDimensionalExponents;
+ CASE n OF
+ METRE : RETURN (IfcDimensionalExponents
+ (1, 0, 0, 0, 0, 0, 0));
+ SQUARE_METRE : RETURN (IfcDimensionalExponents
+ (2, 0, 0, 0, 0, 0, 0));
+ CUBIC_METRE : RETURN (IfcDimensionalExponents
+ (3, 0, 0, 0, 0, 0, 0));
+ GRAM : RETURN (IfcDimensionalExponents
+ (0, 1, 0, 0, 0, 0, 0));
+ SECOND : RETURN (IfcDimensionalExponents
+ (0, 0, 1, 0, 0, 0, 0));
+ AMPERE : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 1, 0, 0, 0));
+ KELVIN : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 1, 0, 0));
+ MOLE : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 0, 1, 0));
+ CANDELA : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 0, 0, 1));
+ RADIAN : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 0, 0, 0));
+ STERADIAN : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 0, 0, 0));
+ HERTZ : RETURN (IfcDimensionalExponents
+ (0, 0, -1, 0, 0, 0, 0));
+ NEWTON : RETURN (IfcDimensionalExponents
+ (1, 1, -2, 0, 0, 0, 0));
+ PASCAL : RETURN (IfcDimensionalExponents
+ (-1, 1, -2, 0, 0, 0, 0));
+ JOULE : RETURN (IfcDimensionalExponents
+ (2, 1, -2, 0, 0, 0, 0));
+ WATT : RETURN (IfcDimensionalExponents
+ (2, 1, -3, 0, 0, 0, 0));
+ COULOMB : RETURN (IfcDimensionalExponents
+ (0, 0, 1, 1, 0, 0, 0));
+ VOLT : RETURN (IfcDimensionalExponents
+ (2, 1, -3, -1, 0, 0, 0));
+ FARAD : RETURN (IfcDimensionalExponents
+ (-2, -1, 4, 1, 0, 0, 0));
+ OHM : RETURN (IfcDimensionalExponents
+ (2, 1, -3, -2, 0, 0, 0));
+ SIEMENS : RETURN (IfcDimensionalExponents
+ (-2, -1, 3, 2, 0, 0, 0));
+ WEBER : RETURN (IfcDimensionalExponents
+ (2, 1, -2, -1, 0, 0, 0));
+ TESLA : RETURN (IfcDimensionalExponents
+ (0, 1, -2, -1, 0, 0, 0));
+ HENRY : RETURN (IfcDimensionalExponents
+ (2, 1, -2, -2, 0, 0, 0));
+ DEGREE_CELSIUS : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 1, 0, 0));
+ LUMEN : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 0, 0, 1));
+ LUX : RETURN (IfcDimensionalExponents
+ (-2, 0, 0, 0, 0, 0, 1));
+ BECQUEREL : RETURN (IfcDimensionalExponents
+ (0, 0, -1, 0, 0, 0, 0));
+ GRAY : RETURN (IfcDimensionalExponents
+ (2, 0, -2, 0, 0, 0, 0));
+ SIEVERT : RETURN (IfcDimensionalExponents
+ (2, 0, -2, 0, 0, 0, 0));
+ OTHERWISE : RETURN (IfcDimensionalExponents
+ (0, 0, 0, 0, 0, 0, 0));
+ END_CASE;
+END_FUNCTION;
+
+FUNCTION IfcDotProduct
+ (Arg1, Arg2 : IfcDirection)
+ : REAL;
+ LOCAL
+ Scalar : REAL;
+ Vec1, Vec2 : IfcDirection;
+ Ndim : INTEGER;
+ END_LOCAL;
+
+ IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN
+ Scalar := ?;
+ ELSE
+ IF (Arg1.Dim <> Arg2.Dim) THEN
+ Scalar := ?;
+ ELSE
+ BEGIN
+ Vec1 := IfcNormalise(Arg1);
+ Vec2 := IfcNormalise(Arg2);
+ Ndim := Arg1.Dim;
+ Scalar := 0.0;
+ REPEAT i := 1 TO Ndim;
+ Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];
+ END_REPEAT;
+ END;
+ END_IF;
+ END_IF;
+ RETURN (Scalar);
+END_FUNCTION;
+
+FUNCTION IfcFirstProjAxis
+ (ZAxis, Arg : IfcDirection)
+ : IfcDirection;
+ LOCAL
+ XAxis : IfcDirection;
+ V : IfcDirection;
+ Z : IfcDirection;
+ XVec : IfcVector;
+ END_LOCAL;
+
+ IF (NOT EXISTS(ZAxis)) THEN
+ RETURN (?) ;
+ ELSE
+ Z := IfcNormalise(ZAxis);
+ IF NOT EXISTS(Arg) THEN
+ IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN
+ V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);
+ ELSE
+ V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);
+ END_IF;
+ ELSE
+ IF (Arg.Dim <> 3) THEN
+ RETURN (?) ;
+ END_IF;
+ IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN
+ RETURN (?);
+ ELSE
+ V := IfcNormalise(Arg);
+ END_IF;
+ END_IF;
+ XVec := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);
+ XAxis := IfcVectorDifference(V, XVec).Orientation;
+ XAxis := IfcNormalise(XAxis);
+ END_IF;
+ RETURN(XAxis);
+END_FUNCTION;
+
+FUNCTION IfcLeapYear
+ (Year : IfcYearNumber)
+ : BOOLEAN;
+
+ IF ((((Year MOD 4) = 0) AND ((Year MOD 100) <> 0)) OR
+ ((Year MOD 400) = 0)) THEN
+ RETURN(TRUE);
+ ELSE
+ RETURN(FALSE);
+ END_IF;
+END_FUNCTION;
+
+FUNCTION IfcListToArray
+ (Lis : LIST [0:?] OF GENERIC : T;
+ Low,U : INTEGER)
+ : ARRAY OF GENERIC : T;
+ LOCAL
+ N : INTEGER;
+ Res : ARRAY [Low:U] OF GENERIC : T;
+ END_LOCAL;
+
+ N := SIZEOF(Lis);
+ IF (N <> (U-Low +1)) THEN
+ RETURN(?);
+ ELSE
+ Res := [Lis[1] : N];
+ REPEAT i := 2 TO N;
+ Res[Low+i-1] := Lis[i];
+ END_REPEAT;
+ RETURN(Res);
+ END_IF;
+END_FUNCTION;
+
+FUNCTION IfcLoopHeadToTail
+ (ALoop : IfcEdgeLoop)
+ : LOGICAL;
+ LOCAL
+ N : INTEGER;
+ P : LOGICAL := TRUE;
+ END_LOCAL;
+
+ N := SIZEOF (ALoop.EdgeList);
+ REPEAT i := 2 TO N;
+ P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:
+ ALoop.EdgeList[i].EdgeStart);
+ END_REPEAT;
+ RETURN (P);
+END_FUNCTION;
+
+FUNCTION IfcMlsTotalThickness
+ (LayerSet : IfcMaterialLayerSet)
+ : IfcLengthMeasure;
+ LOCAL
+ Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;
+ END_LOCAL;
+
+ IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN
+ REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);
+ Max := Max + LayerSet.MaterialLayers[i].LayerThickness;
+ END_REPEAT;
+ END_IF;
+ RETURN (Max);
+END_FUNCTION;
+
+FUNCTION IfcNoOfLayers
+ (Element : IfcElement )
+ : INTEGER;
+
+ LOCAL
+ Association : BAG OF IfcRelAssociates := [];
+ MaterialAssociation : SET OF IfcRelAssociatesMaterial := [];
+ END_LOCAL;
+
+ Association := USEDIN(Element, 'IFC2X3.IFCRELASSOCIATES.RELATEDOBJECTS');
+
+ IF SIZEOF (Association) > 0 THEN
+ REPEAT i := 1 TO HIINDEX(Association);
+ IF ('IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(Association[i])) THEN
+ MaterialAssociation := MaterialAssociation + Association[i];
+ END_IF;
+ END_REPEAT;
+ END_IF;
+
+ IF (SIZEOF(MaterialAssociation) <> 1) THEN
+ RETURN (?);
+ ELSE
+ IF 'IFC2X3.IFCMATERIAL' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN
+ RETURN (1);
+ END_IF;
+ IF 'IFC2X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN
+ RETURN (SIZEOF(MaterialAssociation[1].RelatingMaterial.ForLayerSet.MaterialLayers));
+ END_IF;
+ IF 'IFC2X3.IFCMATERIALLIST' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN
+ RETURN (?);
+ END_IF;
+ END_IF;
+
+ RETURN (?);
+END_FUNCTION;
+
+FUNCTION IfcNormalise
+ (Arg : IfcVectorOrDirection)
+ : IfcVectorOrDirection;
+ LOCAL
+ Ndim : INTEGER;
+ V : IfcDirection
+ := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]);
+ Vec : IfcVector
+ := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (
+ IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);
+ Mag : REAL;
+ Result : IfcVectorOrDirection
+ := V;
+ END_LOCAL;
+
+ IF NOT EXISTS (Arg) THEN
+ RETURN (?);
+ ELSE
+ Ndim := Arg.Dim;
+ IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg) THEN
+ BEGIN
+ V.DirectionRatios := Arg.Orientation.DirectionRatios;
+ Vec.Magnitude := Arg.Magnitude;
+ Vec.Orientation := V;
+ IF Arg.Magnitude = 0.0 THEN
+ RETURN(?);
+ ELSE
+ Vec.Magnitude := 1.0;
+ END_IF;
+ END;
+ ELSE
+ V.DirectionRatios := Arg.DirectionRatios;
+ END_IF;
+ Mag := 0.0;
+ REPEAT i := 1 TO Ndim;
+ Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];
+ END_REPEAT;
+ IF Mag > 0.0 THEN
+ Mag := SQRT(Mag);
+ REPEAT i := 1 TO Ndim;
+ V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;
+ END_REPEAT;
+ IF 'IFC2X3.IFCVECTOR' IN TYPEOF(arg) THEN
+ Vec.Orientation := V;
+ Result := Vec;
+ ELSE
+ Result := V;
+ END_IF;
+ ELSE
+ RETURN(?);
+ END_IF;
+ END_IF;
+ RETURN (Result);
+END_FUNCTION;
+
+FUNCTION IfcOrthogonalComplement
+ (Vec : IfcDirection)
+ : IfcDirection;
+ LOCAL
+ Result : IfcDirection ;
+ END_LOCAL;
+ IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN
+ RETURN(?);
+ ELSE
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);
+ RETURN(Result);
+ END_IF;
+END_FUNCTION;
+
+FUNCTION IfcPathHeadToTail
+ (APath : IfcPath)
+ : LOGICAL;
+ LOCAL
+ N : INTEGER := 0;
+ P : LOGICAL := UNKNOWN;
+ END_LOCAL;
+ N := SIZEOF (APath.EdgeList);
+ REPEAT i := 2 TO N;
+ P := P AND (APath.EdgeList[i-1].EdgeEnd :=:
+ APath.EdgeList[i].EdgeStart);
+ END_REPEAT;
+ RETURN (P);
+END_FUNCTION;
+
+FUNCTION IfcSameAxis2Placement
+ (ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)
+ : LOGICAL;
+
+ RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND
+ IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND
+ IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));
+END_FUNCTION;
+
+FUNCTION IfcSameCartesianPoint
+ (cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)
+ : LOGICAL;
+
+ LOCAL
+ cp1x : REAL := cp1.Coordinates[1];
+ cp1y : REAL := cp1.Coordinates[2];
+ cp1z : REAL := 0;
+ cp2x : REAL := cp2.Coordinates[1];
+ cp2y : REAL := cp2.Coordinates[2];
+ cp2z : REAL := 0;
+ END_LOCAL;
+
+ IF (SIZEOF(cp1.Coordinates) > 2) THEN
+ cp1z := cp1.Coordinates[3];
+ END_IF;
+
+ IF (SIZEOF(cp2.Coordinates) > 2) THEN
+ cp2z := cp2.Coordinates[3];
+ END_IF;
+
+ RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND
+ IfcSameValue(cp1y,cp2y,Epsilon) AND
+ IfcSameValue(cp1z,cp2z,Epsilon));
+END_FUNCTION;
+
+FUNCTION IfcSameDirection
+ (dir1, dir2 : IfcDirection; Epsilon : REAL)
+ : LOGICAL;
+ LOCAL
+ dir1x : REAL := dir1.DirectionRatios[1];
+ dir1y : REAL := dir1.DirectionRatios[2];
+ dir1z : REAL := 0;
+ dir2x : REAL := dir2.DirectionRatios[1];
+ dir2y : REAL := dir2.DirectionRatios[2];
+ dir2z : REAL := 0;
+ END_LOCAL;
+
+ IF (SIZEOF(dir1.DirectionRatios) > 2) THEN
+ dir1z := dir1.DirectionRatios[3];
+ END_IF;
+
+ IF (SIZEOF(dir2.DirectionRatios) > 2) THEN
+ dir2z := dir2.DirectionRatios[3];
+ END_IF;
+
+ RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND
+ IfcSameValue(dir1y,dir2y,Epsilon) AND
+ IfcSameValue(dir1z,dir2z,Epsilon));
+END_FUNCTION;
+
+FUNCTION IfcSameValidPrecision
+ (Epsilon1, Epsilon2 : REAL)
+ : LOGICAL;
+ LOCAL
+ ValidEps1, ValidEps2 : REAL;
+ DefaultEps : REAL := 0.000001;
+ DerivationOfEps : REAL := 1.001;
+ UpperEps : REAL := 1.0;
+ END_LOCAL;
+
+ ValidEps1 := NVL(Epsilon1, DefaultEps);
+ ValidEps2 := NVL(Epsilon2, DefaultEps);
+ RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND
+ (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps));
+END_FUNCTION;
+
+FUNCTION IfcSameValue
+ (Value1, Value2 : REAL; Epsilon : REAL)
+ : LOGICAL;
+ LOCAL
+ ValidEps : REAL;
+ DefaultEps : REAL := 0.000001;
+ END_LOCAL;
+
+ ValidEps := NVL(Epsilon, DefaultEps);
+ RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));
+END_FUNCTION;
+
+FUNCTION IfcScalarTimesVector
+ (Scalar : REAL; Vec : IfcVectorOrDirection)
+ : IfcVector;
+ LOCAL
+ V : IfcDirection;
+ Mag : REAL;
+ Result : IfcVector;
+ END_LOCAL;
+
+ IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN
+ RETURN (?) ;
+ ELSE
+ IF 'IFC2X3.IFCVECTOR' IN TYPEOF (Vec) THEN
+ V := Vec.Orientation;
+ Mag := Scalar * Vec.Magnitude;
+ ELSE
+ V := Vec;
+ Mag := Scalar;
+ END_IF;
+ IF (Mag < 0.0 ) THEN
+ REPEAT i := 1 TO SIZEOF(V.DirectionRatios);
+ V.DirectionRatios[i] := -V.DirectionRatios[i];
+ END_REPEAT;
+ Mag := -Mag;
+ END_IF;
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);
+ END_IF;
+ RETURN (Result);
+END_FUNCTION;
+
+FUNCTION IfcSecondProjAxis
+ (ZAxis, XAxis, Arg: IfcDirection)
+ : IfcDirection;
+ LOCAL
+ YAxis : IfcVector;
+ V : IfcDirection;
+ Temp : IfcVector;
+ END_LOCAL;
+
+ IF NOT EXISTS(Arg) THEN
+ V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);
+ ELSE
+ V := Arg;
+ END_IF;
+ Temp := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);
+ YAxis := IfcVectorDifference(V, Temp);
+ Temp := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);
+ YAxis := IfcVectorDifference(YAxis, Temp);
+ YAxis := IfcNormalise(YAxis);
+ RETURN(YAxis.Orientation);
+END_FUNCTION;
+
+FUNCTION IfcShapeRepresentationTypes
+ (RepType : IfcLabel; Items : SET OF IfcRepresentationItem)
+ : LOGICAL;
+
+ LOCAL
+ Count : INTEGER := 0;
+ END_LOCAL;
+
+ CASE RepType OF
+ 'Curve2D' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCCURVE' IN TYPEOF(temp))
+ AND (temp.Dim = 2)));
+ END;
+ 'Annotation2D' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | (
+ SIZEOF(TYPEOF(temp) * [
+ 'IFC2X3.IFCPOINT',
+ 'IFC2X3.IFCCURVE',
+ 'IFC2X3.IFCGEOMETRICCURVESET',
+ 'IFC2X3.IFCANNOTATIONFILLAREA',
+ 'IFC2X3.IFCDEFINEDSYMBOL',
+ 'IFC2X3.IFCTEXTLITERAL',
+ 'IFC2X3.IFCDRAUGHTINGCALLOUT']) = 1)
+ ));
+ END;
+ 'GeometricSet' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCSURFACE' IN TYPEOF(temp))));
+ END;
+ 'GeometricCurveSet' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICCURVESET' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp))));
+ REPEAT i:=1 TO HIINDEX(Items);
+ IF ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(Items[i]))
+ THEN
+ IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC2X3.IFCSURFACE' IN TYPEOF(temp))) > 0)
+ THEN
+ Count := Count - 1;
+ END_IF;
+ END_IF;
+ END_REPEAT;
+ END;
+ 'SurfaceModel' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
+ 'IFC2X3.IFCSHELLBASEDSURFACEMODEL',
+ 'IFC2X3.IFCFACEBASEDSURFACEMODEL',
+ 'IFC2X3.IFCFACETEDBREP',
+ 'IFC2X3.IFCFACETEDBREPWITHVOIDS'] * TYPEOF(temp)) >= 1
+ ));
+ END;
+ 'SolidModel' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSOLIDMODEL' IN TYPEOF(temp))));
+ END;
+ 'SweptSolid' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(temp))));
+ END;
+ 'CSG' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANRESULT' IN TYPEOF(temp))));
+ END;
+ 'Clipping' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp))));
+ END;
+ 'AdvancedSweptSolid' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSURFACECURVESWEPTAREASOLID' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCSWEPTDISKSOLID' IN TYPEOF(temp))));
+ END;
+ 'Brep' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCFACETEDBREP' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCFACETEDBREPWITHVOIDS' IN TYPEOF(temp))));
+ END;
+ 'BoundingBox' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOUNDINGBOX' IN TYPEOF(temp))));
+ IF (SIZEOF(Items) > 1)
+ THEN
+ Count := 0;
+ END_IF;
+ END;
+ 'SectionedSpine' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSECTIONEDSPINE' IN TYPEOF(temp))));
+ END;
+ 'MappedRepresentation' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCMAPPEDITEM' IN TYPEOF(temp))));
+ END;
+ OTHERWISE : RETURN(?);
+ END_CASE;
+ RETURN (Count = SIZEOF(Items));
+END_FUNCTION;
+
+FUNCTION IfcTopologyRepresentationTypes
+ (RepType : IfcLabel; Items : SET OF IfcRepresentationItem)
+ : LOGICAL;
+
+ LOCAL
+ Count : INTEGER := 0;
+ END_LOCAL;
+
+ CASE RepType OF
+ 'Vertex' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items |
+ ('IFC2X3.IFCVERTEX' IN TYPEOF(temp))));
+ END;
+ 'Edge' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items |
+ ('IFC2X3.IFCEDGE' IN TYPEOF(temp))));
+ END;
+ 'Path' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items |
+ ('IFC2X3.IFCPATH' IN TYPEOF(temp))));
+ END;
+ 'Face' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items |
+ ('IFC2X3.IFCFACE' IN TYPEOF(temp))));
+ END;
+ 'Shell' :
+ BEGIN
+ Count := SIZEOF(QUERY(temp <* Items |
+ ('IFC2X3.IFCOPENSHELL' IN TYPEOF(temp))
+ OR ('IFC2X3.IFCCLOSEDSHELL' IN TYPEOF(temp))));
+ END;
+ 'Undefined': RETURN(TRUE);
+ OTHERWISE : RETURN(?);
+ END_CASE;
+ RETURN (Count = SIZEOF(Items));
+END_FUNCTION;
+
+FUNCTION IfcUniquePropertyName
+ (Properties : SET [1:?] OF IfcProperty)
+ : LOGICAL;
+
+ LOCAL
+ Names : SET OF IfcIdentifier := [];
+ END_LOCAL;
+
+ REPEAT i:=1 TO HIINDEX(Properties);
+ Names := Names + Properties[i].Name;
+ END_REPEAT;
+ RETURN (SIZEOF(Names) = SIZEOF(Properties));
+END_FUNCTION;
+
+FUNCTION IfcValidCalendarDate
+ (Date : IfcCalendarDate)
+ : LOGICAL;
+ IF NOT ({1 <= Date.DayComponent <= 31}) THEN
+ RETURN(FALSE);
+ END_IF;
+ CASE Date.MonthComponent OF
+ 4 : RETURN({ 1<= Date.DayComponent <= 30});
+ 6 : RETURN({ 1<= Date.DayComponent <= 30});
+ 9 : RETURN({ 1<= Date.DayComponent <= 30});
+ 11 : RETURN({ 1<= Date.DayComponent <= 30});
+ 2 :
+ BEGIN
+ IF (IfcLeapYear(Date.YearComponent)) THEN
+ RETURN({ 1<= Date.DayComponent <= 29});
+ ELSE
+ RETURN({ 1<= Date.DayComponent <= 28});
+ END_IF;
+ END;
+ OTHERWISE : RETURN(TRUE);
+ END_CASE;
+END_FUNCTION;
+
+FUNCTION IfcValidTime
+ (Time: IfcLocalTime)
+ : BOOLEAN;
+ IF EXISTS (Time.SecondComponent) THEN
+ RETURN (EXISTS (Time.MinuteComponent));
+ ELSE
+ RETURN (TRUE);
+ END_IF;
+END_FUNCTION;
+
+FUNCTION IfcVectorDifference
+ (Arg1, Arg2 : IfcVectorOrDirection)
+ : IfcVector;
+ LOCAL
+ Result : IfcVector;
+ Res, Vec1, Vec2 : IfcDirection;
+ Mag, Mag1, Mag2 : REAL;
+ Ndim : INTEGER;
+ END_LOCAL;
+
+ IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN
+ RETURN (?) ;
+ ELSE
+ BEGIN
+ IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN
+ Mag1 := Arg1.Magnitude;
+ Vec1 := Arg1.Orientation;
+ ELSE
+ Mag1 := 1.0;
+ Vec1 := Arg1;
+ END_IF;
+ IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN
+ Mag2 := Arg2.Magnitude;
+ Vec2 := Arg2.Orientation;
+ ELSE
+ Mag2 := 1.0;
+ Vec2 := Arg2;
+ END_IF;
+ Vec1 := IfcNormalise (Vec1);
+ Vec2 := IfcNormalise (Vec2);
+ Ndim := SIZEOF(Vec1.DirectionRatios);
+ Mag := 0.0;
+ Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);
+
+ REPEAT i := 1 TO Ndim;
+ Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i];
+ Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);
+ END_REPEAT;
+
+ IF (Mag > 0.0 ) THEN
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));
+ ELSE
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);
+ END_IF;
+ END;
+ END_IF;
+ RETURN (Result);
+END_FUNCTION;
+
+FUNCTION IfcVectorSum
+ (Arg1, Arg2 : IfcVectorOrDirection)
+ : IfcVector;
+ LOCAL
+ Result : IfcVector;
+ Res, Vec1, Vec2 : IfcDirection;
+ Mag, Mag1, Mag2 : REAL;
+ Ndim : INTEGER;
+ END_LOCAL;
+
+ IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN
+ RETURN (?) ;
+ ELSE
+ BEGIN
+ IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN
+ Mag1 := Arg1.Magnitude;
+ Vec1 := Arg1.Orientation;
+ ELSE
+ Mag1 := 1.0;
+ Vec1 := Arg1;
+ END_IF;
+ IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN
+ Mag2 := Arg2.Magnitude;
+ Vec2 := Arg2.Orientation;
+ ELSE
+ Mag2 := 1.0;
+ Vec2 := Arg2;
+ END_IF;
+ Vec1 := IfcNormalise (Vec1);
+ Vec2 := IfcNormalise (Vec2);
+ Ndim := SIZEOF(Vec1.DirectionRatios);
+ Mag := 0.0;
+ Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);
+
+ REPEAT i := 1 TO Ndim;
+ Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];
+ Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);
+ END_REPEAT;
+
+ IF (Mag > 0.0 ) THEN
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));
+ ELSE
+ Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);
+ END_IF;
+ END;
+ END_IF;
+ RETURN (Result);
+END_FUNCTION;
+
+RULE IfcRepresentationContextSameWCS FOR
+ (IfcGeometricRepresentationContext);
+ LOCAL
+ IsDifferent : LOGICAL := FALSE;
+ END_LOCAL;
+ IF (SIZEOF(IfcGeometricRepresentationContext) > 1)
+ THEN
+ REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);
+ IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)
+ THEN
+ IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,
+ IfcGeometricRepresentationContext[i].Precision)))
+ OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,
+ IfcGeometricRepresentationContext[i].WorldCoordinateSystem,
+ IfcGeometricRepresentationContext[1].Precision)));
+ IF (IsDifferent = TRUE) THEN
+ ESCAPE;
+ END_IF;
+ END_IF;
+ END_REPEAT;
+ END_IF;
+ WHERE
+ WR1 : IsDifferent = FALSE;
+END_RULE;
+
+RULE IfcSingleProjectInstance FOR
+ (IfcProject);
+ WHERE
+ WR1 : SIZEOF(IfcProject) <= 1;
+END_RULE;
+
+END_SCHEMA;
|