SCHEMA IFC4;

TYPE IfcAbsorbedDoseMeasure = REAL;
END_TYPE;

TYPE IfcAccelerationMeasure = REAL;
END_TYPE;

TYPE IfcAmountOfSubstanceMeasure = REAL;
END_TYPE;

TYPE IfcAngularVelocityMeasure = REAL;
END_TYPE;

TYPE IfcAreaDensityMeasure = 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 IfcCardinalPointReference = INTEGER;
WHERE
GreaterThanZero : SELF > 0
END_TYPE;

TYPE IfcComplexNumber = ARRAY [1:2] OF REAL;
END_TYPE;

TYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;
WHERE
MinutesInRange : ABS(SELF[2]) < 60
SecondsInRange : ABS(SELF[3]) < 60
MicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000)
ConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0))) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0)))
END_TYPE;

TYPE IfcContextDependentMeasure = REAL;
END_TYPE;

TYPE IfcCountMeasure = NUMBER;
END_TYPE;

TYPE IfcCurvatureMeasure = REAL;
END_TYPE;

TYPE IfcDate = STRING;
END_TYPE;

TYPE IfcDateTime = STRING;
END_TYPE;

TYPE IfcDayInMonthNumber = INTEGER;
WHERE
ValidRange : {1 <= SELF <= 31}
END_TYPE;

TYPE IfcDayInWeekNumber = INTEGER;
WHERE
ValidRange : {1 <= SELF <= 7}
END_TYPE;

TYPE IfcDescriptiveMeasure = STRING;
END_TYPE;

TYPE IfcDimensionCount = INTEGER;
WHERE
WR1 : { 0 < SELF <= 3 }
END_TYPE;

TYPE IfcDoseEquivalentMeasure = REAL;
END_TYPE;

TYPE IfcDuration = STRING;
END_TYPE;

TYPE IfcDynamicViscosityMeasure = REAL;
END_TYPE;

TYPE IfcElectricCapacitanceMeasure = REAL;
END_TYPE;

TYPE IfcElectricChargeMeasure = REAL;
END_TYPE;

TYPE IfcElectricConductanceMeasure = REAL;
END_TYPE;

TYPE IfcElectricCurrentMeasure = REAL;
END_TYPE;

TYPE IfcElectricResistanceMeasure = REAL;
END_TYPE;

TYPE IfcElectricVoltageMeasure = REAL;
END_TYPE;

TYPE IfcEnergyMeasure = REAL;
END_TYPE;

TYPE IfcFontStyle = STRING;
WHERE
WR1 : SELF IN ['normal','italic','oblique']
END_TYPE;

TYPE IfcFontVariant = STRING;
WHERE
WR1 : SELF IN ['normal','small-caps']
END_TYPE;

TYPE IfcFontWeight = STRING;
WHERE
WR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900']
END_TYPE;

TYPE IfcForceMeasure = REAL;
END_TYPE;

TYPE IfcFrequencyMeasure = REAL;
END_TYPE;

TYPE IfcGloballyUniqueId = STRING (22) FIXED;
END_TYPE;

TYPE IfcHeatFluxDensityMeasure = REAL;
END_TYPE;

TYPE IfcHeatingValueMeasure = REAL;
WHERE
WR1 : SELF > 0.
END_TYPE;

TYPE IfcIdentifier = STRING (255);
END_TYPE;

TYPE IfcIlluminanceMeasure = REAL;
END_TYPE;

TYPE IfcInductanceMeasure = REAL;
END_TYPE;

TYPE IfcInteger = INTEGER;
END_TYPE;

TYPE IfcIntegerCountRateMeasure = INTEGER;
END_TYPE;

TYPE IfcIonConcentrationMeasure = REAL;
END_TYPE;

TYPE IfcIsothermalMoistureCapacityMeasure = REAL;
END_TYPE;

TYPE IfcKinematicViscosityMeasure = REAL;
END_TYPE;

TYPE IfcLabel = STRING (255);
END_TYPE;

TYPE IfcLanguageId = IfcIdentifier;
END_TYPE;

TYPE IfcLengthMeasure = REAL;
END_TYPE;

TYPE IfcLinearForceMeasure = REAL;
END_TYPE;

TYPE IfcLinearMomentMeasure = REAL;
END_TYPE;

TYPE IfcLinearStiffnessMeasure = REAL;
END_TYPE;

TYPE IfcLinearVelocityMeasure = REAL;
END_TYPE;

TYPE IfcLogical = LOGICAL;
END_TYPE;

TYPE IfcLuminousFluxMeasure = REAL;
END_TYPE;

TYPE IfcLuminousIntensityDistributionMeasure = REAL;
END_TYPE;

TYPE IfcLuminousIntensityMeasure = REAL;
END_TYPE;

TYPE IfcMagneticFluxDensityMeasure = REAL;
END_TYPE;

TYPE IfcMagneticFluxMeasure = REAL;
END_TYPE;

TYPE IfcMassDensityMeasure = REAL;
END_TYPE;

TYPE IfcMassFlowRateMeasure = REAL;
END_TYPE;

TYPE IfcMassMeasure = REAL;
END_TYPE;

TYPE IfcMassPerLengthMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfElasticityMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfSubgradeReactionMeasure = REAL;
END_TYPE;

TYPE IfcMoistureDiffusivityMeasure = REAL;
END_TYPE;

TYPE IfcMolecularWeightMeasure = REAL;
END_TYPE;

TYPE IfcMomentOfInertiaMeasure = REAL;
END_TYPE;

TYPE IfcMonetaryMeasure = REAL;
END_TYPE;

TYPE IfcMonthInYearNumber = INTEGER;
WHERE
ValidRange : {1 <= SELF <= 12}
END_TYPE;

TYPE IfcNonNegativeLengthMeasure = IfcLengthMeasure;
WHERE
NotNegative : SELF >= 0.
END_TYPE;

TYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;
WHERE
WR1 : {0.0 <= SELF <= 1.0}
END_TYPE;

TYPE IfcNumericMeasure = NUMBER;
END_TYPE;

TYPE IfcPHMeasure = REAL;
WHERE
WR21 : {0.0 <= SELF <= 14.0}
END_TYPE;

TYPE IfcParameterValue = REAL;
END_TYPE;

TYPE IfcPlanarForceMeasure = REAL;
END_TYPE;

TYPE IfcPlaneAngleMeasure = REAL;
END_TYPE;

TYPE IfcPositiveLengthMeasure = IfcLengthMeasure;
WHERE
WR1 : SELF > 0.
END_TYPE;

TYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;
WHERE
WR1 : SELF > 0.
END_TYPE;

TYPE IfcPositiveRatioMeasure = IfcRatioMeasure;
WHERE
WR1 : SELF > 0.
END_TYPE;

TYPE IfcPowerMeasure = REAL;
END_TYPE;

TYPE IfcPresentableText = STRING;
END_TYPE;

TYPE IfcPressureMeasure = REAL;
END_TYPE;

TYPE IfcPropertySetDefinitionSet = SET [1:?] OF IfcPropertySetDefinition;
END_TYPE;

TYPE IfcRadioActivityMeasure = REAL;
END_TYPE;

TYPE IfcRatioMeasure = REAL;
END_TYPE;

TYPE IfcReal = REAL;
END_TYPE;

TYPE IfcRotationalFrequencyMeasure = REAL;
END_TYPE;

TYPE IfcRotationalMassMeasure = REAL;
END_TYPE;

TYPE IfcRotationalStiffnessMeasure = REAL;
END_TYPE;

TYPE IfcSectionModulusMeasure = REAL;
END_TYPE;

TYPE IfcSectionalAreaIntegralMeasure = REAL;
END_TYPE;

TYPE IfcShearModulusMeasure = REAL;
END_TYPE;

TYPE IfcSolidAngleMeasure = REAL;
END_TYPE;

TYPE IfcSoundPowerLevelMeasure = REAL;
END_TYPE;

TYPE IfcSoundPowerMeasure = REAL;
END_TYPE;

TYPE IfcSoundPressureLevelMeasure = REAL;
END_TYPE;

TYPE IfcSoundPressureMeasure = REAL;
END_TYPE;

TYPE IfcSpecificHeatCapacityMeasure = REAL;
END_TYPE;

TYPE IfcSpecularExponent = REAL;
END_TYPE;

TYPE IfcSpecularRoughness = REAL;
WHERE
WR1 : {0.0 <= SELF <= 1.0}
END_TYPE;

TYPE IfcTemperatureGradientMeasure = REAL;
END_TYPE;

TYPE IfcTemperatureRateOfChangeMeasure = REAL;
END_TYPE;

TYPE IfcText = STRING;
END_TYPE;

TYPE IfcTextAlignment = STRING;
WHERE
WR1 : SELF IN ['left', 'right', 'center', 'justify']
END_TYPE;

TYPE IfcTextDecoration = STRING;
WHERE
WR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink']
END_TYPE;

TYPE IfcTextFontName = STRING;
END_TYPE;

TYPE IfcTextTransformation = STRING;
WHERE
WR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none']
END_TYPE;

TYPE IfcThermalAdmittanceMeasure = REAL;
END_TYPE;

TYPE IfcThermalConductivityMeasure = REAL;
END_TYPE;

TYPE IfcThermalExpansionCoefficientMeasure = REAL;
END_TYPE;

TYPE IfcThermalResistanceMeasure = REAL;
END_TYPE;

TYPE IfcThermalTransmittanceMeasure = REAL;
END_TYPE;

TYPE IfcThermodynamicTemperatureMeasure = REAL;
END_TYPE;

TYPE IfcTime = STRING;
END_TYPE;

TYPE IfcTimeMeasure = REAL;
END_TYPE;

TYPE IfcTimeStamp = INTEGER;
END_TYPE;

TYPE IfcTorqueMeasure = REAL;
END_TYPE;

TYPE IfcURIReference = STRING;
END_TYPE;

TYPE IfcVaporPermeabilityMeasure = REAL;
END_TYPE;

TYPE IfcVolumeMeasure = REAL;
END_TYPE;

TYPE IfcVolumetricFlowRateMeasure = REAL;
END_TYPE;

TYPE IfcWarpingConstantMeasure = REAL;
END_TYPE;

TYPE IfcWarpingMomentMeasure = REAL;
END_TYPE;

TYPE IfcActionRequestTypeEnum = ENUMERATION OF (
EMAIL,
FAX,
PHONE,
POST,
VERBAL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcActionSourceTypeEnum = ENUMERATION OF (
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 IfcAirTerminalBoxTypeEnum = ENUMERATION OF (
CONSTANTFLOW,
VARIABLEFLOWPRESSUREDEPENDANT,
VARIABLEFLOWPRESSUREINDEPENDANT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcAirTerminalTypeEnum = ENUMERATION OF (
DIFFUSER,
GRILLE,
LOUVRE,
REGISTER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF (
FIXEDPLATECOUNTERFLOWEXCHANGER,
FIXEDPLATECROSSFLOWEXCHANGER,
FIXEDPLATEPARALLELFLOWEXCHANGER,
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 IfcAudioVisualApplianceTypeEnum = ENUMERATION OF (
AMPLIFIER,
CAMERA,
DISPLAY,
MICROPHONE,
PLAYER,
PROJECTOR,
RECEIVER,
SPEAKER,
SWITCHER,
TELEPHONE,
TUNER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcBSplineCurveForm = ENUMERATION OF (
POLYLINE_FORM,
CIRCULAR_ARC,
ELLIPTIC_ARC,
PARABOLIC_ARC,
HYPERBOLIC_ARC,
UNSPECIFIED);
END_TYPE;

TYPE IfcBSplineSurfaceForm = ENUMERATION OF (
PLANE_SURF,
CYLINDRICAL_SURF,
CONICAL_SURF,
SPHERICAL_SURF,
TOROIDAL_SURF,
SURF_OF_REVOLUTION,
RULED_SURF,
GENERALISED_CONE,
QUADRIC_SURF,
SURF_OF_LINEAR_EXTRUSION,
UNSPECIFIED);
END_TYPE;

TYPE IfcBeamTypeEnum = ENUMERATION OF (
BEAM,
JOIST,
HOLLOWCORE,
LINTEL,
SPANDREL,
T_BEAM,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcBenchmarkEnum = ENUMERATION OF (
GREATERTHAN,
GREATERTHANOREQUALTO,
LESSTHAN,
LESSTHANOREQUALTO,
EQUALTO,
NOTEQUALTO,
INCLUDES,
NOTINCLUDES,
INCLUDEDIN,
NOTINCLUDEDIN);
END_TYPE;

TYPE IfcBoilerTypeEnum = ENUMERATION OF (
WATER,
STEAM,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcBooleanOperator = ENUMERATION OF (
UNION,
INTERSECTION,
DIFFERENCE);
END_TYPE;

TYPE IfcBuildingElementPartTypeEnum = ENUMERATION OF (
INSULATION,
PRECASTPANEL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF (
COMPLEX,
ELEMENT,
PARTIAL,
PROVISIONFORVOID,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcBuildingSystemTypeEnum = ENUMERATION OF (
FENESTRATION,
FOUNDATION,
LOADBEARING,
OUTERSHELL,
SHADING,
TRANSPORT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcBurnerTypeEnum = 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 IfcCableFittingTypeEnum = ENUMERATION OF (
CONNECTOR,
ENTRY,
EXIT,
JUNCTION,
TRANSITION,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcCableSegmentTypeEnum = ENUMERATION OF (
BUSBARSEGMENT,
CABLESEGMENT,
CONDUCTORSEGMENT,
CORESEGMENT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcChangeActionEnum = ENUMERATION OF (
NOCHANGE,
MODIFIED,
ADDED,
DELETED,
NOTDEFINED);
END_TYPE;

TYPE IfcChillerTypeEnum = ENUMERATION OF (
AIRCOOLED,
WATERCOOLED,
HEATRECOVERY,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcChimneyTypeEnum = ENUMERATION OF (
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcCoilTypeEnum = ENUMERATION OF (
DXCOOLINGCOIL,
ELECTRICHEATINGCOIL,
GASHEATINGCOIL,
HYDRONICCOIL,
STEAMHEATINGCOIL,
WATERCOOLINGCOIL,
WATERHEATINGCOIL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcColumnTypeEnum = ENUMERATION OF (
COLUMN,
PILASTER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcCommunicationsApplianceTypeEnum = ENUMERATION OF (
ANTENNA,
COMPUTER,
FAX,
GATEWAY,
MODEM,
NETWORKAPPLIANCE,
NETWORKBRIDGE,
NETWORKHUB,
PRINTER,
REPEATER,
ROUTER,
SCANNER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcComplexPropertyTemplateTypeEnum = ENUMERATION OF (
P_COMPLEX,
Q_COMPLEX);
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 (
AIRCOOLED,
EVAPORATIVECOOLED,
WATERCOOLED,
WATERCOOLEDBRAZEDPLATE,
WATERCOOLEDSHELLCOIL,
WATERCOOLEDSHELLTUBE,
WATERCOOLEDTUBEINTUBE,
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 IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF (
DEMOLISHING,
EARTHMOVING,
ERECTING,
HEATING,
LIGHTING,
PAVING,
PUMPING,
TRANSPORTING,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF (
AGGREGATES,
CONCRETE,
DRYWALL,
FUEL,
GYPSUM,
MASONRY,
METAL,
PLASTIC,
WOOD,
NOTDEFINED,
USERDEFINED);
END_TYPE;

TYPE IfcConstructionProductResourceTypeEnum = ENUMERATION OF (
ASSEMBLY,
FORMWORK,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcControllerTypeEnum = ENUMERATION OF (
FLOATING,
PROGRAMMABLE,
PROPORTIONAL,
MULTIPOSITION,
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 IfcCostItemTypeEnum = ENUMERATION OF (
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,
MOLDING,
SKIRTINGBOARD,
INSULATION,
MEMBRANE,
SLEEVING,
WRAPPING,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcCrewResourceTypeEnum = ENUMERATION OF (
OFFICE,
SITE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcCurtainWallTypeEnum = ENUMERATION OF (
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcCurveInterpolationEnum = ENUMERATION OF (
LINEAR,
LOG_LINEAR,
LOG_LOG,
NOTDEFINED);
END_TYPE;

TYPE IfcDamperTypeEnum = ENUMERATION OF (
BACKDRAFTDAMPER,
BALANCINGDAMPER,
BLASTDAMPER,
CONTROLDAMPER,
FIREDAMPER,
FIRESMOKEDAMPER,
FUMEHOODEXHAUST,
GRAVITYDAMPER,
GRAVITYRELIEFDAMPER,
RELIEFDAMPER,
SMOKEDAMPER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDataOriginEnum = ENUMERATION OF (
MEASURED,
PREDICTED,
SIMULATED,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDerivedUnitEnum = ENUMERATION OF (
ANGULARVELOCITYUNIT,
AREADENSITYUNIT,
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,
SOUNDPOWERLEVELUNIT,
SOUNDPOWERUNIT,
SOUNDPRESSURELEVELUNIT,
SOUNDPRESSUREUNIT,
TEMPERATUREGRADIENTUNIT,
TEMPERATURERATEOFCHANGEUNIT,
THERMALEXPANSIONCOEFFICIENTUNIT,
WARPINGCONSTANTUNIT,
WARPINGMOMENTUNIT,
USERDEFINED);
END_TYPE;

TYPE IfcDirectionSenseEnum = ENUMERATION OF (
POSITIVE,
NEGATIVE);
END_TYPE;

TYPE IfcDiscreteAccessoryTypeEnum = ENUMERATION OF (
ANCHORPLATE,
BRACKET,
SHOE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF (
FORMEDDUCT,
INSPECTIONCHAMBER,
INSPECTIONPIT,
MANHOLE,
METERCHAMBER,
SUMP,
TRENCH,
VALVECHAMBER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDistributionPortTypeEnum = ENUMERATION OF (
CABLE,
CABLECARRIER,
DUCT,
PIPE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDistributionSystemEnum = ENUMERATION OF (
AIRCONDITIONING,
AUDIOVISUAL,
CHEMICAL,
CHILLEDWATER,
COMMUNICATION,
COMPRESSEDAIR,
CONDENSERWATER,
CONTROL,
CONVEYING,
DATA,
DISPOSAL,
DOMESTICCOLDWATER,
DOMESTICHOTWATER,
DRAINAGE,
EARTHING,
ELECTRICAL,
ELECTROACOUSTIC,
EXHAUST,
FIREPROTECTION,
FUEL,
GAS,
HAZARDOUS,
HEATING,
LIGHTING,
LIGHTNINGPROTECTION,
MUNICIPALSOLIDWASTE,
OIL,
OPERATIONAL,
POWERGENERATION,
RAINWATER,
REFRIGERATION,
SECURITY,
SEWAGE,
SIGNAL,
STORMWATER,
TELEPHONE,
TV,
VACUUM,
VENT,
VENTILATION,
WASTEWATER,
WATERSUPPLY,
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,
FIXEDPANEL,
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 IfcDoorTypeEnum = ENUMERATION OF (
DOOR,
GATE,
TRAPDOOR,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDoorTypeOperationEnum = 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,
SWING_FIXED_LEFT,
SWING_FIXED_RIGHT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDuctFittingTypeEnum = ENUMERATION OF (
BEND,
CONNECTOR,
ENTRY,
EXIT,
JUNCTION,
OBSTRUCTION,
TRANSITION,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDuctSegmentTypeEnum = ENUMERATION OF (
RIGIDSEGMENT,
FLEXIBLESEGMENT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcDuctSilencerTypeEnum = ENUMERATION OF (
FLATOVAL,
RECTANGULAR,
ROUND,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcElectricApplianceTypeEnum = ENUMERATION OF (
DISHWASHER,
ELECTRICCOOKER,
FREESTANDINGELECTRICHEATER,
FREESTANDINGFAN,
FREESTANDINGWATERHEATER,
FREESTANDINGWATERCOOLER,
FREEZER,
FRIDGE_FREEZER,
HANDDRYER,
KITCHENMACHINE,
MICROWAVE,
PHOTOCOPIER,
REFRIGERATOR,
TUMBLEDRYER,
VENDINGMACHINE,
WASHINGMACHINE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcElectricDistributionBoardTypeEnum = ENUMERATION OF (
CONSUMERUNIT,
DISTRIBUTIONBOARD,
MOTORCONTROLCENTRE,
SWITCHBOARD,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF (
BATTERY,
CAPACITORBANK,
HARMONICFILTER,
INDUCTORBANK,
UPS,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF (
CHP,
ENGINEGENERATOR,
STANDALONE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcElectricMotorTypeEnum = ENUMERATION OF (
DC,
INDUCTION,
POLYPHASE,
RELUCTANCESYNCHRONOUS,
SYNCHRONOUS,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF (
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 IfcEngineTypeEnum = ENUMERATION OF (
EXTERNALCOMBUSTION,
INTERNALCOMBUSTION,
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 (
DIRECTEXPANSION,
DIRECTEXPANSIONSHELLANDTUBE,
DIRECTEXPANSIONTUBEINTUBE,
DIRECTEXPANSIONBRAZEDPLATE,
FLOODEDSHELLANDTUBE,
SHELLANDCOIL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcEventTriggerTypeEnum = ENUMERATION OF (
EVENTRULE,
EVENTMESSAGE,
EVENTTIME,
EVENTCOMPLEX,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcEventTypeEnum = ENUMERATION OF (
STARTEVENT,
ENDEVENT,
INTERMEDIATEEVENT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcExternalSpatialElementTypeEnum = ENUMERATION OF (
EXTERNAL,
EXTERNAL_EARTH,
EXTERNAL_WATER,
EXTERNAL_FIRE,
USERDEFINED,
NOTDEFIEND);
END_TYPE;

TYPE IfcFanTypeEnum = ENUMERATION OF (
CENTRIFUGALFORWARDCURVED,
CENTRIFUGALRADIAL,
CENTRIFUGALBACKWARDINCLINEDCURVED,
CENTRIFUGALAIRFOIL,
TUBEAXIAL,
VANEAXIAL,
PROPELLORAXIAL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcFastenerTypeEnum = ENUMERATION OF (
GLUE,
MORTAR,
WELD,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcFilterTypeEnum = ENUMERATION OF (
AIRPARTICLEFILTER,
COMPRESSEDAIRFILTER,
ODORFILTER,
OILFILTER,
STRAINER,
WATERFILTER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF (
BREECHINGINLET,
FIREHYDRANT,
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 (
ENERGYMETER,
GASMETER,
OILMETER,
WATERMETER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcFootingTypeEnum = ENUMERATION OF (
CAISSON_FOUNDATION,
FOOTING_BEAM,
PAD_FOOTING,
PILE_CAP,
STRIP_FOOTING,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcFurnitureTypeEnum = ENUMERATION OF (
CHAIR,
TABLE,
DESK,
BED,
FILECABINET,
SHELF,
SOFA,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcGeographicElementTypeEnum = ENUMERATION OF (
TERRAIN,
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 IfcGridTypeEnum = ENUMERATION OF (
RECTANGULAR,
RADIAL,
TRIANGULAR,
IRREGULAR,
USERDEFINED,
NOTDEFINED);
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 IfcInterceptorTypeEnum = ENUMERATION OF (
CYCLONIC,
GREASE,
OIL,
PETROL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcInternalOrExternalEnum = ENUMERATION OF (
INTERNAL,
EXTERNAL,
EXTERNAL_EARTH,
EXTERNAL_WATER,
EXTERNAL_FIRE,
NOTDEFINED);
END_TYPE;

TYPE IfcInventoryTypeEnum = ENUMERATION OF (
ASSETINVENTORY,
SPACEINVENTORY,
FURNITUREINVENTORY,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcJunctionBoxTypeEnum = ENUMERATION OF (
DATA,
POWER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcKnotType = ENUMERATION OF (
UNIFORM_KNOTS,
QUASI_UNIFORM_KNOTS,
PIECEWISE_BEZIER_KNOTS,
UNSPECIFIED);
END_TYPE;

TYPE IfcLaborResourceTypeEnum = ENUMERATION OF (
ADMINISTRATION,
CARPENTRY,
CLEANING,
CONCRETE,
DRYWALL,
ELECTRIC,
FINISHING,
FLOORING,
GENERAL,
HVAC,
LANDSCAPING,
MASONRY,
PAINTING,
PAVING,
PLUMBING,
ROOFING,
SITEGRADING,
STEELWORK,
SURVEYING,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcLampTypeEnum = ENUMERATION OF (
COMPACTFLUORESCENT,
FLUORESCENT,
HALOGEN,
HIGHPRESSUREMERCURY,
HIGHPRESSURESODIUM,
LED,
METALHALIDE,
OLED,
TUNGSTENFILAMENT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcLayerSetDirectionEnum = ENUMERATION OF (
AXIS1,
AXIS2,
AXIS3);
END_TYPE;

TYPE IfcLightDistributionCurveEnum = ENUMERATION OF (
TYPE_A,
TYPE_B,
TYPE_C,
NOTDEFINED);
END_TYPE;

TYPE IfcLightEmissionSourceEnum = ENUMERATION OF (
COMPACTFLUORESCENT,
FLUORESCENT,
HIGHPRESSUREMERCURY,
HIGHPRESSURESODIUM,
LIGHTEMITTINGDIODE,
LOWPRESSURESODIUM,
LOWVOLTAGEHALOGEN,
MAINVOLTAGEHALOGEN,
METALHALIDE,
TUNGSTENFILAMENT,
NOTDEFINED);
END_TYPE;

TYPE IfcLightFixtureTypeEnum = ENUMERATION OF (
POINTSOURCE,
DIRECTIONSOURCE,
SECURITYLIGHTING,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcLoadGroupTypeEnum = ENUMERATION OF (
LOAD_GROUP,
LOAD_CASE,
LOAD_COMBINATION,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcLogicalOperatorEnum = ENUMERATION OF (
LOGICALAND,
LOGICALOR,
LOGICALXOR,
LOGICALNOTAND,
LOGICALNOTOR);
END_TYPE;

TYPE IfcMechanicalFastenerTypeEnum = ENUMERATION OF (
ANCHORBOLT,
BOLT,
DOWEL,
NAIL,
NAILPLATE,
RIVET,
SCREW,
SHEARCONNECTOR,
STAPLE,
STUDSHEARCONNECTOR,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcMedicalDeviceTypeEnum = ENUMERATION OF (
AIRSTATION,
FEEDAIRUNIT,
OXYGENGENERATOR,
OXYGENPLANT,
VACUUMSTATION,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcMemberTypeEnum = ENUMERATION OF (
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,
CODEWAIVER,
DESIGNINTENT,
EXTERNAL,
HEALTHANDSAFETY,
MERGECONFLICT,
MODELVIEW,
PARAMETER,
REQUIREMENT,
SPECIFICATION,
TRIGGERCONDITION,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcOccupantTypeEnum = ENUMERATION OF (
ASSIGNEE,
ASSIGNOR,
LESSEE,
LESSOR,
LETTINGAGENT,
OWNER,
TENANT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcOpeningElementTypeEnum = ENUMERATION OF (
OPENING,
RECESS,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcOutletTypeEnum = ENUMERATION OF (
AUDIOVISUALOUTLET,
COMMUNICATIONSOUTLET,
POWEROUTLET,
DATAOUTLET,
TELEPHONEOUTLET,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcPerformanceHistoryTypeEnum = ENUMERATION OF (
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF (
GRILL,
LOUVER,
SCREEN,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcPermitTypeEnum = ENUMERATION OF (
ACCESS,
BUILDING,
WORK,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF (
PHYSICAL,
VIRTUAL,
NOTDEFINED);
END_TYPE;

TYPE IfcPileConstructionEnum = ENUMERATION OF (
CAST_IN_PLACE,
COMPOSITE,
PRECAST_CONCRETE,
PREFAB_STEEL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcPileTypeEnum = ENUMERATION OF (
BORED,
DRIVEN,
JETGROUTING,
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 (
CULVERT,
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 IfcProjectOrderTypeEnum = ENUMERATION OF (
CHANGEORDER,
MAINTENANCEWORKORDER,
MOVEORDER,
PURCHASEORDER,
WORKORDER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF (
PROJECTED_LENGTH,
TRUE_LENGTH);
END_TYPE;

TYPE IfcProjectionElementTypeEnum = ENUMERATION OF (
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcPropertySetTemplateTypeEnum = ENUMERATION OF (
PSET_TYPEDRIVENONLY,
PSET_TYPEDRIVENOVERRIDE,
PSET_OCCURRENCEDRIVEN,
PSET_PERFORMANCEDRIVEN,
QTO_TYPEDRIVENONLY,
QTO_TYPEDRIVENOVERRIDE,
QTO_OCCURRENCEDRIVEN,
NOTDEFINED);
END_TYPE;

TYPE IfcProtectiveDeviceTrippingUnitTypeEnum = ENUMERATION OF (
ELECTRONIC,
ELECTROMAGNETIC,
RESIDUALCURRENT,
THERMAL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF (
CIRCUITBREAKER,
EARTHLEAKAGECIRCUITBREAKER,
EARTHINGSWITCH,
FUSEDISCONNECTOR,
RESIDUALCURRENTCIRCUITBREAKER,
RESIDUALCURRENTSWITCH,
VARISTOR,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcPumpTypeEnum = ENUMERATION OF (
CIRCULATOR,
ENDSUCTION,
SPLITCASE,
SUBMERSIBLEPUMP,
SUMPPUMP,
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 IfcRecurrenceTypeEnum = ENUMERATION OF (
DAILY,
WEEKLY,
MONTHLY_BY_DAY_OF_MONTH,
MONTHLY_BY_POSITION,
BY_DAY_COUNT,
BY_WEEKDAY_COUNT,
YEARLY_BY_DAY_OF_MONTH,
YEARLY_BY_POSITION);
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,
ANCHORING,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF (
PLAIN,
TEXTURED);
END_TYPE;

TYPE IfcReinforcingBarTypeEnum = ENUMERATION OF (
ANCHORING,
EDGE,
LIGATURE,
MAIN,
PUNCHING,
RING,
SHEAR,
STUD,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcReinforcingMeshTypeEnum = ENUMERATION OF (
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcRoleEnum = ENUMERATION OF (
SUPPLIER,
MANUFACTURER,
CONTRACTOR,
SUBCONTRACTOR,
ARCHITECT,
STRUCTURALENGINEER,
COSTENGINEER,
CLIENT,
BUILDINGOWNER,
BUILDINGOPERATOR,
MECHANICALENGINEER,
ELECTRICALENGINEER,
PROJECTMANAGER,
FACILITIESMANAGER,
CIVILENGINEER,
COMMISSIONINGENGINEER,
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,
USERDEFINED,
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 (
CONDUCTANCESENSOR,
CONTACTSENSOR,
FIRESENSOR,
FLOWSENSOR,
GASSENSOR,
HEATSENSOR,
HUMIDITYSENSOR,
IONCONCENTRATIONSENSOR,
LEVELSENSOR,
LIGHTSENSOR,
MOISTURESENSOR,
MOVEMENTSENSOR,
PHSENSOR,
PRESSURESENSOR,
RADIATIONSENSOR,
RADIOACTIVITYSENSOR,
SMOKESENSOR,
SOUNDSENSOR,
TEMPERATURESENSOR,
WINDSENSOR,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSequenceEnum = ENUMERATION OF (
START_START,
START_FINISH,
FINISH_START,
FINISH_FINISH,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcShadingDeviceTypeEnum = ENUMERATION OF (
JALOUSIE,
SHUTTER,
AWNING,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSimplePropertyTemplateTypeEnum = ENUMERATION OF (
P_SINGLEVALUE,
P_ENUMERATEDVALUE,
P_BOUNDEDVALUE,
P_LISTVALUE,
P_TABLEVALUE,
P_REFERENCEVALUE,
Q_LENGTH,
Q_AREA,
Q_VOLUME,
Q_COUNT,
Q_WEIGHT,
Q_TIME);
END_TYPE;

TYPE IfcSlabTypeEnum = ENUMERATION OF (
FLOOR,
ROOF,
LANDING,
BASESLAB,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSolarDeviceTypeEnum = ENUMERATION OF (
SOLARCOLLECTOR,
SOLARPANEL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF (
CONVECTOR,
RADIATOR,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSpaceTypeEnum = ENUMERATION OF (
SPACE,
PARKING,
GFA,
INTERNAL,
EXTERNAL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSpatialZoneTypeEnum = ENUMERATION OF (
CONSTRUCTION,
FIRESAFETY,
LIGHTING,
OCCUPANCY,
SECURITY,
THERMAL,
TRANSPORT,
VENTILATION,
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 IfcStructuralCurveActivityTypeEnum = ENUMERATION OF (
CONST,
LINEAR,
POLYGONAL,
EQUIDISTANT,
SINUS,
PARABOLA,
DISCRETE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcStructuralCurveMemberTypeEnum = ENUMERATION OF (
RIGID_JOINED_MEMBER,
PIN_JOINED_MEMBER,
CABLE,
TENSION_MEMBER,
COMPRESSION_MEMBER,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcStructuralSurfaceActivityTypeEnum = ENUMERATION OF (
CONST,
BILINEAR,
DISCRETE,
ISOCONTOUR,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcStructuralSurfaceMemberTypeEnum = ENUMERATION OF (
BENDING_ELEMENT,
MEMBRANE_ELEMENT,
SHELL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSubContractResourceTypeEnum = ENUMERATION OF (
PURCHASE,
WORK,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSurfaceFeatureTypeEnum = ENUMERATION OF (
MARK,
TAG,
TREATMENT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSurfaceSide = ENUMERATION OF (
POSITIVE,
NEGATIVE,
BOTH);
END_TYPE;

TYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF (
CONTACTOR,
DIMMERSWITCH,
EMERGENCYSTOP,
KEYPAD,
MOMENTARYSWITCH,
SELECTORSWITCH,
STARTER,
SWITCHDISCONNECTOR,
TOGGLESWITCH,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcSystemFurnitureElementTypeEnum = ENUMERATION OF (
PANEL,
WORKSURFACE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcTankTypeEnum = ENUMERATION OF (
BASIN,
BREAKPRESSURE,
EXPANSION,
FEEDANDEXPANSION,
PRESSUREVESSEL,
STORAGE,
VESSEL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcTaskDurationEnum = ENUMERATION OF (
ELAPSEDTIME,
WORKTIME,
NOTDEFINED);
END_TYPE;

TYPE IfcTaskTypeEnum = ENUMERATION OF (
ATTENDANCE,
CONSTRUCTION,
DEMOLITION,
DISMANTLE,
DISPOSAL,
INSTALLATION,
LOGISTIC,
MAINTENANCE,
MOVE,
OPERATION,
REMOVAL,
RENOVATION,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcTendonAnchorTypeEnum = ENUMERATION OF (
COUPLER,
FIXED_END,
TENSIONING_END,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcTendonTypeEnum = ENUMERATION OF (
BAR,
COATED,
STRAND,
WIRE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcTextPath = ENUMERATION OF (
LEFT,
RIGHT,
UP,
DOWN);
END_TYPE;

TYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF (
CONTINUOUS,
DISCRETE,
DISCRETEBINARY,
PIECEWISEBINARY,
PIECEWISECONSTANT,
PIECEWISECONTINUOUS,
NOTDEFINED);
END_TYPE;

TYPE IfcTransformerTypeEnum = ENUMERATION OF (
CURRENT,
FREQUENCY,
INVERTER,
RECTIFIER,
VOLTAGE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcTransitionCode = ENUMERATION OF (
DISCONTINUOUS,
CONTINUOUS,
CONTSAMEGRADIENT,
CONTSAMEGRADIENTSAMECURVATURE);
END_TYPE;

TYPE IfcTransportElementTypeEnum = ENUMERATION OF (
ELEVATOR,
ESCALATOR,
MOVINGWALKWAY,
CRANEWAY,
LIFTINGGEAR,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcTrimmingPreference = ENUMERATION OF (
CARTESIAN,
PARAMETER,
UNSPECIFIED);
END_TYPE;

TYPE IfcTubeBundleTypeEnum = ENUMERATION OF (
FINNED,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcUnitEnum = ENUMERATION OF (
ABSORBEDDOSEUNIT,
AMOUNTOFSUBSTANCEUNIT,
AREAUNIT,
DOSEEQUIVALENTUNIT,
ELECTRICCAPACITANCEUNIT,
ELECTRICCHARGEUNIT,
ELECTRICCONDUCTANCEUNIT,
ELECTRICCURRENTUNIT,
ELECTRICRESISTANCEUNIT,
ELECTRICVOLTAGEUNIT,
ENERGYUNIT,
FORCEUNIT,
FREQUENCYUNIT,
ILLUMINANCEUNIT,
INDUCTANCEUNIT,
LENGTHUNIT,
LUMINOUSFLUXUNIT,
LUMINOUSINTENSITYUNIT,
MAGNETICFLUXDENSITYUNIT,
MAGNETICFLUXUNIT,
MASSUNIT,
PLANEANGLEUNIT,
POWERUNIT,
PRESSUREUNIT,
RADIOACTIVITYUNIT,
SOLIDANGLEUNIT,
THERMODYNAMICTEMPERATUREUNIT,
TIMEUNIT,
VOLUMEUNIT,
USERDEFINED);
END_TYPE;

TYPE IfcUnitaryControlElementTypeEnum = ENUMERATION OF (
ALARMPANEL,
CONTROLPANEL,
GASDETECTIONPANEL,
INDICATORPANEL,
MIMICPANEL,
HUMIDISTAT,
THERMOSTAT,
WEATHERSTATION,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF (
AIRHANDLER,
AIRCONDITIONINGUNIT,
DEHUMIDIFIER,
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 IfcVoidingFeatureTypeEnum = ENUMERATION OF (
CUTOUT,
NOTCH,
HOLE,
MITER,
CHAMFER,
EDGE,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcWallTypeEnum = ENUMERATION OF (
MOVABLE,
PARAPET,
PARTITIONING,
PLUMBINGWALL,
SHEAR,
SOLIDWALL,
STANDARD,
POLYGONAL,
ELEMENTEDWALL,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcWasteTerminalTypeEnum = ENUMERATION OF (
FLOORTRAP,
FLOORWASTE,
GULLYSUMP,
GULLYTRAP,
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 IfcWindowTypeEnum = ENUMERATION OF (
WINDOW,
SKYLIGHT,
LIGHTDOME,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcWindowTypePartitioningEnum = 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 IfcWorkCalendarTypeEnum = ENUMERATION OF (
FIRSTSHIFT,
SECONDSHIFT,
THIRDSHIFT,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcWorkPlanTypeEnum = ENUMERATION OF (
ACTUAL,
BASELINE,
PLANNED,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcWorkScheduleTypeEnum = ENUMERATION OF (
ACTUAL,
BASELINE,
PLANNED,
USERDEFINED,
NOTDEFINED);
END_TYPE;

TYPE IfcActorSelect = SELECT (
IfcOrganization,
IfcPerson,
IfcPersonAndOrganization);
END_TYPE;

TYPE IfcAppliedValueSelect = SELECT (
IfcMeasureWithUnit,
IfcValue,
IfcReference);
END_TYPE;

TYPE IfcAxis2Placement = SELECT (
IfcAxis2Placement2D,
IfcAxis2Placement3D);
END_TYPE;

TYPE IfcBendingParameterSelect = SELECT (
IfcLengthMeasure,
IfcPlaneAngleMeasure);
END_TYPE;

TYPE IfcBooleanOperand = SELECT (
IfcSolidModel,
IfcHalfSpaceSolid,
IfcBooleanResult,
IfcCsgPrimitive3D);
END_TYPE;

TYPE IfcClassificationReferenceSelect = SELECT (
IfcClassificationReference,
IfcClassification);
END_TYPE;

TYPE IfcClassificationSelect = SELECT (
IfcClassification,
IfcClassificationReference);
END_TYPE;

TYPE IfcColour = SELECT (
IfcColourSpecification,
IfcPreDefinedColour);
END_TYPE;

TYPE IfcColourOrFactor = SELECT (
IfcNormalisedRatioMeasure,
IfcColourRgb);
END_TYPE;

TYPE IfcCoordinateReferenceSystemSelect = SELECT (
IfcCoordinateReferenceSystem,
IfcGeometricRepresentationContext);
END_TYPE;

TYPE IfcCsgSelect = SELECT (
IfcBooleanResult,
IfcCsgPrimitive3D);
END_TYPE;

TYPE IfcCurveFontOrScaledCurveFontSelect = SELECT (
IfcCurveStyleFontSelect,
IfcCurveStyleFontAndScaling);
END_TYPE;

TYPE IfcCurveOnSurface = SELECT (
IfcCompositeCurveOnSurface,
IfcPcurve);
END_TYPE;

TYPE IfcCurveOrEdgeCurve = SELECT (
IfcBoundedCurve,
IfcEdgeCurve);
END_TYPE;

TYPE IfcCurveStyleFontSelect = SELECT (
IfcPreDefinedCurveFont,
IfcCurveStyleFont);
END_TYPE;

TYPE IfcDefinitionSelect = SELECT (
IfcObjectDefinition,
IfcPropertyDefinition);
END_TYPE;

TYPE IfcDerivedMeasureValue = SELECT (
IfcVolumetricFlowRateMeasure,
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,
IfcTemperatureRateOfChangeMeasure,
IfcAreaDensityMeasure,
IfcSoundPowerLevelMeasure,
IfcSoundPressureLevelMeasure);
END_TYPE;

TYPE IfcDocumentSelect = SELECT (
IfcDocumentReference,
IfcDocumentInformation);
END_TYPE;

TYPE IfcFillStyleSelect = SELECT (
IfcFillAreaStyleHatching,
IfcFillAreaStyleTiles,
IfcExternallyDefinedHatchStyle,
IfcColour);
END_TYPE;

TYPE IfcGeometricSetSelect = SELECT (
IfcPoint,
IfcCurve,
IfcSurface);
END_TYPE;

TYPE IfcGridPlacementDirectionSelect = SELECT (
IfcVirtualGridIntersection,
IfcDirection);
END_TYPE;

TYPE IfcHatchLineDistanceSelect = SELECT (
IfcPositiveLengthMeasure,
IfcVector);
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 (
IfcMaterialUsageDefinition,
IfcMaterialDefinition,
IfcMaterialList);
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,
IfcNonNegativeLengthMeasure);
END_TYPE;

TYPE IfcMetricValueSelect = SELECT (
IfcMeasureWithUnit,
IfcTable,
IfcTimeSeries,
IfcAppliedValue,
IfcValue,
IfcReference);
END_TYPE;

TYPE IfcModulusOfRotationalSubgradeReactionSelect = SELECT (
IfcBoolean,
IfcModulusOfRotationalSubgradeReactionMeasure);
END_TYPE;

TYPE IfcModulusOfSubgradeReactionSelect = SELECT (
IfcBoolean,
IfcModulusOfSubgradeReactionMeasure);
END_TYPE;

TYPE IfcModulusOfTranslationalSubgradeReactionSelect = SELECT (
IfcBoolean,
IfcModulusOfLinearSubgradeReactionMeasure);
END_TYPE;

TYPE IfcObjectReferenceSelect = SELECT (
IfcMaterialDefinition,
IfcPerson,
IfcOrganization,
IfcPersonAndOrganization,
IfcExternalReference,
IfcTimeSeries,
IfcAddress,
IfcAppliedValue,
IfcTable);
END_TYPE;

TYPE IfcPointOrVertexPoint = SELECT (
IfcPoint,
IfcVertexPoint);
END_TYPE;

TYPE IfcPresentationStyleSelect = SELECT (
IfcNullStyle,
IfcCurveStyle,
IfcFillAreaStyle,
IfcTextStyle,
IfcSurfaceStyle);
END_TYPE;

TYPE IfcProcessSelect = SELECT (
IfcProcess,
IfcTypeProcess);
END_TYPE;

TYPE IfcProductRepresentationSelect = SELECT (
IfcProductDefinitionShape,
IfcRepresentationMap);
END_TYPE;

TYPE IfcProductSelect = SELECT (
IfcProduct,
IfcTypeProduct);
END_TYPE;

TYPE IfcPropertySetDefinitionSelect = SELECT (
IfcPropertySetDefinitionSet,
IfcPropertySetDefinition);
END_TYPE;

TYPE IfcResourceObjectSelect = SELECT (
IfcPropertyAbstraction,
IfcPhysicalQuantity,
IfcAppliedValue,
IfcContextDependentUnit,
IfcConversionBasedUnit,
IfcProfileDef,
IfcActorRole,
IfcApproval,
IfcConstraint,
IfcTimeSeries,
IfcMaterialDefinition,
IfcPerson,
IfcPersonAndOrganization,
IfcOrganization,
IfcExternalReference,
IfcExternalInformation);
END_TYPE;

TYPE IfcResourceSelect = SELECT (
IfcResource,
IfcTypeResource);
END_TYPE;

TYPE IfcRotationalStiffnessSelect = SELECT (
IfcBoolean,
IfcRotationalStiffnessMeasure);
END_TYPE;

TYPE IfcShell = SELECT (
IfcClosedShell,
IfcOpenShell);
END_TYPE;

TYPE IfcSimpleValue = SELECT (
IfcInteger,
IfcReal,
IfcBoolean,
IfcIdentifier,
IfcText,
IfcLabel,
IfcLogical,
IfcDateTime,
IfcDate,
IfcTime,
IfcDuration,
IfcTimeStamp);
END_TYPE;

TYPE IfcSizeSelect = SELECT (
IfcRatioMeasure,
IfcLengthMeasure,
IfcDescriptiveMeasure,
IfcPositiveLengthMeasure,
IfcNormalisedRatioMeasure,
IfcPositiveRatioMeasure);
END_TYPE;

TYPE IfcSolidOrShell = SELECT (
IfcSolidModel,
IfcClosedShell);
END_TYPE;

TYPE IfcSpaceBoundarySelect = SELECT (
IfcSpace,
IfcExternalSpatialElement);
END_TYPE;

TYPE IfcSpecularHighlightSelect = SELECT (
IfcSpecularExponent,
IfcSpecularRoughness);
END_TYPE;

TYPE IfcStructuralActivityAssignmentSelect = SELECT (
IfcStructuralItem,
IfcElement);
END_TYPE;

TYPE IfcStyleAssignmentSelect = SELECT (
IfcPresentationStyleAssignment,
IfcPresentationStyle);
END_TYPE;

TYPE IfcSurfaceOrFaceSurface = SELECT (
IfcSurface,
IfcFaceSurface,
IfcFaceBasedSurfaceModel);
END_TYPE;

TYPE IfcSurfaceStyleElementSelect = SELECT (
IfcSurfaceStyleShading,
IfcSurfaceStyleLighting,
IfcSurfaceStyleWithTextures,
IfcExternallyDefinedSurfaceStyle,
IfcSurfaceStyleRefraction);
END_TYPE;

TYPE IfcTextFontSelect = SELECT (
IfcPreDefinedTextFont,
IfcExternallyDefinedTextFont);
END_TYPE;

TYPE IfcTimeOrRatioSelect = SELECT (
IfcRatioMeasure,
IfcDuration);
END_TYPE;

TYPE IfcTranslationalStiffnessSelect = SELECT (
IfcBoolean,
IfcLinearStiffnessMeasure);
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;

TYPE IfcWarpingStiffnessSelect = SELECT (
IfcBoolean,
IfcWarpingMomentMeasure);
END_TYPE;

ENTITY IfcActionRequest
SUBTYPE OF IfcControl;
PredefinedType : OPTIONAL IfcActionRequestTypeEnum;
Status : OPTIONAL IfcLabel;
LongDescription : OPTIONAL IfcText;
END_ENTITY;

ENTITY IfcActor
SUPERTYPE OF(IfcOccupant)
SUBTYPE OF IfcObject;
TheActor : IfcActorSelect;
INVERSE
IsActingUpon : SET OF IfcRelAssignsToActor FOR RelatingActor;
END_ENTITY;

ENTITY IfcActorRole;
Role : IfcRoleEnum;
UserDefinedRole : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
INVERSE
HasExternalReference : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
WHERE
WR1 : (Role <> IfcRoleEnum.USERDEFINED) OR ((Role = IfcRoleEnum.USERDEFINED) AND EXISTS(SELF.UserDefinedRole));
END_ENTITY;

ENTITY IfcActuator
SUBTYPE OF IfcDistributionControlElement;
PredefinedType : OPTIONAL IfcActuatorTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCBUILDINGCONTROLSDOMAIN.IFCACTUATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcActuatorType
SUBTYPE OF IfcDistributionControlElementType;
PredefinedType : IfcActuatorTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcAddress
ABSTRACT SUPERTYPE OF(ONEOF(IfcPostalAddress, IfcTelecomAddress));
Purpose : OPTIONAL IfcAddressTypeEnum;
Description : OPTIONAL IfcText;
UserDefinedPurpose : OPTIONAL IfcLabel;
INVERSE
OfPerson : SET OF IfcPerson FOR Addresses;
OfOrganization : SET OF IfcOrganization FOR Addresses;
WHERE
WR1 : (NOT(EXISTS(Purpose))) OR ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND EXISTS(SELF.UserDefinedPurpose)));
END_ENTITY;

ENTITY IfcAdvancedBrep
SUPERTYPE OF(IfcAdvancedBrepWithVoids)
SUBTYPE OF IfcManifoldSolidBrep;
WHERE
HasAdvancedFaces : SIZEOF(QUERY(Afs <* SELF\IfcManifoldSolidBrep.Outer.CfsFaces | (NOT ('IFCTOPOLOGYRESOURCE.IFCADVANCEDFACE' IN TYPEOF(Afs))) )) = 0;
END_ENTITY;

ENTITY IfcAdvancedBrepWithVoids
SUBTYPE OF IfcAdvancedBrep;
Voids : SET [1:?] OF IfcClosedShell;
WHERE
VoidsHaveAdvancedFaces : SIZEOF (QUERY (Vsh <* Voids | SIZEOF (QUERY (Afs <* Vsh.CfsFaces | (NOT ('IFCTOPOLOGYRESOURCE.IFCADVANCEDFACE' IN TYPEOF(Afs))) )) = 0 )) = 0;
END_ENTITY;

ENTITY IfcAdvancedFace
SUBTYPE OF IfcFaceSurface;
WHERE
ApplicableSurface : SIZEOF ( ['IFCGEOMETRYRESOURCE.IFCELEMENTARYSURFACE', 'IFCGEOMETRYRESOURCE.IFCSWEPTSURFACE', 'IFCGEOMETRYRESOURCE.IFCBSPLINESURFACE'] * TYPEOF(SELF\IfcFaceSurface.FaceSurface)) = 1;
RequiresEdgeCurve : SIZEOF(QUERY (ElpFbnds <* QUERY (Bnds <* SELF\IfcFace.Bounds | 'IFCTOPOLOGYRESOURCE.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | NOT('IFCTOPOLOGYRESOURCE.IFCEDGECURVE' IN TYPEOF(Oe\IfcOrientedEdge.EdgeElement) ))) = 0 ))) = 0;
ApplicableEdgeCurves : SIZEOF(QUERY (ElpFbnds <* QUERY (Bnds <* SELF\IfcFace.Bounds | 'IFCTOPOLOGYRESOURCE.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | NOT (SIZEOF (['IFCGEOMETRYRESOURCE.IFCLINE', 'IFCGEOMETRYRESOURCE.IFCCONIC', 'IFCGEOMETRYRESOURCE.IFCPOLYLINE', 'IFCGEOMETRYRESOURCE.IFCBSPLINECURVE'] * TYPEOF(Oe\IfcOrientedEdge.EdgeElement\IfcEdgeCurve.EdgeGeometry)) = 1 ) )) = 0 ))) = 0;
END_ENTITY;

ENTITY IfcAirTerminal
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcAirTerminalTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCAIRTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcAirTerminalBox
SUBTYPE OF IfcFlowController;
PredefinedType : OPTIONAL IfcAirTerminalBoxTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCAIRTERMINALBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcAirTerminalBoxType
SUBTYPE OF IfcFlowControllerType;
PredefinedType : IfcAirTerminalBoxTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcAirTerminalType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcAirTerminalTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcAirToAirHeatRecovery
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcAirToAirHeatRecoveryTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcAirToAirHeatRecoveryType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcAirToAirHeatRecoveryTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcAlarm
SUBTYPE OF IfcDistributionControlElement;
PredefinedType : OPTIONAL IfcAlarmTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCBUILDINGCONTROLSDOMAIN.IFCALARMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcAlarmType
SUBTYPE OF IfcDistributionControlElementType;
PredefinedType : IfcAlarmTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcAnnotation
SUBTYPE OF IfcProduct;
INVERSE
ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
END_ENTITY;

ENTITY IfcAnnotationFillArea
SUBTYPE OF IfcGeometricRepresentationItem;
OuterBoundary : IfcCurve;
InnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve;
END_ENTITY;

ENTITY IfcApplication;
ApplicationDeveloper : IfcOrganization;
Version : IfcLabel;
ApplicationFullName : IfcLabel;
ApplicationIdentifier : IfcIdentifier;
UNIQUE
UR1 : ApplicationIdentifier;
UR2 : ApplicationFullName, Version;
END_ENTITY;

ENTITY IfcAppliedValue
SUPERTYPE OF(IfcCostValue);
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
AppliedValue : OPTIONAL IfcAppliedValueSelect;
UnitBasis : OPTIONAL IfcMeasureWithUnit;
ApplicableDate : OPTIONAL IfcDate;
FixedUntilDate : OPTIONAL IfcDate;
Category : OPTIONAL IfcLabel;
Condition : OPTIONAL IfcLabel;
ArithmeticOperator : OPTIONAL IfcArithmeticOperatorEnum;
Components : OPTIONAL LIST [1:?] OF IfcAppliedValue;
INVERSE
HasExternalReference : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
END_ENTITY;

ENTITY IfcApproval;
Identifier : OPTIONAL IfcIdentifier;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
TimeOfApproval : OPTIONAL IfcDateTime;
Status : OPTIONAL IfcLabel;
Level : OPTIONAL IfcLabel;
Qualifier : OPTIONAL IfcText;
RequestingApproval : OPTIONAL IfcActorSelect;
GivingApproval : OPTIONAL IfcActorSelect;
INVERSE
HasExternalReferences : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
ApprovedObjects : SET OF IfcRelAssociatesApproval FOR RelatingApproval;
ApprovedResources : SET OF IfcResourceApprovalRelationship FOR RelatingApproval;
IsRelatedWith : SET OF IfcApprovalRelationship FOR RelatedApprovals;
Relates : SET OF IfcApprovalRelationship FOR RelatingApproval;
WHERE
HasIdentifierOrName : EXISTS (Identifier) OR EXISTS (Name);
END_ENTITY;

ENTITY IfcApprovalRelationship
SUBTYPE OF IfcResourceLevelRelationship;
RelatingApproval : IfcApproval;
RelatedApprovals : SET [1:?] OF IfcApproval;
END_ENTITY;

ENTITY IfcArbitraryClosedProfileDef
SUPERTYPE OF(IfcArbitraryProfileDefWithVoids)
SUBTYPE OF IfcProfileDef;
OuterCurve : IfcCurve;
WHERE
WR1 : OuterCurve.Dim = 2;
WR2 : NOT('IFCGEOMETRYRESOURCE.IFCLINE' IN TYPEOF(OuterCurve));
WR3 : NOT('IFCGEOMETRYRESOURCE.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));
END_ENTITY;

ENTITY IfcArbitraryOpenProfileDef
SUPERTYPE OF(IfcCenterLineProfileDef)
SUBTYPE OF IfcProfileDef;
Curve : IfcBoundedCurve;
WHERE
WR11 : ('IFCPROFILERESOURCE.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 | 'IFCGEOMETRYRESOURCE.IFCLINE' IN TYPEOF(temp))) = 0;
END_ENTITY;

ENTITY IfcAsset
SUBTYPE OF IfcGroup;
Identification : OPTIONAL IfcIdentifier;
OriginalValue : OPTIONAL IfcCostValue;
CurrentValue : OPTIONAL IfcCostValue;
TotalReplacementCost : OPTIONAL IfcCostValue;
Owner : OPTIONAL IfcActorSelect;
User : OPTIONAL IfcActorSelect;
ResponsiblePerson : OPTIONAL IfcPerson;
IncorporationDate : OPTIONAL IfcDate;
DepreciatedValue : OPTIONAL IfcCostValue;
END_ENTITY;

ENTITY IfcAsymmetricIShapeProfileDef
SUBTYPE OF IfcParameterizedProfileDef;
BottomFlangeWidth : IfcPositiveLengthMeasure;
OverallDepth : IfcPositiveLengthMeasure;
WebThickness : IfcPositiveLengthMeasure;
BottomFlangeThickness : IfcPositiveLengthMeasure;
BottomFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
TopFlangeWidth : IfcPositiveLengthMeasure;
TopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;
TopFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
BottomFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
BottomFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;
TopFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
TopFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;
WHERE
ValidFlangeThickness : NOT(EXISTS(TopFlangeThickness)) OR ((BottomFlangeThickness + TopFlangeThickness) < OverallDepth);
ValidWebThickness : (WebThickness < BottomFlangeWidth) AND (WebThickness < TopFlangeWidth);
ValidBottomFilletRadius : (NOT(EXISTS(BottomFlangeFilletRadius))) OR (BottomFlangeFilletRadius <= (BottomFlangeWidth - WebThickness)/2.);
ValidTopFilletRadius : (NOT(EXISTS(TopFlangeFilletRadius))) OR (TopFlangeFilletRadius <= (TopFlangeWidth - WebThickness)/2.);
END_ENTITY;

ENTITY IfcAudioVisualAppliance
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcAudioVisualApplianceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcAudioVisualApplianceType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcAudioVisualApplianceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcAxis1Placement
SUBTYPE OF IfcPlacement;
Axis : OPTIONAL IfcDirection;
DERIVE
Z : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
WHERE
AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
LocationIs3D : SELF\IfcPlacement.Location.Dim = 3;
END_ENTITY;

ENTITY IfcAxis2Placement2D
SUBTYPE OF IfcPlacement;
RefDirection : OPTIONAL IfcDirection;
DERIVE
P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);
WHERE
RefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);
LocationIs2D : 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
LocationIs3D : SELF\IfcPlacement.Location.Dim = 3;
AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
RefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);
AxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
AxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));
END_ENTITY;

ENTITY IfcBSplineCurve
ABSTRACT SUPERTYPE OF(IfcBSplineCurveWithKnots)
SUBTYPE OF IfcBoundedCurve;
Degree : INTEGER;
ControlPointsList : LIST [2:?] OF IfcCartesianPoint;
CurveForm : IfcBSplineCurveForm;
ClosedCurve : LOGICAL;
SelfIntersect : LOGICAL;
DERIVE
UpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1);
ControlPoints : ARRAY [0:UpperIndexOnControlPoints] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);
WHERE
SameDim : SIZEOF(QUERY(Temp <* ControlPointsList | Temp.Dim <> ControlPointsList[1].Dim)) = 0;
END_ENTITY;

ENTITY IfcBSplineCurveWithKnots
SUPERTYPE OF(IfcRationalBSplineCurveWithKnots)
SUBTYPE OF IfcBSplineCurve;
KnotMultiplicities : LIST [2:?] OF INTEGER;
Knots : LIST [2:?] OF IfcParameterValue;
KnotSpec : IfcKnotType;
DERIVE
UpperIndexOnKnots : INTEGER := SIZEOF(Knots);
WHERE
ConsistentBSpline : IfcConstraintsParamBSpline(Degree, UpperIndexOnKnots, UpperIndexOnControlPoints, KnotMultiplicities, Knots);
CorrespondingKnotLists : SIZEOF(KnotMultiplicities) = UpperIndexOnKnots;
END_ENTITY;

ENTITY IfcBSplineSurface
ABSTRACT SUPERTYPE OF(IfcBSplineSurfaceWithKnots)
SUBTYPE OF IfcBoundedSurface;
UDegree : INTEGER;
VDegree : INTEGER;
ControlPointsList : LIST [2:?] OF LIST [2:?] OF IfcCartesianPoint;
SurfaceForm : IfcBSplineSurfaceForm;
UClosed : LOGICAL;
VClosed : LOGICAL;
SelfIntersect : LOGICAL;
DERIVE
UUpper : INTEGER := SIZEOF(ControlPointsList) - 1;
VUpper : INTEGER := SIZEOF(ControlPointsList[1]) - 1;
ControlPoints : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcCartesianPoint := IfcMakeArrayOfArray(ControlPointsList, 0,UUpper,0,VUpper);
END_ENTITY;

ENTITY IfcBSplineSurfaceWithKnots
SUPERTYPE OF(IfcRationalBSplineSurfaceWithKnots)
SUBTYPE OF IfcBSplineSurface;
UMultiplicities : LIST [2:?] OF INTEGER;
VMultiplicities : LIST [2:?] OF INTEGER;
UKnots : LIST [2:?] OF IfcParameterValue;
VKnots : LIST [2:?] OF IfcParameterValue;
KnotSpec : IfcKnotType;
DERIVE
KnotVUpper : INTEGER := SIZEOF(VKnots);
KnotUUpper : INTEGER := SIZEOF(UKnots);
WHERE
UDirectionConstraints : IfcConstraintsParamBSpline ( SELF\IfcBSplineSurface.UDegree, KnotUUpper, SELF\IfcBSplineSurface.UUpper, UMultiplicities, UKnots);
VDirectionConstraints : IfcConstraintsParamBSpline ( SELF\IfcBSplineSurface.VDegree, KnotVUpper, SELF\IfcBSplineSurface.VUpper, VMultiplicities, VKnots);
CorrespondingULists : SIZEOF(UMultiplicities) = KnotUUpper;
CorrespondingVLists : SIZEOF(VMultiplicities) = KnotVUpper;
END_ENTITY;

ENTITY IfcBeam
SUPERTYPE OF(IfcBeamStandardCase)
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcBeamTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCBEAMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcBeamStandardCase
SUBTYPE OF IfcBeam;
WHERE
HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFCKERNEL.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFCMATERIALRESOURCE.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1;
END_ENTITY;

ENTITY IfcBeamType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcBeamTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcBlobTexture
SUBTYPE OF IfcSurfaceTexture;
RasterFormat : IfcIdentifier;
RasterCode : BINARY;
WHERE
SupportedRasterFormat : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG'];
RasterCodeByteStream : BLENGTH(RasterCode) MOD 8 = 0;
END_ENTITY;

ENTITY IfcBlock
SUBTYPE OF IfcCsgPrimitive3D;
XLength : IfcPositiveLengthMeasure;
YLength : IfcPositiveLengthMeasure;
ZLength : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcBoiler
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcBoilerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCBOILERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcBoilerType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcBoilerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcBooleanClippingResult
SUBTYPE OF IfcBooleanResult;
WHERE
FirstOperandType : ('IFCGEOMETRICMODELRESOURCE.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFCGEOMETRICMODELRESOURCE.IFCSWEPTDISCSOLID' IN TYPEOF(FirstOperand)) OR ('IFCGEOMETRICMODELRESOURCE.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));
SecondOperandType : ('IFCGEOMETRICMODELRESOURCE.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));
OperatorType : Operator = DIFFERENCE;
END_ENTITY;

ENTITY IfcBooleanResult
SUPERTYPE OF(IfcBooleanClippingResult)
SUBTYPE OF IfcGeometricRepresentationItem;
Operator : IfcBooleanOperator;
FirstOperand : IfcBooleanOperand;
SecondOperand : IfcBooleanOperand;
DERIVE
Dim : IfcDimensionCount := FirstOperand.Dim;
WHERE
SameDim : FirstOperand.Dim = SecondOperand.Dim;
END_ENTITY;

ENTITY IfcBoundaryCondition
ABSTRACT SUPERTYPE OF(ONEOF(IfcBoundaryEdgeCondition, IfcBoundaryFaceCondition, IfcBoundaryNodeCondition));
Name : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcBoundaryCurve
SUPERTYPE OF(IfcOuterBoundaryCurve)
SUBTYPE OF IfcCompositeCurveOnSurface;
WHERE
IsClosed : SELF\IfcCompositeCurve.ClosedCurve;
END_ENTITY;

ENTITY IfcBoundaryEdgeCondition
SUBTYPE OF IfcBoundaryCondition;
TranslationalStiffnessByLengthX : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;
TranslationalStiffnessByLengthY : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;
TranslationalStiffnessByLengthZ : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;
RotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;
RotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;
RotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;
END_ENTITY;

ENTITY IfcBoundaryFaceCondition
SUBTYPE OF IfcBoundaryCondition;
TranslationalStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionSelect;
TranslationalStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionSelect;
TranslationalStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionSelect;
END_ENTITY;

ENTITY IfcBoundaryNodeCondition
SUPERTYPE OF(IfcBoundaryNodeConditionWarping)
SUBTYPE OF IfcBoundaryCondition;
TranslationalStiffnessX : OPTIONAL IfcTranslationalStiffnessSelect;
TranslationalStiffnessY : OPTIONAL IfcTranslationalStiffnessSelect;
TranslationalStiffnessZ : OPTIONAL IfcTranslationalStiffnessSelect;
RotationalStiffnessX : OPTIONAL IfcRotationalStiffnessSelect;
RotationalStiffnessY : OPTIONAL IfcRotationalStiffnessSelect;
RotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessSelect;
END_ENTITY;

ENTITY IfcBoundaryNodeConditionWarping
SUBTYPE OF IfcBoundaryNodeCondition;
WarpingStiffness : OPTIONAL IfcWarpingStiffnessSelect;
END_ENTITY;

ENTITY IfcBoundedCurve
ABSTRACT SUPERTYPE OF(ONEOF(IfcBSplineCurve, IfcCompositeCurve, IfcPolyline, IfcTrimmedCurve))
SUBTYPE OF IfcCurve;
END_ENTITY;

ENTITY IfcBoundedSurface
ABSTRACT SUPERTYPE OF(ONEOF(IfcBSplineSurface, IfcCurveBoundedPlane, IfcCurveBoundedSurface, IfcRectangularTrimmedSurface))
SUBTYPE OF IfcSurface;
END_ENTITY;

ENTITY IfcBoundingBox
SUBTYPE OF IfcGeometricRepresentationItem;
Corner : IfcCartesianPoint;
XDim : IfcPositiveLengthMeasure;
YDim : IfcPositiveLengthMeasure;
ZDim : IfcPositiveLengthMeasure;
DERIVE
Dim : IfcDimensionCount := 3;
END_ENTITY;

ENTITY IfcBoxedHalfSpace
SUBTYPE OF IfcHalfSpaceSolid;
Enclosure : IfcBoundingBox;
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, IfcBuildingElementProxy, IfcChimney, IfcColumn, IfcCovering, IfcCurtainWall, IfcDoor, IfcFooting, IfcMember, IfcPile, IfcPlate, IfcRailing, IfcRamp, IfcRampFlight, IfcRoof, IfcShadingDevice, IfcSlab, IfcStair, IfcStairFlight, IfcWall, IfcWindow))
SUBTYPE OF IfcElement;
INVERSE
HasCoverings : SET OF IfcRelCoversBldgElements FOR RelatingBuildingElement;
WHERE
MaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | 'IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) <= 1;
END_ENTITY;

ENTITY IfcBuildingElementPart
SUBTYPE OF IfcElementComponent;
PredefinedType : OPTIONAL IfcBuildingElementPartTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDCOMPONENTELEMENTS.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcBuildingElementPartType
SUBTYPE OF IfcElementComponentType;
PredefinedType : IfcBuildingElementPartTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcBuildingElementProxy
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcBuildingElementProxyTypeEnum;
WHERE
HasObjectName : EXISTS(SELF\IfcRoot.Name);
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCBUILDINGELEMENTPROXYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcBuildingElementProxyType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcBuildingElementProxyTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcBuildingElementType
ABSTRACT SUPERTYPE OF(ONEOF(IfcBeamType, IfcBuildingElementProxyType, IfcChimneyType, IfcColumnType, IfcCoveringType, IfcCurtainWallType, IfcDoorType, IfcFootingType, IfcMemberType, IfcPileType, IfcPlateType, IfcRailingType, IfcRampFlightType, IfcRampType, IfcRoofType, IfcShadingDeviceType, IfcSlabType, IfcStairFlightType, IfcStairType, IfcWallType, IfcWindowType))
SUBTYPE OF IfcElementType;
END_ENTITY;

ENTITY IfcBuildingStorey
SUBTYPE OF IfcSpatialStructureElement;
Elevation : OPTIONAL IfcLengthMeasure;
END_ENTITY;

ENTITY IfcBuildingSystem
SUBTYPE OF IfcSystem;
PredefinedType : OPTIONAL IfcBuildingSystemTypeEnum;
END_ENTITY;

ENTITY IfcBurner
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcBurnerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCBURNERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcBurnerType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcBurnerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCShapeProfileDef
SUBTYPE OF IfcParameterizedProfileDef;
Depth : IfcPositiveLengthMeasure;
Width : IfcPositiveLengthMeasure;
WallThickness : IfcPositiveLengthMeasure;
Girth : IfcPositiveLengthMeasure;
InternalFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
WHERE
ValidGirth : Girth < (Depth / 2.);
ValidInternalFilletRadius : NOT(EXISTS(InternalFilletRadius)) OR ((InternalFilletRadius <= Width/2. - WallThickness) AND (InternalFilletRadius <= Depth/2. - WallThickness));
ValidWallThickness : (WallThickness < Width/2.) AND (WallThickness < Depth/2.);
END_ENTITY;

ENTITY IfcCableCarrierFitting
SUBTYPE OF IfcFlowFitting;
PredefinedType : OPTIONAL IfcCableCarrierFittingTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCCABLECARRIERFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCableCarrierFittingType
SUBTYPE OF IfcFlowFittingType;
PredefinedType : IfcCableCarrierFittingTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCableCarrierSegment
SUBTYPE OF IfcFlowSegment;
PredefinedType : OPTIONAL IfcCableCarrierSegmentTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCCABLECARRIERSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCableCarrierSegmentType
SUBTYPE OF IfcFlowSegmentType;
PredefinedType : IfcCableCarrierSegmentTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCableFitting
SUBTYPE OF IfcFlowFitting;
PredefinedType : OPTIONAL IfcCableFittingTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCCABLEFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCableFittingType
SUBTYPE OF IfcFlowFittingType;
PredefinedType : IfcCableFittingTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCableSegment
SUBTYPE OF IfcFlowSegment;
PredefinedType : OPTIONAL IfcCableSegmentTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCCABLESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCableSegmentType
SUBTYPE OF IfcFlowSegmentType;
PredefinedType : IfcCableSegmentTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCartesianPoint
SUBTYPE OF IfcPoint;
Coordinates : LIST [1:3] OF IfcLengthMeasure;
DERIVE
Dim : IfcDimensionCount := HIINDEX(Coordinates);
WHERE
CP2Dor3D : HIINDEX(Coordinates) >= 2;
END_ENTITY;

ENTITY IfcCartesianPointList
ABSTRACT SUPERTYPE OF(IfcCartesianPointList3D)
SUBTYPE OF IfcGeometricRepresentationItem;
END_ENTITY;

ENTITY IfcCartesianPointList3D
SUBTYPE OF IfcCartesianPointList;
CoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure;
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
ScaleGreaterZero : Scl > 0.0;
END_ENTITY;

ENTITY IfcCartesianTransformationOperator2D
SUPERTYPE OF(IfcCartesianTransformationOperator2DnonUniform)
SUBTYPE OF IfcCartesianTransformationOperator;
DERIVE
U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\IfcCartesianTransformationOperator.Axis1, SELF\IfcCartesianTransformationOperator.Axis2,?);
WHERE
DimEqual2 : SELF\IfcCartesianTransformationOperator.Dim = 2;
Axis1Is2D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2);
Axis2Is2D : 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
Scale2GreaterZero : Scl2 > 0.0;
END_ENTITY;

ENTITY IfcCartesianTransformationOperator3D
SUPERTYPE OF(IfcCartesianTransformationOperator3DnonUniform)
SUBTYPE OF IfcCartesianTransformationOperator;
Axis3 : OPTIONAL IfcDirection;
DERIVE
U : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\IfcCartesianTransformationOperator.Axis1, SELF\IfcCartesianTransformationOperator.Axis2,Axis3);
WHERE
DimIs3D : SELF\IfcCartesianTransformationOperator.Dim = 3;
Axis1Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3);
Axis2Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3);
Axis3Is3D : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);
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
Scale2GreaterZero : Scl2 > 0.0;
Scale3GreaterZero : Scl3 > 0.0;
END_ENTITY;

ENTITY IfcCenterLineProfileDef
SUBTYPE OF IfcArbitraryOpenProfileDef;
Thickness : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcChiller
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcChillerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCHILLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcChillerType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcChillerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcChimney
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcChimneyTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCCHIMNEYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcChimneyType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcChimneyTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCircle
SUBTYPE OF IfcConic;
Radius : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcCircleHollowProfileDef
SUBTYPE OF IfcCircleProfileDef;
WallThickness : IfcPositiveLengthMeasure;
WHERE
WR1 : WallThickness < SELF\IfcCircleProfileDef.Radius;
END_ENTITY;

ENTITY IfcCircleProfileDef
SUPERTYPE OF(IfcCircleHollowProfileDef)
SUBTYPE OF IfcParameterizedProfileDef;
Radius : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcCivilElement
SUBTYPE OF IfcElement;
END_ENTITY;

ENTITY IfcCivilElementType
SUBTYPE OF IfcElementType;
END_ENTITY;

ENTITY IfcClassification
SUBTYPE OF IfcExternalInformation;
Source : OPTIONAL IfcLabel;
Edition : OPTIONAL IfcLabel;
EditionDate : OPTIONAL IfcDate;
Name : IfcLabel;
Description : OPTIONAL IfcText;
Location : OPTIONAL IfcURIReference;
ReferenceTokens : OPTIONAL LIST [1:?] OF IfcIdentifier;
INVERSE
ClassificationForObjects : SET OF IfcRelAssociatesClassification FOR RelatingClassification;
HasReferences : SET OF IfcClassificationReference FOR ReferencedSource;
END_ENTITY;

ENTITY IfcClassificationReference
SUBTYPE OF IfcExternalReference;
ReferencedSource : OPTIONAL IfcClassificationReferenceSelect;
Description : OPTIONAL IfcText;
Sort : OPTIONAL IfcIdentifier;
INVERSE
ClassificationRefForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;
HasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource;
END_ENTITY;

ENTITY IfcClosedShell
SUBTYPE OF IfcConnectedFaceSet;
END_ENTITY;

ENTITY IfcCoil
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcCoilTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCOILTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCoilType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcCoilTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcColourRgb
SUBTYPE OF IfcColourSpecification;
Red : IfcNormalisedRatioMeasure;
Green : IfcNormalisedRatioMeasure;
Blue : IfcNormalisedRatioMeasure;
END_ENTITY;

ENTITY IfcColourRgbList
SUBTYPE OF IfcPresentationItem;
ColourList : LIST [1:?] OF LIST [3:3] OF IfcNormalisedRatioMeasure;
END_ENTITY;

ENTITY IfcColourSpecification
ABSTRACT SUPERTYPE OF(IfcColourRgb)
SUBTYPE OF IfcPresentationItem;
Name : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcColumn
SUPERTYPE OF(IfcColumnStandardCase)
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcColumnTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCCOLUMNTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcColumnStandardCase
SUBTYPE OF IfcColumn;
WHERE
HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFCKERNEL.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFCMATERIALRESOURCE.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1;
END_ENTITY;

ENTITY IfcColumnType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcColumnTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCommunicationsAppliance
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcCommunicationsApplianceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCommunicationsApplianceType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcCommunicationsApplianceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcComplexProperty
SUBTYPE OF IfcProperty;
UsageName : IfcIdentifier;
HasProperties : SET [1:?] OF IfcProperty;
WHERE
WR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;
WR22 : IfcUniquePropertyName(HasProperties);
END_ENTITY;

ENTITY IfcComplexPropertyTemplate
SUBTYPE OF IfcPropertyTemplate;
UsageName : OPTIONAL IfcLabel;
TemplateType : OPTIONAL IfcComplexPropertyTemplateTypeEnum;
HasPropertyTemplates : OPTIONAL SET [1:?] OF IfcPropertyTemplate;
WHERE
UniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);
NoSelfReference : SIZEOF(QUERY(temp <* HasPropertyTemplates | SELF :=: temp)) = 0;
END_ENTITY;

ENTITY IfcCompositeCurve
SUPERTYPE OF(IfcCompositeCurveOnSurface)
SUBTYPE OF IfcBoundedCurve;
Segments : LIST [1:?] OF IfcCompositeCurveSegment;
SelfIntersect : LOGICAL;
DERIVE
NSegments : INTEGER := SIZEOF(Segments);
ClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous;
WHERE
CurveContinuous : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));
SameDim : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;
END_ENTITY;

ENTITY IfcCompositeCurveOnSurface
SUPERTYPE OF(IfcBoundaryCurve)
SUBTYPE OF IfcCompositeCurve;
DERIVE
BasisSurface : SET [0:1] OF IfcSurface := IfcGetBasisSurface(SELF);
WHERE
SameSurface : SIZEOF(BasisSurface) > 0;
END_ENTITY;

ENTITY IfcCompositeCurveSegment
SUPERTYPE OF(IfcReparametrisedCompositeCurveSegment)
SUBTYPE OF IfcGeometricRepresentationItem;
Transition : IfcTransitionCode;
SameSense : BOOLEAN;
ParentCurve : IfcCurve;
INVERSE
UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;
DERIVE
Dim : IfcDimensionCount := ParentCurve.Dim;
WHERE
ParentIsBoundedCurve : ('IFCGEOMETRYRESOURCE.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));
END_ENTITY;

ENTITY IfcCompositeProfileDef
SUBTYPE OF IfcProfileDef;
Profiles : SET [2:?] OF IfcProfileDef;
Label : OPTIONAL IfcLabel;
WHERE
InvariantProfileType : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;
NoRecursion : SIZEOF(QUERY(temp <* Profiles | 'IFCPROFILERESOURCE.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;
END_ENTITY;

ENTITY IfcCompressor
SUBTYPE OF IfcFlowMovingDevice;
PredefinedType : OPTIONAL IfcCompressorTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCOMPRESSORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCompressorType
SUBTYPE OF IfcFlowMovingDeviceType;
PredefinedType : IfcCompressorTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCondenser
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcCondenserTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCONDENSERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCondenserType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcCondenserTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcConic
ABSTRACT SUPERTYPE OF(ONEOF(IfcCircle, IfcEllipse))
SUBTYPE OF IfcCurve;
Position : IfcAxis2Placement;
END_ENTITY;

ENTITY IfcConnectedFaceSet
SUPERTYPE OF(ONEOF(IfcClosedShell, IfcOpenShell))
SUBTYPE OF IfcTopologicalRepresentationItem;
CfsFaces : SET [1:?] OF IfcFace;
END_ENTITY;

ENTITY IfcConnectionCurveGeometry
SUBTYPE OF IfcConnectionGeometry;
CurveOnRelatingElement : IfcCurveOrEdgeCurve;
CurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve;
END_ENTITY;

ENTITY IfcConnectionGeometry
ABSTRACT SUPERTYPE OF(ONEOF(IfcConnectionCurveGeometry, IfcConnectionPointGeometry, IfcConnectionSurfaceGeometry, IfcConnectionVolumeGeometry));
END_ENTITY;

ENTITY IfcConnectionPointEccentricity
SUBTYPE OF IfcConnectionPointGeometry;
EccentricityInX : OPTIONAL IfcLengthMeasure;
EccentricityInY : OPTIONAL IfcLengthMeasure;
EccentricityInZ : OPTIONAL IfcLengthMeasure;
END_ENTITY;

ENTITY IfcConnectionPointGeometry
SUPERTYPE OF(IfcConnectionPointEccentricity)
SUBTYPE OF IfcConnectionGeometry;
PointOnRelatingElement : IfcPointOrVertexPoint;
PointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint;
END_ENTITY;

ENTITY IfcConnectionSurfaceGeometry
SUBTYPE OF IfcConnectionGeometry;
SurfaceOnRelatingElement : IfcSurfaceOrFaceSurface;
SurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface;
END_ENTITY;

ENTITY IfcConnectionVolumeGeometry
SUBTYPE OF IfcConnectionGeometry;
VolumeOnRelatingElement : IfcSolidOrShell;
VolumeOnRelatedElement : OPTIONAL IfcSolidOrShell;
END_ENTITY;

ENTITY IfcConstraint
ABSTRACT SUPERTYPE OF(ONEOF(IfcMetric, IfcObjective));
Name : IfcLabel;
Description : OPTIONAL IfcText;
ConstraintGrade : IfcConstraintEnum;
ConstraintSource : OPTIONAL IfcLabel;
CreatingActor : OPTIONAL IfcActorSelect;
CreationTime : OPTIONAL IfcDateTime;
UserDefinedGrade : OPTIONAL IfcLabel;
INVERSE
HasExternalReferences : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
PropertiesForConstraint : SET OF IfcResourceConstraintRelationship FOR RelatingConstraint;
WHERE
WR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR ((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\IfcConstraint.UserDefinedGrade));
END_ENTITY;

ENTITY IfcConstructionEquipmentResource
SUBTYPE OF IfcConstructionResource;
PredefinedType : OPTIONAL IfcConstructionEquipmentResourceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcConstructionEquipmentResourceType
SUBTYPE OF IfcConstructionResourceType;
PredefinedType : IfcConstructionEquipmentResourceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType));
END_ENTITY;

ENTITY IfcConstructionMaterialResource
SUBTYPE OF IfcConstructionResource;
PredefinedType : OPTIONAL IfcConstructionMaterialResourceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcConstructionMaterialResourceType
SUBTYPE OF IfcConstructionResourceType;
PredefinedType : IfcConstructionMaterialResourceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType));
END_ENTITY;

ENTITY IfcConstructionProductResource
SUBTYPE OF IfcConstructionResource;
PredefinedType : OPTIONAL IfcConstructionProductResourceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcConstructionProductResourceType
SUBTYPE OF IfcConstructionResourceType;
PredefinedType : IfcConstructionProductResourceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType));
END_ENTITY;

ENTITY IfcConstructionResource
ABSTRACT SUPERTYPE OF(ONEOF(IfcConstructionEquipmentResource, IfcConstructionMaterialResource, IfcConstructionProductResource, IfcCrewResource, IfcLaborResource, IfcSubContractResource))
SUBTYPE OF IfcResource;
Usage : OPTIONAL IfcResourceTime;
BaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;
BaseQuantity : OPTIONAL IfcPhysicalQuantity;
END_ENTITY;

ENTITY IfcConstructionResourceType
ABSTRACT SUPERTYPE OF(ONEOF(IfcConstructionEquipmentResourceType, IfcConstructionMaterialResourceType, IfcConstructionProductResourceType, IfcCrewResourceType, IfcLaborResourceType, IfcSubContractResourceType))
SUBTYPE OF IfcTypeResource;
BaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;
BaseQuantity : OPTIONAL IfcPhysicalQuantity;
END_ENTITY;

ENTITY IfcContext
ABSTRACT SUPERTYPE OF(ONEOF(IfcProject, IfcProjectLibrary))
SUBTYPE OF IfcObjectDefinition;
ObjectType : OPTIONAL IfcLabel;
LongName : OPTIONAL IfcLabel;
Phase : OPTIONAL IfcLabel;
RepresentationContexts : OPTIONAL SET [1:?] OF IfcRepresentationContext;
UnitsInContext : OPTIONAL IfcUnitAssignment;
INVERSE
IsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;
Declares : SET OF IfcRelDeclares FOR RelatingContext;
END_ENTITY;

ENTITY IfcContextDependentUnit
SUBTYPE OF IfcNamedUnit;
Name : IfcLabel;
INVERSE
HasExternalReference : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
END_ENTITY;

ENTITY IfcControl
ABSTRACT SUPERTYPE OF(ONEOF(IfcActionRequest, IfcCostItem, IfcCostSchedule, IfcPerformanceHistory, IfcPermit, IfcProjectOrder, IfcWorkCalendar, IfcWorkControl))
SUBTYPE OF IfcObject;
Identification : OPTIONAL IfcIdentifier;
INVERSE
Controls : SET OF IfcRelAssignsToControl FOR RelatingControl;
END_ENTITY;

ENTITY IfcController
SUBTYPE OF IfcDistributionControlElement;
PredefinedType : OPTIONAL IfcControllerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCBUILDINGCONTROLSDOMAIN.IFCCONTROLLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcControllerType
SUBTYPE OF IfcDistributionControlElementType;
PredefinedType : IfcControllerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcConversionBasedUnit
SUPERTYPE OF(IfcConversionBasedUnitWithOffset)
SUBTYPE OF IfcNamedUnit;
Name : IfcLabel;
ConversionFactor : IfcMeasureWithUnit;
INVERSE
HasExternalReference : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
END_ENTITY;

ENTITY IfcConversionBasedUnitWithOffset
SUBTYPE OF IfcConversionBasedUnit;
ConversionOffset : IfcReal;
END_ENTITY;

ENTITY IfcCooledBeam
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcCooledBeamTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCOOLEDBEAMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCooledBeamType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcCooledBeamTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCoolingTower
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcCoolingTowerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCCOOLINGTOWERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCoolingTowerType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcCoolingTowerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCoordinateOperation
ABSTRACT SUPERTYPE OF(IfcMapConversion);
SourceCRS : IfcCoordinateReferenceSystemSelect;
TargetCRS : IfcCoordinateReferenceSystem;
END_ENTITY;

ENTITY IfcCoordinateReferenceSystem
ABSTRACT SUPERTYPE OF(IfcProjectedCRS);
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
GeodeticDatum : IfcIdentifier;
VerticalDatum : OPTIONAL IfcIdentifier;
END_ENTITY;

ENTITY IfcCostItem
SUBTYPE OF IfcControl;
PredefinedType : OPTIONAL IfcCostItemTypeEnum;
CostValues : OPTIONAL LIST [1:?] OF IfcCostValue;
CostQuantities : OPTIONAL LIST [1:?] OF IfcPhysicalQuantity;
END_ENTITY;

ENTITY IfcCostSchedule
SUBTYPE OF IfcControl;
PredefinedType : OPTIONAL IfcCostScheduleTypeEnum;
Status : OPTIONAL IfcLabel;
SubmittedOn : OPTIONAL IfcDateTime;
UpdateDate : OPTIONAL IfcDateTime;
END_ENTITY;

ENTITY IfcCostValue
SUBTYPE OF IfcAppliedValue;
END_ENTITY;

ENTITY IfcCovering
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcCoveringTypeEnum;
INVERSE
CoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;
CoversElements : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCCOVERINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCoveringType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcCoveringTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCrewResource
SUBTYPE OF IfcConstructionResource;
PredefinedType : OPTIONAL IfcCrewResourceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcCrewResourceType
SUBTYPE OF IfcConstructionResourceType;
PredefinedType : IfcCrewResourceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType));
END_ENTITY;

ENTITY IfcCsgPrimitive3D
ABSTRACT SUPERTYPE OF(ONEOF(IfcBlock, IfcRectangularPyramid, IfcRightCircularCone, IfcRightCircularCylinder, IfcSphere))
SUBTYPE OF IfcGeometricRepresentationItem;
Position : IfcAxis2Placement3D;
DERIVE
Dim : IfcDimensionCount := 3;
END_ENTITY;

ENTITY IfcCsgSolid
SUBTYPE OF IfcSolidModel;
TreeRootExpression : IfcCsgSelect;
END_ENTITY;

ENTITY IfcCurrencyRelationship
SUBTYPE OF IfcResourceLevelRelationship;
RelatingMonetaryUnit : IfcMonetaryUnit;
RelatedMonetaryUnit : IfcMonetaryUnit;
ExchangeRate : IfcPositiveRatioMeasure;
RateDateTime : OPTIONAL IfcDateTime;
RateSource : OPTIONAL IfcLibraryInformation;
END_ENTITY;

ENTITY IfcCurtainWall
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcCurtainWallTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCCURTAINWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcCurtainWallType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcCurtainWallTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcCurve
ABSTRACT SUPERTYPE OF(ONEOF(IfcBoundedCurve, IfcConic, IfcLine, IfcOffsetCurve2D, IfcOffsetCurve3D, IfcPcurve))
SUBTYPE OF IfcGeometricRepresentationItem;
DERIVE
Dim : IfcDimensionCount := IfcCurveDim(SELF);
END_ENTITY;

ENTITY IfcCurveBoundedPlane
SUBTYPE OF IfcBoundedSurface;
BasisSurface : IfcPlane;
OuterBoundary : IfcCurve;
InnerBoundaries : SET OF IfcCurve;
END_ENTITY;

ENTITY IfcCurveBoundedSurface
SUBTYPE OF IfcBoundedSurface;
BasisSurface : IfcSurface;
Boundaries : SET [1:?] OF IfcBoundaryCurve;
ImplicitOuter : BOOLEAN;
END_ENTITY;

ENTITY IfcCurveStyle
SUBTYPE OF IfcPresentationStyle;
CurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;
CurveWidth : OPTIONAL IfcSizeSelect;
CurveColour : OPTIONAL IfcColour;
ModelOrDraughting : OPTIONAL BOOLEAN;
WHERE
MeasureOfWidth : (NOT(EXISTS(CurveWidth))) OR ('IFCMEASURERESOURCE.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR (('IFCMEASURERESOURCE.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND (CurveWidth = 'by layer'));
IdentifiableCurveStyle : EXISTS(CurveFont) OR EXISTS(CurveWidth) OR EXISTS(CurveColour);
END_ENTITY;

ENTITY IfcCurveStyleFont
SUBTYPE OF IfcPresentationItem;
Name : OPTIONAL IfcLabel;
PatternList : LIST [1:?] OF IfcCurveStyleFontPattern;
END_ENTITY;

ENTITY IfcCurveStyleFontAndScaling
SUBTYPE OF IfcPresentationItem;
Name : OPTIONAL IfcLabel;
CurveFont : IfcCurveStyleFontSelect;
CurveFontScaling : IfcPositiveRatioMeasure;
END_ENTITY;

ENTITY IfcCurveStyleFontPattern
SUBTYPE OF IfcPresentationItem;
VisibleSegmentLength : IfcLengthMeasure;
InvisibleSegmentLength : IfcPositiveLengthMeasure;
WHERE
VisibleLengthGreaterEqualZero : VisibleSegmentLength >= 0.;
END_ENTITY;

ENTITY IfcCylindricalSurface
SUBTYPE OF IfcElementarySurface;
Radius : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcDamper
SUBTYPE OF IfcFlowController;
PredefinedType : OPTIONAL IfcDamperTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDAMPERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDamperType
SUBTYPE OF IfcFlowControllerType;
PredefinedType : IfcDamperTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcDerivedProfileDef
SUPERTYPE OF(IfcMirroredProfileDef)
SUBTYPE OF IfcProfileDef;
ParentProfile : IfcProfileDef;
Operator : IfcCartesianTransformationOperator2D;
Label : OPTIONAL IfcLabel;
WHERE
InvariantProfileType : SELF\IfcProfileDef.ProfileType = ParentProfile.ProfileType;
END_ENTITY;

ENTITY IfcDerivedUnit;
Elements : SET [1:?] OF IfcDerivedUnitElement;
UnitType : IfcDerivedUnitEnum;
UserDefinedType : OPTIONAL IfcLabel;
DERIVE
Dimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements);
WHERE
WR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));
WR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND (EXISTS(SELF.UserDefinedType)));
END_ENTITY;

ENTITY IfcDerivedUnitElement;
Unit : IfcNamedUnit;
Exponent : INTEGER;
END_ENTITY;

ENTITY IfcDimensionalExponents;
LengthExponent : INTEGER;
MassExponent : INTEGER;
TimeExponent : INTEGER;
ElectricCurrentExponent : INTEGER;
ThermodynamicTemperatureExponent : INTEGER;
AmountOfSubstanceExponent : INTEGER;
LuminousIntensityExponent : INTEGER;
END_ENTITY;

ENTITY IfcDirection
SUBTYPE OF IfcGeometricRepresentationItem;
DirectionRatios : LIST [2:3] OF REAL;
DERIVE
Dim : IfcDimensionCount := HIINDEX(DirectionRatios);
WHERE
MagnitudeGreaterZero : SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0;
END_ENTITY;

ENTITY IfcDiscreteAccessory
SUBTYPE OF IfcElementComponent;
PredefinedType : OPTIONAL IfcDiscreteAccessoryTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDCOMPONENTELEMENTS.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDiscreteAccessoryType
SUBTYPE OF IfcElementComponentType;
PredefinedType : IfcDiscreteAccessoryTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcDistributionChamberElement
SUBTYPE OF IfcDistributionFlowElement;
PredefinedType : OPTIONAL IfcDistributionChamberElementTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGSERVICEELEMENTS.IFCDISTRIBUTIONCHAMBERELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDistributionChamberElementType
SUBTYPE OF IfcDistributionFlowElementType;
PredefinedType : IfcDistributionChamberElementTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcDistributionCircuit
SUBTYPE OF IfcDistributionSystem;
END_ENTITY;

ENTITY IfcDistributionControlElement
SUPERTYPE OF(ONEOF(IfcActuator, IfcAlarm, IfcController, IfcFlowInstrument, IfcProtectiveDeviceTrippingUnit, IfcSensor, IfcUnitaryControlElement))
SUBTYPE OF IfcDistributionElement;
INVERSE
AssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;
END_ENTITY;

ENTITY IfcDistributionControlElementType
ABSTRACT SUPERTYPE OF(ONEOF(IfcActuatorType, IfcAlarmType, IfcControllerType, IfcFlowInstrumentType, IfcProtectiveDeviceTrippingUnitType, IfcSensorType, IfcUnitaryControlElementType))
SUBTYPE OF IfcDistributionElementType;
END_ENTITY;

ENTITY IfcDistributionElement
SUPERTYPE OF(ONEOF(IfcDistributionControlElement, IfcDistributionFlowElement))
SUBTYPE OF IfcElement;
INVERSE
HasPorts : SET OF IfcRelConnectsPortToElement FOR RelatedElement;
END_ENTITY;

ENTITY IfcDistributionElementType
SUPERTYPE OF(ONEOF(IfcDistributionControlElementType, IfcDistributionFlowElementType))
SUBTYPE OF IfcElementType;
END_ENTITY;

ENTITY IfcDistributionFlowElement
SUPERTYPE OF(ONEOF(IfcDistributionChamberElement, IfcEnergyConversionDevice, IfcFlowController, IfcFlowFitting, IfcFlowMovingDevice, IfcFlowSegment, IfcFlowStorageDevice, IfcFlowTerminal, IfcFlowTreatmentDevice))
SUBTYPE OF IfcDistributionElement;
INVERSE
HasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;
END_ENTITY;

ENTITY IfcDistributionFlowElementType
ABSTRACT SUPERTYPE OF(ONEOF(IfcDistributionChamberElementType, IfcEnergyConversionDeviceType, IfcFlowControllerType, IfcFlowFittingType, IfcFlowMovingDeviceType, IfcFlowSegmentType, IfcFlowStorageDeviceType, IfcFlowTerminalType, IfcFlowTreatmentDeviceType))
SUBTYPE OF IfcDistributionElementType;
END_ENTITY;

ENTITY IfcDistributionPort
SUBTYPE OF IfcPort;
FlowDirection : OPTIONAL IfcFlowDirectionEnum;
PredefinedType : OPTIONAL IfcDistributionPortTypeEnum;
SystemType : OPTIONAL IfcDistributionSystemEnum;
END_ENTITY;

ENTITY IfcDistributionSystem
SUPERTYPE OF(IfcDistributionCircuit)
SUBTYPE OF IfcSystem;
LongName : OPTIONAL IfcLabel;
PredefinedType : OPTIONAL IfcDistributionSystemEnum;
END_ENTITY;

ENTITY IfcDocumentInformation
SUBTYPE OF IfcExternalInformation;
Identification : IfcIdentifier;
Name : IfcLabel;
Description : OPTIONAL IfcText;
Location : OPTIONAL IfcURIReference;
Purpose : OPTIONAL IfcText;
IntendedUse : OPTIONAL IfcText;
Scope : OPTIONAL IfcText;
Revision : OPTIONAL IfcLabel;
DocumentOwner : OPTIONAL IfcActorSelect;
Editors : OPTIONAL SET [1:?] OF IfcActorSelect;
CreationTime : OPTIONAL IfcDateTime;
LastRevisionTime : OPTIONAL IfcDateTime;
ElectronicFormat : OPTIONAL IfcIdentifier;
ValidFrom : OPTIONAL IfcDate;
ValidUntil : OPTIONAL IfcDate;
Confidentiality : OPTIONAL IfcDocumentConfidentialityEnum;
Status : OPTIONAL IfcDocumentStatusEnum;
INVERSE
DocumentInfoForObjects : SET OF IfcRelAssociatesDocument FOR RelatingDocument;
HasDocumentReferences : SET OF IfcDocumentReference FOR ReferencedDocument;
IsPointedTo : SET OF IfcDocumentInformationRelationship FOR RelatedDocuments;
IsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;
END_ENTITY;

ENTITY IfcDocumentInformationRelationship
SUBTYPE OF IfcResourceLevelRelationship;
RelatingDocument : IfcDocumentInformation;
RelatedDocuments : SET [1:?] OF IfcDocumentInformation;
RelationshipType : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcDocumentReference
SUBTYPE OF IfcExternalReference;
Description : OPTIONAL IfcText;
ReferencedDocument : OPTIONAL IfcDocumentInformation;
INVERSE
DocumentRefForObjects : SET OF IfcRelAssociatesDocument FOR RelatingDocument;
WHERE
WR1 : EXISTS(Name) XOR EXISTS(ReferencedDocument);
END_ENTITY;

ENTITY IfcDoor
SUPERTYPE OF(IfcDoorStandardCase)
SUBTYPE OF IfcBuildingElement;
OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
PredefinedType : OPTIONAL IfcDoorTypeEnum;
OperationType : OPTIONAL IfcDoorTypeOperationEnum;
UserDefinedOperationType : OPTIONAL IfcLabel;
WHERE
CorrectStyleAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCDOORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDoorLiningProperties
SUBTYPE OF IfcPreDefinedPropertySet;
LiningDepth : OPTIONAL IfcPositiveLengthMeasure;
LiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;
ThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;
ThresholdThickness : OPTIONAL IfcNonNegativeLengthMeasure;
TransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;
TransomOffset : OPTIONAL IfcLengthMeasure;
LiningOffset : OPTIONAL IfcLengthMeasure;
ThresholdOffset : OPTIONAL IfcLengthMeasure;
CasingThickness : OPTIONAL IfcPositiveLengthMeasure;
CasingDepth : OPTIONAL IfcPositiveLengthMeasure;
ShapeAspectStyle : OPTIONAL IfcShapeAspect;
LiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;
LiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;
WHERE
WR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));
WR32 : NOT(EXISTS(ThresholdDepth) AND NOT(EXISTS(ThresholdThickness)));
WR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR (NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));
WR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR (NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));
WR35 : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) AND ( ('IFCSHAREDBLDGELEMENTS.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR ('IFCARCHITECTUREDOMAIN.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) );
END_ENTITY;

ENTITY IfcDoorPanelProperties
SUBTYPE OF IfcPreDefinedPropertySet;
PanelDepth : OPTIONAL IfcPositiveLengthMeasure;
PanelOperation : IfcDoorPanelOperationEnum;
PanelWidth : OPTIONAL IfcNormalisedRatioMeasure;
PanelPosition : IfcDoorPanelPositionEnum;
ShapeAspectStyle : OPTIONAL IfcShapeAspect;
WHERE
ApplicableToType : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) AND ( ('IFCSHAREDBLDGELEMENTS.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR ('IFCARCHITECTUREDOMAIN.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) );
END_ENTITY;

ENTITY IfcDoorStandardCase
SUBTYPE OF IfcDoor;
END_ENTITY;

ENTITY IfcDoorStyle
SUBTYPE OF IfcTypeProduct;
OperationType : IfcDoorStyleOperationEnum;
ConstructionType : IfcDoorStyleConstructionEnum;
ParameterTakesPrecedence : BOOLEAN;
Sizeable : BOOLEAN;
END_ENTITY;

ENTITY IfcDoorType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcDoorTypeEnum;
OperationType : IfcDoorTypeOperationEnum;
ParameterTakesPrecedence : OPTIONAL BOOLEAN;
UserDefinedOperationType : OPTIONAL IfcLabel;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcDraughtingPreDefinedColour
SUBTYPE OF IfcPreDefinedColour;
WHERE
PreDefinedColourNames : SELF\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow', 'magenta','cyan','white','by layer'];
END_ENTITY;

ENTITY IfcDraughtingPreDefinedCurveFont
SUBTYPE OF IfcPreDefinedCurveFont;
WHERE
PreDefinedCurveFontNames : SELF\IfcPredefinedItem.Name IN ['continuous', 'chain', 'chain double dash', 'dashed', 'dotted', 'by layer'];
END_ENTITY;

ENTITY IfcDuctFitting
SUBTYPE OF IfcFlowFitting;
PredefinedType : OPTIONAL IfcDuctFittingTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDUCTFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDuctFittingType
SUBTYPE OF IfcFlowFittingType;
PredefinedType : IfcDuctFittingTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcDuctSegment
SUBTYPE OF IfcFlowSegment;
PredefinedType : OPTIONAL IfcDuctSegmentTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDUCTSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDuctSegmentType
SUBTYPE OF IfcFlowSegmentType;
PredefinedType : IfcDuctSegmentTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcDuctSilencer
SUBTYPE OF IfcFlowTreatmentDevice;
PredefinedType : OPTIONAL IfcDuctSilencerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDuctSilencerType
SUBTYPE OF IfcFlowTreatmentDeviceType;
PredefinedType : IfcDuctSilencerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY 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 IfcEdgeLoop
SUBTYPE OF IfcLoop;
EdgeList : LIST [1:?] OF IfcOrientedEdge;
DERIVE
Ne : INTEGER := SIZEOF(EdgeList);
WHERE
IsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);
IsContinuous : IfcLoopHeadToTail(SELF);
END_ENTITY;

ENTITY IfcElectricAppliance
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcElectricApplianceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCELECTRICAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcElectricApplianceType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcElectricApplianceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcElectricDistributionBoard
SUBTYPE OF IfcFlowController;
PredefinedType : OPTIONAL IfcElectricDistributionBoardTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCELECTRICDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcElectricDistributionBoardType
SUBTYPE OF IfcFlowControllerType;
PredefinedType : IfcElectricDistributionBoardTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcElectricFlowStorageDevice
SUBTYPE OF IfcFlowStorageDevice;
PredefinedType : OPTIONAL IfcElectricFlowStorageDeviceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcElectricFlowStorageDeviceType
SUBTYPE OF IfcFlowStorageDeviceType;
PredefinedType : IfcElectricFlowStorageDeviceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcElectricGenerator
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcElectricGeneratorTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCELECTRICGENERATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcElectricGeneratorType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcElectricGeneratorTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcElectricMotor
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcElectricMotorTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCELECTRICMOTORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcElectricMotorType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcElectricMotorTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcElectricTimeControl
SUBTYPE OF IfcFlowController;
PredefinedType : OPTIONAL IfcElectricTimeControlTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcElectricTimeControlType
SUBTYPE OF IfcFlowControllerType;
PredefinedType : IfcElectricTimeControlTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcElement
ABSTRACT SUPERTYPE OF(ONEOF(IfcBuildingElement, IfcCivilElement, IfcDistributionElement, IfcElementAssembly, IfcElementComponent, IfcFeatureElement, IfcFurnishingElement, IfcGeographicElement, IfcTransportElement, IfcVirtualElement))
SUBTYPE OF IfcProduct;
Tag : OPTIONAL IfcIdentifier;
INVERSE
FillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;
ConnectedTo : SET OF IfcRelConnectsElements FOR RelatingElement;
IsInterferedByElements : SET OF IfcRelInterferesElements FOR RelatedElement;
InterferesElements : SET OF IfcRelInterferesElements FOR RelatingElement;
HasProjections : SET OF IfcRelProjectsElement FOR RelatingElement;
ReferencedInStructures : SET OF IfcRelReferencedInSpatialStructure FOR RelatedElements;
HasOpenings : SET OF IfcRelVoidsElement FOR RelatingBuildingElement;
IsConnectionRealization : SET OF IfcRelConnectsWithRealizingElements FOR RealizingElements;
ProvidesBoundaries : SET OF IfcRelSpaceBoundary FOR RelatedBuildingElement;
ConnectedFrom : SET OF IfcRelConnectsElements FOR RelatedElement;
ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
END_ENTITY;

ENTITY IfcElementAssembly
SUBTYPE OF IfcElement;
AssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;
PredefinedType : OPTIONAL IfcElementAssemblyTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCPRODUCTEXTENSION.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcElementAssemblyType
SUBTYPE OF IfcElementType;
PredefinedType : IfcElementAssemblyTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcElementComponent
ABSTRACT SUPERTYPE OF(ONEOF(IfcBuildingElementPart, IfcDiscreteAccessory, IfcFastener, IfcMechanicalFastener, IfcReinforcingElement, IfcVibrationIsolator))
SUBTYPE OF IfcElement;
END_ENTITY;

ENTITY IfcElementComponentType
ABSTRACT SUPERTYPE OF(ONEOF(IfcBuildingElementPartType, IfcDiscreteAccessoryType, IfcFastenerType, IfcMechanicalFastenerType, IfcReinforcingElementType, IfcVibrationIsolatorType))
SUBTYPE OF IfcElementType;
END_ENTITY;

ENTITY IfcElementQuantity
SUBTYPE OF IfcQuantitySet;
MethodOfMeasurement : OPTIONAL IfcLabel;
Quantities : SET [1:?] OF IfcPhysicalQuantity;
WHERE
UniqueQuantityNames : IfcUniqueQuantityNames(Quantities);
END_ENTITY;

ENTITY IfcElementType
ABSTRACT SUPERTYPE OF(ONEOF(IfcBuildingElementType, IfcCivilElementType, IfcDistributionElementType, IfcElementAssemblyType, IfcElementComponentType, IfcFurnishingElementType, IfcGeographicElementType, IfcTransportElementType))
SUBTYPE OF IfcTypeProduct;
ElementType : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcElementarySurface
ABSTRACT SUPERTYPE OF(ONEOF(IfcCylindricalSurface, IfcPlane))
SUBTYPE OF IfcSurface;
Position : IfcAxis2Placement3D;
END_ENTITY;

ENTITY IfcEllipse
SUBTYPE OF IfcConic;
SemiAxis1 : IfcPositiveLengthMeasure;
SemiAxis2 : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcEllipseProfileDef
SUBTYPE OF IfcParameterizedProfileDef;
SemiAxis1 : IfcPositiveLengthMeasure;
SemiAxis2 : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcEnergyConversionDevice
SUPERTYPE OF(ONEOF(IfcAirToAirHeatRecovery, IfcBoiler, IfcBurner, IfcChiller, IfcCoil, IfcCondenser, IfcCooledBeam, IfcCoolingTower, IfcElectricGenerator, IfcElectricMotor, IfcEngine, IfcEvaporativeCooler, IfcEvaporator, IfcHeatExchanger, IfcHumidifier, IfcMotorConnection, IfcSolarDevice, IfcTransformer, IfcTubeBundle, IfcUnitaryEquipment))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcEnergyConversionDeviceType
ABSTRACT SUPERTYPE OF(ONEOF(IfcAirToAirHeatRecoveryType, IfcBoilerType, IfcBurnerType, IfcChillerType, IfcCoilType, IfcCondenserType, IfcCooledBeamType, IfcCoolingTowerType, IfcElectricGeneratorType, IfcElectricMotorType, IfcEngineType, IfcEvaporativeCoolerType, IfcEvaporatorType, IfcHeatExchangerType, IfcHumidifierType, IfcMotorConnectionType, IfcSolarDeviceType, IfcTransformerType, IfcTubeBundleType, IfcUnitaryEquipmentType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcEngine
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcEngineTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCENGINETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcEngineType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcEngineTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcEvaporativeCooler
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcEvaporativeCoolerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcEvaporativeCoolerType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcEvaporativeCoolerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcEvaporator
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcEvaporatorTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCEVAPORATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcEvaporatorType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcEvaporatorTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcEvent
SUBTYPE OF IfcProcess;
PredefinedType : OPTIONAL IfcEventTypeEnum;
EventTriggerType : OPTIONAL IfcEventTriggerTypeEnum;
UserDefinedEventTriggerType : OPTIONAL IfcLabel;
EventOccurenceTime : OPTIONAL IfcEventTime;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
CorrectTypeAssigned : NOT(EXISTS(EventTriggerType)) OR (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType));
END_ENTITY;

ENTITY IfcEventTime
SUBTYPE OF IfcSchedulingTime;
ActualDate : OPTIONAL IfcDateTime;
EarlyDate : OPTIONAL IfcDateTime;
LateDate : OPTIONAL IfcDateTime;
ScheduleDate : OPTIONAL IfcDateTime;
END_ENTITY;

ENTITY IfcEventType
SUBTYPE OF IfcTypeProcess;
PredefinedType : IfcEventTypeEnum;
EventTriggerType : IfcEventTriggerTypeEnum;
UserDefinedEventTriggerType : OPTIONAL IfcLabel;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType)) ;
CorrectEventTriggerType : (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType)) ;
END_ENTITY;

ENTITY IfcExtendedProperties
ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterialProperties, IfcProfileProperties))
SUBTYPE OF IfcPropertyAbstraction;
Name : OPTIONAL IfcIdentifier;
Description : OPTIONAL IfcText;
Properties : SET [1:?] OF IfcProperty;
END_ENTITY;

ENTITY IfcExternalInformation
ABSTRACT SUPERTYPE OF(ONEOF(IfcClassification, IfcDocumentInformation, IfcLibraryInformation));
END_ENTITY;

ENTITY IfcExternalReference
ABSTRACT SUPERTYPE OF(ONEOF(IfcClassificationReference, IfcDocumentReference, IfcExternallyDefinedHatchStyle, IfcExternallyDefinedSurfaceStyle, IfcExternallyDefinedTextFont, IfcLibraryReference));
Location : OPTIONAL IfcURIReference;
Identification : OPTIONAL IfcIdentifier;
Name : OPTIONAL IfcLabel;
INVERSE
ExternalReferenceForResources : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatingReference;
WHERE
WR1 : EXISTS(Identification) OR EXISTS(Location) OR EXISTS(Name);
END_ENTITY;

ENTITY IfcExternalReferenceRelationship
SUBTYPE OF IfcResourceLevelRelationship;
RelatingReference : IfcExternalReference;
RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;
END_ENTITY;

ENTITY IfcExternalSpatialElement
SUBTYPE OF IfcExternalSpatialStructureElement;
PredefinedType : OPTIONAL IfcExternalSpatialElementTypeEnum;
INVERSE
BoundedBy : SET OF IfcRelSpaceBoundary FOR RelatingSpace;
END_ENTITY;

ENTITY IfcExternalSpatialStructureElement
ABSTRACT SUPERTYPE OF(IfcExternalSpatialElement)
SUBTYPE OF IfcSpatialElement;
END_ENTITY;

ENTITY IfcExternallyDefinedHatchStyle
SUBTYPE OF IfcExternalReference;
END_ENTITY;

ENTITY IfcExternallyDefinedSurfaceStyle
SUBTYPE OF IfcExternalReference;
END_ENTITY;

ENTITY IfcExternallyDefinedTextFont
SUBTYPE OF IfcExternalReference;
END_ENTITY;

ENTITY IfcExtrudedAreaSolid
SUPERTYPE OF(IfcExtrudedAreaSolidTapered)
SUBTYPE OF IfcSweptAreaSolid;
ExtrudedDirection : IfcDirection;
Depth : IfcPositiveLengthMeasure;
WHERE
ValidExtrusionDirection : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;
END_ENTITY;

ENTITY IfcExtrudedAreaSolidTapered
SUBTYPE OF IfcExtrudedAreaSolid;
EndSweptArea : IfcProfileDef;
WHERE
CorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea);
END_ENTITY;

ENTITY IfcFace
SUPERTYPE OF(IfcFaceSurface)
SUBTYPE OF IfcTopologicalRepresentationItem;
Bounds : SET [1:?] OF IfcFaceBound;
INVERSE
HasTextureMaps : SET [0:?] OF IfcTextureMap FOR MappedTo;
WHERE
HasOuterBound : SIZEOF(QUERY(temp <* Bounds | 'IFCTOPOLOGYRESOURCE.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(IfcFaceOuterBound)
SUBTYPE OF IfcTopologicalRepresentationItem;
Bound : IfcLoop;
Orientation : BOOLEAN;
END_ENTITY;

ENTITY IfcFaceOuterBound
SUBTYPE OF IfcFaceBound;
END_ENTITY;

ENTITY IfcFaceSurface
SUPERTYPE OF(IfcAdvancedFace)
SUBTYPE OF IfcFace;
FaceSurface : IfcSurface;
SameSense : BOOLEAN;
END_ENTITY;

ENTITY IfcFacetedBrep
SUPERTYPE OF(IfcFacetedBrepWithVoids)
SUBTYPE OF IfcManifoldSolidBrep;
END_ENTITY;

ENTITY IfcFacetedBrepWithVoids
SUBTYPE OF IfcFacetedBrep;
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 IfcFan
SUBTYPE OF IfcFlowMovingDevice;
PredefinedType : OPTIONAL IfcFanTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCFANTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcFanType
SUBTYPE OF IfcFlowMovingDeviceType;
PredefinedType : IfcFanTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcFastener
SUBTYPE OF IfcElementComponent;
PredefinedType : OPTIONAL IfcFastenerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDCOMPONENTELEMENTS.IFCFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcFastenerType
SUBTYPE OF IfcElementComponentType;
PredefinedType : IfcFastenerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcFeatureElement
ABSTRACT SUPERTYPE OF(ONEOF(IfcFeatureElementAddition, IfcFeatureElementSubtraction, IfcSurfaceFeature))
SUBTYPE OF IfcElement;
END_ENTITY;

ENTITY IfcFeatureElementAddition
ABSTRACT SUPERTYPE OF(IfcProjectionElement)
SUBTYPE OF IfcFeatureElement;
INVERSE
ProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;
END_ENTITY;

ENTITY IfcFeatureElementSubtraction
ABSTRACT SUPERTYPE OF(ONEOF(IfcOpeningElement, IfcVoidingFeature))
SUBTYPE OF IfcFeatureElement;
INVERSE
VoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;
WHERE
HasNoSubtraction : SIZEOF(SELF\IfcElement.HasOpenings) = 0;
IsNotFilling : SIZEOF(SELF\IfcElement.FillsVoids) = 0;
END_ENTITY;

ENTITY IfcFillAreaStyle
SUBTYPE OF IfcPresentationStyle;
FillStyles : SET [1:?] OF IfcFillStyleSelect;
ModelorDraughting : OPTIONAL BOOLEAN;
WHERE
MaxOneColour : SIZEOF(QUERY(Style <* SELF.FillStyles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCCOLOUR' IN TYPEOF(Style) )) <= 1;
MaxOneExtHatchStyle : SIZEOF(QUERY(Style <* SELF.FillStyles | 'IFCPRESENTATIONAPPEARANCERESOURCE.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN TYPEOF(Style) )) <= 1;
ConsistentHatchStyleDef : IfcCorrectFillAreaStyle(SELF.FillStyles);
END_ENTITY;

ENTITY IfcFillAreaStyleHatching
SUBTYPE OF IfcGeometricRepresentationItem;
HatchLineAppearance : IfcCurveStyle;
StartOfNextHatchLine : IfcHatchLineDistanceSelect;
PointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint;
PatternStart : OPTIONAL IfcCartesianPoint;
HatchLineAngle : IfcPlaneAngleMeasure;
WHERE
PatternStart2D : NOT(EXISTS(PatternStart)) OR (PatternStart.Dim = 2) ;
RefHatchLine2D : NOT(EXISTS(PointOfReferenceHatchLine)) OR (PointOfReferenceHatchLine.Dim = 2);
END_ENTITY;

ENTITY IfcFillAreaStyleTiles
SUBTYPE OF IfcGeometricRepresentationItem;
TilingPattern : LIST [2:2] OF IfcVector;
Tiles : SET [1:?] OF IfcStyledItem;
TilingScale : IfcPositiveRatioMeasure;
END_ENTITY;

ENTITY IfcFilter
SUBTYPE OF IfcFlowTreatmentDevice;
PredefinedType : OPTIONAL IfcFilterTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCFILTERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcFilterType
SUBTYPE OF IfcFlowTreatmentDeviceType;
PredefinedType : IfcFilterTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcFireSuppressionTerminal
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcFireSuppressionTerminalTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCPLUMBINGFIREPROTECTIONDOMAIN.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcFireSuppressionTerminalType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcFireSuppressionTerminalTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcFixedReferenceSweptAreaSolid
SUBTYPE OF IfcSweptAreaSolid;
Directrix : IfcCurve;
StartParam : OPTIONAL IfcParameterValue;
EndParam : OPTIONAL IfcParameterValue;
FixedReference : IfcDirection;
WHERE
DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR (SIZEOF(['IFCGEOMETRYRESOURCE.IFCCONIC', 'IFCGEOMETRYRESOURCE.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);
END_ENTITY;

ENTITY IfcFlowController
SUPERTYPE OF(ONEOF(IfcAirTerminalBox, IfcDamper, IfcElectricDistributionBoard, IfcElectricTimeControl, IfcFlowMeter, IfcProtectiveDevice, IfcSwitchingDevice, IfcValve))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcFlowControllerType
ABSTRACT SUPERTYPE OF(ONEOF(IfcAirTerminalBoxType, IfcDamperType, IfcElectricDistributionBoardType, IfcElectricTimeControlType, IfcFlowMeterType, IfcProtectiveDeviceType, IfcSwitchingDeviceType, IfcValveType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcFlowFitting
SUPERTYPE OF(ONEOF(IfcCableCarrierFitting, IfcCableFitting, IfcDuctFitting, IfcJunctionBox, IfcPipeFitting))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcFlowFittingType
ABSTRACT SUPERTYPE OF(ONEOF(IfcCableCarrierFittingType, IfcCableFittingType, IfcDuctFittingType, IfcJunctionBoxType, IfcPipeFittingType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcFlowInstrument
SUBTYPE OF IfcDistributionControlElement;
PredefinedType : OPTIONAL IfcFlowInstrumentTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCBUILDINGCONTROLSDOMAIN.IFCFLOWINSTRUMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcFlowInstrumentType
SUBTYPE OF IfcDistributionControlElementType;
PredefinedType : IfcFlowInstrumentTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcFlowMeter
SUBTYPE OF IfcFlowController;
PredefinedType : OPTIONAL IfcFlowMeterTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCFLOWMETERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcFlowMeterType
SUBTYPE OF IfcFlowControllerType;
PredefinedType : IfcFlowMeterTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcFlowMovingDevice
SUPERTYPE OF(ONEOF(IfcCompressor, IfcFan, IfcPump))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcFlowMovingDeviceType
ABSTRACT SUPERTYPE OF(ONEOF(IfcCompressorType, IfcFanType, IfcPumpType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcFlowSegment
SUPERTYPE OF(ONEOF(IfcCableCarrierSegment, IfcCableSegment, IfcDuctSegment, IfcPipeSegment))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcFlowSegmentType
ABSTRACT SUPERTYPE OF(ONEOF(IfcCableCarrierSegmentType, IfcCableSegmentType, IfcDuctSegmentType, IfcPipeSegmentType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcFlowStorageDevice
SUPERTYPE OF(ONEOF(IfcElectricFlowStorageDevice, IfcTank))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcFlowStorageDeviceType
ABSTRACT SUPERTYPE OF(ONEOF(IfcElectricFlowStorageDeviceType, IfcTankType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcFlowTerminal
SUPERTYPE OF(ONEOF(IfcAirTerminal, IfcAudioVisualAppliance, IfcCommunicationsAppliance, IfcElectricAppliance, IfcFireSuppressionTerminal, IfcLamp, IfcLightFixture, IfcMedicalDevice, IfcOutlet, IfcSanitaryTerminal, IfcSpaceHeater, IfcStackTerminal, IfcWasteTerminal))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcFlowTerminalType
ABSTRACT SUPERTYPE OF(ONEOF(IfcAirTerminalType, IfcAudioVisualApplianceType, IfcCommunicationsApplianceType, IfcElectricApplianceType, IfcFireSuppressionTerminalType, IfcLampType, IfcLightFixtureType, IfcMedicalDeviceType, IfcOutletType, IfcSanitaryTerminalType, IfcSpaceHeaterType, IfcStackTerminalType, IfcWasteTerminalType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcFlowTreatmentDevice
SUPERTYPE OF(ONEOF(IfcDuctSilencer, IfcFilter, IfcInterceptor))
SUBTYPE OF IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcFlowTreatmentDeviceType
ABSTRACT SUPERTYPE OF(ONEOF(IfcDuctSilencerType, IfcFilterType, IfcInterceptorType))
SUBTYPE OF IfcDistributionFlowElementType;
END_ENTITY;

ENTITY IfcFooting
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcFootingTypeEnum;
WHERE
CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSTRUCTURALELEMENTSDOMAIN.IFCFOOTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)) ;
END_ENTITY;

ENTITY IfcFootingType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcFootingTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcFurnishingElement
SUPERTYPE OF(ONEOF(IfcFurniture, IfcSystemFurnitureElement))
SUBTYPE OF IfcElement;
END_ENTITY;

ENTITY IfcFurnishingElementType
SUPERTYPE OF(ONEOF(IfcFurnitureType, IfcSystemFurnitureElementType))
SUBTYPE OF IfcElementType;
END_ENTITY;

ENTITY IfcFurniture
SUBTYPE OF IfcFurnishingElement;
PredefinedType : OPTIONAL IfcFurnitureTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDFACILITIESELEMENTS.IFCFURNITURETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcFurnitureType
SUBTYPE OF IfcFurnishingElementType;
AssemblyPlace : IfcAssemblyPlaceEnum;
PredefinedType : OPTIONAL IfcFurnitureTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcGeographicElement
SUBTYPE OF IfcElement;
PredefinedType : OPTIONAL IfcGeographicElementTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCPRODUCTEXTENSION.IFCGEOGRAPHICELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcGeographicElementType
SUBTYPE OF IfcElementType;
PredefinedType : IfcGeographicElementTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcGeometricCurveSet
SUBTYPE OF IfcGeometricSet;
WHERE
NoSurfaces : SIZEOF(QUERY(Temp <* SELF\IfcGeometricSet.Elements | 'IFCGEOMETRYRESOURCE.IFCSURFACE' IN TYPEOF(Temp))) = 0;
END_ENTITY;

ENTITY IfcGeometricRepresentationContext
SUPERTYPE OF(IfcGeometricRepresentationSubContext)
SUBTYPE OF IfcRepresentationContext;
CoordinateSpaceDimension : IfcDimensionCount;
Precision : OPTIONAL REAL;
WorldCoordinateSystem : IfcAxis2Placement;
TrueNorth : OPTIONAL IfcDirection;
INVERSE
HasSubContexts : SET OF IfcGeometricRepresentationSubContext FOR ParentContext;
WHERE
WR11 : NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2);
END_ENTITY;

ENTITY IfcGeometricRepresentationItem
ABSTRACT SUPERTYPE OF(ONEOF(IfcAnnotationFillArea, IfcBooleanResult, IfcBoundingBox, IfcCartesianPointList, IfcCartesianTransformationOperator, IfcCompositeCurveSegment, IfcCsgPrimitive3D, IfcCurve, IfcDirection, IfcFaceBasedSurfaceModel, IfcFillAreaStyleHatching, IfcFillAreaStyleTiles, IfcGeometricSet, IfcHalfSpaceSolid, IfcLightSource, IfcPlacement, IfcPlanarExtent, IfcPoint, IfcSectionedSpine, IfcShellBasedSurfaceModel, IfcSolidModel, IfcSurface, IfcTessellatedItem, IfcTextLiteral, IfcVector))
SUBTYPE OF IfcRepresentationItem;
END_ENTITY;

ENTITY IfcGeometricRepresentationSubContext
SUBTYPE OF IfcGeometricRepresentationContext;
ParentContext : IfcGeometricRepresentationContext;
TargetScale : OPTIONAL IfcPositiveRatioMeasure;
TargetView : IfcGeometricProjectionEnum;
UserDefinedTargetView : OPTIONAL IfcLabel;
DERIVE
SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;
SELF\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;
SELF\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth, IfcConvertDirectionInto2D(SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem.P[2]));
SELF\IfcGeometricRepresentationContext.Precision : REAL := NVL(ParentContext.Precision,1.E-5);
WHERE
WR31 : NOT('IFCREPRESENTATIONRESOURCE.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));
WR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR ((TargetView = IfcGeometricProjectionEnum.USERDEFINED) AND EXISTS(UserDefinedTargetView)) ;
END_ENTITY;

ENTITY IfcGeometricSet
SUPERTYPE OF(IfcGeometricCurveSet)
SUBTYPE OF IfcGeometricRepresentationItem;
Elements : SET [1:?] OF IfcGeometricSetSelect;
DERIVE
Dim : IfcDimensionCount := Elements[1].Dim;
WHERE
ConsistentDim : SIZEOF(QUERY(Temp <* Elements | Temp.Dim <> Elements[1].Dim)) = 0;
END_ENTITY;

ENTITY IfcGrid
SUBTYPE OF IfcProduct;
UAxes : LIST [1:?] OF UNIQUE IfcGridAxis;
VAxes : LIST [1:?] OF UNIQUE IfcGridAxis;
WAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;
PredefinedType : OPTIONAL IfcGridTypeEnum;
INVERSE
ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
WHERE
HasPlacement : 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 OF IfcVirtualGridIntersection FOR IntersectingAxes;
WHERE
WR1 : AxisCurve.Dim = 2;
WR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);
END_ENTITY;

ENTITY IfcGridPlacement
SUBTYPE OF IfcObjectPlacement;
PlacementLocation : IfcVirtualGridIntersection;
PlacementRefDirection : OPTIONAL IfcGridPlacementDirectionSelect;
END_ENTITY;

ENTITY IfcGroup
SUPERTYPE OF(ONEOF(IfcAsset, IfcInventory, IfcStructuralLoadGroup, IfcStructuralResultGroup, IfcSystem))
SUBTYPE OF IfcObject;
INVERSE
IsGroupedBy : SET OF 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 IfcHeatExchanger
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcHeatExchangerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCHEATEXCHANGERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcHeatExchangerType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcHeatExchangerTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcHumidifier
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcHumidifierTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcHumidifierType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcHumidifierTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcIShapeProfileDef
SUBTYPE OF IfcParameterizedProfileDef;
OverallWidth : IfcPositiveLengthMeasure;
OverallDepth : IfcPositiveLengthMeasure;
WebThickness : IfcPositiveLengthMeasure;
FlangeThickness : IfcPositiveLengthMeasure;
FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
FlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
FlangeSlope : OPTIONAL IfcPlaneAngleMeasure;
WHERE
ValidFlangeThickness : (2. * FlangeThickness) < OverallDepth;
ValidWebThickness : WebThickness < OverallWidth;
ValidFilletRadius : NOT(EXISTS(FilletRadius)) OR ((FilletRadius <= (OverallWidth - WebThickness)/2.) AND (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.));
END_ENTITY;

ENTITY IfcImageTexture
SUBTYPE OF IfcSurfaceTexture;
URLReference : IfcURIReference;
END_ENTITY;

ENTITY IfcIndexedColourMap
SUBTYPE OF IfcPresentationItem;
MappedTo : IfcTessellatedFaceSet;
Overrides : OPTIONAL IfcSurfaceStyleShading;
Colours : IfcColourRgbList;
ColourIndex : LIST [1:?] OF INTEGER;
END_ENTITY;

ENTITY IfcIndexedTextureMap
ABSTRACT SUPERTYPE OF(IfcIndexedTriangleTextureMap)
SUBTYPE OF IfcTextureCoordinate;
MappedTo : IfcTessellatedFaceSet;
TexCoords : IfcTextureVertexList;
END_ENTITY;

ENTITY IfcIndexedTriangleTextureMap
SUBTYPE OF IfcIndexedTextureMap;
TexCoordIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF INTEGER;
END_ENTITY;

ENTITY IfcInterceptor
SUBTYPE OF IfcFlowTreatmentDevice;
PredefinedType : OPTIONAL IfcInterceptorTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCPLUMBINGFIREPROTECTIONDOMAIN.IFCINTERCEPTORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcInterceptorType
SUBTYPE OF IfcFlowTreatmentDeviceType;
PredefinedType : IfcInterceptorTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcInventory
SUBTYPE OF IfcGroup;
PredefinedType : OPTIONAL IfcInventoryTypeEnum;
Jurisdiction : OPTIONAL IfcActorSelect;
ResponsiblePersons : OPTIONAL SET [1:?] OF IfcPerson;
LastUpdateDate : OPTIONAL IfcDate;
CurrentValue : OPTIONAL IfcCostValue;
OriginalValue : OPTIONAL IfcCostValue;
END_ENTITY;

ENTITY IfcIrregularTimeSeries
SUBTYPE OF IfcTimeSeries;
Values : LIST [1:?] OF IfcIrregularTimeSeriesValue;
END_ENTITY;

ENTITY IfcIrregularTimeSeriesValue;
TimeStamp : IfcDateTime;
ListValues : LIST [1:?] OF IfcValue;
END_ENTITY;

ENTITY IfcJunctionBox
SUBTYPE OF IfcFlowFitting;
PredefinedType : OPTIONAL IfcJunctionBoxTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCJUNCTIONBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcJunctionBoxType
SUBTYPE OF IfcFlowFittingType;
PredefinedType : IfcJunctionBoxTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcLShapeProfileDef
SUBTYPE OF IfcParameterizedProfileDef;
Depth : IfcPositiveLengthMeasure;
Width : OPTIONAL IfcPositiveLengthMeasure;
Thickness : IfcPositiveLengthMeasure;
FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
EdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
LegSlope : OPTIONAL IfcPlaneAngleMeasure;
WHERE
ValidThickness : (Thickness < Depth) AND (NOT(EXISTS(Width)) OR (Thickness < Width));
END_ENTITY;

ENTITY IfcLaborResource
SUBTYPE OF IfcConstructionResource;
PredefinedType : OPTIONAL IfcLaborResourceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcLaborResourceType
SUBTYPE OF IfcConstructionResourceType;
PredefinedType : IfcLaborResourceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType));
END_ENTITY;

ENTITY IfcLagTime
SUBTYPE OF IfcSchedulingTime;
LagValue : IfcTimeOrRatioSelect;
DurationType : IfcTaskDurationEnum;
END_ENTITY;

ENTITY IfcLamp
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcLampTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCLAMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcLampType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcLampTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcLibraryInformation
SUBTYPE OF IfcExternalInformation;
Name : IfcLabel;
Version : OPTIONAL IfcLabel;
Publisher : OPTIONAL IfcActorSelect;
VersionDate : OPTIONAL IfcDateTime;
Location : OPTIONAL IfcURIReference;
Description : OPTIONAL IfcText;
INVERSE
LibraryInfoForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;
HasLibraryReferences : SET OF IfcLibraryReference FOR ReferencedLibrary;
END_ENTITY;

ENTITY IfcLibraryReference
SUBTYPE OF IfcExternalReference;
Description : OPTIONAL IfcText;
Language : OPTIONAL IfcLanguageId;
ReferencedLibrary : OPTIONAL IfcLibraryInformation;
INVERSE
LibraryRefForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;
END_ENTITY;

ENTITY IfcLightDistributionData;
MainPlaneAngle : IfcPlaneAngleMeasure;
SecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;
LuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;
END_ENTITY;

ENTITY IfcLightFixture
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcLightFixtureTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCLIGHTFIXTURETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcLightFixtureType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcLightFixtureTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcLightIntensityDistribution;
LightDistributionCurve : IfcLightDistributionCurveEnum;
DistributionData : LIST [1:?] OF IfcLightDistributionData;
END_ENTITY;

ENTITY IfcLightSource
ABSTRACT SUPERTYPE OF(ONEOF(IfcLightSourceAmbient, IfcLightSourceDirectional, IfcLightSourceGoniometric, IfcLightSourcePositional))
SUBTYPE OF IfcGeometricRepresentationItem;
Name : OPTIONAL IfcLabel;
LightColour : IfcColourRgb;
AmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;
Intensity : OPTIONAL IfcNormalisedRatioMeasure;
END_ENTITY;

ENTITY IfcLightSourceAmbient
SUBTYPE OF IfcLightSource;
END_ENTITY;

ENTITY IfcLightSourceDirectional
SUBTYPE OF IfcLightSource;
Orientation : IfcDirection;
END_ENTITY;

ENTITY IfcLightSourceGoniometric
SUBTYPE OF IfcLightSource;
Position : IfcAxis2Placement3D;
ColourAppearance : OPTIONAL IfcColourRgb;
ColourTemperature : IfcThermodynamicTemperatureMeasure;
LuminousFlux : IfcLuminousFluxMeasure;
LightEmissionSource : IfcLightEmissionSourceEnum;
LightDistributionDataSource : IfcLightDistributionDataSourceSelect;
END_ENTITY;

ENTITY IfcLightSourcePositional
SUPERTYPE OF(IfcLightSourceSpot)
SUBTYPE OF IfcLightSource;
Position : IfcCartesianPoint;
Radius : IfcPositiveLengthMeasure;
ConstantAttenuation : IfcReal;
DistanceAttenuation : IfcReal;
QuadricAttenuation : IfcReal;
END_ENTITY;

ENTITY IfcLightSourceSpot
SUBTYPE OF IfcLightSourcePositional;
Orientation : IfcDirection;
ConcentrationExponent : OPTIONAL IfcReal;
SpreadAngle : IfcPositivePlaneAngleMeasure;
BeamWidthAngle : IfcPositivePlaneAngleMeasure;
END_ENTITY;

ENTITY IfcLine
SUBTYPE OF IfcCurve;
Pnt : IfcCartesianPoint;
Dir : IfcVector;
WHERE
SameDim : Dir.Dim = Pnt.Dim;
END_ENTITY;

ENTITY IfcLocalPlacement
SUBTYPE OF IfcObjectPlacement;
PlacementRelTo : OPTIONAL IfcObjectPlacement;
RelativePlacement : IfcAxis2Placement;
WHERE
WR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);
END_ENTITY;

ENTITY IfcLoop
SUPERTYPE OF(ONEOF(IfcEdgeLoop, IfcPolyLoop, IfcVertexLoop))
SUBTYPE OF IfcTopologicalRepresentationItem;
END_ENTITY;

ENTITY IfcManifoldSolidBrep
ABSTRACT SUPERTYPE OF(ONEOF(IfcAdvancedBrep, IfcFacetedBrep))
SUBTYPE OF IfcSolidModel;
Outer : IfcClosedShell;
END_ENTITY;

ENTITY IfcMapConversion
SUBTYPE OF IfcCoordinateOperation;
Eastings : IfcLengthMeasure;
Northings : IfcLengthMeasure;
OrthogonalHeight : IfcLengthMeasure;
XAxisAbscissa : OPTIONAL IfcReal;
XAxisOrdinate : OPTIONAL IfcReal;
Scale : OPTIONAL IfcReal;
END_ENTITY;

ENTITY IfcMappedItem
SUBTYPE OF IfcRepresentationItem;
MappingSource : IfcRepresentationMap;
MappingTarget : IfcCartesianTransformationOperator;
END_ENTITY;

ENTITY IfcMaterial
SUBTYPE OF IfcMaterialDefinition;
Name : IfcLabel;
Description : OPTIONAL IfcText;
Category : OPTIONAL IfcLabel;
INVERSE
HasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;
IsRelatedWith : SET OF IfcMaterialRelationship FOR RelatedMaterials;
RelatesTo : SET [0:1] OF IfcMaterialRelationship FOR RelatingMaterial;
END_ENTITY;

ENTITY IfcMaterialClassificationRelationship;
MaterialClassifications : SET [1:?] OF IfcClassificationSelect;
ClassifiedMaterial : IfcMaterial;
END_ENTITY;

ENTITY IfcMaterialConstituent
SUBTYPE OF IfcMaterialDefinition;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
Material : IfcMaterial;
Fraction : OPTIONAL IfcNormalisedRatioMeasure;
Category : OPTIONAL IfcLabel;
INVERSE
ToMaterialConstituentSet : IfcMaterialConstituentSet FOR MaterialConstituents;
END_ENTITY;

ENTITY IfcMaterialConstituentSet
SUBTYPE OF IfcMaterialDefinition;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
MaterialConstituents : OPTIONAL SET [1:?] OF IfcMaterialConstituent;
END_ENTITY;

ENTITY IfcMaterialDefinition
ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterial, IfcMaterialConstituent, IfcMaterialConstituentSet, IfcMaterialLayer, IfcMaterialLayerSet, IfcMaterialProfile, IfcMaterialProfileSet));
INVERSE
AssociatedTo : SET [0:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;
HasExternalReferences : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
HasProperties : SET OF IfcMaterialProperties FOR Material;
END_ENTITY;

ENTITY IfcMaterialDefinitionRepresentation
SUBTYPE OF IfcProductRepresentation;
RepresentedMaterial : IfcMaterial;
WHERE
OnlyStyledRepresentations : SIZEOF(QUERY(temp <* Representations | (NOT('IFCREPRESENTATIONRESOURCE.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp))) )) = 0;
END_ENTITY;

ENTITY IfcMaterialLayer
SUPERTYPE OF(IfcMaterialLayerWithOffsets)
SUBTYPE OF IfcMaterialDefinition;
Material : OPTIONAL IfcMaterial;
LayerThickness : IfcNonNegativeLengthMeasure;
IsVentilated : OPTIONAL IfcLogical;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
Category : OPTIONAL IfcLabel;
Priority : OPTIONAL IfcNormalisedRatioMeasure;
INVERSE
ToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;
END_ENTITY;

ENTITY IfcMaterialLayerSet
SUBTYPE OF IfcMaterialDefinition;
MaterialLayers : LIST [1:?] OF IfcMaterialLayer;
LayerSetName : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
DERIVE
TotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);
END_ENTITY;

ENTITY IfcMaterialLayerSetUsage
SUBTYPE OF IfcMaterialUsageDefinition;
ForLayerSet : IfcMaterialLayerSet;
LayerSetDirection : IfcLayerSetDirectionEnum;
DirectionSense : IfcDirectionSenseEnum;
OffsetFromReferenceLine : IfcLengthMeasure;
ReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcMaterialLayerWithOffsets
SUBTYPE OF IfcMaterialLayer;
OffsetDirection : IfcLayerSetDirectionEnum;
OffsetValues : ARRAY [1:2] OF IfcLengthMeasure;
END_ENTITY;

ENTITY IfcMaterialList;
Materials : LIST [1:?] OF IfcMaterial;
END_ENTITY;

ENTITY IfcMaterialProfile
SUPERTYPE OF(IfcMaterialProfileWithOffsets)
SUBTYPE OF IfcMaterialDefinition;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
Material : OPTIONAL IfcMaterial;
Profile : IfcProfileDef;
Priority : OPTIONAL IfcNormalisedRatioMeasure;
Category : OPTIONAL IfcLabel;
INVERSE
ToMaterialProfileSet : IfcMaterialProfileSet FOR MaterialProfiles;
END_ENTITY;

ENTITY IfcMaterialProfileSet
SUBTYPE OF IfcMaterialDefinition;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
MaterialProfiles : LIST [1:?] OF IfcMaterialProfile;
CompositeProfile : OPTIONAL IfcCompositeProfileDef;
END_ENTITY;

ENTITY IfcMaterialProfileSetUsage
SUPERTYPE OF(IfcMaterialProfileSetUsageTapering)
SUBTYPE OF IfcMaterialUsageDefinition;
ForProfileSet : IfcMaterialProfileSet;
CardinalPoint : OPTIONAL IfcCardinalPointReference;
ReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcMaterialProfileSetUsageTapering
SUBTYPE OF IfcMaterialProfileSetUsage;
ForProfileEndSet : IfcMaterialProfileSet;
CardinalEndPoint : OPTIONAL IfcCardinalPointReference;
END_ENTITY;

ENTITY IfcMaterialProfileWithOffsets
SUBTYPE OF IfcMaterialProfile;
OffsetValues : ARRAY [1:2] OF IfcLengthMeasure;
END_ENTITY;

ENTITY IfcMaterialProperties
SUBTYPE OF IfcExtendedProperties;
Material : IfcMaterialDefinition;
END_ENTITY;

ENTITY IfcMaterialRelationship
SUBTYPE OF IfcResourceLevelRelationship;
RelatingMaterial : IfcMaterial;
RelatedMaterials : SET [1:?] OF IfcMaterial;
Expression : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcMaterialUsageDefinition
ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterialLayerSetUsage, IfcMaterialProfileSetUsage));
INVERSE
AssociatedTo : SET [1:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;
END_ENTITY;

ENTITY IfcMeasureWithUnit;
ValueComponent : IfcValue;
UnitComponent : IfcUnit;
END_ENTITY;

ENTITY IfcMechanicalFastener
SUBTYPE OF IfcElementComponent;
NominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
NominalLength : OPTIONAL IfcPositiveLengthMeasure;
PredefinedType : OPTIONAL IfcMechanicalFastenerTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDCOMPONENTELEMENTS.IFCMECHANICALFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcMechanicalFastenerType
SUBTYPE OF IfcElementComponentType;
PredefinedType : IfcMechanicalFastenerTypeEnum;
NominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
NominalLength : OPTIONAL IfcPositiveLengthMeasure;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcMedicalDevice
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcMedicalDeviceTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCMEDICALDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcMedicalDeviceType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcMedicalDeviceTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcMember
SUPERTYPE OF(IfcMemberStandardCase)
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcMemberTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCMEMBERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcMemberStandardCase
SUBTYPE OF IfcMember;
WHERE
HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFCKERNEL.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFCMATERIALRESOURCE.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1;
END_ENTITY;

ENTITY IfcMemberType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcMemberTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcMetric
SUBTYPE OF IfcConstraint;
Benchmark : IfcBenchmarkEnum;
ValueSource : OPTIONAL IfcLabel;
DataValue : IfcMetricValueSelect;
ReferencePath : OPTIONAL IfcReference;
END_ENTITY;

ENTITY IfcMirroredProfileDef
SUBTYPE OF IfcDerivedProfileDef;
DERIVE
SELF\IfcDerivedProfileDef.Operator : IfcCartesianTransformationOperator2D := IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcCartesianTransformationOperator( -- Axis1 IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([-1., 0.]), -- Axis2 IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([ 0., 1.]), -- LocalOrigin IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcPoint() || IfcCartesianPoint([0., 0.]), -- Scale 1.) || IfcCartesianTransformationOperator2D();
END_ENTITY;

ENTITY IfcMonetaryUnit;
Currency : IfcLabel;
END_ENTITY;

ENTITY IfcMotorConnection
SUBTYPE OF IfcEnergyConversionDevice;
PredefinedType : OPTIONAL IfcMotorConnectionTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCMOTORCONNECTIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcMotorConnectionType
SUBTYPE OF IfcEnergyConversionDeviceType;
PredefinedType : IfcMotorConnectionTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcNamedUnit
ABSTRACT SUPERTYPE OF(ONEOF(IfcContextDependentUnit, IfcConversionBasedUnit, IfcSIUnit));
Dimensions : IfcDimensionalExponents;
UnitType : IfcUnitEnum;
WHERE
WR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);
END_ENTITY;

ENTITY IfcObject
ABSTRACT SUPERTYPE OF(ONEOF(IfcActor, IfcControl, IfcGroup, IfcProcess, IfcProduct, IfcResource))
SUBTYPE OF IfcObjectDefinition;
ObjectType : OPTIONAL IfcLabel;
INVERSE
IsDeclaredBy : SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects;
Declares : SET OF IfcRelDefinesByObject FOR RelatingObject;
IsTypedBy : SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects;
IsDefinedBy : SET OF IfcRelDefinesByProperties FOR RelatedObjects;
END_ENTITY;

ENTITY IfcObjectDefinition
ABSTRACT SUPERTYPE OF(ONEOF(IfcContext, IfcObject, IfcTypeObject))
SUBTYPE OF IfcRoot;
INVERSE
HasAssignments : SET OF IfcRelAssigns FOR RelatedObjects;
Nests : SET [0:1] OF IfcRelNests FOR RelatedObjects;
IsNestedBy : SET OF IfcRelNests FOR RelatingObject;
HasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;
IsDecomposedBy : SET OF IfcRelAggregates FOR RelatingObject;
Decomposes : SET [0:1] OF IfcRelAggregates FOR RelatedObjects;
HasAssociations : SET OF IfcRelAssociates FOR RelatedObjects;
END_ENTITY;

ENTITY IfcObjectPlacement
ABSTRACT SUPERTYPE OF(ONEOF(IfcGridPlacement, IfcLocalPlacement));
INVERSE
PlacesObject : SET [0:?] OF IfcProduct FOR ObjectPlacement;
ReferencedByPlacements : SET OF IfcLocalPlacement FOR PlacementRelTo;
END_ENTITY;

ENTITY IfcObjective
SUBTYPE OF IfcConstraint;
BenchmarkValues : OPTIONAL LIST [1:?] OF IfcConstraint;
LogicalAggregator : OPTIONAL IfcLogicalOperatorEnum;
ObjectiveQualifier : IfcObjectiveEnum;
UserDefinedQualifier : OPTIONAL IfcLabel;
WHERE
WR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\IfcObjective.UserDefinedQualifier));
END_ENTITY;

ENTITY IfcOccupant
SUBTYPE OF IfcActor;
PredefinedType : OPTIONAL IfcOccupantTypeEnum;
WHERE
WR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcOffsetCurve2D
SUBTYPE OF IfcCurve;
BasisCurve : IfcCurve;
Distance : IfcLengthMeasure;
SelfIntersect : LOGICAL;
WHERE
DimIs2D : BasisCurve.Dim = 2;
END_ENTITY;

ENTITY IfcOffsetCurve3D
SUBTYPE OF IfcCurve;
BasisCurve : IfcCurve;
Distance : IfcLengthMeasure;
SelfIntersect : LOGICAL;
RefDirection : IfcDirection;
WHERE
DimIs2D : BasisCurve.Dim = 3;
END_ENTITY;

ENTITY IfcOpenShell
SUBTYPE OF IfcConnectedFaceSet;
END_ENTITY;

ENTITY IfcOpeningElement
SUPERTYPE OF(IfcOpeningStandardCase)
SUBTYPE OF IfcFeatureElementSubtraction;
PredefinedType : OPTIONAL IfcOpeningElementTypeEnum;
INVERSE
HasFillings : SET OF IfcRelFillsElement FOR RelatingOpeningElement;
END_ENTITY;

ENTITY IfcOpeningStandardCase
SUBTYPE OF IfcOpeningElement;
END_ENTITY;

ENTITY IfcOrganization;
Identification : OPTIONAL IfcIdentifier;
Name : IfcLabel;
Description : OPTIONAL IfcText;
Roles : OPTIONAL LIST [1:?] OF IfcActorRole;
Addresses : OPTIONAL LIST [1:?] OF IfcAddress;
INVERSE
IsRelatedBy : SET OF IfcOrganizationRelationship FOR RelatedOrganizations;
Relates : SET OF IfcOrganizationRelationship FOR RelatingOrganization;
Engages : SET OF IfcPersonAndOrganization FOR TheOrganization;
END_ENTITY;

ENTITY IfcOrganizationRelationship
SUBTYPE OF IfcResourceLevelRelationship;
RelatingOrganization : IfcOrganization;
RelatedOrganizations : SET [1:?] OF IfcOrganization;
END_ENTITY;

ENTITY IfcOrientedEdge
SUBTYPE OF IfcEdge;
EdgeElement : IfcEdge;
Orientation : BOOLEAN;
DERIVE
SELF\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);
SELF\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);
WHERE
EdgeElementNotOriented : NOT('IFCTOPOLOGYRESOURCE.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));
END_ENTITY;

ENTITY IfcOuterBoundaryCurve
SUBTYPE OF IfcBoundaryCurve;
END_ENTITY;

ENTITY IfcOutlet
SUBTYPE OF IfcFlowTerminal;
PredefinedType : OPTIONAL IfcOutletTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCELECTRICALDOMAIN.IFCOUTLETTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcOutletType
SUBTYPE OF IfcFlowTerminalType;
PredefinedType : IfcOutletTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcOwnerHistory;
OwningUser : IfcPersonAndOrganization;
OwningApplication : IfcApplication;
State : OPTIONAL IfcStateEnum;
ChangeAction : OPTIONAL IfcChangeActionEnum;
LastModifiedDate : OPTIONAL IfcTimeStamp;
LastModifyingUser : OPTIONAL IfcPersonAndOrganization;
LastModifyingApplication : OPTIONAL IfcApplication;
CreationDate : IfcTimeStamp;
WHERE
CorrectChangeAction : (EXISTS(LastModifiedDate)) OR (NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR (NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE)));
END_ENTITY;

ENTITY IfcParameterizedProfileDef
ABSTRACT SUPERTYPE OF(ONEOF(IfcAsymmetricIShapeProfileDef, IfcCShapeProfileDef, IfcCircleProfileDef, IfcEllipseProfileDef, IfcIShapeProfileDef, IfcLShapeProfileDef, IfcRectangleProfileDef, IfcTShapeProfileDef, IfcTrapeziumProfileDef, IfcUShapeProfileDef, IfcZShapeProfileDef))
SUBTYPE OF IfcProfileDef;
Position : OPTIONAL IfcAxis2Placement2D;
END_ENTITY;

ENTITY IfcPath
SUBTYPE OF IfcTopologicalRepresentationItem;
EdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;
WHERE
IsContinuous : IfcPathHeadToTail(SELF);
END_ENTITY;

ENTITY IfcPcurve
SUBTYPE OF IfcCurve;
BasisSurface : IfcSurface;
ReferenceCurve : IfcCurve;
WHERE
DimIs2D : ReferenceCurve.Dim = 2;
END_ENTITY;

ENTITY IfcPerformanceHistory
SUBTYPE OF IfcControl;
LifeCyclePhase : IfcLabel;
PredefinedType : OPTIONAL IfcPerformanceHistoryTypeEnum;
END_ENTITY;

ENTITY IfcPermeableCoveringProperties
SUBTYPE OF IfcPreDefinedPropertySet;
OperationType : IfcPermeableCoveringOperationEnum;
PanelPosition : IfcWindowPanelPositionEnum;
FrameDepth : OPTIONAL IfcPositiveLengthMeasure;
FrameThickness : OPTIONAL IfcPositiveLengthMeasure;
ShapeAspectStyle : OPTIONAL IfcShapeAspect;
END_ENTITY;

ENTITY IfcPermit
SUBTYPE OF IfcControl;
PredefinedType : OPTIONAL IfcPermitTypeEnum;
Status : OPTIONAL IfcLabel;
LongDescription : OPTIONAL IfcText;
END_ENTITY;

ENTITY IfcPerson;
Identification : OPTIONAL IfcIdentifier;
FamilyName : OPTIONAL IfcLabel;
GivenName : OPTIONAL IfcLabel;
MiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;
PrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;
SuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;
Roles : OPTIONAL LIST [1:?] OF IfcActorRole;
Addresses : OPTIONAL LIST [1:?] OF IfcAddress;
INVERSE
EngagedIn : SET OF IfcPersonAndOrganization FOR ThePerson;
WHERE
IdentifiablePerson : EXISTS(Identification) OR EXISTS(FamilyName) OR EXISTS(GivenName);
ValidSetOfNames : NOT EXISTS(MiddleNames) OR EXISTS(FamilyName) OR EXISTS(GivenName);
END_ENTITY;

ENTITY IfcPersonAndOrganization;
ThePerson : IfcPerson;
TheOrganization : IfcOrganization;
Roles : OPTIONAL LIST [1:?] OF IfcActorRole;
END_ENTITY;

ENTITY IfcPhysicalComplexQuantity
SUBTYPE OF IfcPhysicalQuantity;
HasQuantities : SET [1:?] OF IfcPhysicalQuantity;
Discrimination : IfcLabel;
Quality : OPTIONAL IfcLabel;
Usage : OPTIONAL IfcLabel;
WHERE
NoSelfReference : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;
UniqueQuantityNames : IfcUniqueQuantityNames(HasQuantities);
END_ENTITY;

ENTITY IfcPhysicalQuantity
ABSTRACT SUPERTYPE OF(ONEOF(IfcPhysicalComplexQuantity, IfcPhysicalSimpleQuantity));
Name : IfcLabel;
Description : OPTIONAL IfcText;
INVERSE
HasExternalReferences : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
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 : OPTIONAL IfcPileTypeEnum;
ConstructionType : OPTIONAL IfcPileConstructionEnum;
WHERE
CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSTRUCTURALELEMENTSDOMAIN.IFCPILETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcPileType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcPileTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcPipeFitting
SUBTYPE OF IfcFlowFitting;
PredefinedType : OPTIONAL IfcPipeFittingTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCPIPEFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcPipeFittingType
SUBTYPE OF IfcFlowFittingType;
PredefinedType : IfcPipeFittingTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcPipeSegment
SUBTYPE OF IfcFlowSegment;
PredefinedType : OPTIONAL IfcPipeSegmentTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCHVACDOMAIN.IFCPIPESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcPipeSegmentType
SUBTYPE OF IfcFlowSegmentType;
PredefinedType : IfcPipeSegmentTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcPixelTexture
SUBTYPE OF IfcSurfaceTexture;
Width : IfcInteger;
Height : IfcInteger;
ColourComponents : IfcInteger;
Pixel : LIST [1:?] OF BINARY (32);
WHERE
MinPixelInS : Width >= 1;
MinPixelInT : Height >= 1;
NumberOfColours : {1 <= ColourComponents <= 4};
SizeOfPixelList : SIZEOF(Pixel) = (Width * Height);
PixelAsByteAndSameLength : SIZEOF(QUERY(temp<* Pixel | (BLENGTH(temp) MOD 8 = 0) AND (BLENGTH(temp) = BLENGTH(Pixel[1])) )) = SIZEOF(Pixel);
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(IfcPlanarBox)
SUBTYPE OF IfcGeometricRepresentationItem;
SizeInX : IfcLengthMeasure;
SizeInY : IfcLengthMeasure;
END_ENTITY;

ENTITY IfcPlane
SUBTYPE OF IfcElementarySurface;
END_ENTITY;

ENTITY IfcPlate
SUPERTYPE OF(IfcPlateStandardCase)
SUBTYPE OF IfcBuildingElement;
PredefinedType : OPTIONAL IfcPlateTypeEnum;
WHERE
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFCSHAREDBLDGELEMENTS.IFCPLATETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcPlateStandardCase
SUBTYPE OF IfcPlate;
WHERE
HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFCKERNEL.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFCPRODUCTEXTENSION.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFCMATERIALRESOURCE.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1;
END_ENTITY;

ENTITY IfcPlateType
SUBTYPE OF IfcBuildingElementType;
PredefinedType : IfcPlateTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcPoint
ABSTRACT SUPERTYPE OF(ONEOF(IfcCartesianPoint, 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
AllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;
END_ENTITY;

ENTITY IfcPolygonalBoundedHalfSpace
SUBTYPE OF IfcHalfSpaceSolid;
Position : IfcAxis2Placement3D;
PolygonalBoundary : IfcBoundedCurve;
WHERE
BoundaryDim : PolygonalBoundary.Dim = 2;
BoundaryType : SIZEOF(TYPEOF(PolygonalBoundary) * [ 'IFCGEOMETRYRESOURCE.IFCPOLYLINE', 'IFCGEOMETRYRESOURCE.IFCCOMPOSITECURVE'] ) = 1;
END_ENTITY;

ENTITY IfcPolyline
SUBTYPE OF IfcBoundedCurve;
Points : LIST [2:?] OF IfcCartesianPoint;
WHERE
SameDim : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;
END_ENTITY;

ENTITY IfcPort
ABSTRACT SUPERTYPE OF(IfcDistributionPort)
SUBTYPE OF IfcProduct;
INVERSE
ContainedIn : SET [0:1] OF IfcRelConnectsPortToElement FOR RelatingPort;
ConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;
ConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;
END_ENTITY;

ENTITY 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(IfcDraughtingPreDefinedColour)
SUBTYPE OF IfcPreDefinedItem;
END_ENTITY;

ENTITY IfcPreDefinedCurveFont
ABSTRACT SUPERTYPE OF(IfcDraughtingPreDefinedCurveFont)
SUBTYPE OF IfcPreDefinedItem;
END_ENTITY;

ENTITY IfcPreDefinedItem
ABSTRACT SUPERTYPE OF(ONEOF(IfcPreDefinedColour, IfcPreDefinedCurveFont, IfcPreDefinedTextFont))
SUBTYPE OF IfcPresentationItem;
Name : IfcLabel;
END_ENTITY;

ENTITY IfcPreDefinedProperties
ABSTRACT SUPERTYPE OF(ONEOF(IfcReinforcementBarProperties, IfcSectionProperties, IfcSectionReinforcementProperties))
SUBTYPE OF IfcPropertyAbstraction;
END_ENTITY;

ENTITY IfcPreDefinedPropertySet
ABSTRACT SUPERTYPE OF(ONEOF(IfcDoorLiningProperties, IfcDoorPanelProperties, IfcPermeableCoveringProperties, IfcReinforcementDefinitionProperties, IfcWindowLiningProperties, IfcWindowPanelProperties))
SUBTYPE OF IfcPropertySetDefinition;
END_ENTITY;

ENTITY IfcPreDefinedTextFont
ABSTRACT SUPERTYPE OF(IfcTextStyleFontModel)
SUBTYPE OF IfcPreDefinedItem;
END_ENTITY;

ENTITY IfcPresentationItem
ABSTRACT SUPERTYPE OF(ONEOF(IfcColourRgbList, IfcColourSpecification, IfcCurveStyleFont, IfcCurveStyleFontAndScaling, IfcCurveStyleFontPattern, IfcIndexedColourMap, IfcPreDefinedItem, IfcSurfaceStyleLighting, IfcSurfaceStyleRefraction, IfcSurfaceStyleShading, IfcSurfaceStyleWithTextures, IfcSurfaceTexture, IfcTextStyleForDefinedFont, IfcTextStyleTextModel, IfcTextureCoordinate, IfcTextureVertex, IfcTextureVertexList));
END_ENTITY;

ENTITY IfcPresentationLayerAssignment
SUPERTYPE OF(IfcPresentationLayerWithStyle);
Name : IfcLabel;
Description : OPTIONAL IfcText;
AssignedItems : SET [1:?] OF IfcLayeredItem;
Identifier : OPTIONAL IfcIdentifier;
WHERE
ApplicableItems : SIZEOF(QUERY(temp <* AssignedItems | ( SIZEOF(TYPEOF(temp) * [ 'IFCREPRESENTATIONRESOURCE.IFCSHAPEREPRESENTATION', 'IFCGEOMETRYRESOURCE.IFCGEOMETRICREPRESENTATIONITEM', 'IFCGEOMETRYRESOURCE.IFCMAPPEDITEM']) = 1) )) = SIZEOF(AssignedItems);
END_ENTITY;

ENTITY IfcPresentationLayerWithStyle
SUBTYPE OF IfcPresentationLayerAssignment;
LayerOn : LOGICAL;
LayerFrozen : LOGICAL;
LayerBlocked : LOGICAL;
LayerStyles : SET OF IfcPresentationStyle;
WHERE
ApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | ( SIZEOF(TYPEOF(temp) * [ 'IFCGEOMETRYRESOURCE.IFCGEOMETRICREPRESENTATIONITEM', 'IFCGEOMETRYRESOURCE.IFCMAPPEDITEM']) = 1) )) = SIZEOF(AssignedItems);
END_ENTITY;

ENTITY IfcPresentationStyle
ABSTRACT SUPERTYPE OF(ONEOF(IfcCurveStyle, IfcFillAreaStyle, IfcSurfaceStyle, IfcTextStyle));
Name : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcPresentationStyleAssignment;
Styles : SET [1:?] OF IfcPresentationStyleSelect;
END_ENTITY;

ENTITY IfcProcedure
SUBTYPE OF IfcProcess;
PredefinedType : OPTIONAL IfcProcedureTypeEnum;
WHERE
HasName : EXISTS(SELF\IfcRoot.Name);
CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcProcedureType
SUBTYPE OF IfcTypeProcess;
PredefinedType : IfcProcedureTypeEnum;
WHERE
CorrectPredefinedType : (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType));
END_ENTITY;

ENTITY IfcProcess
ABSTRACT SUPERTYPE OF(ONEOF(IfcEvent, IfcProcedure, IfcTask))
SUBTYPE OF IfcObject;
Identification : OPTIONAL IfcIdentifier;
LongDescription : OPTIONAL IfcText;
INVERSE
IsPredecessorTo : SET OF IfcRelSequence FOR RelatingProcess;
IsSuccessorFrom : SET OF IfcRelSequence FOR RelatedProcess;
OperatesOn : SET OF IfcRelAssignsToProcess FOR RelatingProcess;
END_ENTITY;

ENTITY IfcProduct
ABSTRACT SUPERTYPE OF(ONEOF(IfcAnnotation, IfcElement, IfcGrid, IfcPort, IfcProxy, IfcSpatialElement, IfcStructuralActivity, IfcStructuralItem))
SUBTYPE OF IfcObject;
ObjectPlacement : OPTIONAL IfcObjectPlacement;
Representation : OPTIONAL IfcProductRepresentation;
INVERSE
ReferencedBy : SET OF IfcRelAssignsToProduct FOR RelatingProduct;
WHERE
PlacementForShapeRepresentation : (EXISTS(Representation) AND EXISTS(ObjectPlacement)) OR (EXISTS(Representation) AND (SIZEOF(QUERY(temp <* Representation.Representations | 'IFCREPRESENTATIONRESOURCE.IFCSHAPEREPRESENTATION' IN TYPEOF(temp))) = 0)) OR (NOT(EXISTS(Representation)));
END_ENTITY;

ENTITY IfcProductDefinitionShape
SUBTYPE OF IfcProductRepresentation;
INVERSE
ShapeOfProduct : SET [1:?] OF IfcProduct FOR Representation;
HasShapeAspects : SET OF IfcShapeAspect FOR PartOfProductDefinitionShape;
WHERE
OnlyShapeModel : SIZEOF(QUERY(temp <* Representations | (NOT('IFCREPRESENTATIONRESOURCE.IFCSHAPEMODEL' IN TYPEOF(temp))) )) = 0;
END_ENTITY;

ENTITY IfcProductRepresentation
ABSTRACT SUPERTYPE OF(ONEOF(IfcMaterialDefinitionRepresentation, IfcProductDefinitionShape));
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
Representations : LIST [1:?] OF IfcRepresentation;
END_ENTITY;

ENTITY IfcProfileDef
SUPERTYPE OF(ONEOF(IfcArbitraryClosedProfileDef, IfcArbitraryOpenProfileDef, IfcCompositeProfileDef, IfcDerivedProfileDef, IfcParameterizedProfileDef));
ProfileType : IfcProfileTypeEnum;
ProfileName : OPTIONAL IfcLabel;
INVERSE
HasExternalReference : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
HasProperties : SET OF IfcProfileProperties FOR ProfileDefinition;
END_ENTITY;

ENTITY IfcProfileProperties
SUBTYPE OF IfcExtendedProperties;
ProfileDefinition : IfcProfileDef;
END_ENTITY;

ENTITY IfcProject
SUBTYPE OF IfcContext;
WHERE
HasName : EXISTS(SELF\IfcRoot.Name);
CorrectContext : NOT(EXISTS(SELF\IfcContext.RepresentationContexts)) OR (SIZEOF(QUERY(Temp <* SELF\IfcContext.RepresentationContexts | 'IFCREPRESENTATIONRESOURCE.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp) )) = 0);
NoDecomposition : SIZEOF(SELF\IfcObjectDefinition.Decomposes) = 0;
HasOwnerHistory : EXISTS(SELF\IfcRoot.OwnerHistory);
END_ENTITY;

ENTITY IfcProjectLibrary
SUBTYPE OF IfcContext;
END_ENTITY;

ENTITY IfcProjectOrder
SUBTYPE OF IfcControl;
PredefinedType : OPTIONAL IfcProjectOrderTypeEnum;
Status : OPTIONAL IfcLabel;
LongDescription : OPTIONAL IfcText;
END_ENTITY;

ENTITY IfcProjectedCRS
SUBTYPE OF IfcCoordinateReferenceSystem;
MapProjection : OPTIONAL IfcIdentifier;
MapZone : OPTIONAL IfcIdentifier;
MapUnit : OPTIONAL IfcNamedUnit;
WHERE
WR11 : NOT(EXISTS(MapUnit)) OR (MapUnit.UnitType = IfcUnitEnum.LENGTHUNIT);
END_ENTITY;

ENTITY IfcProjectionElement
SUBTYPE OF IfcFeatureElementAddition;
PredefinedType : OPTIONAL IfcProjectionElementTypeEnum;
END_ENTITY;

ENTITY IfcProperty
ABSTRACT SUPERTYPE OF(ONEOF(IfcComplexProperty, IfcSimpleProperty))
SUBTYPE OF IfcPropertyAbstraction;
Name : IfcIdentifier;
Description : OPTIONAL IfcText;
INVERSE
PartOfPset : SET OF IfcPropertySet FOR HasProperties;
PropertyForDependance : SET OF IfcPropertyDependencyRelationship FOR DependingProperty;
PropertyDependsOn : SET OF IfcPropertyDependencyRelationship FOR DependantProperty;
PartOfComplex : SET OF IfcComplexProperty FOR HasProperties;
END_ENTITY;

ENTITY IfcPropertyAbstraction
ABSTRACT SUPERTYPE OF(ONEOF(IfcExtendedProperties, IfcPreDefinedProperties, IfcProperty, IfcPropertyEnumeration));
INVERSE
HasExternalReferences : SET OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
END_ENTITY;

ENTITY IfcPropertyBoundedValue
SUBTYPE OF IfcSimpleProperty;
UpperBoundValue : OPTIONAL IfcValue;
LowerBoundValue : OPTIONAL IfcValue;
Unit : OPTIONAL IfcUnit;
SetPointValue : OPTIONAL IfcValue;
WHERE
SameUnitUpperLower : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));
SameUnitUpperSet : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(SetPointValue)) OR (TYPEOF(UpperBoundValue) = TYPEOF(SetPointValue));
SameUnitLowerSet : NOT(EXISTS(LowerBoundValue)) OR NOT(EXISTS(SetPointValue)) OR (TYPEOF(LowerBoundValue) = TYPEOF(SetPointValue));
END_ENTITY;

ENTITY IfcPropertyDefinition
ABSTRACT SUPERTYPE OF(ONEOF(IfcPropertySetDefinition, IfcPropertyTemplateDefinition))
SUBTYPE OF IfcRoot;
INVERSE
HasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;
HasAssociations : SET OF IfcRelAssociates FOR RelatedObjects;
END_ENTITY;

ENTITY IfcPropertyDependencyRelationship
SUBTYPE OF IfcResourceLevelRelationship;
DependingProperty : IfcProperty;
DependantProperty : IfcProperty;
Expression : OPTIONAL IfcText;
WHERE
NoSelfReference : DependingProperty :<>: DependantProperty;
END_ENTITY;

ENTITY IfcPropertyEnumeratedValue
SUBTYPE OF IfcSimpleProperty;
EnumerationValues : OPTIONAL LIST [1:?] OF IfcValue;
EnumerationReference : OPTIONAL IfcPropertyEnumeration;
WHERE
WR21 : NOT(EXISTS(EnumerationReference)) OR NOT(EXISTS(EnumerationValues)) OR (SIZEOF(QUERY(temp <* EnumerationValues | temp IN EnumerationReference.EnumerationValues)) = SIZEOF(EnumerationValues));
END_ENTITY;

ENTITY IfcPropertyEnumeration
SUBTYPE OF IfcPropertyAbstraction;
Name : IfcLabel;
EnumerationValues : LIST [1:?] OF UNIQUE IfcValue;
Unit : OPTIONAL IfcUnit;
UNIQUE
UR1 : Name;
WHERE
WR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues | NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp)) )) = 0;
END_ENTITY;

ENTITY IfcPropertyListValue
SUBTYPE OF IfcSimpleProperty;
ListValues : OPTIONAL LIST [1:?] OF IfcValue;
Unit : OPTIONAL IfcUnit;
WHERE
WR31 : SIZEOF(QUERY(temp <* SELF.ListValues | NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp)) )) = 0;
END_ENTITY;

ENTITY IfcPropertyReferenceValue
SUBTYPE OF IfcSimpleProperty;
UsageName : OPTIONAL IfcText;
PropertyReference : OPTIONAL IfcObjectReferenceSelect;
END_ENTITY;

ENTITY IfcPropertySet
SUBTYPE OF IfcPropertySetDefinition;
HasProperties : SET [1:?] OF IfcProperty;
WHERE
ExistsName : EXISTS(SELF\IfcRoot.Name);
UniquePropertyNames : IfcUniquePropertyName(HasProperties);
END_ENTITY;

ENTITY IfcPropertySetDefinition
ABSTRACT SUPERTYPE OF(ONEOF(IfcPreDefinedPropertySet, IfcPropertySet, IfcQuantitySet))
SUBTYPE OF IfcPropertyDefinition;
INVERSE
DefinesType : SET OF IfcTypeObject FOR HasPropertySets;
IsDefinedBy : SET OF IfcRelDefinesByTemplate FOR RelatedPropertySets;
DefinesOccurrence : SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;
END_ENTITY;

ENTITY IfcPropertySetTemplate
SUBTYPE OF IfcPropertyTemplateDefinition;
TemplateType : OPTIONAL IfcPropertySetTemplateTypeEnum;
ApplicableEntity : OPTIONAL IfcIdentifier;
HasPropertyTemplates : SET [1:?] OF IfcPropertyTemplate;
INVERSE