ifc4x3 附录A

计算机可解释列表

本附件列出了第5、6、7和8条的所有定义,没有注释或其他解释性文本。这些列表以可由计算机解析的计算机可解释形式提供。

 

此版本的官方架构出版物位于以下URL:

 

 

 

IFC EXPRESS long form schema

SCHEMA IFC4X3;

TYPE IfcAbsorbedDoseMeasure = REAL;
END_TYPE;

TYPE IfcAccelerationMeasure = REAL;
END_TYPE;

TYPE IfcAmountOfSubstanceMeasure = REAL;
END_TYPE;

TYPE IfcAngularVelocityMeasure = REAL;
END_TYPE;

TYPE IfcArcIndex = LIST [3:3] OF IfcPositiveInteger;
END_TYPE;

TYPE IfcAreaDensityMeasure = REAL;
END_TYPE;

TYPE IfcAreaMeasure = REAL;
END_TYPE;

TYPE IfcBinary = BINARY;
END_TYPE;

TYPE IfcBoolean = BOOLEAN;
END_TYPE;

TYPE IfcBoxAlignment = IfcLabel;
 WHERE
	 WR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right'];
END_TYPE;

TYPE IfcCardinalPointReference = INTEGER;
 WHERE
	 GreaterThanZero : SELF > 0;
END_TYPE;

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

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

TYPE IfcContextDependentMeasure = REAL;
END_TYPE;

TYPE IfcCountMeasure = INTEGER;
END_TYPE;

TYPE IfcCurvatureMeasure = REAL;
END_TYPE;

TYPE IfcDate = STRING;
END_TYPE;

TYPE IfcDateTime = STRING;
END_TYPE;

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

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

TYPE IfcDescriptiveMeasure = STRING;
END_TYPE;

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

TYPE IfcDoseEquivalentMeasure = REAL;
END_TYPE;

TYPE IfcDuration = STRING;
END_TYPE;

TYPE IfcDynamicViscosityMeasure = REAL;
END_TYPE;

TYPE IfcElectricCapacitanceMeasure = REAL;
END_TYPE;

TYPE IfcElectricChargeMeasure = REAL;
END_TYPE;

TYPE IfcElectricConductanceMeasure = REAL;
END_TYPE;

TYPE IfcElectricCurrentMeasure = REAL;
END_TYPE;

TYPE IfcElectricResistanceMeasure = REAL;
END_TYPE;

TYPE IfcElectricVoltageMeasure = REAL;
END_TYPE;

TYPE IfcEnergyMeasure = REAL;
END_TYPE;

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

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

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

TYPE IfcForceMeasure = REAL;
END_TYPE;

TYPE IfcFrequencyMeasure = REAL;
END_TYPE;

TYPE IfcGloballyUniqueId = STRING(22) FIXED;
END_TYPE;

TYPE IfcHeatFluxDensityMeasure = REAL;
END_TYPE;

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

TYPE IfcIdentifier = STRING(255);
END_TYPE;

TYPE IfcIlluminanceMeasure = REAL;
END_TYPE;

TYPE IfcInductanceMeasure = REAL;
END_TYPE;

TYPE IfcInteger = INTEGER;
END_TYPE;

TYPE IfcIntegerCountRateMeasure = INTEGER;
END_TYPE;

TYPE IfcIonConcentrationMeasure = REAL;
END_TYPE;

TYPE IfcIsothermalMoistureCapacityMeasure = REAL;
END_TYPE;

TYPE IfcKinematicViscosityMeasure = REAL;
END_TYPE;

TYPE IfcLabel = STRING(255);
END_TYPE;

TYPE IfcLanguageId = IfcIdentifier;
END_TYPE;

TYPE IfcLengthMeasure = REAL;
END_TYPE;

TYPE IfcLineIndex = LIST [2:?] OF IfcPositiveInteger;
END_TYPE;

TYPE IfcLinearForceMeasure = REAL;
END_TYPE;

TYPE IfcLinearMomentMeasure = REAL;
END_TYPE;

TYPE IfcLinearStiffnessMeasure = REAL;
END_TYPE;

TYPE IfcLinearVelocityMeasure = REAL;
END_TYPE;

TYPE IfcLogical = LOGICAL;
END_TYPE;

TYPE IfcLuminousFluxMeasure = REAL;
END_TYPE;

TYPE IfcLuminousIntensityDistributionMeasure = REAL;
END_TYPE;

TYPE IfcLuminousIntensityMeasure = REAL;
END_TYPE;

TYPE IfcMagneticFluxDensityMeasure = REAL;
END_TYPE;

TYPE IfcMagneticFluxMeasure = REAL;
END_TYPE;

TYPE IfcMassDensityMeasure = REAL;
END_TYPE;

TYPE IfcMassFlowRateMeasure = REAL;
END_TYPE;

TYPE IfcMassMeasure = REAL;
END_TYPE;

TYPE IfcMassPerLengthMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfElasticityMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;
END_TYPE;

TYPE IfcModulusOfSubgradeReactionMeasure = REAL;
END_TYPE;

TYPE IfcMoistureDiffusivityMeasure = REAL;
END_TYPE;

TYPE IfcMolecularWeightMeasure = REAL;
END_TYPE;

TYPE IfcMomentOfInertiaMeasure = REAL;
END_TYPE;

TYPE IfcMonetaryMeasure = REAL;
END_TYPE;

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

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

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

TYPE IfcNumericMeasure = NUMBER;
END_TYPE;

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

TYPE IfcParameterValue = REAL;
END_TYPE;

TYPE IfcPlanarForceMeasure = REAL;
END_TYPE;

TYPE IfcPlaneAngleMeasure = REAL;
END_TYPE;

TYPE IfcPositiveInteger = IfcInteger;
 WHERE
	 WR1 : SELF > 0;
END_TYPE;

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

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

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

TYPE IfcPowerMeasure = REAL;
END_TYPE;

TYPE IfcPresentableText = STRING;
END_TYPE;

TYPE IfcPressureMeasure = REAL;
END_TYPE;

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

TYPE IfcRadioActivityMeasure = REAL;
END_TYPE;

TYPE IfcRatioMeasure = REAL;
END_TYPE;

TYPE IfcReal = REAL;
END_TYPE;

TYPE IfcRotationalFrequencyMeasure = REAL;
END_TYPE;

TYPE IfcRotationalMassMeasure = REAL;
END_TYPE;

TYPE IfcRotationalStiffnessMeasure = REAL;
END_TYPE;

TYPE IfcSectionModulusMeasure = REAL;
END_TYPE;

TYPE IfcSectionalAreaIntegralMeasure = REAL;
END_TYPE;

TYPE IfcShearModulusMeasure = REAL;
END_TYPE;

TYPE IfcSolidAngleMeasure = REAL;
END_TYPE;

TYPE IfcSoundPowerLevelMeasure = REAL;
END_TYPE;

TYPE IfcSoundPowerMeasure = REAL;
END_TYPE;

TYPE IfcSoundPressureLevelMeasure = REAL;
END_TYPE;

TYPE IfcSoundPressureMeasure = REAL;
END_TYPE;

TYPE IfcSpecificHeatCapacityMeasure = REAL;
END_TYPE;

TYPE IfcSpecularExponent = REAL;
END_TYPE;

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

TYPE IfcTemperatureGradientMeasure = REAL;
END_TYPE;

TYPE IfcTemperatureRateOfChangeMeasure = REAL;
END_TYPE;

TYPE IfcText = STRING;
END_TYPE;

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

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

TYPE IfcTextFontName = STRING;
END_TYPE;

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

TYPE IfcThermalAdmittanceMeasure = REAL;
END_TYPE;

TYPE IfcThermalConductivityMeasure = REAL;
END_TYPE;

TYPE IfcThermalExpansionCoefficientMeasure = REAL;
END_TYPE;

TYPE IfcThermalResistanceMeasure = REAL;
END_TYPE;

TYPE IfcThermalTransmittanceMeasure = REAL;
END_TYPE;

TYPE IfcThermodynamicTemperatureMeasure = REAL;
END_TYPE;

TYPE IfcTime = STRING;
END_TYPE;

TYPE IfcTimeMeasure = REAL;
END_TYPE;

TYPE IfcTimeStamp = INTEGER;
END_TYPE;

TYPE IfcTorqueMeasure = REAL;
END_TYPE;

TYPE IfcURIReference = STRING;
END_TYPE;

TYPE IfcVaporPermeabilityMeasure = REAL;
END_TYPE;

TYPE IfcVolumeMeasure = REAL;
END_TYPE;

TYPE IfcVolumetricFlowRateMeasure = REAL;
END_TYPE;

TYPE IfcWarpingConstantMeasure = REAL;
END_TYPE;

TYPE IfcWarpingMomentMeasure = REAL;
END_TYPE;

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

TYPE IfcActionSourceTypeEnum = ENUMERATION OF
	(BRAKES
	,BUOYANCY
	,COMPLETION_G1
	,CREEP
	,CURRENT
	,DEAD_LOAD_G
	,EARTHQUAKE_E
	,ERECTION
	,FIRE
	,ICE
	,IMPACT
	,IMPULSE
	,LACK_OF_FIT
	,LIVE_LOAD_Q
	,PRESTRESSING_P
	,PROPPING
	,RAIN
	,SETTLEMENT_U
	,SHRINKAGE
	,SNOW_S
	,SYSTEM_IMPERFECTION
	,TEMPERATURE_T
	,TRANSPORT
	,WAVE
	,WIND_W
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcActionTypeEnum = ENUMERATION OF
	(EXTRAORDINARY_A
	,PERMANENT_G
	,VARIABLE_Q
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcActuatorTypeEnum = ENUMERATION OF
	(ELECTRICACTUATOR
	,HANDOPERATEDACTUATOR
	,HYDRAULICACTUATOR
	,PNEUMATICACTUATOR
	,THERMOSTATICACTUATOR
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcAddressTypeEnum = ENUMERATION OF
	(DISTRIBUTIONPOINT
	,HOME
	,OFFICE
	,SITE
	,USERDEFINED);
END_TYPE;

TYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF
	(CONSTANTFLOW
	,VARIABLEFLOWPRESSUREDEPENDANT
	,VARIABLEFLOWPRESSUREINDEPENDANT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF
	(FIXEDPLATECOUNTERFLOWEXCHANGER
	,FIXEDPLATECROSSFLOWEXCHANGER
	,FIXEDPLATEPARALLELFLOWEXCHANGER
	,HEATPIPE
	,ROTARYWHEEL
	,RUNAROUNDCOILLOOP
	,THERMOSIPHONCOILTYPEHEATEXCHANGERS
	,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS
	,TWINTOWERENTHALPYRECOVERYLOOPS
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcAlarmTypeEnum = ENUMERATION OF
	(BELL
	,BREAKGLASSBUTTON
	,LIGHT
	,MANUALPULLBOX
	,RAILWAYCROCODILE
	,RAILWAYDETONATOR
	,SIREN
	,WHISTLE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcAlignmentCantSegmentTypeEnum = ENUMERATION OF
	(BLOSSCURVE
	,CONSTANTCANT
	,COSINECURVE
	,HELMERTCURVE
	,LINEARTRANSITION
	,SINECURVE
	,VIENNESEBEND);
END_TYPE;

TYPE IfcAlignmentHorizontalSegmentTypeEnum = ENUMERATION OF
	(BLOSSCURVE
	,CIRCULARARC
	,CLOTHOID
	,COSINECURVE
	,CUBIC
	,HELMERTCURVE
	,LINE
	,SINECURVE
	,VIENNESEBEND);
END_TYPE;

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

TYPE IfcAlignmentVerticalSegmentTypeEnum = ENUMERATION OF
	(CIRCULARARC
	,CLOTHOID
	,CONSTANTGRADIENT
	,PARABOLICARC);
END_TYPE;

TYPE IfcAnalysisModelTypeEnum = ENUMERATION OF
	(IN_PLANE_LOADING_2D
	,LOADING_3D
	,OUT_PLANE_LOADING_2D
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF
	(FIRST_ORDER_THEORY
	,FULL_NONLINEAR_THEORY
	,SECOND_ORDER_THEORY
	,THIRD_ORDER_THEORY
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcAnnotationTypeEnum = ENUMERATION OF
	(ASBUILTAREA
	,ASBUILTLINE
	,ASBUILTPOINT
	,ASSUMEDAREA
	,ASSUMEDLINE
	,ASSUMEDPOINT
	,NON_PHYSICAL_SIGNAL
	,SUPERELEVATIONEVENT
	,WIDTHEVENT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcArithmeticOperatorEnum = ENUMERATION OF
	(ADD
	,DIVIDE
	,MULTIPLY
	,SUBTRACT);
END_TYPE;

TYPE IfcAssemblyPlaceEnum = ENUMERATION OF
	(FACTORY
	,SITE
	,NOTDEFINED);
END_TYPE;

TYPE IfcAudioVisualApplianceTypeEnum = ENUMERATION OF
	(AMPLIFIER
	,CAMERA
	,COMMUNICATIONTERMINAL
	,DISPLAY
	,MICROPHONE
	,PLAYER
	,PROJECTOR
	,RECEIVER
	,RECORDINGEQUIPMENT
	,SPEAKER
	,SWITCHER
	,TELEPHONE
	,TUNER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcBeamTypeEnum = ENUMERATION OF
	(BEAM
	,CORNICE
	,DIAPHRAGM
	,EDGEBEAM
	,GIRDER_SEGMENT
	,HATSTONE
	,HOLLOWCORE
	,JOIST
	,LINTEL
	,PIERCAP
	,SPANDREL
	,T_BEAM
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcBearingTypeDisplacementEnum = ENUMERATION OF
	(FIXED_MOVEMENT
	,FREE_MOVEMENT
	,GUIDED_LONGITUDINAL
	,GUIDED_TRANSVERSAL
	,NOTDEFINED);
END_TYPE;

TYPE IfcBearingTypeEnum = ENUMERATION OF
	(CYLINDRICAL
	,DISK
	,ELASTOMERIC
	,GUIDE
	,POT
	,ROCKER
	,ROLLER
	,SPHERICAL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcBridgePartTypeEnum = ENUMERATION OF
	(ABUTMENT
	,DECK
	,DECK_SEGMENT
	,FOUNDATION
	,PIER
	,PIER_SEGMENT
	,PYLON
	,SUBSTRUCTURE
	,SUPERSTRUCTURE
	,SURFACESTRUCTURE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcBridgeTypeEnum = ENUMERATION OF
	(ARCHED
	,CABLE_STAYED
	,CANTILEVER
	,CULVERT
	,FRAMEWORK
	,GIRDER
	,SUSPENSION
	,TRUSS
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcBuiltSystemTypeEnum = ENUMERATION OF
	(EROSIONPREVENTION
	,FENESTRATION
	,FOUNDATION
	,LOADBEARING
	,MOORING
	,OUTERSHELL
	,PRESTRESSING
	,RAILWAYLINE
	,RAILWAYTRACK
	,REINFORCING
	,SHADING
	,TRACKCIRCUIT
	,TRANSPORT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF
	(BEND
	,CONNECTOR
	,CROSS
	,JUNCTION
	,TEE
	,TRANSITION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF
	(CABLEBRACKET
	,CABLELADDERSEGMENT
	,CABLETRAYSEGMENT
	,CABLETRUNKINGSEGMENT
	,CATENARYWIRE
	,CONDUITSEGMENT
	,DROPPER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCableFittingTypeEnum = ENUMERATION OF
	(CONNECTOR
	,ENTRY
	,EXIT
	,FANOUT
	,JUNCTION
	,TRANSITION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCableSegmentTypeEnum = ENUMERATION OF
	(BUSBARSEGMENT
	,CABLESEGMENT
	,CONDUCTORSEGMENT
	,CONTACTWIRESEGMENT
	,CORESEGMENT
	,FIBERSEGMENT
	,FIBERTUBE
	,OPTICALCABLESEGMENT
	,STITCHWIRE
	,WIREPAIRSEGMENT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCaissonFoundationTypeEnum = ENUMERATION OF
	(CAISSON
	,WELL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

TYPE IfcCommunicationsApplianceTypeEnum = ENUMERATION OF
	(ANTENNA
	,AUTOMATON
	,COMPUTER
	,FAX
	,GATEWAY
	,INTELLIGENTPERIPHERAL
	,IPNETWORKEQUIPMENT
	,LINESIDEELECTRONICUNIT
	,MODEM
	,NETWORKAPPLIANCE
	,NETWORKBRIDGE
	,NETWORKHUB
	,OPTICALLINETERMINAL
	,OPTICALNETWORKUNIT
	,PRINTER
	,RADIOBLOCKCENTER
	,REPEATER
	,ROUTER
	,SCANNER
	,TELECOMMAND
	,TELEPHONYEXCHANGE
	,TRANSITIONCOMPONENT
	,TRANSPONDER
	,TRANSPORTEQUIPMENT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcComplexPropertyTemplateTypeEnum = ENUMERATION OF
	(P_COMPLEX
	,Q_COMPLEX);
END_TYPE;

TYPE IfcCompressorTypeEnum = ENUMERATION OF
	(BOOSTER
	,DYNAMIC
	,HERMETIC
	,OPENTYPE
	,RECIPROCATING
	,ROLLINGPISTON
	,ROTARY
	,ROTARYVANE
	,SCROLL
	,SEMIHERMETIC
	,SINGLESCREW
	,SINGLESTAGE
	,TROCHOIDAL
	,TWINSCREW
	,WELDEDSHELLHERMETIC
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCondenserTypeEnum = ENUMERATION OF
	(AIRCOOLED
	,EVAPORATIVECOOLED
	,WATERCOOLED
	,WATERCOOLEDBRAZEDPLATE
	,WATERCOOLEDSHELLCOIL
	,WATERCOOLEDSHELLTUBE
	,WATERCOOLEDTUBEINTUBE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcConnectionTypeEnum = ENUMERATION OF
	(ATEND
	,ATPATH
	,ATSTART
	,NOTDEFINED);
END_TYPE;

TYPE IfcConstraintEnum = ENUMERATION OF
	(ADVISORY
	,HARD
	,SOFT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF
	(DEMOLISHING
	,EARTHMOVING
	,ERECTING
	,HEATING
	,LIGHTING
	,PAVING
	,PUMPING
	,TRANSPORTING
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcControllerTypeEnum = ENUMERATION OF
	(FLOATING
	,MULTIPOSITION
	,PROGRAMMABLE
	,PROPORTIONAL
	,TWOPOSITION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcConveyorSegmentTypeEnum = ENUMERATION OF
	(BELTCONVEYOR
	,BUCKETCONVEYOR
	,CHUTECONVEYOR
	,SCREWCONVEYOR
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCooledBeamTypeEnum = ENUMERATION OF
	(ACTIVE
	,PASSIVE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCoolingTowerTypeEnum = ENUMERATION OF
	(MECHANICALFORCEDDRAFT
	,MECHANICALINDUCEDDRAFT
	,NATURALDRAFT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcCostScheduleTypeEnum = ENUMERATION OF
	(BUDGET
	,COSTPLAN
	,ESTIMATE
	,PRICEDBILLOFQUANTITIES
	,SCHEDULEOFRATES
	,TENDER
	,UNPRICEDBILLOFQUANTITIES
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCourseTypeEnum = ENUMERATION OF
	(ARMOUR
	,BALLASTBED
	,CORE
	,FILTER
	,PAVEMENT
	,PROTECTION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcCoveringTypeEnum = ENUMERATION OF
	(CEILING
	,CLADDING
	,COPING
	,FLOORING
	,INSULATION
	,MEMBRANE
	,MOLDING
	,ROOFING
	,SKIRTINGBOARD
	,SLEEVING
	,TOPPING
	,WRAPPING
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

TYPE IfcDerivedUnitEnum = ENUMERATION OF
	(ACCELERATIONUNIT
	,ANGULARVELOCITYUNIT
	,AREADENSITYUNIT
	,COMPOUNDPLANEANGLEUNIT
	,CURVATUREUNIT
	,DYNAMICVISCOSITYUNIT
	,HEATFLUXDENSITYUNIT
	,HEATINGVALUEUNIT
	,INTEGERCOUNTRATEUNIT
	,IONCONCENTRATIONUNIT
	,ISOTHERMALMOISTURECAPACITYUNIT
	,KINEMATICVISCOSITYUNIT
	,LINEARFORCEUNIT
	,LINEARMOMENTUNIT
	,LINEARSTIFFNESSUNIT
	,LINEARVELOCITYUNIT
	,LUMINOUSINTENSITYDISTRIBUTIONUNIT
	,MASSDENSITYUNIT
	,MASSFLOWRATEUNIT
	,MASSPERLENGTHUNIT
	,MODULUSOFELASTICITYUNIT
	,MODULUSOFLINEARSUBGRADEREACTIONUNIT
	,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT
	,MODULUSOFSUBGRADEREACTIONUNIT
	,MOISTUREDIFFUSIVITYUNIT
	,MOLECULARWEIGHTUNIT
	,MOMENTOFINERTIAUNIT
	,PHUNIT
	,PLANARFORCEUNIT
	,ROTATIONALFREQUENCYUNIT
	,ROTATIONALMASSUNIT
	,ROTATIONALSTIFFNESSUNIT
	,SECTIONAREAINTEGRALUNIT
	,SECTIONMODULUSUNIT
	,SHEARMODULUSUNIT
	,SOUNDPOWERLEVELUNIT
	,SOUNDPOWERUNIT
	,SOUNDPRESSURELEVELUNIT
	,SOUNDPRESSUREUNIT
	,SPECIFICHEATCAPACITYUNIT
	,TEMPERATUREGRADIENTUNIT
	,TEMPERATURERATEOFCHANGEUNIT
	,THERMALADMITTANCEUNIT
	,THERMALCONDUCTANCEUNIT
	,THERMALEXPANSIONCOEFFICIENTUNIT
	,THERMALRESISTANCEUNIT
	,THERMALTRANSMITTANCEUNIT
	,TORQUEUNIT
	,VAPORPERMEABILITYUNIT
	,VOLUMETRICFLOWRATEUNIT
	,WARPINGCONSTANTUNIT
	,WARPINGMOMENTUNIT
	,USERDEFINED);
END_TYPE;

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

TYPE IfcDiscreteAccessoryTypeEnum = ENUMERATION OF
	(ANCHORPLATE
	,BIRDPROTECTION
	,BRACKET
	,CABLEARRANGER
	,ELASTIC_CUSHION
	,EXPANSION_JOINT_DEVICE
	,FILLER
	,FLASHING
	,INSULATOR
	,LOCK
	,PANEL_STRENGTHENING
	,POINTMACHINEMOUNTINGDEVICE
	,POINT_MACHINE_LOCKING_DEVICE
	,RAILBRACE
	,RAILPAD
	,RAIL_LUBRICATION
	,RAIL_MECHANICAL_EQUIPMENT
	,SHOE
	,SLIDINGCHAIR
	,SOUNDABSORPTION
	,TENSIONINGEQUIPMENT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcDistributionBoardTypeEnum = ENUMERATION OF
	(CONSUMERUNIT
	,DISPATCHINGBOARD
	,DISTRIBUTIONBOARD
	,DISTRIBUTIONFRAME
	,MOTORCONTROLCENTRE
	,SWITCHBOARD
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcDistributionSystemEnum = ENUMERATION OF
	(AIRCONDITIONING
	,AUDIOVISUAL
	,CATENARY_SYSTEM
	,CHEMICAL
	,CHILLEDWATER
	,COMMUNICATION
	,COMPRESSEDAIR
	,CONDENSERWATER
	,CONTROL
	,CONVEYING
	,DATA
	,DISPOSAL
	,DOMESTICCOLDWATER
	,DOMESTICHOTWATER
	,DRAINAGE
	,EARTHING
	,ELECTRICAL
	,ELECTROACOUSTIC
	,EXHAUST
	,FIREPROTECTION
	,FIXEDTRANSMISSIONNETWORK
	,FUEL
	,GAS
	,HAZARDOUS
	,HEATING
	,LIGHTING
	,LIGHTNINGPROTECTION
	,MOBILENETWORK
	,MONITORINGSYSTEM
	,MUNICIPALSOLIDWASTE
	,OIL
	,OPERATIONAL
	,OPERATIONALTELEPHONYSYSTEM
	,OVERHEAD_CONTACTLINE_SYSTEM
	,POWERGENERATION
	,RAINWATER
	,REFRIGERATION
	,RETURN_CIRCUIT
	,SECURITY
	,SEWAGE
	,SIGNAL
	,STORMWATER
	,TELEPHONE
	,TV
	,VACUUM
	,VENT
	,VENTILATION
	,WASTEWATER
	,WATERSUPPLY
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcDocumentConfidentialityEnum = ENUMERATION OF
	(CONFIDENTIAL
	,PERSONAL
	,PUBLIC
	,RESTRICTED
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcDocumentStatusEnum = ENUMERATION OF
	(DRAFT
	,FINAL
	,FINALDRAFT
	,REVISION
	,NOTDEFINED);
END_TYPE;

TYPE IfcDoorPanelOperationEnum = ENUMERATION OF
	(DOUBLE_ACTING
	,FIXEDPANEL
	,FOLDING
	,REVOLVING
	,ROLLINGUP
	,SLIDING
	,SWINGING
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcDoorPanelPositionEnum = ENUMERATION OF
	(LEFT
	,MIDDLE
	,RIGHT
	,NOTDEFINED);
END_TYPE;

TYPE IfcDoorStyleConstructionEnum = ENUMERATION OF
	(ALUMINIUM
	,ALUMINIUM_PLASTIC
	,ALUMINIUM_WOOD
	,HIGH_GRADE_STEEL
	,PLASTIC
	,STEEL
	,WOOD
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcDoorStyleOperationEnum = ENUMERATION OF
	(DOUBLE_DOOR_DOUBLE_SWING
	,DOUBLE_DOOR_FOLDING
	,DOUBLE_DOOR_SINGLE_SWING
	,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT
	,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT
	,DOUBLE_DOOR_SLIDING
	,DOUBLE_SWING_LEFT
	,DOUBLE_SWING_RIGHT
	,FOLDING_TO_LEFT
	,FOLDING_TO_RIGHT
	,REVOLVING
	,ROLLINGUP
	,SINGLE_SWING_LEFT
	,SINGLE_SWING_RIGHT
	,SLIDING_TO_LEFT
	,SLIDING_TO_RIGHT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcDoorTypeEnum = ENUMERATION OF
	(BOOM_BARRIER
	,DOOR
	,GATE
	,TRAPDOOR
	,TURNSTILE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcDoorTypeOperationEnum = ENUMERATION OF
	(DOUBLE_PANEL_DOUBLE_SWING
	,DOUBLE_PANEL_FOLDING
	,DOUBLE_PANEL_LIFTING_VERTICAL
	,DOUBLE_PANEL_SINGLE_SWING
	,DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_LEFT
	,DOUBLE_PANEL_SINGLE_SWING_OPPOSITE_RIGHT
	,DOUBLE_PANEL_SLIDING
	,DOUBLE_SWING_LEFT
	,DOUBLE_SWING_RIGHT
	,FOLDING_TO_LEFT
	,FOLDING_TO_RIGHT
	,LIFTING_HORIZONTAL
	,LIFTING_VERTICAL_LEFT
	,LIFTING_VERTICAL_RIGHT
	,REVOLVING_HORIZONTAL
	,REVOLVING_VERTICAL
	,ROLLINGUP
	,SINGLE_SWING_LEFT
	,SINGLE_SWING_RIGHT
	,SLIDING_TO_LEFT
	,SLIDING_TO_RIGHT
	,SWING_FIXED_LEFT
	,SWING_FIXED_RIGHT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcEarthworksCutTypeEnum = ENUMERATION OF
	(BASE_EXCAVATION
	,CUT
	,DREDGING
	,EXCAVATION
	,OVEREXCAVATION
	,PAVEMENTMILLING
	,STEPEXCAVATION
	,TOPSOILREMOVAL
	,TRENCH
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcEarthworksFillTypeEnum = ENUMERATION OF
	(BACKFILL
	,COUNTERWEIGHT
	,EMBANKMENT
	,SLOPEFILL
	,SUBGRADE
	,SUBGRADEBED
	,TRANSITIONSECTION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcElectricFlowTreatmentDeviceTypeEnum = ENUMERATION OF
	(ELECTRONICFILTER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF
	(RELAY
	,TIMECLOCK
	,TIMEDELAY
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcElementAssemblyTypeEnum = ENUMERATION OF
	(ABUTMENT
	,ACCESSORY_ASSEMBLY
	,ARCH
	,BEAM_GRID
	,BRACED_FRAME
	,CROSS_BRACING
	,DECK
	,DILATATIONPANEL
	,ENTRANCEWORKS
	,GIRDER
	,GRID
	,MAST
	,PIER
	,PYLON
	,RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY
	,REINFORCEMENT_UNIT
	,RIGID_FRAME
	,SHELTER
	,SIGNALASSEMBLY
	,SLAB_FIELD
	,SUMPBUSTER
	,SUPPORTINGASSEMBLY
	,SUSPENSIONASSEMBLY
	,TRACKPANEL
	,TRACTION_SWITCHING_ASSEMBLY
	,TRAFFIC_CALMING_DEVICE
	,TRUSS
	,TURNOUTPANEL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcElementCompositionEnum = ENUMERATION OF
	(COMPLEX
	,ELEMENT
	,PARTIAL);
END_TYPE;

TYPE IfcEngineTypeEnum = ENUMERATION OF
	(EXTERNALCOMBUSTION
	,INTERNALCOMBUSTION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF
	(DIRECTEVAPORATIVEAIRWASHER
	,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER
	,DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER
	,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER
	,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER
	,INDIRECTDIRECTCOMBINATION
	,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER
	,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER
	,INDIRECTEVAPORATIVEWETCOIL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcEvaporatorTypeEnum = ENUMERATION OF
	(DIRECTEXPANSION
	,DIRECTEXPANSIONBRAZEDPLATE
	,DIRECTEXPANSIONSHELLANDTUBE
	,DIRECTEXPANSIONTUBEINTUBE
	,FLOODEDSHELLANDTUBE
	,SHELLANDCOIL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcFacilityPartCommonTypeEnum = ENUMERATION OF
	(ABOVEGROUND
	,BELOWGROUND
	,JUNCTION
	,LEVELCROSSING
	,SEGMENT
	,SUBSTRUCTURE
	,SUPERSTRUCTURE
	,TERMINAL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcFacilityUsageEnum = ENUMERATION OF
	(LATERAL
	,LONGITUDINAL
	,REGION
	,VERTICAL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF
	(BREECHINGINLET
	,FIREHYDRANT
	,FIREMONITOR
	,HOSEREEL
	,SPRINKLER
	,SPRINKLERDEFLECTOR
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcFlowDirectionEnum = ENUMERATION OF
	(SINK
	,SOURCE
	,SOURCEANDSINK
	,NOTDEFINED);
END_TYPE;

TYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF
	(AMMETER
	,COMBINED
	,FREQUENCYMETER
	,PHASEANGLEMETER
	,POWERFACTORMETER
	,PRESSUREGAUGE
	,THERMOMETER
	,VOLTMETER
	,VOLTMETER_PEAK
	,VOLTMETER_RMS
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcFlowMeterTypeEnum = ENUMERATION OF
	(ENERGYMETER
	,GASMETER
	,OILMETER
	,WATERMETER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcGeographicElementTypeEnum = ENUMERATION OF
	(SOIL_BORING_POINT
	,TERRAIN
	,VEGETATION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcGeometricProjectionEnum = ENUMERATION OF
	(ELEVATION_VIEW
	,GRAPH_VIEW
	,MODEL_VIEW
	,PLAN_VIEW
	,REFLECTED_PLAN_VIEW
	,SECTION_VIEW
	,SKETCH_VIEW
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcGeotechnicalStratumTypeEnum = ENUMERATION OF
	(SOLID
	,VOID
	,WATER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcGlobalOrLocalEnum = ENUMERATION OF
	(GLOBAL_COORDS
	,LOCAL_COORDS);
END_TYPE;

TYPE IfcGridTypeEnum = ENUMERATION OF
	(IRREGULAR
	,RADIAL
	,RECTANGULAR
	,TRIANGULAR
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcHeatExchangerTypeEnum = ENUMERATION OF
	(PLATE
	,SHELLANDTUBE
	,TURNOUTHEATING
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcHumidifierTypeEnum = ENUMERATION OF
	(ADIABATICAIRWASHER
	,ADIABATICATOMIZING
	,ADIABATICCOMPRESSEDAIRNOZZLE
	,ADIABATICPAN
	,ADIABATICRIGIDMEDIA
	,ADIABATICULTRASONIC
	,ADIABATICWETTEDELEMENT
	,ASSISTEDBUTANE
	,ASSISTEDELECTRIC
	,ASSISTEDNATURALGAS
	,ASSISTEDPROPANE
	,ASSISTEDSTEAM
	,STEAMINJECTION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcImpactProtectionDeviceTypeEnum = ENUMERATION OF
	(BUMPER
	,CRASHCUSHION
	,DAMPINGSYSTEM
	,FENDER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcInterceptorTypeEnum = ENUMERATION OF
	(CYCLONIC
	,GREASE
	,OIL
	,PETROL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

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

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

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

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

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

TYPE IfcLiquidTerminalTypeEnum = ENUMERATION OF
	(HOSEREEL
	,LOADINGARM
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcMarineFacilityTypeEnum = ENUMERATION OF
	(BARRIERBEACH
	,BREAKWATER
	,CANAL
	,DRYDOCK
	,FLOATINGDOCK
	,HYDROLIFT
	,JETTY
	,LAUNCHRECOVERY
	,MARINEDEFENCE
	,NAVIGATIONALCHANNEL
	,PORT
	,QUAY
	,REVETMENT
	,SHIPLIFT
	,SHIPLOCK
	,SHIPYARD
	,SLIPWAY
	,WATERWAY
	,WATERWAYSHIPLIFT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcMarinePartTypeEnum = ENUMERATION OF
	(ABOVEWATERLINE
	,ANCHORAGE
	,APPROACHCHANNEL
	,BELOWWATERLINE
	,BERTHINGSTRUCTURE
	,CHAMBER
	,CILL_LEVEL
	,COPELEVEL
	,CORE
	,CREST
	,GATEHEAD
	,GUDINGSTRUCTURE
	,HIGHWATERLINE
	,LANDFIELD
	,LEEWARDSIDE
	,LOWWATERLINE
	,MANUFACTURING
	,NAVIGATIONALAREA
	,PROTECTION
	,SHIPTRANSFER
	,STORAGEAREA
	,VEHICLESERVICING
	,WATERFIELD
	,WEATHERSIDE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcMemberTypeEnum = ENUMERATION OF
	(ARCH_SEGMENT
	,BRACE
	,CHORD
	,COLLAR
	,MEMBER
	,MULLION
	,PLATE
	,POST
	,PURLIN
	,RAFTER
	,STAY_CABLE
	,STIFFENING_RIB
	,STRINGER
	,STRUCTURALCABLE
	,STRUT
	,STUD
	,SUSPENDER
	,SUSPENSION_CABLE
	,TIEBAR
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcMobileTelecommunicationsApplianceTypeEnum = ENUMERATION OF
	(ACCESSPOINT
	,BASEBANDUNIT
	,BASETRANSCEIVERSTATION
	,E_UTRAN_NODE_B
	,GATEWAY_GPRS_SUPPORT_NODE
	,MASTERUNIT
	,MOBILESWITCHINGCENTER
	,MSCSERVER
	,PACKETCONTROLUNIT
	,REMOTERADIOUNIT
	,REMOTEUNIT
	,SERVICE_GPRS_SUPPORT_NODE
	,SUBSCRIBERSERVER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcMooringDeviceTypeEnum = ENUMERATION OF
	(BOLLARD
	,LINETENSIONER
	,MAGNETICDEVICE
	,MOORINGHOOKS
	,VACUUMDEVICE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcMotorConnectionTypeEnum = ENUMERATION OF
	(BELTDRIVE
	,COUPLING
	,DIRECTDRIVE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcNavigationElementTypeEnum = ENUMERATION OF
	(BEACON
	,BUOY
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcObjectTypeEnum = ENUMERATION OF
	(ACTOR
	,CONTROL
	,GROUP
	,PROCESS
	,PRODUCT
	,PROJECT
	,RESOURCE
	,NOTDEFINED);
END_TYPE;

TYPE IfcObjectiveEnum = ENUMERATION OF
	(CODECOMPLIANCE
	,CODEWAIVER
	,DESIGNINTENT
	,EXTERNAL
	,HEALTHANDSAFETY
	,MERGECONFLICT
	,MODELVIEW
	,PARAMETER
	,REQUIREMENT
	,SPECIFICATION
	,TRIGGERCONDITION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcPavementTypeEnum = ENUMERATION OF
	(FLEXIBLE
	,RIGID
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

TYPE IfcPileTypeEnum = ENUMERATION OF
	(BORED
	,COHESION
	,DRIVEN
	,FRICTION
	,JETGROUTING
	,SUPPORT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcPipeSegmentTypeEnum = ENUMERATION OF
	(CULVERT
	,FLEXIBLESEGMENT
	,GUTTER
	,RIGIDSEGMENT
	,SPOOL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcPlateTypeEnum = ENUMERATION OF
	(BASE_PLATE
	,COVER_PLATE
	,CURTAIN_PANEL
	,FLANGE_PLATE
	,GUSSET_PLATE
	,SHEET
	,SPLICE_PLATE
	,STIFFENER_PLATE
	,WEB_PLATE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcPreferredSurfaceCurveRepresentation = ENUMERATION OF
	(CURVE3D
	,PCURVE_S1
	,PCURVE_S2);
END_TYPE;

TYPE IfcProcedureTypeEnum = ENUMERATION OF
	(ADVICE_CAUTION
	,ADVICE_NOTE
	,ADVICE_WARNING
	,CALIBRATION
	,DIAGNOSTIC
	,SHUTDOWN
	,STARTUP
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcProfileTypeEnum = ENUMERATION OF
	(AREA
	,CURVE);
END_TYPE;

TYPE IfcProjectOrderTypeEnum = ENUMERATION OF
	(CHANGEORDER
	,MAINTENANCEWORKORDER
	,MOVEORDER
	,PURCHASEORDER
	,WORKORDER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

TYPE IfcPumpTypeEnum = ENUMERATION OF
	(CIRCULATOR
	,ENDSUCTION
	,SPLITCASE
	,SUBMERSIBLEPUMP
	,SUMPPUMP
	,VERTICALINLINE
	,VERTICALTURBINE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcRailTypeEnum = ENUMERATION OF
	(BLADE
	,CHECKRAIL
	,GUARDRAIL
	,RACKRAIL
	,RAIL
	,STOCKRAIL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcRailingTypeEnum = ENUMERATION OF
	(BALUSTRADE
	,FENCE
	,GUARDRAIL
	,HANDRAIL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcRailwayPartTypeEnum = ENUMERATION OF
	(DILATATIONSUPERSTRUCTURE
	,LINESIDESTRUCTURE
	,LINESIDESTRUCTUREPART
	,PLAINTRACKSUPERSTRUCTURE
	,SUPERSTRUCTURE
	,TRACKSTRUCTURE
	,TRACKSTRUCTUREPART
	,TURNOUTSUPERSTRUCTURE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcRampFlightTypeEnum = ENUMERATION OF
	(SPIRAL
	,STRAIGHT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcRampTypeEnum = ENUMERATION OF
	(HALF_TURN_RAMP
	,QUARTER_TURN_RAMP
	,SPIRAL_RAMP
	,STRAIGHT_RUN_RAMP
	,TWO_QUARTER_TURN_RAMP
	,TWO_STRAIGHT_RUN_RAMP
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcRecurrenceTypeEnum = ENUMERATION OF
	(BY_DAY_COUNT
	,BY_WEEKDAY_COUNT
	,DAILY
	,MONTHLY_BY_DAY_OF_MONTH
	,MONTHLY_BY_POSITION
	,WEEKLY
	,YEARLY_BY_DAY_OF_MONTH
	,YEARLY_BY_POSITION);
END_TYPE;

TYPE IfcReferentTypeEnum = ENUMERATION OF
	(BOUNDARY
	,INTERSECTION
	,KILOPOINT
	,LANDMARK
	,MILEPOINT
	,POSITION
	,REFERENCEMARKER
	,STATION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcReflectanceMethodEnum = ENUMERATION OF
	(BLINN
	,FLAT
	,GLASS
	,MATT
	,METAL
	,MIRROR
	,PHONG
	,PHYSICAL
	,PLASTIC
	,STRAUSS
	,NOTDEFINED);
END_TYPE;

TYPE IfcReinforcedSoilTypeEnum = ENUMERATION OF
	(DYNAMICALLYCOMPACTED
	,GROUTED
	,REPLACED
	,ROLLERCOMPACTED
	,SURCHARGEPRELOADED
	,VERTICALLYDRAINED
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

TYPE IfcRoadPartTypeEnum = ENUMERATION OF
	(BICYCLECROSSING
	,BUS_STOP
	,CARRIAGEWAY
	,CENTRALISLAND
	,CENTRALRESERVE
	,HARDSHOULDER
	,INTERSECTION
	,LAYBY
	,PARKINGBAY
	,PASSINGBAY
	,PEDESTRIAN_CROSSING
	,RAILWAYCROSSING
	,REFUGEISLAND
	,ROADSEGMENT
	,ROADSIDE
	,ROADSIDEPART
	,ROADWAYPLATEAU
	,ROUNDABOUT
	,SHOULDER
	,SIDEWALK
	,SOFTSHOULDER
	,TOLLPLAZA
	,TRAFFICISLAND
	,TRAFFICLANE
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcRoleEnum = ENUMERATION OF
	(ARCHITECT
	,BUILDINGOPERATOR
	,BUILDINGOWNER
	,CIVILENGINEER
	,CLIENT
	,COMMISSIONINGENGINEER
	,CONSTRUCTIONMANAGER
	,CONSULTANT
	,CONTRACTOR
	,COSTENGINEER
	,ELECTRICALENGINEER
	,ENGINEER
	,FACILITIESMANAGER
	,FIELDCONSTRUCTIONMANAGER
	,MANUFACTURER
	,MECHANICALENGINEER
	,OWNER
	,PROJECTMANAGER
	,RESELLER
	,STRUCTURALENGINEER
	,SUBCONTRACTOR
	,SUPPLIER
	,USERDEFINED);
END_TYPE;

TYPE IfcRoofTypeEnum = ENUMERATION OF
	(BARREL_ROOF
	,BUTTERFLY_ROOF
	,DOME_ROOF
	,FLAT_ROOF
	,FREEFORM
	,GABLE_ROOF
	,GAMBREL_ROOF
	,HIPPED_GABLE_ROOF
	,HIP_ROOF
	,MANSARD_ROOF
	,PAVILION_ROOF
	,RAINBOW_ROOF
	,SHED_ROOF
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcSIPrefix = ENUMERATION OF
	(ATTO
	,CENTI
	,DECA
	,DECI
	,EXA
	,FEMTO
	,GIGA
	,HECTO
	,KILO
	,MEGA
	,MICRO
	,MILLI
	,NANO
	,PETA
	,PICO
	,TERA);
END_TYPE;

TYPE IfcSIUnitName = ENUMERATION OF
	(AMPERE
	,BECQUEREL
	,CANDELA
	,COULOMB
	,CUBIC_METRE
	,DEGREE_CELSIUS
	,FARAD
	,GRAM
	,GRAY
	,HENRY
	,HERTZ
	,JOULE
	,KELVIN
	,LUMEN
	,LUX
	,METRE
	,MOLE
	,NEWTON
	,OHM
	,PASCAL
	,RADIAN
	,SECOND
	,SIEMENS
	,SIEVERT
	,SQUARE_METRE
	,STERADIAN
	,TESLA
	,VOLT
	,WATT
	,WEBER);
END_TYPE;

TYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF
	(BATH
	,BIDET
	,CISTERN
	,SANITARYFOUNTAIN
	,SHOWER
	,SINK
	,TOILETPAN
	,URINAL
	,WASHHANDBASIN
	,WCSEAT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcSectionTypeEnum = ENUMERATION OF
	(TAPERED
	,UNIFORM);
END_TYPE;

TYPE IfcSensorTypeEnum = ENUMERATION OF
	(CO2SENSOR
	,CONDUCTANCESENSOR
	,CONTACTSENSOR
	,COSENSOR
	,EARTHQUAKESENSOR
	,FIRESENSOR
	,FLOWSENSOR
	,FOREIGNOBJECTDETECTIONSENSOR
	,FROSTSENSOR
	,GASSENSOR
	,HEATSENSOR
	,HUMIDITYSENSOR
	,IDENTIFIERSENSOR
	,IONCONCENTRATIONSENSOR
	,LEVELSENSOR
	,LIGHTSENSOR
	,MOISTURESENSOR
	,MOVEMENTSENSOR
	,OBSTACLESENSOR
	,PHSENSOR
	,PRESSURESENSOR
	,RADIATIONSENSOR
	,RADIOACTIVITYSENSOR
	,RAINSENSOR
	,SMOKESENSOR
	,SNOWDEPTHSENSOR
	,SOUNDSENSOR
	,TEMPERATURESENSOR
	,TRAINSENSOR
	,TURNOUTCLOSURESENSOR
	,WHEELSENSOR
	,WINDSENSOR
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

TYPE IfcSignTypeEnum = ENUMERATION OF
	(MARKER
	,MIRROR
	,PICTORAL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcSignalTypeEnum = ENUMERATION OF
	(AUDIO
	,MIXED
	,VISUAL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcSlabTypeEnum = ENUMERATION OF
	(APPROACH_SLAB
	,BASESLAB
	,FLOOR
	,LANDING
	,PAVING
	,ROOF
	,SIDEWALK
	,TRACKSLAB
	,WEARING
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcSpatialZoneTypeEnum = ENUMERATION OF
	(CONSTRUCTION
	,FIRESAFETY
	,INTERFERENCE
	,LIGHTING
	,OCCUPANCY
	,RESERVATION
	,SECURITY
	,THERMAL
	,TRANSPORT
	,VENTILATION
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcStackTerminalTypeEnum = ENUMERATION OF
	(BIRDCAGE
	,COWL
	,RAINWATERHOPPER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcStairFlightTypeEnum = ENUMERATION OF
	(CURVED
	,FREEFORM
	,SPIRAL
	,STRAIGHT
	,WINDER
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcStairTypeEnum = ENUMERATION OF
	(CURVED_RUN_STAIR
	,DOUBLE_RETURN_STAIR
	,HALF_TURN_STAIR
	,HALF_WINDING_STAIR
	,LADDER
	,QUARTER_TURN_STAIR
	,QUARTER_WINDING_STAIR
	,SPIRAL_STAIR
	,STRAIGHT_RUN_STAIR
	,THREE_QUARTER_TURN_STAIR
	,THREE_QUARTER_WINDING_STAIR
	,TWO_CURVED_RUN_STAIR
	,TWO_QUARTER_TURN_STAIR
	,TWO_QUARTER_WINDING_STAIR
	,TWO_STRAIGHT_RUN_STAIR
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcStateEnum = ENUMERATION OF
	(LOCKED
	,READONLY
	,READONLYLOCKED
	,READWRITE
	,READWRITELOCKED);
END_TYPE;

TYPE IfcStructuralCurveActivityTypeEnum = ENUMERATION OF
	(CONST
	,DISCRETE
	,EQUIDISTANT
	,LINEAR
	,PARABOLA
	,POLYGONAL
	,SINUS
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

TYPE IfcSurfaceFeatureTypeEnum = ENUMERATION OF
	(DEFECT
	,HATCHMARKING
	,LINEMARKING
	,MARK
	,NONSKIDSURFACING
	,PAVEMENTSURFACEMARKING
	,RUMBLESTRIP
	,SYMBOLMARKING
	,TAG
	,TRANSVERSERUMBLESTRIP
	,TREATMENT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

TYPE IfcTaskTypeEnum = ENUMERATION OF
	(ADJUSTMENT
	,ATTENDANCE
	,CALIBRATION
	,CONSTRUCTION
	,DEMOLITION
	,DISMANTLE
	,DISPOSAL
	,EMERGENCY
	,INSPECTION
	,INSTALLATION
	,LOGISTIC
	,MAINTENANCE
	,MOVE
	,OPERATION
	,REMOVAL
	,RENOVATION
	,SAFETY
	,SHUTDOWN
	,STARTUP
	,TESTING
	,TROUBLESHOOTING
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcTendonConduitTypeEnum = ENUMERATION OF
	(COUPLER
	,DIABOLO
	,DUCT
	,GROUTING_DUCT
	,TRUMPET
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

TYPE IfcTrackElementTypeEnum = ENUMERATION OF
	(BLOCKINGDEVICE
	,DERAILER
	,FROG
	,HALF_SET_OF_BLADES
	,SLEEPER
	,SPEEDREGULATOR
	,TRACKENDOFALIGNMENT
	,VEHICLESTOP
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

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

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

TYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF
	(AIRCONDITIONINGUNIT
	,AIRHANDLER
	,DEHUMIDIFIER
	,ROOFTOPUNIT
	,SPLITSYSTEM
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcValveTypeEnum = ENUMERATION OF
	(AIRRELEASE
	,ANTIVACUUM
	,CHANGEOVER
	,CHECK
	,COMMISSIONING
	,DIVERTING
	,DOUBLECHECK
	,DOUBLEREGULATING
	,DRAWOFFCOCK
	,FAUCET
	,FLUSHING
	,GASCOCK
	,GASTAP
	,ISOLATING
	,MIXING
	,PRESSUREREDUCING
	,PRESSURERELIEF
	,REGULATING
	,SAFETYCUTOFF
	,STEAMTRAP
	,STOPCOCK
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcVehicleTypeEnum = ENUMERATION OF
	(CARGO
	,ROLLINGSTOCK
	,VEHICLE
	,VEHICLEAIR
	,VEHICLEMARINE
	,VEHICLETRACKED
	,VEHICLEWHEELED
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcVibrationDamperTypeEnum = ENUMERATION OF
	(AXIAL_YIELD
	,BENDING_YIELD
	,FRICTION
	,RUBBER
	,SHEAR_YIELD
	,VISCOUS
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF
	(BASE
	,COMPRESSION
	,SPRING
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcVirtualElementTypeEnum = ENUMERATION OF
	(BOUNDARY
	,CLEARANCE
	,PROVISIONFORVOID
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcVoidingFeatureTypeEnum = ENUMERATION OF
	(CHAMFER
	,CUTOUT
	,EDGE
	,HOLE
	,MITER
	,NOTCH
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

TYPE IfcWasteTerminalTypeEnum = ENUMERATION OF
	(FLOORTRAP
	,FLOORWASTE
	,GULLYSUMP
	,GULLYTRAP
	,ROOFDRAIN
	,WASTEDISPOSALUNIT
	,WASTETRAP
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcWindowPanelOperationEnum = ENUMERATION OF
	(BOTTOMHUNG
	,FIXEDCASEMENT
	,OTHEROPERATION
	,PIVOTHORIZONTAL
	,PIVOTVERTICAL
	,REMOVABLECASEMENT
	,SIDEHUNGLEFTHAND
	,SIDEHUNGRIGHTHAND
	,SLIDINGHORIZONTAL
	,SLIDINGVERTICAL
	,TILTANDTURNLEFTHAND
	,TILTANDTURNRIGHTHAND
	,TOPHUNG
	,NOTDEFINED);
END_TYPE;

TYPE IfcWindowPanelPositionEnum = ENUMERATION OF
	(BOTTOM
	,LEFT
	,MIDDLE
	,RIGHT
	,TOP
	,NOTDEFINED);
END_TYPE;

TYPE IfcWindowStyleConstructionEnum = ENUMERATION OF
	(ALUMINIUM
	,ALUMINIUM_WOOD
	,HIGH_GRADE_STEEL
	,OTHER_CONSTRUCTION
	,PLASTIC
	,STEEL
	,WOOD
	,NOTDEFINED);
END_TYPE;

TYPE IfcWindowStyleOperationEnum = ENUMERATION OF
	(DOUBLE_PANEL_HORIZONTAL
	,DOUBLE_PANEL_VERTICAL
	,SINGLE_PANEL
	,TRIPLE_PANEL_BOTTOM
	,TRIPLE_PANEL_HORIZONTAL
	,TRIPLE_PANEL_LEFT
	,TRIPLE_PANEL_RIGHT
	,TRIPLE_PANEL_TOP
	,TRIPLE_PANEL_VERTICAL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcWindowTypeEnum = ENUMERATION OF
	(LIGHTDOME
	,SKYLIGHT
	,WINDOW
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcWindowTypePartitioningEnum = ENUMERATION OF
	(DOUBLE_PANEL_HORIZONTAL
	,DOUBLE_PANEL_VERTICAL
	,SINGLE_PANEL
	,TRIPLE_PANEL_BOTTOM
	,TRIPLE_PANEL_HORIZONTAL
	,TRIPLE_PANEL_LEFT
	,TRIPLE_PANEL_RIGHT
	,TRIPLE_PANEL_TOP
	,TRIPLE_PANEL_VERTICAL
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

TYPE IfcWorkCalendarTypeEnum = ENUMERATION OF
	(FIRSTSHIFT
	,SECONDSHIFT
	,THIRDSHIFT
	,USERDEFINED
	,NOTDEFINED);
END_TYPE;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TYPE IfcCurveMeasureSelect = SELECT
	(IfcNonNegativeLengthMeasure
	,IfcParameterValue);
END_TYPE;

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

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

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

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

TYPE IfcDerivedMeasureValue = SELECT
	(IfcAbsorbedDoseMeasure
	,IfcAccelerationMeasure
	,IfcAngularVelocityMeasure
	,IfcAreaDensityMeasure
	,IfcCompoundPlaneAngleMeasure
	,IfcCurvatureMeasure
	,IfcDoseEquivalentMeasure
	,IfcDynamicViscosityMeasure
	,IfcElectricCapacitanceMeasure
	,IfcElectricChargeMeasure
	,IfcElectricConductanceMeasure
	,IfcElectricResistanceMeasure
	,IfcElectricVoltageMeasure
	,IfcEnergyMeasure
	,IfcForceMeasure
	,IfcFrequencyMeasure
	,IfcHeatFluxDensityMeasure
	,IfcHeatingValueMeasure
	,IfcIlluminanceMeasure
	,IfcInductanceMeasure
	,IfcIntegerCountRateMeasure
	,IfcIonConcentrationMeasure
	,IfcIsothermalMoistureCapacityMeasure
	,IfcKinematicViscosityMeasure
	,IfcLinearForceMeasure
	,IfcLinearMomentMeasure
	,IfcLinearStiffnessMeasure
	,IfcLinearVelocityMeasure
	,IfcLuminousFluxMeasure
	,IfcLuminousIntensityDistributionMeasure
	,IfcMagneticFluxDensityMeasure
	,IfcMagneticFluxMeasure
	,IfcMassDensityMeasure
	,IfcMassFlowRateMeasure
	,IfcMassPerLengthMeasure
	,IfcModulusOfElasticityMeasure
	,IfcModulusOfLinearSubgradeReactionMeasure
	,IfcModulusOfRotationalSubgradeReactionMeasure
	,IfcModulusOfSubgradeReactionMeasure
	,IfcMoistureDiffusivityMeasure
	,IfcMolecularWeightMeasure
	,IfcMomentOfInertiaMeasure
	,IfcMonetaryMeasure
	,IfcPHMeasure
	,IfcPlanarForceMeasure
	,IfcPowerMeasure
	,IfcPressureMeasure
	,IfcRadioActivityMeasure
	,IfcRotationalFrequencyMeasure
	,IfcRotationalMassMeasure
	,IfcRotationalStiffnessMeasure
	,IfcSectionModulusMeasure
	,IfcSectionalAreaIntegralMeasure
	,IfcShearModulusMeasure
	,IfcSoundPowerLevelMeasure
	,IfcSoundPowerMeasure
	,IfcSoundPressureLevelMeasure
	,IfcSoundPressureMeasure
	,IfcSpecificHeatCapacityMeasure
	,IfcTemperatureGradientMeasure
	,IfcTemperatureRateOfChangeMeasure
	,IfcThermalAdmittanceMeasure
	,IfcThermalConductivityMeasure
	,IfcThermalExpansionCoefficientMeasure
	,IfcThermalResistanceMeasure
	,IfcThermalTransmittanceMeasure
	,IfcTorqueMeasure
	,IfcVaporPermeabilityMeasure
	,IfcVolumetricFlowRateMeasure
	,IfcWarpingConstantMeasure
	,IfcWarpingMomentMeasure);
END_TYPE;

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

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

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

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

TYPE IfcHatchLineDistanceSelect = SELECT
	(IfcPositiveLengthMeasure
	,IfcVector);
END_TYPE;

TYPE IfcInterferenceSelect = SELECT
	(IfcElement
	,IfcSpatialElement);
END_TYPE;

TYPE IfcLayeredItem = SELECT
	(IfcRepresentation
	,IfcRepresentationItem);
END_TYPE;

TYPE IfcLibrarySelect = SELECT
	(IfcLibraryInformation
	,IfcLibraryReference);
END_TYPE;

TYPE IfcLightDistributionDataSourceSelect = SELECT
	(IfcExternalReference
	,IfcLightIntensityDistribution);
END_TYPE;

TYPE IfcMaterialSelect = SELECT
	(IfcMaterialDefinition
	,IfcMaterialList
	,IfcMaterialUsageDefinition);
END_TYPE;

TYPE IfcMeasureValue = SELECT
	(IfcAmountOfSubstanceMeasure
	,IfcAreaMeasure
	,IfcComplexNumber
	,IfcContextDependentMeasure
	,IfcCountMeasure
	,IfcDescriptiveMeasure
	,IfcElectricCurrentMeasure
	,IfcLengthMeasure
	,IfcLuminousIntensityMeasure
	,IfcMassMeasure
	,IfcNonNegativeLengthMeasure
	,IfcNormalisedRatioMeasure
	,IfcNumericMeasure
	,IfcParameterValue
	,IfcPlaneAngleMeasure
	,IfcPositiveLengthMeasure
	,IfcPositivePlaneAngleMeasure
	,IfcPositiveRatioMeasure
	,IfcRatioMeasure
	,IfcSolidAngleMeasure
	,IfcThermodynamicTemperatureMeasure
	,IfcTimeMeasure
	,IfcVolumeMeasure);
END_TYPE;

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

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

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

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

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

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

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

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

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

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

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

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

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

TYPE IfcSegmentIndexSelect = SELECT
	(IfcArcIndex
	,IfcLineIndex);
END_TYPE;

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

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

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

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

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

TYPE IfcSpatialReferenceSelect = SELECT
	(IfcGroup
	,IfcProduct);
END_TYPE;

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

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

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

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

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

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

TYPE IfcTranslationalStiffnessSelect = SELECT
	(IfcBoolean
	,IfcLinearStiffnessMeasure);
END_TYPE;

TYPE IfcTrimmingSelect = SELECT
	(IfcCartesianPoint
	,IfcParameterValue);
END_TYPE;

TYPE IfcUnit = SELECT
	(IfcDerivedUnit
	,IfcMonetaryUnit
	,IfcNamedUnit);
END_TYPE;

TYPE IfcValue = SELECT
	(IfcDerivedMeasureValue
	,IfcMeasureValue
	,IfcSimpleValue);
END_TYPE;

TYPE IfcVectorOrDirection = SELECT
	(IfcDirection
	,IfcVector);
END_TYPE;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcAlignment
 SUBTYPE OF (IfcLinearPositioningElement);
	PredefinedType : OPTIONAL IfcAlignmentTypeEnum;
END_ENTITY;

ENTITY IfcAlignmentCant
 SUBTYPE OF (IfcLinearElement);
	RailHeadDistance : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcAlignmentCantSegment
 SUBTYPE OF (IfcAlignmentParameterSegment);
	StartDistAlong : IfcLengthMeasure;
	HorizontalLength : IfcNonNegativeLengthMeasure;
	StartCantLeft : IfcLengthMeasure;
	EndCantLeft : OPTIONAL IfcLengthMeasure;
	StartCantRight : IfcLengthMeasure;
	EndCantRight : OPTIONAL IfcLengthMeasure;
	PredefinedType : IfcAlignmentCantSegmentTypeEnum;
END_ENTITY;

ENTITY IfcAlignmentHorizontal
 SUBTYPE OF (IfcLinearElement);
END_ENTITY;

ENTITY IfcAlignmentHorizontalSegment
 SUBTYPE OF (IfcAlignmentParameterSegment);
	StartPoint : IfcCartesianPoint;
	StartDirection : IfcPlaneAngleMeasure;
	StartRadiusOfCurvature : IfcLengthMeasure;
	EndRadiusOfCurvature : IfcLengthMeasure;
	SegmentLength : IfcNonNegativeLengthMeasure;
	GravityCenterLineHeight : OPTIONAL IfcPositiveLengthMeasure;
	PredefinedType : IfcAlignmentHorizontalSegmentTypeEnum;
END_ENTITY;

ENTITY IfcAlignmentParameterSegment
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcAlignmentCantSegment
	,IfcAlignmentHorizontalSegment
	,IfcAlignmentVerticalSegment));
	StartTag : OPTIONAL IfcLabel;
	EndTag : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcAlignmentSegment
 SUBTYPE OF (IfcLinearElement);
	DesignParameters : IfcAlignmentParameterSegment;
END_ENTITY;

ENTITY IfcAlignmentVertical
 SUBTYPE OF (IfcLinearElement);
END_ENTITY;

ENTITY IfcAlignmentVerticalSegment
 SUBTYPE OF (IfcAlignmentParameterSegment);
	StartDistAlong : IfcLengthMeasure;
	HorizontalLength : IfcNonNegativeLengthMeasure;
	StartHeight : IfcLengthMeasure;
	StartGradient : IfcRatioMeasure;
	EndGradient : IfcRatioMeasure;
	RadiusOfCurvature : OPTIONAL IfcLengthMeasure;
	PredefinedType : IfcAlignmentVerticalSegmentTypeEnum;
END_ENTITY;

ENTITY IfcAnnotation
 SUBTYPE OF (IfcProduct);
	PredefinedType : OPTIONAL IfcAnnotationTypeEnum;
 INVERSE
	ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
END_ENTITY;

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

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

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

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

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

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

ENTITY IfcArbitraryOpenProfileDef
 SUPERTYPE OF (ONEOF
	(IfcCenterLineProfileDef))
 SUBTYPE OF (IfcProfileDef);
	Curve : IfcBoundedCurve;
 WHERE
	WR11 : ('IFC4X3.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR 
 (SELF\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE);
	WR12 : Curve.Dim = 2;
END_ENTITY;

ENTITY IfcArbitraryProfileDefWithVoids
 SUBTYPE OF (IfcArbitraryClosedProfileDef);
	InnerCurves : SET [1:?] OF IfcCurve;
 WHERE
	WR1 : SELF\IfcProfileDef.ProfileType = AREA;
	WR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;
	WR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC4X3.IFCLINE' IN TYPEOF(temp))) = 0;
END_ENTITY;

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

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

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

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

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

ENTITY IfcAxis2Placement2D
 SUBTYPE OF (IfcPlacement);
	RefDirection : OPTIONAL IfcDirection;
 DERIVE
	 P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);
 WHERE
	LocationIs2D : SELF\IfcPlacement.Location.Dim = 2;
	LocationIsCP : 'IFC4X3.IFCCARTESIANPOINT' IN TYPEOF(SELF\IfcPlacement.Location);
	RefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);
END_ENTITY;

ENTITY IfcAxis2Placement3D
 SUBTYPE OF (IfcPlacement);
	Axis : OPTIONAL IfcDirection;
	RefDirection : OPTIONAL IfcDirection;
 DERIVE
	 P : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);
 WHERE
	AxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));
	AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
	AxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
	LocationIs3D : SELF\IfcPlacement.Location.Dim = 3;
	LocationIsCP : 'IFC4X3.IFCCARTESIANPOINT' IN TYPEOF(SELF\IfcPlacement.Location);
	RefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);
END_ENTITY;

ENTITY IfcAxis2PlacementLinear
 SUBTYPE OF (IfcPlacement);
	Axis : OPTIONAL IfcDirection;
	RefDirection : OPTIONAL IfcDirection;
 WHERE
	WR1 : 'IFC4X3.IFCPOINTBYDISTANCEEXPRESSION' IN TYPEOF(SELF\IfcPlacement.Location);
	WR2 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
END_ENTITY;

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

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

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

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

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

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

ENTITY IfcBearing
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcBearingTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcBearingTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcBearingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCBEARINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

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

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

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

ENTITY IfcBooleanResult
 SUPERTYPE OF (ONEOF
	(IfcBooleanClippingResult))
 SUBTYPE OF (IfcGeometricRepresentationItem);
	Operator : IfcBooleanOperator;
	FirstOperand : IfcBooleanOperand;
	SecondOperand : IfcBooleanOperand;
 DERIVE
	 Dim : IfcDimensionCount := FirstOperand.Dim;
 WHERE
	FirstOperandClosed : NOT('IFC4X3.IFCTESSELLATEDFACESET' IN TYPEOF(FirstOperand)) OR (EXISTS(FirstOperand.Closed) AND FirstOperand.Closed);
	SameDim : FirstOperand.Dim = SecondOperand.Dim;
	SecondOperandClosed : NOT('IFC4X3.IFCTESSELLATEDFACESET' IN TYPEOF(SecondOperand)) OR (EXISTS(SecondOperand.Closed) AND SecondOperand.Closed);
END_ENTITY;

ENTITY IfcBorehole
 SUBTYPE OF (IfcGeotechnicalAssembly);
END_ENTITY;

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

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

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

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

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

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

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

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

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

ENTITY IfcBoxedHalfSpace
 SUBTYPE OF (IfcHalfSpaceSolid);
	Enclosure : IfcBoundingBox;
 WHERE
	UnboundedSurface : NOT ('IFC4X3.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface));
END_ENTITY;

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

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

ENTITY IfcBuilding
 SUBTYPE OF (IfcFacility);
	ElevationOfRefHeight : OPTIONAL IfcLengthMeasure;
	ElevationOfTerrain : OPTIONAL IfcLengthMeasure;
	BuildingAddress : OPTIONAL IfcPostalAddress;
END_ENTITY;

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

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

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

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

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

ENTITY IfcBuildingSystem
 SUBTYPE OF (IfcSystem);
	PredefinedType : OPTIONAL IfcBuildingSystemTypeEnum;
	LongName : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcBuildingSystemTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcBuildingSystemTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcBuiltElement
 SUPERTYPE OF (ONEOF
	(IfcBeam
	,IfcBearing
	,IfcBuildingElementProxy
	,IfcChimney
	,IfcColumn
	,IfcCourse
	,IfcCovering
	,IfcCurtainWall
	,IfcDeepFoundation
	,IfcDoor
	,IfcEarthworksElement
	,IfcFooting
	,IfcKerb
	,IfcMember
	,IfcMooringDevice
	,IfcNavigationElement
	,IfcPavement
	,IfcPlate
	,IfcRail
	,IfcRailing
	,IfcRamp
	,IfcRampFlight
	,IfcRoof
	,IfcShadingDevice
	,IfcSlab
	,IfcStair
	,IfcStairFlight
	,IfcTrackElement
	,IfcWall
	,IfcWindow))
 SUBTYPE OF (IfcElement);
 WHERE
	MaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations |
  'IFC4X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)
  )) <= 1;
END_ENTITY;

ENTITY IfcBuiltElementType
 SUPERTYPE OF (ONEOF
	(IfcBeamType
	,IfcBearingType
	,IfcBuildingElementProxyType
	,IfcChimneyType
	,IfcColumnType
	,IfcCourseType
	,IfcCoveringType
	,IfcCurtainWallType
	,IfcDeepFoundationType
	,IfcDoorType
	,IfcFootingType
	,IfcKerbType
	,IfcMemberType
	,IfcMooringDeviceType
	,IfcNavigationElementType
	,IfcPavementType
	,IfcPlateType
	,IfcRailType
	,IfcRailingType
	,IfcRampFlightType
	,IfcRampType
	,IfcRoofType
	,IfcShadingDeviceType
	,IfcSlabType
	,IfcStairFlightType
	,IfcStairType
	,IfcTrackElementType
	,IfcWallType
	,IfcWindowType))
 SUBTYPE OF (IfcElementType);
END_ENTITY;

ENTITY IfcBuiltSystem
 SUBTYPE OF (IfcSystem);
	PredefinedType : OPTIONAL IfcBuiltSystemTypeEnum;
	LongName : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcBuiltSystemTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcBuiltSystemTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcCaissonFoundation
 SUBTYPE OF (IfcDeepFoundation);
	PredefinedType : OPTIONAL IfcCaissonFoundationTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcCaissonFoundationTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcCaissonFoundationTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCCAISSONFOUNDATIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

ENTITY IfcCartesianPointList
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcCartesianPointList2D
	,IfcCartesianPointList3D))
 SUBTYPE OF (IfcGeometricRepresentationItem);
 DERIVE
	 Dim : IfcDimensionCount := IfcPointListDim(SELF);
END_ENTITY;

ENTITY IfcCartesianPointList2D
 SUBTYPE OF (IfcCartesianPointList);
	CoordList : LIST [1:?] OF LIST [2:2] OF IfcLengthMeasure;
	TagList : OPTIONAL LIST [1:?] OF IfcLabel;
END_ENTITY;

ENTITY IfcCartesianPointList3D
 SUBTYPE OF (IfcCartesianPointList);
	CoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure;
	TagList : OPTIONAL LIST [1:?] OF IfcLabel;
END_ENTITY;

ENTITY IfcCartesianTransformationOperator
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcCartesianTransformationOperator2D
	,IfcCartesianTransformationOperator3D))
 SUBTYPE OF (IfcGeometricRepresentationItem);
	Axis1 : OPTIONAL IfcDirection;
	Axis2 : OPTIONAL IfcDirection;
	LocalOrigin : IfcCartesianPoint;
	Scale : OPTIONAL IfcReal;
 DERIVE
	 Scl : IfcReal := NVL(Scale, 1.0);
	 Dim : IfcDimensionCount := LocalOrigin.Dim;
 WHERE
	ScaleGreaterZero : Scl > 0.0;
END_ENTITY;

ENTITY IfcCartesianTransformationOperator2D
 SUPERTYPE OF (ONEOF
	(IfcCartesianTransformationOperator2DnonUniform))
 SUBTYPE OF (IfcCartesianTransformationOperator);
 DERIVE
	 U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\IfcCartesianTransformationOperator.Axis1,
SELF\IfcCartesianTransformationOperator.Axis2,?);
 WHERE
	Axis1Is2D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR 
(SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2);
	Axis2Is2D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR 
(SELF\IfcCartesianTransformationOperator.Axis2.Dim = 2);
	DimEqual2 : SELF\IfcCartesianTransformationOperator.Dim = 2;
END_ENTITY;

ENTITY IfcCartesianTransformationOperator2DnonUniform
 SUBTYPE OF (IfcCartesianTransformationOperator2D);
	Scale2 : OPTIONAL IfcReal;
 DERIVE
	 Scl2 : IfcReal := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl);
 WHERE
	Scale2GreaterZero : Scl2 > 0.0;
END_ENTITY;

ENTITY IfcCartesianTransformationOperator3D
 SUPERTYPE OF (ONEOF
	(IfcCartesianTransformationOperator3DnonUniform))
 SUBTYPE OF (IfcCartesianTransformationOperator);
	Axis3 : OPTIONAL IfcDirection;
 DERIVE
	 U : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\IfcCartesianTransformationOperator.Axis1,
SELF\IfcCartesianTransformationOperator.Axis2,Axis3);
 WHERE
	Axis1Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR 
(SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3);
	Axis2Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR 
(SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3);
	Axis3Is3D : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);
	DimIs3D : SELF\IfcCartesianTransformationOperator.Dim = 3;
END_ENTITY;

ENTITY IfcCartesianTransformationOperator3DnonUniform
 SUBTYPE OF (IfcCartesianTransformationOperator3D);
	Scale2 : OPTIONAL IfcReal;
	Scale3 : OPTIONAL IfcReal;
 DERIVE
	 Scl2 : IfcReal := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl);
	 Scl3 : IfcReal := NVL(Scale3, SELF\IfcCartesianTransformationOperator.Scl);
 WHERE
	Scale2GreaterZero : Scl2 > 0.0;
	Scale3GreaterZero : Scl3 > 0.0;
END_ENTITY;

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

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

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

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

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

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

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

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

ENTITY IfcCivilElement
 SUBTYPE OF (IfcElement);
END_ENTITY;

ENTITY IfcCivilElementType
 SUBTYPE OF (IfcElementType);
END_ENTITY;

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

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

ENTITY IfcClosedShell
 SUBTYPE OF (IfcConnectedFaceSet);
END_ENTITY;

ENTITY IfcClothoid
 SUBTYPE OF (IfcSpiral);
	ClothoidConstant : IfcLengthMeasure;
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcCompositeCurveSegment
 SUPERTYPE OF (ONEOF
	(IfcReparametrisedCompositeCurveSegment))
 SUBTYPE OF (IfcSegment);
	SameSense : IfcBoolean;
	ParentCurve : IfcCurve;
 DERIVE
	 Dim : IfcDimensionCount := ParentCurve.Dim;
 WHERE
	ParentIsBoundedCurve : ('IFC4X3.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcContextDependentUnit
 SUBTYPE OF (IfcNamedUnit);
	Name : IfcLabel;
 INVERSE
	HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcCoordinateReferenceSystem
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcProjectedCRS));
	Name : IfcLabel;
	Description : OPTIONAL IfcText;
	GeodeticDatum : OPTIONAL IfcIdentifier;
	VerticalDatum : OPTIONAL IfcIdentifier;
 INVERSE
	HasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;
END_ENTITY;

ENTITY IfcCosineSpiral
 SUBTYPE OF (IfcSpiral);
	CosineTerm : IfcLengthMeasure;
	ConstantTerm : OPTIONAL IfcLengthMeasure;
END_ENTITY;

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

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

ENTITY IfcCostValue
 SUBTYPE OF (IfcAppliedValue);
END_ENTITY;

ENTITY IfcCourse
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcCourseTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcCourseTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcCourseTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCCOURSETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcCurveBoundedPlane
 SUBTYPE OF (IfcBoundedSurface);
	BasisSurface : IfcPlane;
	OuterBoundary : IfcCurve;
	InnerBoundaries : SET [0:?] OF IfcCurve;
END_ENTITY;

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

ENTITY IfcCurveSegment
 SUBTYPE OF (IfcSegment);
	Placement : IfcPlacement;
	SegmentStart : IfcCurveMeasureSelect;
	SegmentLength : IfcCurveMeasureSelect;
	ParentCurve : IfcCurve;
 DERIVE
	 Dim : IfcDimensionCount := ParentCurve.Dim;
END_ENTITY;

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

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

ENTITY IfcCurveStyleFontAndScaling
 SUBTYPE OF (IfcPresentationItem);
	Name : OPTIONAL IfcLabel;
	CurveStyleFont : IfcCurveStyleFontSelect;
	CurveFontScaling : IfcPositiveRatioMeasure;
END_ENTITY;

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

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

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

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

ENTITY IfcDeepFoundation
 SUPERTYPE OF (ONEOF
	(IfcCaissonFoundation
	,IfcPile))
 SUBTYPE OF (IfcBuiltElement);
 WHERE
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCDEEPFOUNDATIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcDeepFoundationType
 SUPERTYPE OF (ONEOF
	(IfcCaissonFoundationType
	,IfcPileType))
 SUBTYPE OF (IfcBuiltElementType);
END_ENTITY;

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

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

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

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

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

ENTITY IfcDirectrixCurveSweptAreaSolid
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcFixedReferenceSweptAreaSolid
	,IfcSurfaceCurveSweptAreaSolid))
 SUBTYPE OF (IfcSweptAreaSolid);
	Directrix : IfcCurve;
	StartParam : OPTIONAL IfcCurveMeasureSelect;
	EndParam : OPTIONAL IfcCurveMeasureSelect;
 WHERE
	DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR 
(SIZEOF(['IFC4X3.IFCCONIC', 'IFC4X3.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);
END_ENTITY;

ENTITY IfcDirectrixDerivedReferenceSweptAreaSolid
 SUBTYPE OF (IfcFixedReferenceSweptAreaSolid);
END_ENTITY;

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

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

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

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

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

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

ENTITY IfcDistributionCircuit
 SUBTYPE OF (IfcDistributionSystem);
END_ENTITY;

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

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

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

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

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

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

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

ENTITY IfcDistributionSystem
 SUPERTYPE OF (ONEOF
	(IfcDistributionCircuit))
 SUBTYPE OF (IfcSystem);
	LongName : OPTIONAL IfcLabel;
	PredefinedType : OPTIONAL IfcDistributionSystemEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcDistributionSystemEnum.USERDEFINED) OR
 ((PredefinedType = IfcDistributionSystemEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

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

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

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

ENTITY IfcDoor
 SUBTYPE OF (IfcBuiltElement);
	OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
	OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
	PredefinedType : OPTIONAL IfcDoorTypeEnum;
	OperationType : OPTIONAL IfcDoorTypeOperationEnum;
	UserDefinedOperationType : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCDOORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcEarthworksElement
 SUPERTYPE OF (ONEOF
	(IfcEarthworksFill
	,IfcReinforcedSoil))
 SUBTYPE OF (IfcBuiltElement);
END_ENTITY;

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

ENTITY IfcEdge
 SUPERTYPE OF (ONEOF
	(IfcEdgeCurve
	,IfcOrientedEdge
	,IfcSubedge))
 SUBTYPE OF (IfcTopologicalRepresentationItem);
	EdgeStart : IfcVertex;
	EdgeEnd : IfcVertex;
END_ENTITY;

ENTITY IfcEdgeCurve
 SUBTYPE OF (IfcEdge);
	EdgeGeometry : IfcCurve;
	SameSense : IfcBoolean;
END_ENTITY;

ENTITY IfcEdgeLoop
 SUBTYPE OF (IfcLoop);
	EdgeList : LIST [1:?] OF IfcOrientedEdge;
 DERIVE
	 Ne : IfcInteger := SIZEOF(EdgeList);
 WHERE
	IsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);
	IsContinuous : IfcLoopHeadToTail(SELF);
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcExternalSpatialElement
 SUBTYPE OF (IfcExternalSpatialStructureElement);
	PredefinedType : OPTIONAL IfcExternalSpatialElementTypeEnum;
 INVERSE
	BoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;
END_ENTITY;

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

ENTITY IfcExternallyDefinedHatchStyle
 SUBTYPE OF (IfcExternalReference);
END_ENTITY;

ENTITY IfcExternallyDefinedSurfaceStyle
 SUBTYPE OF (IfcExternalReference);
END_ENTITY;

ENTITY IfcExternallyDefinedTextFont
 SUBTYPE OF (IfcExternalReference);
END_ENTITY;

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

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

ENTITY IfcFace
 SUPERTYPE OF (ONEOF
	(IfcFaceSurface))
 SUBTYPE OF (IfcTopologicalRepresentationItem);
	Bounds : SET [1:?] OF IfcFaceBound;
 INVERSE
	HasTextureMaps : SET [0:?] OF IfcTextureMap FOR MappedTo;
 WHERE
	HasOuterBound : SIZEOF(QUERY(temp <* Bounds | 'IFC4X3.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;
END_ENTITY;

ENTITY IfcFaceBasedSurfaceModel
 SUBTYPE OF (IfcGeometricRepresentationItem);
	FbsmFaces : SET [1:?] OF IfcConnectedFaceSet;
 DERIVE
	 Dim : IfcDimensionCount := 3;
END_ENTITY;

ENTITY IfcFaceBound
 SUPERTYPE OF (ONEOF
	(IfcFaceOuterBound))
 SUBTYPE OF (IfcTopologicalRepresentationItem);
	Bound : IfcLoop;
	Orientation : IfcBoolean;
END_ENTITY;

ENTITY IfcFaceOuterBound
 SUBTYPE OF (IfcFaceBound);
END_ENTITY;

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

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

ENTITY IfcFacetedBrepWithVoids
 SUBTYPE OF (IfcFacetedBrep);
	Voids : SET [1:?] OF IfcClosedShell;
END_ENTITY;

ENTITY IfcFacility
 SUPERTYPE OF (ONEOF
	(IfcBridge
	,IfcBuilding
	,IfcMarineFacility
	,IfcRailway
	,IfcRoad))
 SUBTYPE OF (IfcSpatialStructureElement);
END_ENTITY;

ENTITY IfcFacilityPart
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcBridgePart
	,IfcFacilityPartCommon
	,IfcMarinePart
	,IfcRailwayPart
	,IfcRoadPart))
 SUBTYPE OF (IfcSpatialStructureElement);
	UsageType : IfcFacilityUsageEnum;
END_ENTITY;

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

ENTITY IfcFailureConnectionCondition
 SUBTYPE OF (IfcStructuralConnectionCondition);
	TensionFailureX : OPTIONAL IfcForceMeasure;
	TensionFailureY : OPTIONAL IfcForceMeasure;
	TensionFailureZ : OPTIONAL IfcForceMeasure;
	CompressionFailureX : OPTIONAL IfcForceMeasure;
	CompressionFailureY : OPTIONAL IfcForceMeasure;
	CompressionFailureZ : OPTIONAL IfcForceMeasure;
END_ENTITY;

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

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

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

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

ENTITY IfcFeatureElement
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcFeatureElementAddition
	,IfcFeatureElementSubtraction
	,IfcSurfaceFeature))
 SUBTYPE OF (IfcElement);
 WHERE
	NotContained : SIZEOF(ContainedInStructure) = 0;
END_ENTITY;

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

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

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

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

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

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

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

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

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

ENTITY IfcFixedReferenceSweptAreaSolid
 SUPERTYPE OF (ONEOF
	(IfcDirectrixDerivedReferenceSweptAreaSolid))
 SUBTYPE OF (IfcDirectrixCurveSweptAreaSolid);
	FixedReference : IfcDirection;
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcGeometricRepresentationContext
 SUPERTYPE OF (ONEOF
	(IfcGeometricRepresentationSubContext))
 SUBTYPE OF (IfcRepresentationContext);
	CoordinateSpaceDimension : IfcDimensionCount;
	Precision : OPTIONAL IfcReal;
	WorldCoordinateSystem : IfcAxis2Placement;
	TrueNorth : OPTIONAL IfcDirection;
 INVERSE
	HasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext;
	HasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;
 WHERE
	North2D : NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2);
END_ENTITY;

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

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

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

ENTITY IfcGeomodel
 SUBTYPE OF (IfcGeotechnicalAssembly);
END_ENTITY;

ENTITY IfcGeoslice
 SUBTYPE OF (IfcGeotechnicalAssembly);
END_ENTITY;

ENTITY IfcGeotechnicalAssembly
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcBorehole
	,IfcGeomodel
	,IfcGeoslice))
 SUBTYPE OF (IfcGeotechnicalElement);
END_ENTITY;

ENTITY IfcGeotechnicalElement
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcGeotechnicalAssembly
	,IfcGeotechnicalStratum))
 SUBTYPE OF (IfcElement);
END_ENTITY;

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

ENTITY IfcGradientCurve
 SUBTYPE OF (IfcCompositeCurve);
	BaseCurve : IfcBoundedCurve;
	EndPoint : OPTIONAL IfcPlacement;
 DERIVE
	 RelativeElevation : IfcLengthMeasure := IfcGradient(SELF);
END_ENTITY;

ENTITY IfcGrid
 SUBTYPE OF (IfcPositioningElement);
	UAxes : LIST [1:?] OF UNIQUE IfcGridAxis;
	VAxes : LIST [1:?] OF UNIQUE IfcGridAxis;
	WAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;
	PredefinedType : OPTIONAL IfcGridTypeEnum;
END_ENTITY;

ENTITY IfcGridAxis;
	AxisTag : OPTIONAL IfcLabel;
	AxisCurve : IfcCurve;
	SameSense : IfcBoolean;
 INVERSE
	PartOfW : SET [0:1] OF IfcGrid FOR WAxes;
	PartOfV : SET [0:1] OF IfcGrid FOR VAxes;
	PartOfU : SET [0:1] OF IfcGrid FOR UAxes;
	HasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes;
 WHERE
	WR1 : AxisCurve.Dim = 2;
	WR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);
END_ENTITY;

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

ENTITY IfcGroup
 SUPERTYPE OF (ONEOF
	(IfcAsset
	,IfcInventory
	,IfcStructuralLoadGroup
	,IfcStructuralResultGroup
	,IfcSystem))
 SUBTYPE OF (IfcObject);
 INVERSE
	IsGroupedBy : SET [0:?] OF IfcRelAssignsToGroup FOR RelatingGroup;
	ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;
END_ENTITY;

ENTITY IfcHalfSpaceSolid
 SUPERTYPE OF (ONEOF
	(IfcBoxedHalfSpace
	,IfcPolygonalBoundedHalfSpace))
 SUBTYPE OF (IfcGeometricRepresentationItem);
	BaseSurface : IfcSurface;
	AgreementFlag : IfcBoolean;
 DERIVE
	 Dim : IfcDimensionCount := 3;
END_ENTITY;

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

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

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

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

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

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

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

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

ENTITY IfcIndexedColourMap
 SUBTYPE OF (IfcPresentationItem);
	MappedTo : IfcTessellatedFaceSet;
	Opacity : OPTIONAL IfcNormalisedRatioMeasure;
	Colours : IfcColourRgbList;
	ColourIndex : LIST [1:?] OF IfcPositiveInteger;
END_ENTITY;

ENTITY IfcIndexedPolyCurve
 SUBTYPE OF (IfcBoundedCurve);
	Points : IfcCartesianPointList;
	Segments : OPTIONAL LIST [1:?] OF IfcSegmentIndexSelect;
	SelfIntersect : IfcLogical;
 WHERE
	Consecutive : NOT(EXISTS(Segments)) OR IfcConsecutiveSegments(Segments);
END_ENTITY;

ENTITY IfcIndexedPolygonalFace
 SUPERTYPE OF (ONEOF
	(IfcIndexedPolygonalFaceWithVoids))
 SUBTYPE OF (IfcTessellatedItem);
	CoordIndex : LIST [3:?] OF IfcPositiveInteger;
 INVERSE
	ToFaceSet : SET [1:?] OF IfcPolygonalFaceSet FOR Faces;
	HasTexCoords : SET [0:1] OF IfcTextureCoordinateIndices FOR TexCoordsOf;
END_ENTITY;

ENTITY IfcIndexedPolygonalFaceWithVoids
 SUBTYPE OF (IfcIndexedPolygonalFace);
	InnerCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger;
END_ENTITY;

ENTITY IfcIndexedPolygonalTextureMap
 SUBTYPE OF (IfcIndexedTextureMap);
	TexCoordIndices : SET [1:?] OF IfcTextureCoordinateIndices;
END_ENTITY;

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

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

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

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

ENTITY IfcIntersectionCurve
 SUBTYPE OF (IfcSurfaceCurve);
 WHERE
	DistinctSurfaces : IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[1]) <> IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[2]);
	TwoPCurves : SIZEOF(SELF\IfcSurfaceCurve.AssociatedGeometry) = 2;
END_ENTITY;

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

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

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

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

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

ENTITY IfcKerb
 SUBTYPE OF (IfcBuiltElement);
	Mountable : IfcBoolean;
END_ENTITY;

ENTITY IfcKerbType
 SUBTYPE OF (IfcBuiltElementType);
	Mountable : IfcBoolean;
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcLightSourceAmbient
 SUBTYPE OF (IfcLightSource);
END_ENTITY;

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

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

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

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

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

ENTITY IfcLinearElement
 SUPERTYPE OF (ONEOF
	(IfcAlignmentCant
	,IfcAlignmentHorizontal
	,IfcAlignmentSegment
	,IfcAlignmentVertical))
 SUBTYPE OF (IfcProduct);
END_ENTITY;

ENTITY IfcLinearPlacement
 SUBTYPE OF (IfcObjectPlacement);
	RelativePlacement : IfcAxis2PlacementLinear;
	CartesianPosition : OPTIONAL IfcAxis2Placement3D;
END_ENTITY;

ENTITY IfcLinearPositioningElement
 SUPERTYPE OF (ONEOF
	(IfcAlignment))
 SUBTYPE OF (IfcPositioningElement);
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcMaterialLayer
 SUPERTYPE OF (ONEOF
	(IfcMaterialLayerWithOffsets))
 SUBTYPE OF (IfcMaterialDefinition);
	Material : OPTIONAL IfcMaterial;
	LayerThickness : IfcNonNegativeLengthMeasure;
	IsVentilated : OPTIONAL IfcLogical;
	Name : OPTIONAL IfcLabel;
	Description : OPTIONAL IfcText;
	Category : OPTIONAL IfcLabel;
	Priority : OPTIONAL IfcInteger;
 INVERSE
	ToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;
 WHERE
	NormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};
END_ENTITY;

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

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

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

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

ENTITY IfcMaterialProfile
 SUPERTYPE OF (ONEOF
	(IfcMaterialProfileWithOffsets))
 SUBTYPE OF (IfcMaterialDefinition);
	Name : OPTIONAL IfcLabel;
	Description : OPTIONAL IfcText;
	Material : OPTIONAL IfcMaterial;
	Profile : IfcProfileDef;
	Priority : OPTIONAL IfcInteger;
	Category : OPTIONAL IfcLabel;
 INVERSE
	ToMaterialProfileSet : IfcMaterialProfileSet FOR MaterialProfiles;
 WHERE
	NormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ENTITY IfcMonetaryUnit;
	Currency : IfcLabel;
END_ENTITY;

ENTITY IfcMooringDevice
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcMooringDeviceTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcMooringDeviceTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcMooringDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCMOORINGDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

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

ENTITY IfcNavigationElement
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcNavigationElementTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcNavigationElementTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcNavigationElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCNAVIGATIONELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

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

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

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

ENTITY IfcOffsetCurve
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcOffsetCurve2D
	,IfcOffsetCurve3D
	,IfcOffsetCurveByDistances))
 SUBTYPE OF (IfcCurve);
	BasisCurve : IfcCurve;
END_ENTITY;

ENTITY IfcOffsetCurve2D
 SUBTYPE OF (IfcOffsetCurve);
	Distance : IfcLengthMeasure;
	SelfIntersect : IfcLogical;
 WHERE
	DimIs2D : BasisCurve.Dim = 2;
END_ENTITY;

ENTITY IfcOffsetCurve3D
 SUBTYPE OF (IfcOffsetCurve);
	Distance : IfcLengthMeasure;
	SelfIntersect : IfcLogical;
	RefDirection : IfcDirection;
 WHERE
	DimIs2D : BasisCurve.Dim = 3;
END_ENTITY;

ENTITY IfcOffsetCurveByDistances
 SUBTYPE OF (IfcOffsetCurve);
	OffsetValues : LIST [1:?] OF IfcPointByDistanceExpression;
	Tag : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcOpenCrossProfileDef
 SUBTYPE OF (IfcProfileDef);
	HorizontalWidths : IfcBoolean;
	Widths : LIST [1:?] OF IfcNonNegativeLengthMeasure;
	Slopes : LIST [1:?] OF IfcPlaneAngleMeasure;
	Tags : OPTIONAL LIST [2:?] OF IfcLabel;
	OffsetPoint : OPTIONAL IfcCartesianPoint;
 WHERE
	CorrectProfileType : SELF\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE;
	CorrespondingSlopeWidths : SIZEOF(Slopes) = SIZEOF(Widths);
	CorrespondingTags : (NOT EXISTS (Tags)) OR (SIZEOF(Tags) = (SIZEOF(Slopes) + 1));
END_ENTITY;

ENTITY IfcOpenShell
 SUBTYPE OF (IfcConnectedFaceSet);
END_ENTITY;

ENTITY IfcOpeningElement
 SUBTYPE OF (IfcFeatureElementSubtraction);
	PredefinedType : OPTIONAL IfcOpeningElementTypeEnum;
 INVERSE
	HasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcOpeningElementTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcOpeningElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
END_ENTITY;

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

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

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

ENTITY IfcOuterBoundaryCurve
 SUBTYPE OF (IfcBoundaryCurve);
END_ENTITY;

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

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

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

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

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

ENTITY IfcPavement
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcPavementTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcPavementTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcPavementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCPAVEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

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

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

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

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

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

ENTITY IfcPhysicalQuantity
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcPhysicalComplexQuantity
	,IfcPhysicalSimpleQuantity));
	Name : IfcLabel;
	Description : OPTIONAL IfcText;
 INVERSE
	HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
	PartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;
END_ENTITY;

ENTITY IfcPhysicalSimpleQuantity
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcQuantityArea
	,IfcQuantityCount
	,IfcQuantityLength
	,IfcQuantityNumber
	,IfcQuantityTime
	,IfcQuantityVolume
	,IfcQuantityWeight))
 SUBTYPE OF (IfcPhysicalQuantity);
	Unit : OPTIONAL IfcNamedUnit;
END_ENTITY;

ENTITY IfcPile
 SUBTYPE OF (IfcDeepFoundation);
	PredefinedType : OPTIONAL IfcPileTypeEnum;
	ConstructionType : OPTIONAL IfcPileConstructionEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCPILETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

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

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

ENTITY IfcPixelTexture
 SUBTYPE OF (IfcSurfaceTexture);
	Width : IfcInteger;
	Height : IfcInteger;
	ColourComponents : IfcInteger;
	Pixel : LIST [1:?] OF IfcBinary;
 WHERE
	MinPixelInS : Width >= 1;
	MinPixelInT : Height >= 1;
	NumberOfColours : {1 <= ColourComponents <= 4};
	PixelAsByteAndSameLength : SIZEOF(QUERY(temp<* Pixel |
 (BLENGTH(temp) MOD 8 = 0) AND
 (BLENGTH(temp) = BLENGTH(Pixel[1]))
)) = SIZEOF(Pixel);
	SizeOfPixelList : SIZEOF(Pixel) = (Width * Height);
END_ENTITY;

ENTITY IfcPlacement
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcAxis1Placement
	,IfcAxis2Placement2D
	,IfcAxis2Placement3D
	,IfcAxis2PlacementLinear))
 SUBTYPE OF (IfcGeometricRepresentationItem);
	Location : IfcPoint;
 DERIVE
	 Dim : IfcDimensionCount := Location.Dim;
END_ENTITY;

ENTITY IfcPlanarBox
 SUBTYPE OF (IfcPlanarExtent);
	Placement : IfcAxis2Placement;
END_ENTITY;

ENTITY IfcPlanarExtent
 SUPERTYPE OF (ONEOF
	(IfcPlanarBox))
 SUBTYPE OF (IfcGeometricRepresentationItem);
	SizeInX : IfcLengthMeasure;
	SizeInY : IfcLengthMeasure;
END_ENTITY;

ENTITY IfcPlane
 SUBTYPE OF (IfcElementarySurface);
END_ENTITY;

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

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

ENTITY IfcPoint
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcCartesianPoint
	,IfcPointByDistanceExpression
	,IfcPointOnCurve
	,IfcPointOnSurface))
 SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;

ENTITY IfcPointByDistanceExpression
 SUBTYPE OF (IfcPoint);
	DistanceAlong : IfcCurveMeasureSelect;
	OffsetLateral : OPTIONAL IfcLengthMeasure;
	OffsetVertical : OPTIONAL IfcLengthMeasure;
	OffsetLongitudinal : OPTIONAL IfcLengthMeasure;
	BasisCurve : IfcCurve;
 DERIVE
	 Dim : IfcDimensionCount := BasisCurve.Dim;
END_ENTITY;

ENTITY IfcPointOnCurve
 SUBTYPE OF (IfcPoint);
	BasisCurve : IfcCurve;
	PointParameter : IfcParameterValue;
 DERIVE
	 Dim : IfcDimensionCount := BasisCurve.Dim;
END_ENTITY;

ENTITY IfcPointOnSurface
 SUBTYPE OF (IfcPoint);
	BasisSurface : IfcSurface;
	PointParameterU : IfcParameterValue;
	PointParameterV : IfcParameterValue;
 DERIVE
	 Dim : IfcDimensionCount := BasisSurface.Dim;
END_ENTITY;

ENTITY IfcPolyLoop
 SUBTYPE OF (IfcLoop);
	Polygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;
 WHERE
	AllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;
END_ENTITY;

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

ENTITY IfcPolygonalFaceSet
 SUBTYPE OF (IfcTessellatedFaceSet);
	Faces : LIST [1:?] OF IfcIndexedPolygonalFace;
	PnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;
END_ENTITY;

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

ENTITY IfcPolynomialCurve
 SUBTYPE OF (IfcCurve);
	Position : IfcPlacement;
	CoefficientsX : OPTIONAL LIST [2:?] OF IfcReal;
	CoefficientsY : OPTIONAL LIST [2:?] OF IfcReal;
	CoefficientsZ : OPTIONAL LIST [2:?] OF IfcReal;
 WHERE
	CorrectPositionDim : ((Position.Dim=2) AND (NOT EXISTS(CoefficientsZ))) OR (Position.Dim=3);
	ValidCoefficients : (EXISTS(CoefficientsX) AND EXISTS(CoefficientsY)) OR (EXISTS(CoefficientsX) AND EXISTS(CoefficientsZ)) OR (EXISTS(CoefficientsY) AND EXISTS(CoefficientsZ)) OR (EXISTS(CoefficientsX) AND EXISTS(CoefficientsY) AND EXISTS(CoefficientsZ));
END_ENTITY;

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

ENTITY IfcPositioningElement
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcGrid
	,IfcLinearPositioningElement
	,IfcReferent))
 SUBTYPE OF (IfcProduct);
 INVERSE
	ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
	Positions : SET [0:?] OF IfcRelPositions FOR RelatingPositioningElement;
 WHERE
	HasPlacement : EXISTS(SELF\IfcProduct.ObjectPlacement);
END_ENTITY;

ENTITY IfcPostalAddress
 SUBTYPE OF (IfcAddress);
	InternalLocation : OPTIONAL IfcLabel;
	AddressLines : OPTIONAL LIST [1:?] OF IfcLabel;
	PostalBox : OPTIONAL IfcLabel;
	Town : OPTIONAL IfcLabel;
	Region : OPTIONAL IfcLabel;
	PostalCode : OPTIONAL IfcLabel;
	Country : OPTIONAL IfcLabel;
 WHERE
	WR1 : EXISTS (InternalLocation) OR 
EXISTS (AddressLines) OR
EXISTS (PostalBox) OR
EXISTS (PostalCode) OR
EXISTS (Town) OR 
EXISTS (Region) OR  
EXISTS (Country);
END_ENTITY;

ENTITY IfcPreDefinedColour
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcDraughtingPreDefinedColour))
 SUBTYPE OF (IfcPreDefinedItem);
END_ENTITY;

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

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

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

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

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

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

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

ENTITY IfcPresentationLayerWithStyle
 SUBTYPE OF (IfcPresentationLayerAssignment);
	LayerOn : IfcLogical;
	LayerFrozen : IfcLogical;
	LayerBlocked : IfcLogical;
	LayerStyles : SET [0:?] OF IfcPresentationStyle;
 WHERE
	ApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | (SIZEOF(TYPEOF(temp) * ['IFC4X3.IfcGeometricRepresentationItem','IFC4X3.IfcMappedItem']) >= 1))) = SIZEOF(AssignedItems);
END_ENTITY;

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

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

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

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

ENTITY IfcProduct
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcAnnotation
	,IfcElement
	,IfcLinearElement
	,IfcPort
	,IfcPositioningElement
	,IfcSpatialElement
	,IfcStructuralActivity
	,IfcStructuralItem))
 SUBTYPE OF (IfcObject);
	ObjectPlacement : OPTIONAL IfcObjectPlacement;
	Representation : OPTIONAL IfcProductRepresentation;
 INVERSE
	ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;
	PositionedRelativeTo : SET [0:?] OF IfcRelPositions FOR RelatedProducts;
	ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;
 WHERE
	PlacementForShapeRepresentation : (EXISTS(Representation) AND EXISTS(ObjectPlacement))
            OR (EXISTS(Representation) AND 
      (SIZEOF(QUERY(temp <* Representation.Representations | 'IFC4X3.IFCSHAPEREPRESENTATION' IN TYPEOF(temp))) = 0))
            OR (NOT(EXISTS(Representation)));
END_ENTITY;

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

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

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

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

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

ENTITY IfcProjectLibrary
 SUBTYPE OF (IfcContext);
END_ENTITY;

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

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

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

ENTITY IfcProperty
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcComplexProperty
	,IfcSimpleProperty))
 SUBTYPE OF (IfcPropertyAbstraction);
	Name : IfcIdentifier;
	Specification : OPTIONAL IfcText;
 INVERSE
	PartOfPset : SET [0:?] OF IfcPropertySet FOR HasProperties;
	PropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;
	PropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;
	PartOfComplex : SET [0:?] OF IfcComplexProperty FOR HasProperties;
	HasConstraints : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatedResourceObjects;
	HasApprovals : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatedResourceObjects;
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

ENTITY IfcPropertySetTemplate
 SUBTYPE OF (IfcPropertyTemplateDefinition);
	TemplateType : OPTIONAL IfcPropertySetTemplateTypeEnum;
	ApplicableEntity : OPTIONAL IfcIdentifier;
	HasPropertyTemplates : SET [1:?] OF IfcPropertyTemplate;
 INVERSE
	Defines : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatingTemplate;
 WHERE
	ExistsName : EXISTS(SELF\IfcRoot.Name);
	UniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);
END_ENTITY;

ENTITY IfcPropertySingleValue
 SUBTYPE OF (IfcSimpleProperty);
	NominalValue : OPTIONAL IfcValue;
	Unit : OPTIONAL IfcUnit;
END_ENTITY;

ENTITY IfcPropertyTableValue
 SUBTYPE OF (IfcSimpleProperty);
	DefiningValues : OPTIONAL LIST [1:?] OF UNIQUE IfcValue;
	DefinedValues : OPTIONAL LIST [1:?] OF IfcValue;
	Expression : OPTIONAL IfcText;
	DefiningUnit : OPTIONAL IfcUnit;
	DefinedUnit : OPTIONAL IfcUnit;
	CurveInterpolation : OPTIONAL IfcCurveInterpolationEnum;
 WHERE
	WR21 : (NOT(EXISTS(DefiningValues)) AND NOT(EXISTS(DefinedValues)))
OR (SIZEOF(DefiningValues) = SIZEOF(DefinedValues));
	WR22 : NOT(EXISTS(DefiningValues)) OR 
(SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])
)) = 0);
	WR23 : NOT(EXISTS(DefinedValues)) OR 
(SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])
)) = 0);
END_ENTITY;

ENTITY IfcPropertyTemplate
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcComplexPropertyTemplate
	,IfcSimplePropertyTemplate))
 SUBTYPE OF (IfcPropertyTemplateDefinition);
 INVERSE
	PartOfComplexTemplate : SET [0:?] OF IfcComplexPropertyTemplate FOR HasPropertyTemplates;
	PartOfPsetTemplate : SET [0:?] OF IfcPropertySetTemplate FOR HasPropertyTemplates;
END_ENTITY;

ENTITY IfcPropertyTemplateDefinition
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcPropertySetTemplate
	,IfcPropertyTemplate))
 SUBTYPE OF (IfcPropertyDefinition);
END_ENTITY;

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

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

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

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

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

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

ENTITY IfcQuantityArea
 SUBTYPE OF (IfcPhysicalSimpleQuantity);
	AreaValue : IfcAreaMeasure;
	Formula : OPTIONAL IfcLabel;
 WHERE
	WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
   (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);
	WR22 : AreaValue >= 0.;
END_ENTITY;

ENTITY IfcQuantityCount
 SUBTYPE OF (IfcPhysicalSimpleQuantity);
	CountValue : IfcCountMeasure;
	Formula : OPTIONAL IfcLabel;
 WHERE
	WR21 : CountValue >= 0;
END_ENTITY;

ENTITY IfcQuantityLength
 SUBTYPE OF (IfcPhysicalSimpleQuantity);
	LengthValue : IfcLengthMeasure;
	Formula : OPTIONAL IfcLabel;
 WHERE
	WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
   (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);
	WR22 : LengthValue >= 0.;
END_ENTITY;

ENTITY IfcQuantityNumber
 SUBTYPE OF (IfcPhysicalSimpleQuantity);
	NumberValue : IfcNumericMeasure;
	Formula : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcQuantitySet
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcElementQuantity))
 SUBTYPE OF (IfcPropertySetDefinition);
END_ENTITY;

ENTITY IfcQuantityTime
 SUBTYPE OF (IfcPhysicalSimpleQuantity);
	TimeValue : IfcTimeMeasure;
	Formula : OPTIONAL IfcLabel;
 WHERE
	WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
   (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);
	WR22 : TimeValue >= 0.;
END_ENTITY;

ENTITY IfcQuantityVolume
 SUBTYPE OF (IfcPhysicalSimpleQuantity);
	VolumeValue : IfcVolumeMeasure;
	Formula : OPTIONAL IfcLabel;
 WHERE
	WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
   (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);
	WR22 : VolumeValue >= 0.;
END_ENTITY;

ENTITY IfcQuantityWeight
 SUBTYPE OF (IfcPhysicalSimpleQuantity);
	WeightValue : IfcMassMeasure;
	Formula : OPTIONAL IfcLabel;
 WHERE
	WR21 : NOT(EXISTS(SELF\IfcPhysicalSimpleQuantity.Unit)) OR
   (SELF\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);
	WR22 : WeightValue >= 0.;
END_ENTITY;

ENTITY IfcRail
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcRailTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcRailTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcRailTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCRAILTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcRailing
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcRailingTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCRAILINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcRailway
 SUBTYPE OF (IfcFacility);
	PredefinedType : OPTIONAL IfcRailwayTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcRailwayTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcRailwayTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcRailwayTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

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

ENTITY IfcRamp
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcRampTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCRAMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcRampFlight
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcRampFlightTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCRAMPFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

ENTITY IfcRationalBSplineCurveWithKnots
 SUBTYPE OF (IfcBSplineCurveWithKnots);
	WeightsData : LIST [2:?] OF IfcReal;
 DERIVE
	 Weights : ARRAY [0:UpperIndexOnControlPoints] OF IfcReal := IfcListToArray(WeightsData,0,SELF\IfcBSplineCurve.UpperIndexOnControlPoints);
 WHERE
	SameNumOfWeightsAndPoints : SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineCurve.ControlPointsList);
	WeightsGreaterZero : IfcCurveWeightsPositive(SELF);
END_ENTITY;

ENTITY IfcRationalBSplineSurfaceWithKnots
 SUBTYPE OF (IfcBSplineSurfaceWithKnots);
	WeightsData : LIST [2:?] OF LIST [2:?] OF IfcReal;
 DERIVE
	 Weights : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcReal := IfcMakeArrayOfArray(WeightsData,0,UUpper,0,VUpper);
 WHERE
	CorrespondingWeightsDataLists : (SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineSurface.ControlPointsList))
AND 
(SIZEOF(WeightsData[1]) = SIZEOF(SELF\IfcBSplineSurface.ControlPointsList[1]));
	WeightValuesGreaterZero : IfcSurfaceWeightsPositive(SELF);
END_ENTITY;

ENTITY IfcRectangleHollowProfileDef
 SUBTYPE OF (IfcRectangleProfileDef);
	WallThickness : IfcPositiveLengthMeasure;
	InnerFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
	OuterFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
 WHERE
	ValidInnerRadius : NOT(EXISTS(InnerFilletRadius)) OR 
((InnerFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND 
 (InnerFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2. - WallThickness)))
;
	ValidOuterRadius : NOT(EXISTS(OuterFilletRadius)) OR 
((OuterFilletRadius <= (SELF\IfcRectangleProfileDef.XDim/2.)) AND 
 (OuterFilletRadius <= (SELF\IfcRectangleProfileDef.YDim/2.)));
	ValidWallThickness : (WallThickness < (SELF\IfcRectangleProfileDef.XDim/2.)) AND 
(WallThickness < (SELF\IfcRectangleProfileDef.YDim/2.));
END_ENTITY;

ENTITY IfcRectangleProfileDef
 SUPERTYPE OF (ONEOF
	(IfcRectangleHollowProfileDef
	,IfcRoundedRectangleProfileDef))
 SUBTYPE OF (IfcParameterizedProfileDef);
	XDim : IfcPositiveLengthMeasure;
	YDim : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcRectangularPyramid
 SUBTYPE OF (IfcCsgPrimitive3D);
	XLength : IfcPositiveLengthMeasure;
	YLength : IfcPositiveLengthMeasure;
	Height : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcRectangularTrimmedSurface
 SUBTYPE OF (IfcBoundedSurface);
	BasisSurface : IfcSurface;
	U1 : IfcParameterValue;
	V1 : IfcParameterValue;
	U2 : IfcParameterValue;
	V2 : IfcParameterValue;
	Usense : IfcBoolean;
	Vsense : IfcBoolean;
 WHERE
	U1AndU2Different : U1 <> U2;
	UsenseCompatible : (('IFC4X3.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND
         (NOT ('IFC4X3.IFCPLANE' IN TYPEOF(BasisSurface)))) OR
         ('IFC4X3.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR
         (Usense = (U2 > U1));
	V1AndV2Different : V1 <> V2;
	VsenseCompatible : Vsense = (V2 > V1);
END_ENTITY;

ENTITY IfcRecurrencePattern;
	RecurrenceType : IfcRecurrenceTypeEnum;
	DayComponent : OPTIONAL SET [1:?] OF IfcDayInMonthNumber;
	WeekdayComponent : OPTIONAL SET [1:?] OF IfcDayInWeekNumber;
	MonthComponent : OPTIONAL SET [1:?] OF IfcMonthInYearNumber;
	Position : OPTIONAL IfcInteger;
	Interval : OPTIONAL IfcInteger;
	Occurrences : OPTIONAL IfcInteger;
	TimePeriods : OPTIONAL LIST [1:?] OF IfcTimePeriod;
END_ENTITY;

ENTITY IfcReference;
	TypeIdentifier : OPTIONAL IfcIdentifier;
	AttributeIdentifier : OPTIONAL IfcIdentifier;
	InstanceName : OPTIONAL IfcLabel;
	ListPositions : OPTIONAL LIST [1:?] OF IfcInteger;
	InnerReference : OPTIONAL IfcReference;
END_ENTITY;

ENTITY IfcReferent
 SUBTYPE OF (IfcPositioningElement);
	PredefinedType : OPTIONAL IfcReferentTypeEnum;
END_ENTITY;

ENTITY IfcRegularTimeSeries
 SUBTYPE OF (IfcTimeSeries);
	TimeStep : IfcTimeMeasure;
	Values : LIST [1:?] OF IfcTimeSeriesValue;
END_ENTITY;

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

ENTITY IfcReinforcementBarProperties
 SUBTYPE OF (IfcPreDefinedProperties);
	TotalCrossSectionArea : IfcAreaMeasure;
	SteelGrade : IfcLabel;
	BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;
	EffectiveDepth : OPTIONAL IfcLengthMeasure;
	NominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;
	BarCount : OPTIONAL IfcCountMeasure;
END_ENTITY;

ENTITY IfcReinforcementDefinitionProperties
 SUBTYPE OF (IfcPreDefinedPropertySet);
	DefinitionType : OPTIONAL IfcLabel;
	ReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;
END_ENTITY;

ENTITY IfcReinforcingBar
 SUBTYPE OF (IfcReinforcingElement);
	NominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	CrossSectionArea : OPTIONAL IfcAreaMeasure;
	BarLength : OPTIONAL IfcPositiveLengthMeasure;
	PredefinedType : OPTIONAL IfcReinforcingBarTypeEnum;
	BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCREINFORCINGBARTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcReinforcingBarType
 SUBTYPE OF (IfcReinforcingElementType);
	PredefinedType : IfcReinforcingBarTypeEnum;
	NominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	CrossSectionArea : OPTIONAL IfcAreaMeasure;
	BarLength : OPTIONAL IfcPositiveLengthMeasure;
	BarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;
	BendingShapeCode : OPTIONAL IfcLabel;
	BendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;
 WHERE
	BendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);
	CorrectPredefinedType : (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcReinforcingElement
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcReinforcingBar
	,IfcReinforcingMesh
	,IfcTendon
	,IfcTendonAnchor
	,IfcTendonConduit))
 SUBTYPE OF (IfcElementComponent);
	SteelGrade : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcReinforcingElementType
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcReinforcingBarType
	,IfcReinforcingMeshType
	,IfcTendonAnchorType
	,IfcTendonConduitType
	,IfcTendonType))
 SUBTYPE OF (IfcElementComponentType);
END_ENTITY;

ENTITY IfcReinforcingMesh
 SUBTYPE OF (IfcReinforcingElement);
	MeshLength : OPTIONAL IfcPositiveLengthMeasure;
	MeshWidth : OPTIONAL IfcPositiveLengthMeasure;
	LongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	TransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	LongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;
	TransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;
	LongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;
	TransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;
	PredefinedType : OPTIONAL IfcReinforcingMeshTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCREINFORCINGMESHTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcReinforcingMeshType
 SUBTYPE OF (IfcReinforcingElementType);
	PredefinedType : IfcReinforcingMeshTypeEnum;
	MeshLength : OPTIONAL IfcPositiveLengthMeasure;
	MeshWidth : OPTIONAL IfcPositiveLengthMeasure;
	LongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	TransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	LongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;
	TransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;
	LongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;
	TransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;
	BendingShapeCode : OPTIONAL IfcLabel;
	BendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;
 WHERE
	BendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);
	CorrectPredefinedType : (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcRelAdheresToElement
 SUBTYPE OF (IfcRelDecomposes);
	RelatingElement : IfcElement;
	RelatedSurfaceFeatures : SET [1:?] OF IfcSurfaceFeature;
END_ENTITY;

ENTITY IfcRelAggregates
 SUBTYPE OF (IfcRelDecomposes);
	RelatingObject : IfcObjectDefinition;
	RelatedObjects : SET [1:?] OF IfcObjectDefinition;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelAssigns
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcRelAssignsToActor
	,IfcRelAssignsToControl
	,IfcRelAssignsToGroup
	,IfcRelAssignsToProcess
	,IfcRelAssignsToProduct
	,IfcRelAssignsToResource))
 SUBTYPE OF (IfcRelationship);
	RelatedObjects : SET [1:?] OF IfcObjectDefinition;
	RelatedObjectsType : OPTIONAL IfcObjectTypeEnum;
 WHERE
	WR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);
END_ENTITY;

ENTITY IfcRelAssignsToActor
 SUBTYPE OF (IfcRelAssigns);
	RelatingActor : IfcActor;
	ActingRole : OPTIONAL IfcActorRole;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelAssignsToControl
 SUBTYPE OF (IfcRelAssigns);
	RelatingControl : IfcControl;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelAssignsToGroup
 SUPERTYPE OF (ONEOF
	(IfcRelAssignsToGroupByFactor))
 SUBTYPE OF (IfcRelAssigns);
	RelatingGroup : IfcGroup;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelAssignsToGroupByFactor
 SUBTYPE OF (IfcRelAssignsToGroup);
	Factor : IfcRatioMeasure;
END_ENTITY;

ENTITY IfcRelAssignsToProcess
 SUBTYPE OF (IfcRelAssigns);
	RelatingProcess : IfcProcessSelect;
	QuantityInProcess : OPTIONAL IfcMeasureWithUnit;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelAssignsToProduct
 SUBTYPE OF (IfcRelAssigns);
	RelatingProduct : IfcProductSelect;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelAssignsToResource
 SUBTYPE OF (IfcRelAssigns);
	RelatingResource : IfcResourceSelect;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelAssociates
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcRelAssociatesApproval
	,IfcRelAssociatesClassification
	,IfcRelAssociatesConstraint
	,IfcRelAssociatesDocument
	,IfcRelAssociatesLibrary
	,IfcRelAssociatesMaterial
	,IfcRelAssociatesProfileDef))
 SUBTYPE OF (IfcRelationship);
	RelatedObjects : SET [1:?] OF IfcDefinitionSelect;
END_ENTITY;

ENTITY IfcRelAssociatesApproval
 SUBTYPE OF (IfcRelAssociates);
	RelatingApproval : IfcApproval;
END_ENTITY;

ENTITY IfcRelAssociatesClassification
 SUBTYPE OF (IfcRelAssociates);
	RelatingClassification : IfcClassificationSelect;
END_ENTITY;

ENTITY IfcRelAssociatesConstraint
 SUBTYPE OF (IfcRelAssociates);
	Intent : OPTIONAL IfcLabel;
	RelatingConstraint : IfcConstraint;
END_ENTITY;

ENTITY IfcRelAssociatesDocument
 SUBTYPE OF (IfcRelAssociates);
	RelatingDocument : IfcDocumentSelect;
END_ENTITY;

ENTITY IfcRelAssociatesLibrary
 SUBTYPE OF (IfcRelAssociates);
	RelatingLibrary : IfcLibrarySelect;
END_ENTITY;

ENTITY IfcRelAssociatesMaterial
 SUBTYPE OF (IfcRelAssociates);
	RelatingMaterial : IfcMaterialSelect;
 WHERE
	AllowedElements : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | (
  SIZEOF(TYPEOF(temp) * [   
    'IFC4X3.IFCELEMENT', 
    'IFC4X3.IFCELEMENTTYPE',
    'IFC4X3.IFCWINDOWSTYLE',
    'IFC4X3.IFCDOORSTYLE',
    'IFC4X3.IFCSTRUCTURALMEMBER',
    'IFC4X3.IFCPORT']) = 0) 
)) = 0;
	NoVoidElement : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | 
  ('IFC4X3.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR 
  ('IFC4X3.IFCVIRTUALELEMENT' IN TYPEOF(temp)) 
)) = 0;
END_ENTITY;

ENTITY IfcRelAssociatesProfileDef
 SUBTYPE OF (IfcRelAssociates);
	RelatingProfileDef : IfcProfileDef;
END_ENTITY;

ENTITY IfcRelConnects
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcRelConnectsElements
	,IfcRelConnectsPortToElement
	,IfcRelConnectsPorts
	,IfcRelConnectsStructuralActivity
	,IfcRelConnectsStructuralMember
	,IfcRelContainedInSpatialStructure
	,IfcRelCoversBldgElements
	,IfcRelCoversSpaces
	,IfcRelFillsElement
	,IfcRelFlowControlElements
	,IfcRelInterferesElements
	,IfcRelPositions
	,IfcRelReferencedInSpatialStructure
	,IfcRelSequence
	,IfcRelServicesBuildings
	,IfcRelSpaceBoundary))
 SUBTYPE OF (IfcRelationship);
END_ENTITY;

ENTITY IfcRelConnectsElements
 SUPERTYPE OF (ONEOF
	(IfcRelConnectsPathElements
	,IfcRelConnectsWithRealizingElements))
 SUBTYPE OF (IfcRelConnects);
	ConnectionGeometry : OPTIONAL IfcConnectionGeometry;
	RelatingElement : IfcElement;
	RelatedElement : IfcElement;
 WHERE
	NoSelfReference : RelatingElement :<>: RelatedElement;
END_ENTITY;

ENTITY IfcRelConnectsPathElements
 SUBTYPE OF (IfcRelConnectsElements);
	RelatingPriorities : LIST [0:?] OF IfcInteger;
	RelatedPriorities : LIST [0:?] OF IfcInteger;
	RelatedConnectionType : IfcConnectionTypeEnum;
	RelatingConnectionType : IfcConnectionTypeEnum;
 WHERE
	NormalizedRelatedPriorities : (SIZEOF(RelatedPriorities) = 0)
OR
(SIZEOF (QUERY (temp <* RelatedPriorities
  | {0 <= temp <= 100}
  )) = SIZEOF(RelatedPriorities));
	NormalizedRelatingPriorities : (SIZEOF(RelatingPriorities) = 0)
OR
(SIZEOF (QUERY (temp <* RelatingPriorities
  | {0 <= temp <= 100}
  )) = SIZEOF(RelatingPriorities));
END_ENTITY;

ENTITY IfcRelConnectsPortToElement
 SUBTYPE OF (IfcRelConnects);
	RelatingPort : IfcPort;
	RelatedElement : IfcDistributionElement;
END_ENTITY;

ENTITY IfcRelConnectsPorts
 SUBTYPE OF (IfcRelConnects);
	RelatingPort : IfcPort;
	RelatedPort : IfcPort;
	RealizingElement : OPTIONAL IfcElement;
 WHERE
	NoSelfReference : RelatingPort :<>: RelatedPort;
END_ENTITY;

ENTITY IfcRelConnectsStructuralActivity
 SUBTYPE OF (IfcRelConnects);
	RelatingElement : IfcStructuralActivityAssignmentSelect;
	RelatedStructuralActivity : IfcStructuralActivity;
END_ENTITY;

ENTITY IfcRelConnectsStructuralMember
 SUPERTYPE OF (ONEOF
	(IfcRelConnectsWithEccentricity))
 SUBTYPE OF (IfcRelConnects);
	RelatingStructuralMember : IfcStructuralMember;
	RelatedStructuralConnection : IfcStructuralConnection;
	AppliedCondition : OPTIONAL IfcBoundaryCondition;
	AdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;
	SupportedLength : OPTIONAL IfcLengthMeasure;
	ConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;
END_ENTITY;

ENTITY IfcRelConnectsWithEccentricity
 SUBTYPE OF (IfcRelConnectsStructuralMember);
	ConnectionConstraint : IfcConnectionGeometry;
END_ENTITY;

ENTITY IfcRelConnectsWithRealizingElements
 SUBTYPE OF (IfcRelConnectsElements);
	RealizingElements : SET [1:?] OF IfcElement;
	ConnectionType : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcRelContainedInSpatialStructure
 SUBTYPE OF (IfcRelConnects);
	RelatedElements : SET [1:?] OF IfcProduct;
	RelatingStructure : IfcSpatialElement;
 WHERE
	WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;
END_ENTITY;

ENTITY IfcRelCoversBldgElements
 SUBTYPE OF (IfcRelConnects);
	RelatingBuildingElement : IfcElement;
	RelatedCoverings : SET [1:?] OF IfcCovering;
END_ENTITY;

ENTITY IfcRelCoversSpaces
 SUBTYPE OF (IfcRelConnects);
	RelatingSpace : IfcSpace;
	RelatedCoverings : SET [1:?] OF IfcCovering;
END_ENTITY;

ENTITY IfcRelDeclares
 SUBTYPE OF (IfcRelationship);
	RelatingContext : IfcContext;
	RelatedDefinitions : SET [1:?] OF IfcDefinitionSelect;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* RelatedDefinitions | RelatingContext :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelDecomposes
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcRelAdheresToElement
	,IfcRelAggregates
	,IfcRelNests
	,IfcRelProjectsElement
	,IfcRelVoidsElement))
 SUBTYPE OF (IfcRelationship);
END_ENTITY;

ENTITY IfcRelDefines
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcRelDefinesByObject
	,IfcRelDefinesByProperties
	,IfcRelDefinesByTemplate
	,IfcRelDefinesByType))
 SUBTYPE OF (IfcRelationship);
END_ENTITY;

ENTITY IfcRelDefinesByObject
 SUBTYPE OF (IfcRelDefines);
	RelatedObjects : SET [1:?] OF IfcObject;
	RelatingObject : IfcObject;
END_ENTITY;

ENTITY IfcRelDefinesByProperties
 SUBTYPE OF (IfcRelDefines);
	RelatedObjects : SET [1:?] OF IfcObjectDefinition;
	RelatingPropertyDefinition : IfcPropertySetDefinitionSelect;
 WHERE
	NoRelatedTypeObject : SIZEOF(QUERY(Types <* SELF\IfcRelDefinesByProperties.RelatedObjects |  'IFC4X3.IFCTYPEOBJECT' IN TYPEOF(Types))) = 0;
END_ENTITY;

ENTITY IfcRelDefinesByTemplate
 SUBTYPE OF (IfcRelDefines);
	RelatedPropertySets : SET [1:?] OF IfcPropertySetDefinition;
	RelatingTemplate : IfcPropertySetTemplate;
END_ENTITY;

ENTITY IfcRelDefinesByType
 SUBTYPE OF (IfcRelDefines);
	RelatedObjects : SET [1:?] OF IfcObject;
	RelatingType : IfcTypeObject;
END_ENTITY;

ENTITY IfcRelFillsElement
 SUBTYPE OF (IfcRelConnects);
	RelatingOpeningElement : IfcOpeningElement;
	RelatedBuildingElement : IfcElement;
END_ENTITY;

ENTITY IfcRelFlowControlElements
 SUBTYPE OF (IfcRelConnects);
	RelatedControlElements : SET [1:?] OF IfcDistributionControlElement;
	RelatingFlowElement : IfcDistributionFlowElement;
END_ENTITY;

ENTITY IfcRelInterferesElements
 SUBTYPE OF (IfcRelConnects);
	RelatingElement : IfcInterferenceSelect;
	RelatedElement : IfcInterferenceSelect;
	InterferenceGeometry : OPTIONAL IfcConnectionGeometry;
	InterferenceSpace : OPTIONAL IfcSpatialZone;
	InterferenceType : OPTIONAL IfcIdentifier;
	ImpliedOrder : IfcLogical;
 WHERE
	NoSelfReference : RelatingElement :<>: RelatedElement;
END_ENTITY;

ENTITY IfcRelNests
 SUBTYPE OF (IfcRelDecomposes);
	RelatingObject : IfcObjectDefinition;
	RelatedObjects : LIST [1:?] OF IfcObjectDefinition;
 WHERE
	NoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;
END_ENTITY;

ENTITY IfcRelPositions
 SUBTYPE OF (IfcRelConnects);
	RelatingPositioningElement : IfcPositioningElement;
	RelatedProducts : SET [1:?] OF IfcProduct;
 WHERE
	NoSelfReference : SIZEOF(QUERY(temp <* RelatedProducts | RelatingPositioningElement :=: temp)) = 0;
END_ENTITY;

ENTITY IfcRelProjectsElement
 SUBTYPE OF (IfcRelDecomposes);
	RelatingElement : IfcElement;
	RelatedFeatureElement : IfcFeatureElementAddition;
END_ENTITY;

ENTITY IfcRelReferencedInSpatialStructure
 SUBTYPE OF (IfcRelConnects);
	RelatedElements : SET [1:?] OF IfcSpatialReferenceSelect;
	RelatingStructure : IfcSpatialElement;
 WHERE
	AllowedRelatedElements : SIZEOF(QUERY(temp <* RelatedElements | ('IFC4X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp)) AND (NOT ('IFC4X3.IFCSPACE' IN TYPEOF(temp)))
)) = 0;
END_ENTITY;

ENTITY IfcRelSequence
 SUBTYPE OF (IfcRelConnects);
	RelatingProcess : IfcProcess;
	RelatedProcess : IfcProcess;
	TimeLag : OPTIONAL IfcLagTime;
	SequenceType : OPTIONAL IfcSequenceEnum;
	UserDefinedSequenceType : OPTIONAL IfcLabel;
 WHERE
	AvoidInconsistentSequence : RelatingProcess :<>: RelatedProcess;
	CorrectSequenceType : (SequenceType <> IfcSequenceEnum.USERDEFINED) OR ((SequenceType = IfcSequenceEnum.USERDEFINED) AND EXISTS(UserDefinedSequenceType));
END_ENTITY;

ENTITY IfcRelServicesBuildings
 SUBTYPE OF (IfcRelConnects);
	RelatingSystem : IfcSystem;
	RelatedBuildings : SET [1:?] OF IfcSpatialElement;
END_ENTITY;

ENTITY IfcRelSpaceBoundary
 SUPERTYPE OF (ONEOF
	(IfcRelSpaceBoundary1stLevel))
 SUBTYPE OF (IfcRelConnects);
	RelatingSpace : IfcSpaceBoundarySelect;
	RelatedBuildingElement : IfcElement;
	ConnectionGeometry : OPTIONAL IfcConnectionGeometry;
	PhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;
	InternalOrExternalBoundary : IfcInternalOrExternalEnum;
 WHERE
	CorrectPhysOrVirt : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) 
  AND (NOT('IFC4X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) 
OR 
((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) 
  AND (('IFC4X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) 
  OR   ('IFC4X3.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) 
OR 
(PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);
END_ENTITY;

ENTITY IfcRelSpaceBoundary1stLevel
 SUPERTYPE OF (ONEOF
	(IfcRelSpaceBoundary2ndLevel))
 SUBTYPE OF (IfcRelSpaceBoundary);
	ParentBoundary : OPTIONAL IfcRelSpaceBoundary1stLevel;
 INVERSE
	InnerBoundaries : SET [0:?] OF IfcRelSpaceBoundary1stLevel FOR ParentBoundary;
END_ENTITY;

ENTITY IfcRelSpaceBoundary2ndLevel
 SUBTYPE OF (IfcRelSpaceBoundary1stLevel);
	CorrespondingBoundary : OPTIONAL IfcRelSpaceBoundary2ndLevel;
 INVERSE
	Corresponds : SET [0:1] OF IfcRelSpaceBoundary2ndLevel FOR CorrespondingBoundary;
END_ENTITY;

ENTITY IfcRelVoidsElement
 SUBTYPE OF (IfcRelDecomposes);
	RelatingBuildingElement : IfcElement;
	RelatedOpeningElement : IfcFeatureElementSubtraction;
END_ENTITY;

ENTITY IfcRelationship
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcRelAssigns
	,IfcRelAssociates
	,IfcRelConnects
	,IfcRelDeclares
	,IfcRelDecomposes
	,IfcRelDefines))
 SUBTYPE OF (IfcRoot);
END_ENTITY;

ENTITY IfcReparametrisedCompositeCurveSegment
 SUBTYPE OF (IfcCompositeCurveSegment);
	ParamLength : IfcParameterValue;
 WHERE
	PositiveLengthParameter : ParamLength > 0.0;
END_ENTITY;

ENTITY IfcRepresentation
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcShapeModel
	,IfcStyleModel));
	ContextOfItems : IfcRepresentationContext;
	RepresentationIdentifier : OPTIONAL IfcLabel;
	RepresentationType : OPTIONAL IfcLabel;
	Items : SET [1:?] OF IfcRepresentationItem;
 INVERSE
	RepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;
	LayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;
	OfProductRepresentation : SET [0:?] OF IfcProductRepresentation FOR Representations;
END_ENTITY;

ENTITY IfcRepresentationContext
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcGeometricRepresentationContext));
	ContextIdentifier : OPTIONAL IfcLabel;
	ContextType : OPTIONAL IfcLabel;
 INVERSE
	RepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;
END_ENTITY;

ENTITY IfcRepresentationItem
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcGeometricRepresentationItem
	,IfcMappedItem
	,IfcStyledItem
	,IfcTopologicalRepresentationItem));
 INVERSE
	LayerAssignment : SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems;
	StyledByItem : SET [0:1] OF IfcStyledItem FOR Item;
END_ENTITY;

ENTITY IfcRepresentationMap;
	MappingOrigin : IfcAxis2Placement;
	MappedRepresentation : IfcRepresentation;
 INVERSE
	HasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;
	MapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;
 WHERE
	ApplicableMappedRepr : 'IFC4X3.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation);
END_ENTITY;

ENTITY IfcResource
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcConstructionResource))
 SUBTYPE OF (IfcObject);
	Identification : OPTIONAL IfcIdentifier;
	LongDescription : OPTIONAL IfcText;
 INVERSE
	ResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;
END_ENTITY;

ENTITY IfcResourceApprovalRelationship
 SUBTYPE OF (IfcResourceLevelRelationship);
	RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;
	RelatingApproval : IfcApproval;
END_ENTITY;

ENTITY IfcResourceConstraintRelationship
 SUBTYPE OF (IfcResourceLevelRelationship);
	RelatingConstraint : IfcConstraint;
	RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;
END_ENTITY;

ENTITY IfcResourceLevelRelationship
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcApprovalRelationship
	,IfcCurrencyRelationship
	,IfcDocumentInformationRelationship
	,IfcExternalReferenceRelationship
	,IfcMaterialRelationship
	,IfcOrganizationRelationship
	,IfcPropertyDependencyRelationship
	,IfcResourceApprovalRelationship
	,IfcResourceConstraintRelationship));
	Name : OPTIONAL IfcLabel;
	Description : OPTIONAL IfcText;
END_ENTITY;

ENTITY IfcResourceTime
 SUBTYPE OF (IfcSchedulingTime);
	ScheduleWork : OPTIONAL IfcDuration;
	ScheduleUsage : OPTIONAL IfcPositiveRatioMeasure;
	ScheduleStart : OPTIONAL IfcDateTime;
	ScheduleFinish : OPTIONAL IfcDateTime;
	ScheduleContour : OPTIONAL IfcLabel;
	LevelingDelay : OPTIONAL IfcDuration;
	IsOverAllocated : OPTIONAL IfcBoolean;
	StatusTime : OPTIONAL IfcDateTime;
	ActualWork : OPTIONAL IfcDuration;
	ActualUsage : OPTIONAL IfcPositiveRatioMeasure;
	ActualStart : OPTIONAL IfcDateTime;
	ActualFinish : OPTIONAL IfcDateTime;
	RemainingWork : OPTIONAL IfcDuration;
	RemainingUsage : OPTIONAL IfcPositiveRatioMeasure;
	Completion : OPTIONAL IfcPositiveRatioMeasure;
END_ENTITY;

ENTITY IfcRevolvedAreaSolid
 SUPERTYPE OF (ONEOF
	(IfcRevolvedAreaSolidTapered))
 SUBTYPE OF (IfcSweptAreaSolid);
	Axis : IfcAxis1Placement;
	Angle : IfcPlaneAngleMeasure;
 DERIVE
	 AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, 
  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));
 WHERE
	AxisDirectionInXY : Axis.Z.DirectionRatios[3] = 0.0;
	AxisStartInXY : Axis.Location.Coordinates[3] = 0.0;
END_ENTITY;

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

ENTITY IfcRightCircularCone
 SUBTYPE OF (IfcCsgPrimitive3D);
	Height : IfcPositiveLengthMeasure;
	BottomRadius : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcRightCircularCylinder
 SUBTYPE OF (IfcCsgPrimitive3D);
	Height : IfcPositiveLengthMeasure;
	Radius : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcRoad
 SUBTYPE OF (IfcFacility);
	PredefinedType : OPTIONAL IfcRoadTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcRoadTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcRoadTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcRoadTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

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

ENTITY IfcRoof
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcRoofTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCROOFTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcRoot
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcObjectDefinition
	,IfcPropertyDefinition
	,IfcRelationship));
	GlobalId : IfcGloballyUniqueId;
	OwnerHistory : OPTIONAL IfcOwnerHistory;
	Name : OPTIONAL IfcLabel;
	Description : OPTIONAL IfcText;
 UNIQUE
	UR1 : GlobalId;
END_ENTITY;

ENTITY IfcRoundedRectangleProfileDef
 SUBTYPE OF (IfcRectangleProfileDef);
	RoundingRadius : IfcPositiveLengthMeasure;
 WHERE
	ValidRadius : ((RoundingRadius <= (SELF\IfcRectangleProfileDef.XDim/2.)) AND 
 (RoundingRadius <= (SELF\IfcRectangleProfileDef.YDim/2.)));
END_ENTITY;

ENTITY IfcSIUnit
 SUBTYPE OF (IfcNamedUnit);
	Prefix : OPTIONAL IfcSIPrefix;
	Name : IfcSIUnitName;
 DERIVE
	 SELF\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSIUnit (SELF.Name);
END_ENTITY;

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

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

ENTITY IfcSchedulingTime
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcEventTime
	,IfcLagTime
	,IfcResourceTime
	,IfcTaskTime
	,IfcWorkTime));
	Name : OPTIONAL IfcLabel;
	DataOrigin : OPTIONAL IfcDataOriginEnum;
	UserDefinedDataOrigin : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcSeamCurve
 SUBTYPE OF (IfcSurfaceCurve);
 WHERE
	SameSurface : IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[1]) = IfcAssociatedSurface(SELF\IfcSurfaceCurve.AssociatedGeometry[2]);
	TwoPCurves : SIZEOF(SELF\IfcSurfaceCurve.AssociatedGeometry) = 2;
END_ENTITY;

ENTITY IfcSecondOrderPolynomialSpiral
 SUBTYPE OF (IfcSpiral);
	QuadraticTerm : IfcLengthMeasure;
	LinearTerm : OPTIONAL IfcLengthMeasure;
	ConstantTerm : OPTIONAL IfcLengthMeasure;
END_ENTITY;

ENTITY IfcSectionProperties
 SUBTYPE OF (IfcPreDefinedProperties);
	SectionType : IfcSectionTypeEnum;
	StartProfile : IfcProfileDef;
	EndProfile : OPTIONAL IfcProfileDef;
END_ENTITY;

ENTITY IfcSectionReinforcementProperties
 SUBTYPE OF (IfcPreDefinedProperties);
	LongitudinalStartPosition : IfcLengthMeasure;
	LongitudinalEndPosition : IfcLengthMeasure;
	TransversePosition : OPTIONAL IfcLengthMeasure;
	ReinforcementRole : IfcReinforcingBarRoleEnum;
	SectionDefinition : IfcSectionProperties;
	CrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;
END_ENTITY;

ENTITY IfcSectionedSolid
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcSectionedSolidHorizontal))
 SUBTYPE OF (IfcSolidModel);
	Directrix : IfcCurve;
	CrossSections : LIST [2:?] OF IfcProfileDef;
 WHERE
	ConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;
	DirectrixIs3D : Directrix.Dim = 3;
	SectionsSameType : SIZEOF(QUERY(temp <* CrossSections | TYPEOF(CrossSections[1]) :<>: TYPEOF(temp))) = 0;
END_ENTITY;

ENTITY IfcSectionedSolidHorizontal
 SUBTYPE OF (IfcSectionedSolid);
	CrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear;
 WHERE
	CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);
	NoLongitudinalOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLongitudinal))) = 0;
END_ENTITY;

ENTITY IfcSectionedSpine
 SUBTYPE OF (IfcGeometricRepresentationItem);
	SpineCurve : IfcCompositeCurve;
	CrossSections : LIST [2:?] OF IfcProfileDef;
	CrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;
 DERIVE
	 Dim : IfcDimensionCount := 3;
 WHERE
	ConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;
	CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);
	SpineCurveDim : SpineCurve.Dim = 3;
END_ENTITY;

ENTITY IfcSectionedSurface
 SUBTYPE OF (IfcSurface);
	Directrix : IfcCurve;
	CrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear;
	CrossSections : LIST [2:?] OF IfcProfileDef;
 WHERE
	AreaProfileTypes : SIZEOF(QUERY(temp <* CrossSections | temp.ProfileType = IfcProfileTypeEnum.CURVE)) = 0;
	CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);
	DirectrixIs3D : Directrix.Dim = 3;
	NoOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLateral) OR EXISTS(temp.Location.OffsetVertical) OR EXISTS(temp.Location.OffsetLongitudinal))) = 0;
	SectionsSameType : SIZEOF(QUERY(temp <* CrossSections | TYPEOF(CrossSections[1]) :<>: TYPEOF(temp))) = 0;
END_ENTITY;

ENTITY IfcSegment
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcCompositeCurveSegment
	,IfcCurveSegment))
 SUBTYPE OF (IfcGeometricRepresentationItem);
	Transition : IfcTransitionCode;
 INVERSE
	UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;
END_ENTITY;

ENTITY IfcSegmentedReferenceCurve
 SUBTYPE OF (IfcCompositeCurve);
	BaseCurve : IfcBoundedCurve;
	EndPoint : OPTIONAL IfcPlacement;
END_ENTITY;

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

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

ENTITY IfcSeventhOrderPolynomialSpiral
 SUBTYPE OF (IfcSpiral);
	SepticTerm : IfcLengthMeasure;
	SexticTerm : OPTIONAL IfcLengthMeasure;
	QuinticTerm : OPTIONAL IfcLengthMeasure;
	QuarticTerm : OPTIONAL IfcLengthMeasure;
	CubicTerm : OPTIONAL IfcLengthMeasure;
	QuadraticTerm : OPTIONAL IfcLengthMeasure;
	LinearTerm : OPTIONAL IfcLengthMeasure;
	ConstantTerm : OPTIONAL IfcLengthMeasure;
END_ENTITY;

ENTITY IfcShadingDevice
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcShadingDeviceTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCSHADINGDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcShapeAspect;
	ShapeRepresentations : LIST [1:?] OF IfcShapeModel;
	Name : OPTIONAL IfcLabel;
	Description : OPTIONAL IfcText;
	ProductDefinitional : IfcLogical;
	PartOfProductDefinitionShape : OPTIONAL IfcProductRepresentationSelect;
 INVERSE
	HasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
END_ENTITY;

ENTITY IfcShapeModel
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcShapeRepresentation
	,IfcTopologyRepresentation))
 SUBTYPE OF (IfcRepresentation);
 INVERSE
	OfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;
 WHERE
	WR11 : (SIZEOF(SELF\IfcRepresentation.OfProductRepresentation) = 1) XOR 
(SIZEOF(SELF\IfcRepresentation.RepresentationMap) = 1) XOR
(SIZEOF(OfShapeAspect) = 1);
END_ENTITY;

ENTITY IfcShapeRepresentation
 SUBTYPE OF (IfcShapeModel);
 WHERE
	CorrectContext : 'IFC4X3.IFCGEOMETRICREPRESENTATIONCONTEXT' 
IN TYPEOF(SELF\IfcRepresentation.ContextOfItems);
	CorrectItemsForType : IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items);
	HasRepresentationIdentifier : EXISTS(SELF\IfcRepresentation.RepresentationIdentifier);
	HasRepresentationType : EXISTS(SELF\IfcRepresentation.RepresentationType);
	NoTopologicalItem : SIZEOF(QUERY(temp <* Items | 
  ('IFC4X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))
    AND (NOT(SIZEOF(
      ['IFC4X3.IFCVERTEXPOINT',
       'IFC4X3.IFCEDGECURVE',
       'IFC4X3.IFCFACESURFACE'] * TYPEOF(temp)) = 1))
)) = 0;
END_ENTITY;

ENTITY IfcShellBasedSurfaceModel
 SUBTYPE OF (IfcGeometricRepresentationItem);
	SbsmBoundary : SET [1:?] OF IfcShell;
 DERIVE
	 Dim : IfcDimensionCount := 3;
END_ENTITY;

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

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

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

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

ENTITY IfcSimpleProperty
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcPropertyBoundedValue
	,IfcPropertyEnumeratedValue
	,IfcPropertyListValue
	,IfcPropertyReferenceValue
	,IfcPropertySingleValue
	,IfcPropertyTableValue))
 SUBTYPE OF (IfcProperty);
END_ENTITY;

ENTITY IfcSimplePropertyTemplate
 SUBTYPE OF (IfcPropertyTemplate);
	TemplateType : OPTIONAL IfcSimplePropertyTemplateTypeEnum;
	PrimaryMeasureType : OPTIONAL IfcLabel;
	SecondaryMeasureType : OPTIONAL IfcLabel;
	Enumerators : OPTIONAL IfcPropertyEnumeration;
	PrimaryUnit : OPTIONAL IfcUnit;
	SecondaryUnit : OPTIONAL IfcUnit;
	Expression : OPTIONAL IfcLabel;
	AccessState : OPTIONAL IfcStateEnum;
END_ENTITY;

ENTITY IfcSineSpiral
 SUBTYPE OF (IfcSpiral);
	SineTerm : IfcLengthMeasure;
	LinearTerm : OPTIONAL IfcLengthMeasure;
	ConstantTerm : OPTIONAL IfcLengthMeasure;
END_ENTITY;

ENTITY IfcSite
 SUBTYPE OF (IfcSpatialStructureElement);
	RefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;
	RefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;
	RefElevation : OPTIONAL IfcLengthMeasure;
	LandTitleNumber : OPTIONAL IfcLabel;
	SiteAddress : OPTIONAL IfcPostalAddress;
END_ENTITY;

ENTITY IfcSlab
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcSlabTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCSLABTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcSlippageConnectionCondition
 SUBTYPE OF (IfcStructuralConnectionCondition);
	SlippageX : OPTIONAL IfcLengthMeasure;
	SlippageY : OPTIONAL IfcLengthMeasure;
	SlippageZ : OPTIONAL IfcLengthMeasure;
END_ENTITY;

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

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

ENTITY IfcSolidModel
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcCsgSolid
	,IfcManifoldSolidBrep
	,IfcSectionedSolid
	,IfcSweptAreaSolid
	,IfcSweptDiskSolid))
 SUBTYPE OF (IfcGeometricRepresentationItem);
 DERIVE
	 Dim : IfcDimensionCount := 3;
END_ENTITY;

ENTITY IfcSpace
 SUBTYPE OF (IfcSpatialStructureElement);
	PredefinedType : OPTIONAL IfcSpaceTypeEnum;
	ElevationWithFlooring : OPTIONAL IfcLengthMeasure;
 INVERSE
	HasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatingSpace;
	BoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCSPACETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

ENTITY IfcSpaceType
 SUBTYPE OF (IfcSpatialStructureElementType);
	PredefinedType : IfcSpaceTypeEnum;
	LongName : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR 
((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcSpatialElementType.ElementType));
END_ENTITY;

ENTITY IfcSpatialElement
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcExternalSpatialStructureElement
	,IfcSpatialStructureElement
	,IfcSpatialZone))
 SUBTYPE OF (IfcProduct);
	LongName : OPTIONAL IfcLabel;
 INVERSE
	ContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;
	ServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;
	ReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure;
	IsInterferedByElements : SET [0:?] OF IfcRelInterferesElements FOR RelatedElement;
	InterferesElements : SET [0:?] OF IfcRelInterferesElements FOR RelatingElement;
END_ENTITY;

ENTITY IfcSpatialElementType
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcSpatialStructureElementType
	,IfcSpatialZoneType))
 SUBTYPE OF (IfcTypeProduct);
	ElementType : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcSpatialStructureElement
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcBuildingStorey
	,IfcFacility
	,IfcFacilityPart
	,IfcSite
	,IfcSpace))
 SUBTYPE OF (IfcSpatialElement);
	CompositionType : OPTIONAL IfcElementCompositionEnum;
 WHERE
	WR41 : (HIINDEX(SELF\IfcObjectDefinition.Decomposes) = 1) 
AND
('IFC4X3.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1])) 
AND
(('IFC4X3.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR
 ('IFC4X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject))
);
END_ENTITY;

ENTITY IfcSpatialStructureElementType
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcSpaceType))
 SUBTYPE OF (IfcSpatialElementType);
END_ENTITY;

ENTITY IfcSpatialZone
 SUBTYPE OF (IfcSpatialElement);
	PredefinedType : OPTIONAL IfcSpatialZoneTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCSPATIALZONETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcSpatialZoneType
 SUBTYPE OF (IfcSpatialElementType);
	PredefinedType : IfcSpatialZoneTypeEnum;
	LongName : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR 
((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcSpatialElementType.ElementType));
END_ENTITY;

ENTITY IfcSphere
 SUBTYPE OF (IfcCsgPrimitive3D);
	Radius : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcSphericalSurface
 SUBTYPE OF (IfcElementarySurface);
	Radius : IfcPositiveLengthMeasure;
END_ENTITY;

ENTITY IfcSpiral
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcClothoid
	,IfcCosineSpiral
	,IfcSecondOrderPolynomialSpiral
	,IfcSeventhOrderPolynomialSpiral
	,IfcSineSpiral
	,IfcThirdOrderPolynomialSpiral))
 SUBTYPE OF (IfcCurve);
	Position : OPTIONAL IfcAxis2Placement;
END_ENTITY;

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

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

ENTITY IfcStair
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcStairTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCSTAIRTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcStairFlight
 SUBTYPE OF (IfcBuiltElement);
	NumberOfRisers : OPTIONAL IfcInteger;
	NumberOfTreads : OPTIONAL IfcInteger;
	RiserHeight : OPTIONAL IfcPositiveLengthMeasure;
	TreadLength : OPTIONAL IfcPositiveLengthMeasure;
	PredefinedType : OPTIONAL IfcStairFlightTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCSTAIRFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

ENTITY IfcStructuralAction
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralCurveAction
	,IfcStructuralPointAction
	,IfcStructuralSurfaceAction))
 SUBTYPE OF (IfcStructuralActivity);
	DestabilizingLoad : OPTIONAL IfcBoolean;
END_ENTITY;

ENTITY IfcStructuralActivity
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralAction
	,IfcStructuralReaction))
 SUBTYPE OF (IfcProduct);
	AppliedLoad : IfcStructuralLoad;
	GlobalOrLocal : IfcGlobalOrLocalEnum;
 INVERSE
	AssignedToStructuralItem : SET [0:1] OF IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;
END_ENTITY;

ENTITY IfcStructuralAnalysisModel
 SUBTYPE OF (IfcSystem);
	PredefinedType : IfcAnalysisModelTypeEnum;
	OrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;
	LoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;
	HasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;
	SharedPlacement : OPTIONAL IfcObjectPlacement;
 WHERE
	CorrectPredefinedType : (PredefinedType <> IfcAnalysisModelTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcAnalysisModelTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	HasObjectType : (PredefinedType <> IfcAnalysisModelTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcStructuralConnection
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralCurveConnection
	,IfcStructuralPointConnection
	,IfcStructuralSurfaceConnection))
 SUBTYPE OF (IfcStructuralItem);
	AppliedCondition : OPTIONAL IfcBoundaryCondition;
 INVERSE
	ConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;
END_ENTITY;

ENTITY IfcStructuralConnectionCondition
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcFailureConnectionCondition
	,IfcSlippageConnectionCondition));
	Name : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcStructuralCurveAction
 SUPERTYPE OF (ONEOF
	(IfcStructuralLinearAction))
 SUBTYPE OF (IfcStructuralAction);
	ProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;
	PredefinedType : IfcStructuralCurveActivityTypeEnum;
 WHERE
	HasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
	ProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR
((ProjectedOrTrue <> PROJECTED_LENGTH) OR
 (SELF\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));
	SuitablePredefinedType : PredefinedType <> IfcStructuralCurveActivityTypeEnum.EQUIDISTANT;
END_ENTITY;

ENTITY IfcStructuralCurveConnection
 SUBTYPE OF (IfcStructuralConnection);
	AxisDirection : IfcDirection;
END_ENTITY;

ENTITY IfcStructuralCurveMember
 SUPERTYPE OF (ONEOF
	(IfcStructuralCurveMemberVarying))
 SUBTYPE OF (IfcStructuralMember);
	PredefinedType : IfcStructuralCurveMemberTypeEnum;
	Axis : IfcDirection;
 WHERE
	HasObjectType : (PredefinedType <> IfcStructuralCurveMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcStructuralCurveMemberVarying
 SUBTYPE OF (IfcStructuralCurveMember);
END_ENTITY;

ENTITY IfcStructuralCurveReaction
 SUBTYPE OF (IfcStructuralReaction);
	PredefinedType : IfcStructuralCurveActivityTypeEnum;
 WHERE
	HasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
	SuitablePredefinedType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.SINUS) AND (PredefinedType <> IfcStructuralCurveActivityTypeEnum.PARABOLA);
END_ENTITY;

ENTITY IfcStructuralItem
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralConnection
	,IfcStructuralMember))
 SUBTYPE OF (IfcProduct);
 INVERSE
	AssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;
END_ENTITY;

ENTITY IfcStructuralLinearAction
 SUBTYPE OF (IfcStructuralCurveAction);
 WHERE
	ConstPredefinedType : SELF\IfcStructuralCurveAction.PredefinedType = IfcStructuralCurveActivityTypeEnum.CONST;
	SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADLINEARFORCE', 'IFC4X3.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
END_ENTITY;

ENTITY IfcStructuralLoad
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralLoadConfiguration
	,IfcStructuralLoadOrResult));
	Name : OPTIONAL IfcLabel;
END_ENTITY;

ENTITY IfcStructuralLoadCase
 SUBTYPE OF (IfcStructuralLoadGroup);
	SelfWeightCoefficients : OPTIONAL LIST [3:3] OF IfcRatioMeasure;
 WHERE
	IsLoadCasePredefinedType : SELF\IfcStructuralLoadGroup.PredefinedType = IfcLoadGroupTypeEnum.LOAD_CASE;
END_ENTITY;

ENTITY IfcStructuralLoadConfiguration
 SUBTYPE OF (IfcStructuralLoad);
	Values : LIST [1:?] OF IfcStructuralLoadOrResult;
	Locations : OPTIONAL LIST [1:?] OF UNIQUE LIST [1:2] OF IfcLengthMeasure;
 WHERE
	ValidListSize : NOT EXISTS(Locations) OR (SIZEOF(Locations) = SIZEOF(Values));
END_ENTITY;

ENTITY IfcStructuralLoadGroup
 SUPERTYPE OF (ONEOF
	(IfcStructuralLoadCase))
 SUBTYPE OF (IfcGroup);
	PredefinedType : IfcLoadGroupTypeEnum;
	ActionType : IfcActionTypeEnum;
	ActionSource : IfcActionSourceTypeEnum;
	Coefficient : OPTIONAL IfcRatioMeasure;
	Purpose : OPTIONAL IfcLabel;
 INVERSE
	SourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;
	LoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;
 WHERE
	HasObjectType : (
  (PredefinedType <> IfcLoadGroupTypeEnum.USERDEFINED) AND
  (ActionType <> IfcActionTypeEnum.USERDEFINED) AND
  (ActionSource <> IfcActionSourceTypeEnum.USERDEFINED)
) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcStructuralLoadLinearForce
 SUBTYPE OF (IfcStructuralLoadStatic);
	LinearForceX : OPTIONAL IfcLinearForceMeasure;
	LinearForceY : OPTIONAL IfcLinearForceMeasure;
	LinearForceZ : OPTIONAL IfcLinearForceMeasure;
	LinearMomentX : OPTIONAL IfcLinearMomentMeasure;
	LinearMomentY : OPTIONAL IfcLinearMomentMeasure;
	LinearMomentZ : OPTIONAL IfcLinearMomentMeasure;
END_ENTITY;

ENTITY IfcStructuralLoadOrResult
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralLoadStatic
	,IfcSurfaceReinforcementArea))
 SUBTYPE OF (IfcStructuralLoad);
END_ENTITY;

ENTITY IfcStructuralLoadPlanarForce
 SUBTYPE OF (IfcStructuralLoadStatic);
	PlanarForceX : OPTIONAL IfcPlanarForceMeasure;
	PlanarForceY : OPTIONAL IfcPlanarForceMeasure;
	PlanarForceZ : OPTIONAL IfcPlanarForceMeasure;
END_ENTITY;

ENTITY IfcStructuralLoadSingleDisplacement
 SUPERTYPE OF (ONEOF
	(IfcStructuralLoadSingleDisplacementDistortion))
 SUBTYPE OF (IfcStructuralLoadStatic);
	DisplacementX : OPTIONAL IfcLengthMeasure;
	DisplacementY : OPTIONAL IfcLengthMeasure;
	DisplacementZ : OPTIONAL IfcLengthMeasure;
	RotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;
	RotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;
	RotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;
END_ENTITY;

ENTITY IfcStructuralLoadSingleDisplacementDistortion
 SUBTYPE OF (IfcStructuralLoadSingleDisplacement);
	Distortion : OPTIONAL IfcCurvatureMeasure;
END_ENTITY;

ENTITY IfcStructuralLoadSingleForce
 SUPERTYPE OF (ONEOF
	(IfcStructuralLoadSingleForceWarping))
 SUBTYPE OF (IfcStructuralLoadStatic);
	ForceX : OPTIONAL IfcForceMeasure;
	ForceY : OPTIONAL IfcForceMeasure;
	ForceZ : OPTIONAL IfcForceMeasure;
	MomentX : OPTIONAL IfcTorqueMeasure;
	MomentY : OPTIONAL IfcTorqueMeasure;
	MomentZ : OPTIONAL IfcTorqueMeasure;
END_ENTITY;

ENTITY IfcStructuralLoadSingleForceWarping
 SUBTYPE OF (IfcStructuralLoadSingleForce);
	WarpingMoment : OPTIONAL IfcWarpingMomentMeasure;
END_ENTITY;

ENTITY IfcStructuralLoadStatic
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralLoadLinearForce
	,IfcStructuralLoadPlanarForce
	,IfcStructuralLoadSingleDisplacement
	,IfcStructuralLoadSingleForce
	,IfcStructuralLoadTemperature))
 SUBTYPE OF (IfcStructuralLoadOrResult);
END_ENTITY;

ENTITY IfcStructuralLoadTemperature
 SUBTYPE OF (IfcStructuralLoadStatic);
	DeltaTConstant : OPTIONAL IfcThermodynamicTemperatureMeasure;
	DeltaTY : OPTIONAL IfcThermodynamicTemperatureMeasure;
	DeltaTZ : OPTIONAL IfcThermodynamicTemperatureMeasure;
END_ENTITY;

ENTITY IfcStructuralMember
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralCurveMember
	,IfcStructuralSurfaceMember))
 SUBTYPE OF (IfcStructuralItem);
 INVERSE
	ConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;
END_ENTITY;

ENTITY IfcStructuralPlanarAction
 SUBTYPE OF (IfcStructuralSurfaceAction);
 WHERE
	ConstPredefinedType : SELF\IfcStructuralSurfaceAction.PredefinedType = IfcStructuralSurfaceActivityTypeEnum.CONST;
	SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADPLANARFORCE', 'IFC4X3.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
END_ENTITY;

ENTITY IfcStructuralPointAction
 SUBTYPE OF (IfcStructuralAction);
 WHERE
	SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
END_ENTITY;

ENTITY IfcStructuralPointConnection
 SUBTYPE OF (IfcStructuralConnection);
	ConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;
END_ENTITY;

ENTITY IfcStructuralPointReaction
 SUBTYPE OF (IfcStructuralReaction);
 WHERE
	SuitableLoadType : SIZEOF(['IFC4X3.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1;
END_ENTITY;

ENTITY IfcStructuralReaction
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStructuralCurveReaction
	,IfcStructuralPointReaction
	,IfcStructuralSurfaceReaction))
 SUBTYPE OF (IfcStructuralActivity);
END_ENTITY;

ENTITY IfcStructuralResultGroup
 SUBTYPE OF (IfcGroup);
	TheoryType : IfcAnalysisTheoryTypeEnum;
	ResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;
	IsLinear : IfcBoolean;
 INVERSE
	ResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;
 WHERE
	HasObjectType : (TheoryType <> IfcAnalysisTheoryTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcStructuralSurfaceAction
 SUPERTYPE OF (ONEOF
	(IfcStructuralPlanarAction))
 SUBTYPE OF (IfcStructuralAction);
	ProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;
	PredefinedType : IfcStructuralSurfaceActivityTypeEnum;
 WHERE
	HasObjectType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
	ProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR
((ProjectedOrTrue <> PROJECTED_LENGTH) OR
 (SELF\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));
END_ENTITY;

ENTITY IfcStructuralSurfaceConnection
 SUBTYPE OF (IfcStructuralConnection);
END_ENTITY;

ENTITY IfcStructuralSurfaceMember
 SUPERTYPE OF (ONEOF
	(IfcStructuralSurfaceMemberVarying))
 SUBTYPE OF (IfcStructuralMember);
	PredefinedType : IfcStructuralSurfaceMemberTypeEnum;
	Thickness : OPTIONAL IfcPositiveLengthMeasure;
 WHERE
	HasObjectType : (PredefinedType <> IfcStructuralSurfaceMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcStructuralSurfaceMemberVarying
 SUBTYPE OF (IfcStructuralSurfaceMember);
END_ENTITY;

ENTITY IfcStructuralSurfaceReaction
 SUBTYPE OF (IfcStructuralReaction);
	PredefinedType : IfcStructuralSurfaceActivityTypeEnum;
 WHERE
	HasPredefinedType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcStyleModel
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcStyledRepresentation))
 SUBTYPE OF (IfcRepresentation);
END_ENTITY;

ENTITY IfcStyledItem
 SUBTYPE OF (IfcRepresentationItem);
	Item : OPTIONAL IfcRepresentationItem;
	Styles : SET [1:?] OF IfcPresentationStyle;
	Name : OPTIONAL IfcLabel;
 WHERE
	ApplicableItem : NOT('IFC4X3.IFCSTYLEDITEM' IN TYPEOF(Item));
END_ENTITY;

ENTITY IfcStyledRepresentation
 SUBTYPE OF (IfcStyleModel);
 WHERE
	OnlyStyledItems : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | 
  (NOT('IFC4X3.IFCSTYLEDITEM' IN TYPEOF(temp)))
)) = 0;
END_ENTITY;

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

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

ENTITY IfcSubedge
 SUBTYPE OF (IfcEdge);
	ParentEdge : IfcEdge;
END_ENTITY;

ENTITY IfcSurface
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcBoundedSurface
	,IfcElementarySurface
	,IfcSectionedSurface
	,IfcSweptSurface))
 SUBTYPE OF (IfcGeometricRepresentationItem);
 DERIVE
	 Dim : IfcDimensionCount := 3;
END_ENTITY;

ENTITY IfcSurfaceCurve
 SUPERTYPE OF (ONEOF
	(IfcIntersectionCurve
	,IfcSeamCurve))
 SUBTYPE OF (IfcCurve);
	Curve3D : IfcCurve;
	AssociatedGeometry : LIST [1:2] OF IfcPcurve;
	MasterRepresentation : IfcPreferredSurfaceCurveRepresentation;
 DERIVE
	 BasisSurface : SET [1:2] OF IfcSurface := IfcGetBasisSurface(SELF);
 WHERE
	CurveIs3D : Curve3D.Dim = 3;
	CurveIsNotPcurve : NOT ('IFC4X3.IFCPCURVE' IN TYPEOF(Curve3D));
END_ENTITY;

ENTITY IfcSurfaceCurveSweptAreaSolid
 SUBTYPE OF (IfcDirectrixCurveSweptAreaSolid);
	ReferenceSurface : IfcSurface;
END_ENTITY;

ENTITY IfcSurfaceFeature
 SUBTYPE OF (IfcFeatureElement);
	PredefinedType : OPTIONAL IfcSurfaceFeatureTypeEnum;
 INVERSE
	AdheresToElement : IfcRelAdheresToElement FOR RelatedSurfaceFeatures;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcSurfaceFeatureTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcSurfaceFeatureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcSurfaceFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcSurfaceOfLinearExtrusion
 SUBTYPE OF (IfcSweptSurface);
	ExtrudedDirection : IfcDirection;
	Depth : IfcLengthMeasure;
 DERIVE
	 ExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);
 WHERE
	DepthGreaterZero : Depth > 0.;
END_ENTITY;

ENTITY IfcSurfaceOfRevolution
 SUBTYPE OF (IfcSweptSurface);
	AxisPosition : IfcAxis1Placement;
 DERIVE
	 AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, 
  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));
END_ENTITY;

ENTITY IfcSurfaceReinforcementArea
 SUBTYPE OF (IfcStructuralLoadOrResult);
	SurfaceReinforcement1 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;
	SurfaceReinforcement2 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;
	ShearReinforcement : OPTIONAL IfcRatioMeasure;
 WHERE
	NonnegativeArea1 : (NOT EXISTS(SurfaceReinforcement1)) OR (
    (SurfaceReinforcement1[1] >= 0.) AND
    (SurfaceReinforcement1[2] >= 0.) AND
    ((SIZEOF(SurfaceReinforcement1) = 1) OR (SurfaceReinforcement1[1] >= 0.))
);
	NonnegativeArea2 : (NOT EXISTS(SurfaceReinforcement2)) OR (
    (SurfaceReinforcement2[1] >= 0.) AND
    (SurfaceReinforcement2[2] >= 0.) AND
    ((SIZEOF(SurfaceReinforcement2) = 1) OR (SurfaceReinforcement2[1] >= 0.))
);
	NonnegativeArea3 : (NOT EXISTS(ShearReinforcement)) OR (ShearReinforcement >= 0.);
	SurfaceAndOrShearAreaSpecified : EXISTS(SurfaceReinforcement1) OR EXISTS(SurfaceReinforcement2) OR EXISTS(ShearReinforcement);
END_ENTITY;

ENTITY IfcSurfaceStyle
 SUBTYPE OF (IfcPresentationStyle);
	Side : IfcSurfaceSide;
	Styles : SET [1:5] OF IfcSurfaceStyleElementSelect;
 WHERE
	MaxOneExtDefined : SIZEOF(QUERY(Style <* SELF.Styles |
  'IFC4X3.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN
   TYPEOF(Style)
  )) <= 1;
	MaxOneLighting : SIZEOF(QUERY(Style <* SELF.Styles |
  'IFC4X3.IFCSURFACESTYLELIGHTING' IN
   TYPEOF(Style)
  )) <= 1;
	MaxOneRefraction : SIZEOF(QUERY(Style <* SELF.Styles |
  'IFC4X3.IFCSURFACESTYLEREFRACTION' IN
   TYPEOF(Style)
  )) <= 1;
	MaxOneShading : SIZEOF(QUERY(Style <* SELF.Styles |
  'IFC4X3.IFCSURFACESTYLESHADING' IN
   TYPEOF(Style)
  )) <= 1;
	MaxOneTextures : SIZEOF(QUERY(Style <* SELF.Styles |
  'IFC4X3.IFCSURFACESTYLEWITHTEXTURES' IN
   TYPEOF(Style)
  )) <= 1;
END_ENTITY;

ENTITY IfcSurfaceStyleLighting
 SUBTYPE OF (IfcPresentationItem);
	DiffuseTransmissionColour : IfcColourRgb;
	DiffuseReflectionColour : IfcColourRgb;
	TransmissionColour : IfcColourRgb;
	ReflectanceColour : IfcColourRgb;
END_ENTITY;

ENTITY IfcSurfaceStyleRefraction
 SUBTYPE OF (IfcPresentationItem);
	RefractionIndex : OPTIONAL IfcReal;
	DispersionFactor : OPTIONAL IfcReal;
END_ENTITY;

ENTITY IfcSurfaceStyleRendering
 SUBTYPE OF (IfcSurfaceStyleShading);
	DiffuseColour : OPTIONAL IfcColourOrFactor;
	TransmissionColour : OPTIONAL IfcColourOrFactor;
	DiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;
	ReflectionColour : OPTIONAL IfcColourOrFactor;
	SpecularColour : OPTIONAL IfcColourOrFactor;
	SpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;
	ReflectanceMethod : IfcReflectanceMethodEnum;
END_ENTITY;

ENTITY IfcSurfaceStyleShading
 SUPERTYPE OF (ONEOF
	(IfcSurfaceStyleRendering))
 SUBTYPE OF (IfcPresentationItem);
	SurfaceColour : IfcColourRgb;
	Transparency : OPTIONAL IfcNormalisedRatioMeasure;
END_ENTITY;

ENTITY IfcSurfaceStyleWithTextures
 SUBTYPE OF (IfcPresentationItem);
	Textures : LIST [1:?] OF IfcSurfaceTexture;
END_ENTITY;

ENTITY IfcSurfaceTexture
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcBlobTexture
	,IfcImageTexture
	,IfcPixelTexture))
 SUBTYPE OF (IfcPresentationItem);
	RepeatS : IfcBoolean;
	RepeatT : IfcBoolean;
	Mode : OPTIONAL IfcIdentifier;
	TextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;
	Parameter : OPTIONAL LIST [1:?] OF IfcIdentifier;
 INVERSE
	IsMappedBy : SET [0:?] OF IfcTextureCoordinate FOR Maps;
	UsedInStyles : SET [0:?] OF IfcSurfaceStyleWithTextures FOR Textures;
END_ENTITY;

ENTITY IfcSweptAreaSolid
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcDirectrixCurveSweptAreaSolid
	,IfcExtrudedAreaSolid
	,IfcRevolvedAreaSolid))
 SUBTYPE OF (IfcSolidModel);
	SweptArea : IfcProfileDef;
	Position : OPTIONAL IfcAxis2Placement3D;
 WHERE
	SweptAreaType : SweptArea.ProfileType = IfcProfileTypeEnum.Area;
END_ENTITY;

ENTITY IfcSweptDiskSolid
 SUPERTYPE OF (ONEOF
	(IfcSweptDiskSolidPolygonal))
 SUBTYPE OF (IfcSolidModel);
	Directrix : IfcCurve;
	Radius : IfcPositiveLengthMeasure;
	InnerRadius : OPTIONAL IfcPositiveLengthMeasure;
	StartParam : OPTIONAL IfcParameterValue;
	EndParam : OPTIONAL IfcParameterValue;
 WHERE
	DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR 
(SIZEOF(['IFC4X3.IFCCONIC', 'IFC4X3.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);
	DirectrixDim : Directrix.Dim = 3;
	InnerRadiusSize : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);
END_ENTITY;

ENTITY IfcSweptDiskSolidPolygonal
 SUBTYPE OF (IfcSweptDiskSolid);
	FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
 WHERE
	CorrectRadii : NOT(EXISTS(FilletRadius)) OR (FilletRadius >= SELF\IfcSweptDiskSolid.Radius);
	DirectrixIsPolyline : ('IFC4X3.IFCPOLYLINE' IN TYPEOF(SELF\IfcSweptDiskSolid.Directrix)) OR
(('IFC4X3.IFCINDEXEDPOLYCURVE' IN TYPEOF(SELF\IfcSweptDiskSolid.Directrix)) AND NOT(EXISTS(SELF\IfcSweptDiskSolid.Directrix.Segments)));
END_ENTITY;

ENTITY IfcSweptSurface
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcSurfaceOfLinearExtrusion
	,IfcSurfaceOfRevolution))
 SUBTYPE OF (IfcSurface);
	SweptCurve : IfcProfileDef;
	Position : OPTIONAL IfcAxis2Placement3D;
 WHERE
	SweptCurveType : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;
END_ENTITY;

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

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

ENTITY IfcSystem
 SUPERTYPE OF (ONEOF
	(IfcBuildingSystem
	,IfcBuiltSystem
	,IfcDistributionSystem
	,IfcStructuralAnalysisModel
	,IfcZone))
 SUBTYPE OF (IfcGroup);
 INVERSE
	ServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;
	ServicesFacilities : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;
END_ENTITY;

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

ENTITY IfcSystemFurnitureElementType
 SUBTYPE OF (IfcFurnishingElementType);
	PredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcTShapeProfileDef
 SUBTYPE OF (IfcParameterizedProfileDef);
	Depth : IfcPositiveLengthMeasure;
	FlangeWidth : IfcPositiveLengthMeasure;
	WebThickness : IfcPositiveLengthMeasure;
	FlangeThickness : IfcPositiveLengthMeasure;
	FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
	FlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
	WebEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
	WebSlope : OPTIONAL IfcPlaneAngleMeasure;
	FlangeSlope : OPTIONAL IfcPlaneAngleMeasure;
 WHERE
	ValidFlangeThickness : FlangeThickness < Depth;
	ValidWebThickness : WebThickness < FlangeWidth;
END_ENTITY;

ENTITY IfcTable;
	Name : OPTIONAL IfcLabel;
	Rows : OPTIONAL LIST [1:?] OF IfcTableRow;
	Columns : OPTIONAL LIST [1:?] OF IfcTableColumn;
 DERIVE
	 NumberOfCellsInRow : IfcInteger := HIINDEX(Rows[1].RowCells);
	 NumberOfHeadings : IfcInteger := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));
	 NumberOfDataRows : IfcInteger := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));
 WHERE
	WR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;
	WR2 : { 0 <= NumberOfHeadings <= 1 };
END_ENTITY;

ENTITY IfcTableColumn;
	Identifier : OPTIONAL IfcIdentifier;
	Name : OPTIONAL IfcLabel;
	Description : OPTIONAL IfcText;
	Unit : OPTIONAL IfcUnit;
	ReferencePath : OPTIONAL IfcReference;
END_ENTITY;

ENTITY IfcTableRow;
	RowCells : OPTIONAL LIST [1:?] OF IfcValue;
	IsHeading : OPTIONAL IfcBoolean;
END_ENTITY;

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

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

ENTITY IfcTask
 SUBTYPE OF (IfcProcess);
	Status : OPTIONAL IfcLabel;
	WorkMethod : OPTIONAL IfcLabel;
	IsMilestone : IfcBoolean;
	Priority : OPTIONAL IfcInteger;
	TaskTime : OPTIONAL IfcTaskTime;
	PredefinedType : OPTIONAL IfcTaskTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
	HasName : EXISTS(SELF\IfcRoot.Name);
END_ENTITY;

ENTITY IfcTaskTime
 SUPERTYPE OF (ONEOF
	(IfcTaskTimeRecurring))
 SUBTYPE OF (IfcSchedulingTime);
	DurationType : OPTIONAL IfcTaskDurationEnum;
	ScheduleDuration : OPTIONAL IfcDuration;
	ScheduleStart : OPTIONAL IfcDateTime;
	ScheduleFinish : OPTIONAL IfcDateTime;
	EarlyStart : OPTIONAL IfcDateTime;
	EarlyFinish : OPTIONAL IfcDateTime;
	LateStart : OPTIONAL IfcDateTime;
	LateFinish : OPTIONAL IfcDateTime;
	FreeFloat : OPTIONAL IfcDuration;
	TotalFloat : OPTIONAL IfcDuration;
	IsCritical : OPTIONAL IfcBoolean;
	StatusTime : OPTIONAL IfcDateTime;
	ActualDuration : OPTIONAL IfcDuration;
	ActualStart : OPTIONAL IfcDateTime;
	ActualFinish : OPTIONAL IfcDateTime;
	RemainingTime : OPTIONAL IfcDuration;
	Completion : OPTIONAL IfcPositiveRatioMeasure;
END_ENTITY;

ENTITY IfcTaskTimeRecurring
 SUBTYPE OF (IfcTaskTime);
	Recurrence : IfcRecurrencePattern;
END_ENTITY;

ENTITY IfcTaskType
 SUBTYPE OF (IfcTypeProcess);
	PredefinedType : IfcTaskTypeEnum;
	WorkMethod : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType));
END_ENTITY;

ENTITY IfcTelecomAddress
 SUBTYPE OF (IfcAddress);
	TelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;
	FacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;
	PagerNumber : OPTIONAL IfcLabel;
	ElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;
	WWWHomePageURL : OPTIONAL IfcURIReference;
	MessagingIDs : OPTIONAL LIST [1:?] OF IfcURIReference;
 WHERE
	MinimumDataProvided : EXISTS (TelephoneNumbers) OR
EXISTS (FacsimileNumbers) OR 
EXISTS (PagerNumber) OR
EXISTS (ElectronicMailAddresses) OR 
EXISTS (WWWHomePageURL) OR
EXISTS (MessagingIDs);
END_ENTITY;

ENTITY IfcTendon
 SUBTYPE OF (IfcReinforcingElement);
	PredefinedType : OPTIONAL IfcTendonTypeEnum;
	NominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	CrossSectionArea : OPTIONAL IfcAreaMeasure;
	TensionForce : OPTIONAL IfcForceMeasure;
	PreStress : OPTIONAL IfcPressureMeasure;
	FrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;
	AnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;
	MinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCTENDONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcTendonAnchor
 SUBTYPE OF (IfcReinforcingElement);
	PredefinedType : OPTIONAL IfcTendonAnchorTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCTENDONANCHORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcTendonConduit
 SUBTYPE OF (IfcReinforcingElement);
	PredefinedType : IfcTendonConduitTypeEnum;
 WHERE
	CorrectPredefinedType : (PredefinedType <> IfcTendonConduitTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcTendonConduitTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCTENDONCONDUITTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcTendonType
 SUBTYPE OF (IfcReinforcingElementType);
	PredefinedType : IfcTendonTypeEnum;
	NominalDiameter : OPTIONAL IfcPositiveLengthMeasure;
	CrossSectionArea : OPTIONAL IfcAreaMeasure;
	SheathDiameter : OPTIONAL IfcPositiveLengthMeasure;
 WHERE
	CorrectPredefinedType : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcTessellatedFaceSet
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcPolygonalFaceSet
	,IfcTriangulatedFaceSet))
 SUBTYPE OF (IfcTessellatedItem);
	Coordinates : IfcCartesianPointList3D;
	Closed : OPTIONAL IfcBoolean;
 DERIVE
	 Dim : IfcDimensionCount := 3;
 INVERSE
	HasColours : SET [0:1] OF IfcIndexedColourMap FOR MappedTo;
	HasTextures : SET [0:?] OF IfcIndexedTextureMap FOR MappedTo;
END_ENTITY;

ENTITY IfcTessellatedItem
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcIndexedPolygonalFace
	,IfcTessellatedFaceSet))
 SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;

ENTITY IfcTextLiteral
 SUPERTYPE OF (ONEOF
	(IfcTextLiteralWithExtent))
 SUBTYPE OF (IfcGeometricRepresentationItem);
	Literal : IfcPresentableText;
	Placement : IfcAxis2Placement;
	Path : IfcTextPath;
END_ENTITY;

ENTITY IfcTextLiteralWithExtent
 SUBTYPE OF (IfcTextLiteral);
	Extent : IfcPlanarExtent;
	BoxAlignment : IfcBoxAlignment;
 WHERE
	WR31 : NOT('IFC4X3.IFCPLANARBOX' IN TYPEOF(Extent));
END_ENTITY;

ENTITY IfcTextStyle
 SUBTYPE OF (IfcPresentationStyle);
	TextCharacterAppearance : OPTIONAL IfcTextStyleForDefinedFont;
	TextStyle : OPTIONAL IfcTextStyleTextModel;
	TextFontStyle : IfcTextFontSelect;
	ModelOrDraughting : OPTIONAL IfcBoolean;
END_ENTITY;

ENTITY IfcTextStyleFontModel
 SUBTYPE OF (IfcPreDefinedTextFont);
	FontFamily : LIST [1:?] OF IfcTextFontName;
	FontStyle : OPTIONAL IfcFontStyle;
	FontVariant : OPTIONAL IfcFontVariant;
	FontWeight : OPTIONAL IfcFontWeight;
	FontSize : IfcSizeSelect;
 WHERE
	MeasureOfFontSize : ('IFC4X3.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND
(SELF.FontSize > 0.);
END_ENTITY;

ENTITY IfcTextStyleForDefinedFont
 SUBTYPE OF (IfcPresentationItem);
	Colour : IfcColour;
	BackgroundColour : OPTIONAL IfcColour;
END_ENTITY;

ENTITY IfcTextStyleTextModel
 SUBTYPE OF (IfcPresentationItem);
	TextIndent : OPTIONAL IfcSizeSelect;
	TextAlign : OPTIONAL IfcTextAlignment;
	TextDecoration : OPTIONAL IfcTextDecoration;
	LetterSpacing : OPTIONAL IfcSizeSelect;
	WordSpacing : OPTIONAL IfcSizeSelect;
	TextTransform : OPTIONAL IfcTextTransformation;
	LineHeight : OPTIONAL IfcSizeSelect;
END_ENTITY;

ENTITY IfcTextureCoordinate
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcIndexedTextureMap
	,IfcTextureCoordinateGenerator
	,IfcTextureMap))
 SUBTYPE OF (IfcPresentationItem);
	Maps : LIST [1:?] OF IfcSurfaceTexture;
END_ENTITY;

ENTITY IfcTextureCoordinateGenerator
 SUBTYPE OF (IfcTextureCoordinate);
	Mode : IfcLabel;
	Parameter : OPTIONAL LIST [1:?] OF IfcReal;
END_ENTITY;

ENTITY IfcTextureCoordinateIndices
 SUPERTYPE OF (ONEOF
	(IfcTextureCoordinateIndicesWithVoids));
	TexCoordIndex : LIST [3:?] OF IfcPositiveInteger;
	TexCoordsOf : IfcIndexedPolygonalFace;
 INVERSE
	ToTexMap : IfcIndexedPolygonalTextureMap FOR TexCoordIndices;
END_ENTITY;

ENTITY IfcTextureCoordinateIndicesWithVoids
 SUBTYPE OF (IfcTextureCoordinateIndices);
	InnerTexCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger;
END_ENTITY;

ENTITY IfcTextureMap
 SUBTYPE OF (IfcTextureCoordinate);
	Vertices : LIST [3:?] OF IfcTextureVertex;
	MappedTo : IfcFace;
END_ENTITY;

ENTITY IfcTextureVertex
 SUBTYPE OF (IfcPresentationItem);
	Coordinates : LIST [2:2] OF IfcParameterValue;
END_ENTITY;

ENTITY IfcTextureVertexList
 SUBTYPE OF (IfcPresentationItem);
	TexCoordsList : LIST [1:?] OF LIST [2:2] OF IfcParameterValue;
END_ENTITY;

ENTITY IfcThirdOrderPolynomialSpiral
 SUBTYPE OF (IfcSpiral);
	CubicTerm : IfcLengthMeasure;
	QuadraticTerm : OPTIONAL IfcLengthMeasure;
	LinearTerm : OPTIONAL IfcLengthMeasure;
	ConstantTerm : OPTIONAL IfcLengthMeasure;
END_ENTITY;

ENTITY IfcTimePeriod;
	StartTime : IfcTime;
	EndTime : IfcTime;
END_ENTITY;

ENTITY IfcTimeSeries
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcIrregularTimeSeries
	,IfcRegularTimeSeries));
	Name : IfcLabel;
	Description : OPTIONAL IfcText;
	StartTime : IfcDateTime;
	EndTime : IfcDateTime;
	TimeSeriesDataType : IfcTimeSeriesDataTypeEnum;
	DataOrigin : IfcDataOriginEnum;
	UserDefinedDataOrigin : OPTIONAL IfcLabel;
	Unit : OPTIONAL IfcUnit;
 INVERSE
	HasExternalReference : SET [1:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
END_ENTITY;

ENTITY IfcTimeSeriesValue;
	ListValues : LIST [1:?] OF IfcValue;
END_ENTITY;

ENTITY IfcTopologicalRepresentationItem
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcConnectedFaceSet
	,IfcEdge
	,IfcFace
	,IfcFaceBound
	,IfcLoop
	,IfcPath
	,IfcVertex))
 SUBTYPE OF (IfcRepresentationItem);
END_ENTITY;

ENTITY IfcTopologyRepresentation
 SUBTYPE OF (IfcShapeModel);
 WHERE
	WR21 : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | 
  NOT('IFC4X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))
)) = 0

;
	WR22 : EXISTS(SELF\IfcRepresentation.RepresentationType);
	WR23 : IfcTopologyRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items);
END_ENTITY;

ENTITY IfcToroidalSurface
 SUBTYPE OF (IfcElementarySurface);
	MajorRadius : IfcPositiveLengthMeasure;
	MinorRadius : IfcPositiveLengthMeasure;
 WHERE
	MajorLargerMinor : MinorRadius < MajorRadius;
END_ENTITY;

ENTITY IfcTrackElement
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcTrackElementTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcTrackElementTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcTrackElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCTRACKELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

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

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

ENTITY IfcTransportElement
 SUBTYPE OF (IfcTransportationDevice);
	PredefinedType : OPTIONAL IfcTransportElementTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcTransportationDevice
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcTransportElement
	,IfcVehicle))
 SUBTYPE OF (IfcElement);
END_ENTITY;

ENTITY IfcTransportationDeviceType
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcTransportElementType
	,IfcVehicleType))
 SUBTYPE OF (IfcElementType);
END_ENTITY;

ENTITY IfcTrapeziumProfileDef
 SUBTYPE OF (IfcParameterizedProfileDef);
	BottomXDim : IfcPositiveLengthMeasure;
	TopXDim : IfcPositiveLengthMeasure;
	YDim : IfcPositiveLengthMeasure;
	TopXOffset : IfcLengthMeasure;
END_ENTITY;

ENTITY IfcTriangulatedFaceSet
 SUPERTYPE OF (ONEOF
	(IfcTriangulatedIrregularNetwork))
 SUBTYPE OF (IfcTessellatedFaceSet);
	Normals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue;
	CoordIndex : LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;
	PnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;
 DERIVE
	 NumberOfTriangles : IfcInteger := SIZEOF(CoordIndex);
END_ENTITY;

ENTITY IfcTriangulatedIrregularNetwork
 SUBTYPE OF (IfcTriangulatedFaceSet);
	Flags : LIST [1:?] OF IfcInteger;
 WHERE
	NotClosed : SELF\IfcTriangulatedFaceSet.Closed = FALSE;
END_ENTITY;

ENTITY IfcTrimmedCurve
 SUBTYPE OF (IfcBoundedCurve);
	BasisCurve : IfcCurve;
	Trim1 : SET [1:2] OF IfcTrimmingSelect;
	Trim2 : SET [1:2] OF IfcTrimmingSelect;
	SenseAgreement : IfcBoolean;
	MasterRepresentation : IfcTrimmingPreference;
 WHERE
	NoTrimOfBoundedCurves : NOT('IFC4X3.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));
	Trim1ValuesConsistent : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));
	Trim2ValuesConsistent : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));
END_ENTITY;

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

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

ENTITY IfcTypeObject
 SUPERTYPE OF (ONEOF
	(IfcTypeProcess
	,IfcTypeProduct
	,IfcTypeResource))
 SUBTYPE OF (IfcObjectDefinition);
	ApplicableOccurrence : OPTIONAL IfcIdentifier;
	HasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition;
 INVERSE
	Types : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;
 WHERE
	NameRequired : EXISTS(SELF\IfcRoot.Name);
	UniquePropertySetNames : (NOT(EXISTS(HasPropertySets))) OR IfcUniquePropertySetNames(HasPropertySets);
END_ENTITY;

ENTITY IfcTypeProcess
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcEventType
	,IfcProcedureType
	,IfcTaskType))
 SUBTYPE OF (IfcTypeObject);
	Identification : OPTIONAL IfcIdentifier;
	LongDescription : OPTIONAL IfcText;
	ProcessType : OPTIONAL IfcLabel;
 INVERSE
	OperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;
END_ENTITY;

ENTITY IfcTypeProduct
 SUPERTYPE OF (ONEOF
	(IfcElementType
	,IfcSpatialElementType))
 SUBTYPE OF (IfcTypeObject);
	RepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;
	Tag : OPTIONAL IfcLabel;
 INVERSE
	ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;
 WHERE
	ApplicableOccurrence : NOT(EXISTS(SELF\IfcTypeObject.Types[1])) OR
(SIZEOF(QUERY(temp <* SELF\IfcTypeObject.Types[1].RelatedObjects |
  NOT('IFC4X3.IFCPRODUCT' IN TYPEOF(temp)))
) = 0);
END_ENTITY;

ENTITY IfcTypeResource
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcConstructionResourceType))
 SUBTYPE OF (IfcTypeObject);
	Identification : OPTIONAL IfcIdentifier;
	LongDescription : OPTIONAL IfcText;
	ResourceType : OPTIONAL IfcLabel;
 INVERSE
	ResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;
END_ENTITY;

ENTITY IfcUShapeProfileDef
 SUBTYPE OF (IfcParameterizedProfileDef);
	Depth : IfcPositiveLengthMeasure;
	FlangeWidth : IfcPositiveLengthMeasure;
	WebThickness : IfcPositiveLengthMeasure;
	FlangeThickness : IfcPositiveLengthMeasure;
	FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
	EdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
	FlangeSlope : OPTIONAL IfcPlaneAngleMeasure;
 WHERE
	ValidFlangeThickness : FlangeThickness < (Depth / 2.);
	ValidWebThickness : WebThickness < FlangeWidth;
END_ENTITY;

ENTITY IfcUnitAssignment;
	Units : SET [1:?] OF IfcUnit;
 WHERE
	WR01 : IfcCorrectUnitAssignment(Units);
END_ENTITY;

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

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

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

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

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

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

ENTITY IfcVector
 SUBTYPE OF (IfcGeometricRepresentationItem);
	Orientation : IfcDirection;
	Magnitude : IfcLengthMeasure;
 DERIVE
	 Dim : IfcDimensionCount := Orientation.Dim;
 WHERE
	MagGreaterOrEqualZero : Magnitude >= 0.0;
END_ENTITY;

ENTITY IfcVehicle
 SUBTYPE OF (IfcTransportationDevice);
	PredefinedType : OPTIONAL IfcVehicleTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcVehicleTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcVehicleTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCVEHICLETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

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

ENTITY IfcVertex
 SUPERTYPE OF (ONEOF
	(IfcVertexPoint))
 SUBTYPE OF (IfcTopologicalRepresentationItem);
END_ENTITY;

ENTITY IfcVertexLoop
 SUBTYPE OF (IfcLoop);
	LoopVertex : IfcVertex;
END_ENTITY;

ENTITY IfcVertexPoint
 SUBTYPE OF (IfcVertex);
	VertexGeometry : IfcPoint;
END_ENTITY;

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

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

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

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

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

ENTITY IfcVirtualGridIntersection;
	IntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;
	OffsetDistances : LIST [2:3] OF IfcLengthMeasure;
END_ENTITY;

ENTITY IfcVoidingFeature
 SUBTYPE OF (IfcFeatureElementSubtraction);
	PredefinedType : OPTIONAL IfcVoidingFeatureTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcVoidingFeatureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType);
END_ENTITY;

ENTITY IfcWall
 SUPERTYPE OF (ONEOF
	(IfcWallStandardCase))
 SUBTYPE OF (IfcBuiltElement);
	PredefinedType : OPTIONAL IfcWallTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcWallStandardCase
 SUBTYPE OF (IfcWall);
 WHERE
	HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4X3.IFCRELASSOCIATES.RELATEDOBJECTS') |
              ('IFC4X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND
              ('IFC4X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))
              )) = 1;
END_ENTITY;

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

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

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

ENTITY IfcWindow
 SUBTYPE OF (IfcBuiltElement);
	OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
	OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
	PredefinedType : OPTIONAL IfcWindowTypeEnum;
	PartitioningType : OPTIONAL IfcWindowTypePartitioningEnum;
	UserDefinedPartitioningType : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR
 (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType));
	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR
  ('IFC4X3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));
END_ENTITY;

ENTITY IfcWindowLiningProperties
 SUBTYPE OF (IfcPreDefinedPropertySet);
	LiningDepth : OPTIONAL IfcPositiveLengthMeasure;
	LiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;
	TransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;
	MullionThickness : OPTIONAL IfcNonNegativeLengthMeasure;
	FirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;
	SecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;
	FirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;
	SecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;
	ShapeAspectStyle : OPTIONAL IfcShapeAspect;
	LiningOffset : OPTIONAL IfcLengthMeasure;
	LiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;
	LiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;
 WHERE
	WR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));
	WR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset));
	WR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset));
	WR34 : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) 
AND 
(
 ('IFC4X3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1]))
  OR
 ('IFC4X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1]))
);
END_ENTITY;

ENTITY IfcWindowPanelProperties
 SUBTYPE OF (IfcPreDefinedPropertySet);
	OperationType : IfcWindowPanelOperationEnum;
	PanelPosition : IfcWindowPanelPositionEnum;
	FrameDepth : OPTIONAL IfcPositiveLengthMeasure;
	FrameThickness : OPTIONAL IfcPositiveLengthMeasure;
	ShapeAspectStyle : OPTIONAL IfcShapeAspect;
 WHERE
	ApplicableToType : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) 
AND 
(
 ('IFC4X3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1]))
  OR
 ('IFC4X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1]))
);
END_ENTITY;

ENTITY IfcWindowType
 SUBTYPE OF (IfcBuiltElementType);
	PredefinedType : IfcWindowTypeEnum;
	PartitioningType : IfcWindowTypePartitioningEnum;
	ParameterTakesPrecedence : OPTIONAL IfcBoolean;
	UserDefinedPartitioningType : OPTIONAL IfcLabel;
 WHERE
	CorrectPredefinedType : (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR
 ((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcElementType.ElementType));
END_ENTITY;

ENTITY IfcWorkCalendar
 SUBTYPE OF (IfcControl);
	WorkingTimes : OPTIONAL SET [1:?] OF IfcWorkTime;
	ExceptionTimes : OPTIONAL SET [1:?] OF IfcWorkTime;
	PredefinedType : OPTIONAL IfcWorkCalendarTypeEnum;
 WHERE
	CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkCalendarTypeEnum.USERDEFINED) OR
((PredefinedType = IfcWorkCalendarTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType));
END_ENTITY;

ENTITY IfcWorkControl
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcWorkPlan
	,IfcWorkSchedule))
 SUBTYPE OF (IfcControl);
	CreationDate : IfcDateTime;
	Creators : OPTIONAL SET [1:?] OF IfcPerson;
	Purpose : OPTIONAL IfcLabel;
	Duration : OPTIONAL IfcDuration;
	TotalFloat : OPTIONAL IfcDuration;
	StartTime : IfcDateTime;
	FinishTime : OPTIONAL IfcDateTime;
END_ENTITY;

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

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

ENTITY IfcWorkTime
 SUBTYPE OF (IfcSchedulingTime);
	RecurrencePattern : OPTIONAL IfcRecurrencePattern;
	StartDate : OPTIONAL IfcDate;
	FinishDate : OPTIONAL IfcDate;
END_ENTITY;

ENTITY IfcZShapeProfileDef
 SUBTYPE OF (IfcParameterizedProfileDef);
	Depth : IfcPositiveLengthMeasure;
	FlangeWidth : IfcPositiveLengthMeasure;
	WebThickness : IfcPositiveLengthMeasure;
	FlangeThickness : IfcPositiveLengthMeasure;
	FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;
	EdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;
 WHERE
	ValidFlangeThickness : FlangeThickness < (Depth / 2.);
END_ENTITY;

ENTITY IfcZone
 SUBTYPE OF (IfcSystem);
	LongName : OPTIONAL IfcLabel;
 WHERE
	WR1 : (SIZEOF(SELF\IfcGroup.IsGroupedBy) = 0) OR
 (SIZEOF (QUERY (temp <* SELF\IfcGroup.IsGroupedBy[1].RelatedObjects |  
  NOT(('IFC4X3.IFCZONE' IN TYPEOF(temp)) OR 
  ('IFC4X3.IFCSPACE' IN TYPEOF(temp)) OR
  ('IFC4X3.IFCSPATIALZONE' IN TYPEOF(temp))
 ))) = 0);
END_ENTITY;

FUNCTION IfcAssociatedSurface
(Arg : IfcPcurve) : IfcSurface;

   LOCAL
     Surf : IfcSurface;
   END_LOCAL;
   
   Surf := Arg\IfcPcurve.BasisSurface;
   
   RETURN(Surf);

END_FUNCTION;

FUNCTION IfcBaseAxis
  (Dim : INTEGER; 
   Axis1, Axis2, Axis3 : IfcDirection) 
    : LIST [2:3] OF IfcDirection;

LOCAL
  U : LIST [2:3] OF IfcDirection;
  Factor : REAL;
  D1, D2 : IfcDirection;
END_LOCAL;

  IF (Dim = 3) THEN 
    D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
    D2 := IfcFirstProjAxis(D1, Axis1);
    U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];
  ELSE
    IF EXISTS(Axis1) THEN
      D1 := IfcNormalise(Axis1);
      U  := [D1, IfcOrthogonalComplement(D1)];
      IF EXISTS(Axis2) THEN
        Factor := IfcDotProduct(Axis2, U[2]);
        IF (Factor < 0.0) THEN
          U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];
          U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];
        END_IF;
      END_IF;
    ELSE
      IF EXISTS(Axis2) THEN
        D1 := IfcNormalise(Axis2);
        U  := [IfcOrthogonalComplement(D1), D1];
        U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];
        U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];
        ELSE
          U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), 
                IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];
      END_IF;
    END_IF;
  END_IF;
  RETURN(U);

END_FUNCTION;

FUNCTION IfcBooleanChoose
(B : BOOLEAN ;
     Choice1, Choice2 : GENERIC : Item) : GENERIC : Item;
  IF B THEN
     RETURN (Choice1);
  ELSE
     RETURN (Choice2);
  END_IF;

END_FUNCTION;

FUNCTION IfcBuild2Axes
  (RefDirection : IfcDirection)
    : LIST [2:2] OF IfcDirection;
LOCAL
  D : IfcDirection := NVL(IfcNormalise(RefDirection),
      IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));
END_LOCAL;
  RETURN([D, IfcOrthogonalComplement(D)]);

END_FUNCTION;

FUNCTION IfcBuildAxes
  (Axis, RefDirection : IfcDirection) 
    : LIST [3:3] OF IfcDirection;
LOCAL
  D1, D2 : IfcDirection;
END_LOCAL;
  D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
  D2 := IfcFirstProjAxis(D1, RefDirection);
  RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2))\IfcVector.Orientation, D1]);

END_FUNCTION;

FUNCTION IfcConsecutiveSegments
  (Segments : LIST [1:?] OF IfcSegmentIndexSelect)
  : BOOLEAN;

 LOCAL
  Result : BOOLEAN := TRUE;
 END_LOCAL;

  REPEAT i := 1 TO (HIINDEX(Segments)-1);
    IF Segments[i][HIINDEX(Segments[i])] <> Segments[i+1][1] THEN
      BEGIN
        Result := FALSE;
        ESCAPE;
      END;
 END_IF;
  END_REPEAT;

  RETURN (Result);

END_FUNCTION;

FUNCTION IfcConstraintsParamBSpline
( Degree, UpKnots, UpCp : INTEGER;
  KnotMult : LIST OF INTEGER;
  Knots : LIST OF IfcParameterValue ) 
: BOOLEAN;


  LOCAL
    Result : BOOLEAN := TRUE;
    K, Sum : INTEGER;
  END_LOCAL;

  (* Find sum of knot multiplicities. *)
  Sum := KnotMult[1];
  REPEAT i := 2 TO UpKnots;
    Sum := Sum + KnotMult[i];
  END_REPEAT;

  (* Check limits holding for all B-spline parametrisations *)
  IF (Degree < 1) OR (UpKnots < 2) OR (UpCp < Degree) OR
    (Sum <> (Degree + UpCp + 2)) THEN
    Result := FALSE;
    RETURN(Result);
  END_IF;

  K := KnotMult[1];
  IF (K < 1) OR (K > Degree + 1) THEN
    Result := FALSE;
    RETURN(Result);
  END_IF;

  REPEAT i := 2 TO UpKnots;
    IF (KnotMult[i] < 1) OR (Knots[i] <= Knots[i-1]) THEN
      Result := FALSE;
      RETURN(Result);
    END_IF;
    K := KnotMult[i];
    IF (i < UpKnots) AND (K > Degree) THEN
      Result := FALSE;
      RETURN(Result);
    END_IF;
    IF (i = UpKnots) AND (K > Degree + 1) THEN
      Result := FALSE;
      RETURN(Result);
    END_IF;
  END_REPEAT;

  RETURN(result);

END_FUNCTION;

FUNCTION IfcConvertDirectionInto2D
    (Direction : IfcDirection)
    : IfcDirection;
 
  LOCAL
    Direction2D : IfcDirection := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,1.]);
  END_LOCAL;
  
  Direction2D.DirectionRatios[1] := Direction.DirectionRatios[1];
  Direction2D.DirectionRatios[2] := Direction.DirectionRatios[2];
  
  RETURN (Direction2D);

END_FUNCTION;

FUNCTION IfcCorrectDimensions
(m   : IfcUnitEnum; Dim : IfcDimensionalExponents) : LOGICAL;  
CASE m OF
  LENGTHUNIT : IF
    Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  MASSUNIT : IF
    Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  TIMEUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ELECTRICCURRENTUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  THERMODYNAMICTEMPERATUREUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  AMOUNTOFSUBSTANCEUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  LUMINOUSINTENSITYUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  PLANEANGLEUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  SOLIDANGLEUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  AREAUNIT : IF
    Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  VOLUMEUNIT : IF
    Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;

  ABSORBEDDOSEUNIT : IF
    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  RADIOACTIVITYUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ELECTRICCAPACITANCEUNIT : IF
    Dim = (IfcDimensionalExponents (-2, -1, 4, 2, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  DOSEEQUIVALENTUNIT : IF
    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ELECTRICCHARGEUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ELECTRICCONDUCTANCEUNIT : IF
    Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ELECTRICVOLTAGEUNIT : IF
    Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ELECTRICRESISTANCEUNIT : IF
    Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ENERGYUNIT : IF
    Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  FORCEUNIT : IF
    Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  FREQUENCYUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  INDUCTANCEUNIT : IF
    Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  ILLUMINANCEUNIT : IF
    Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  LUMINOUSFLUXUNIT : IF
    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  MAGNETICFLUXUNIT : IF
    Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  MAGNETICFLUXDENSITYUNIT : IF
    Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  POWERUNIT : IF
    Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;
  PRESSUREUNIT : IF
    Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))
      THEN RETURN(TRUE);
      ELSE RETURN(FALSE);
    END_IF;

  OTHERWISE :
    RETURN (UNKNOWN);
END_CASE;

END_FUNCTION;

FUNCTION IfcCorrectFillAreaStyle
  (Styles : SET[1:?] OF IfcFillStyleSelect)
  :LOGICAL;

LOCAL
   Hatching : INTEGER := 0;
   Tiles    : INTEGER := 0;
   Colour   : INTEGER := 0;
   External : INTEGER := 0;
END_LOCAL;


External := SIZEOF(QUERY(Style <* Styles |
  'IFC4X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN
   TYPEOF(Style)));

Hatching  := SIZEOF(QUERY(Style <* Styles |
  'IFC4X3.IFCFILLAREASTYLEHATCHING' IN
   TYPEOF(Style)));

Tiles     := SIZEOF(QUERY(Style <* Styles |
  'IFC4X3.IFCFILLAREASTYLETILES' IN
   TYPEOF(Style)));

Colour    := SIZEOF(QUERY(Style <* Styles |
  'IFC4X3.IFCCOLOUR' IN
   TYPEOF(Style)));


IF (External > 1) THEN
  RETURN (FALSE);
END_IF;


IF ((External = 1) AND ((Hatching > 0) OR (Tiles > 0) OR (Colour > 0))) THEN
  RETURN (FALSE);
END_IF;


IF (Colour > 1) THEN
  RETURN (FALSE);
END_IF;

IF ((Hatching > 0) AND (Tiles >0)) THEN
  RETURN (FALSE);
END_IF;

RETURN(TRUE);

END_FUNCTION;

FUNCTION IfcCorrectLocalPlacement
  (AxisPlacement:IfcAxis2Placement; 
   RelPlacement : IfcObjectPlacement):LOGICAL;

  IF (EXISTS(RelPlacement)) THEN
    IF ('IFC4X3.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN
      RETURN(?);
    END_IF;
    IF ('IFC4X3.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN
      IF ('IFC4X3.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN
        RETURN(TRUE);
      END_IF;
      IF ('IFC4X3.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN
        IF (RelPlacement\IfcLocalPlacement.RelativePlacement.Dim = 3) THEN
          RETURN(TRUE);
        ELSE
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_IF;
  ELSE
    RETURN(TRUE);  
  END_IF;
  RETURN(?);

END_FUNCTION;

FUNCTION IfcCorrectObjectAssignment
  (Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition)
  : LOGICAL ;
  
LOCAL
  Count : INTEGER := 0;
END_LOCAL;

    IF NOT(EXISTS(Constraint)) THEN 
      RETURN(TRUE);
    END_IF;
  
    CASE Constraint OF
      IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);
      IfcObjectTypeEnum.PRODUCT :
        BEGIN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCPRODUCT' IN TYPEOF(temp))));
          RETURN(Count = 0);
        END;
      IfcObjectTypeEnum.PROCESS :
        BEGIN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCPROCESS' IN TYPEOF(temp))));
          RETURN(Count = 0);
        END;
      IfcObjectTypeEnum.CONTROL :
        BEGIN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCCONTROL' IN TYPEOF(temp))));
          RETURN(Count = 0);
        END;
      IfcObjectTypeEnum.RESOURCE :
        BEGIN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCRESOURCE' IN TYPEOF(temp))));
          RETURN(Count = 0);
        END;
      IfcObjectTypeEnum.ACTOR :
        BEGIN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCACTOR' IN TYPEOF(temp))));
          RETURN(Count = 0);
        END;
      IfcObjectTypeEnum.GROUP :
        BEGIN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCGROUP' IN TYPEOF(temp))));
          RETURN(Count = 0);
        END;
      IfcObjectTypeEnum.PROJECT :
        BEGIN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4X3.IFCPROJECT' IN TYPEOF(temp))));
          RETURN(Count = 0);
        END;
      OTHERWISE : RETURN(?);
    END_CASE;

END_FUNCTION;

FUNCTION IfcCorrectUnitAssignment
  (Units : SET [1:?] OF IfcUnit)
   : LOGICAL;

  LOCAL
    NamedUnitNumber    : INTEGER := 0;
    DerivedUnitNumber  : INTEGER := 0;
    MonetaryUnitNumber : INTEGER := 0;
    NamedUnitNames     : SET OF IfcUnitEnum := [];
    DerivedUnitNames   : SET OF IfcDerivedUnitEnum := [];
  END_LOCAL;

  NamedUnitNumber    := SIZEOF(QUERY(temp <* Units | ('IFC4X3.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)));
  DerivedUnitNumber  := SIZEOF(QUERY(temp <* Units | ('IFC4X3.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)));
  MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units |  'IFC4X3.IFCMONETARYUNIT' IN TYPEOF(temp)));

  REPEAT i := 1 TO SIZEOF(Units);
    IF (('IFC4X3.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN
        NamedUnitNames := NamedUnitNames + Units[i]\IfcNamedUnit.UnitType;
    END_IF;
    IF (('IFC4X3.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN
        DerivedUnitNames := DerivedUnitNames + Units[i]\IfcDerivedUnit.UnitType;
    END_IF;
  END_REPEAT;

  RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1));

END_FUNCTION;

FUNCTION IfcCrossProduct
  (Arg1, Arg2 : IfcDirection) 
    : IfcVector;
LOCAL
  Mag : REAL;
  Res : IfcDirection;
  V1,V2  : LIST[3:3] OF REAL;
  Result : IfcVector;
END_LOCAL;

  IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN
    RETURN(?);
  ELSE
    BEGIN
      V1  := IfcNormalise(Arg1)\IfcDirection.DirectionRatios;

      V2  := IfcNormalise(Arg2)\IfcDirection.DirectionRatios;
      Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () 
             || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);
      Mag := 0.0;
      REPEAT i := 1 TO 3;
        Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];
      END_REPEAT;
      IF (Mag > 0.0) THEN
        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));
      ELSE
        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);
      END_IF;
      RETURN(Result);
    END;
  END_IF;

END_FUNCTION;

FUNCTION IfcCurveDim
(Curve : IfcCurve)
       : IfcDimensionCount;

  IF ('IFC4X3.IFCLINE' IN TYPEOF(Curve))
    THEN RETURN(Curve\IfcLine.Pnt.Dim);
  END_IF;
  IF ('IFC4X3.IFCCONIC' IN TYPEOF(Curve))
    THEN RETURN(Curve\IfcConic.Position.Dim);
  END_IF;
  IF ('IFC4X3.IFCPOLYLINE' IN TYPEOF(Curve))
    THEN RETURN(Curve\IfcPolyline.Points[1].Dim);
  END_IF;
  IF ('IFC4X3.IFCTRIMMEDCURVE' IN TYPEOF(Curve))
    THEN RETURN(IfcCurveDim(Curve\IfcTrimmedCurve.BasisCurve));
  END_IF;
  IF ('IFC4X3.IFCGRADIENTCURVE' IN TYPEOF(Curve))
    THEN RETURN(3);
  END_IF;
  IF ('IFC4X3.IFCSEGMENTEDREFERENCECURVE' IN TYPEOF(Curve))
    THEN RETURN(3);
  END_IF;
  IF ('IFC4X3.IFCCOMPOSITECURVE' IN TYPEOF(Curve))
    THEN RETURN(Curve\IfcCompositeCurve.Segments[1].Dim);
  END_IF;
  IF ('IFC4X3.IFCBSPLINECURVE' IN TYPEOF(Curve))
    THEN RETURN(Curve\IfcBSplineCurve.ControlPointsList[1].Dim);
  END_IF;
  IF ('IFC4X3.IFCOFFSETCURVE2D' IN TYPEOF(Curve))
    THEN RETURN(2); 
  END_IF;
  IF ('IFC4X3.IFCOFFSETCURVE3D' IN TYPEOF(Curve))
    THEN RETURN(3);
  END_IF;
  IF ('IFC4X3.IFCOFFSETCURVEBYDISTANCES' IN TYPEOF(Curve))
    THEN RETURN(3);
  END_IF;
  IF ('IFC4X3.IFCCURVESEGMENT2D' IN TYPEOF(Curve))
    THEN RETURN(2);
  END_IF;
  IF ('IFC4X3.IFCPOLYNOMIALCURVE' IN TYPEOF(Curve)) THEN
    IF ( NOT EXISTS(Curve\IfcPolynomialCurve.CoefficientsZ) AND (Curve\IfcPolynomialCurve.Position.Dim = 2 ))
        THEN RETURN(2);
    END_IF;
    RETURN(3);
  END_IF;
  IF ('IFC4X3.IFCPCURVE' IN TYPEOF(Curve))
    THEN RETURN(3);
  END_IF;
  IF ('IFC4X3.IFCINDEXEDPOLYCURVE' IN TYPEOF(Curve))
    THEN RETURN(Curve\IfcIndexedPolyCurve.Points.Dim);
  END_IF;
RETURN (?);

END_FUNCTION;

FUNCTION IfcCurveWeightsPositive
( B: IfcRationalBSplineCurveWithKnots)
: BOOLEAN;

  LOCAL
    Result : BOOLEAN := TRUE;
  END_LOCAL;

  REPEAT i := 0 TO B.UpperIndexOnControlPoints;
    IF B.Weights[i] <= 0.0  THEN
      Result := FALSE;
      RETURN(Result);
    END_IF;
  END_REPEAT;
  RETURN(Result);

END_FUNCTION;

FUNCTION IfcDeriveDimensionalExponents
    (UnitElements : SET [1:?] OF IfcDerivedUnitElement)
    : IfcDimensionalExponents;  
    LOCAL
    Result : IfcDimensionalExponents :=
            IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  
    END_LOCAL;
    REPEAT i := LOINDEX(UnitElements) TO HIINDEX(UnitElements);
        Result.LengthExponent := Result.LengthExponent +
          (UnitElements[i].Exponent *
           UnitElements[i].Unit.Dimensions.LengthExponent);
        Result.MassExponent := Result.MassExponent  +
          (UnitElements[i].Exponent *
           UnitElements[i].Unit.Dimensions.MassExponent);
        Result.TimeExponent := Result.TimeExponent +
          (UnitElements[i].Exponent *
           UnitElements[i].Unit.Dimensions.TimeExponent);
        Result.ElectricCurrentExponent := Result.ElectricCurrentExponent +
          (UnitElements[i].Exponent *
           UnitElements[i].Unit.Dimensions.ElectricCurrentExponent);
        Result.ThermodynamicTemperatureExponent := Result.ThermodynamicTemperatureExponent +
          (UnitElements[i].Exponent *
           UnitElements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);
        Result.AmountOfSubstanceExponent := Result.AmountOfSubstanceExponent +
          (UnitElements[i].Exponent *
           UnitElements[i].Unit.Dimensions.AmountOfSubstanceExponent);
        Result.LuminousIntensityExponent := Result.LuminousIntensityExponent +
          (UnitElements[i].Exponent *
           UnitElements[i].Unit.Dimensions.LuminousIntensityExponent);
    END_REPEAT;  
    RETURN (Result);

END_FUNCTION;

FUNCTION IfcDimensionsForSIUnit
(n : IfcSIUnitName )     : IfcDimensionalExponents;
  CASE n OF
    METRE          : RETURN (IfcDimensionalExponents
                             (1, 0, 0, 0, 0, 0, 0));
    SQUARE_METRE   : RETURN (IfcDimensionalExponents
                             (2, 0, 0, 0, 0, 0, 0));
    CUBIC_METRE    : RETURN (IfcDimensionalExponents
                             (3, 0, 0, 0, 0, 0, 0));
    GRAM           : RETURN (IfcDimensionalExponents
                             (0, 1, 0, 0, 0, 0, 0));
    SECOND         : RETURN (IfcDimensionalExponents
                             (0, 0, 1, 0, 0, 0, 0));
    AMPERE         : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 1, 0, 0, 0));
    KELVIN         : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 1, 0, 0));
    MOLE           : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 0, 1, 0));
    CANDELA        : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 0, 0, 1));
    RADIAN         : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 0, 0, 0));
    STERADIAN      : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 0, 0, 0));
    HERTZ          : RETURN (IfcDimensionalExponents
                             (0, 0, -1, 0, 0, 0, 0));
    NEWTON         : RETURN (IfcDimensionalExponents
                             (1, 1, -2, 0, 0, 0, 0));
    PASCAL         : RETURN (IfcDimensionalExponents
                             (-1, 1, -2, 0, 0, 0, 0));
    JOULE          : RETURN (IfcDimensionalExponents
                             (2, 1, -2, 0, 0, 0, 0));
    WATT           : RETURN (IfcDimensionalExponents
                             (2, 1, -3, 0, 0, 0, 0));
    COULOMB        : RETURN (IfcDimensionalExponents
                             (0, 0, 1, 1, 0, 0, 0));
    VOLT           : RETURN (IfcDimensionalExponents
                             (2, 1, -3, -1, 0, 0, 0));
    FARAD          : RETURN (IfcDimensionalExponents
                             (-2, -1, 4, 2, 0, 0, 0));
    OHM            : RETURN (IfcDimensionalExponents
                             (2, 1, -3, -2, 0, 0, 0));
    SIEMENS        : RETURN (IfcDimensionalExponents
                             (-2, -1, 3, 2, 0, 0, 0));
    WEBER          : RETURN (IfcDimensionalExponents
                             (2, 1, -2, -1, 0, 0, 0));
    TESLA          : RETURN (IfcDimensionalExponents
                             (0, 1, -2, -1, 0, 0, 0));
    HENRY          : RETURN (IfcDimensionalExponents
                             (2, 1, -2, -2, 0, 0, 0));
    DEGREE_CELSIUS : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 1, 0, 0));
    LUMEN          : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 0, 0, 1));
    LUX            : RETURN (IfcDimensionalExponents
                             (-2, 0, 0, 0, 0, 0, 1));
    BECQUEREL      : RETURN (IfcDimensionalExponents
                             (0, 0, -1, 0, 0, 0, 0));
    GRAY           : RETURN (IfcDimensionalExponents
                             (2, 0, -2, 0, 0, 0, 0));
    SIEVERT        : RETURN (IfcDimensionalExponents
                             (2, 0, -2, 0, 0, 0, 0));
    OTHERWISE      : RETURN (IfcDimensionalExponents
                             (0, 0, 0, 0, 0, 0, 0));
  END_CASE;

END_FUNCTION;

FUNCTION IfcDotProduct
  (Arg1, Arg2 : IfcDirection) 
    : REAL;
LOCAL
  Scalar : REAL;
  Vec1, Vec2 : IfcDirection;
  Ndim   : INTEGER;
END_LOCAL;

  IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN
    Scalar := ?;
  ELSE
    IF (Arg1.Dim <> Arg2.Dim) THEN
      Scalar := ?;
    ELSE
      BEGIN
        Vec1 := IfcNormalise(Arg1);
        Vec2 := IfcNormalise(Arg2);
        Ndim := Arg1.Dim;
        Scalar := 0.0;
        REPEAT i := 1 TO Ndim;
          Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];
        END_REPEAT;
      END;
    END_IF;
  END_IF;
  RETURN (Scalar);

END_FUNCTION;

FUNCTION IfcFirstProjAxis
  (ZAxis, Arg : IfcDirection) : IfcDirection;
LOCAL
  XAxis : IfcDirection;
  V     : IfcDirection;
  Z     : IfcDirection;
  XVec  : IfcVector;
END_LOCAL;

  IF (NOT EXISTS(ZAxis)) THEN
    RETURN (?) ;
  ELSE
    Z := IfcNormalise(ZAxis);
    IF NOT EXISTS(Arg) THEN
      IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN
        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);
      ELSE
        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);
      END_IF;
    ELSE
      IF (Arg.Dim <> 3) THEN
        RETURN (?) ;
      END_IF;
      IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN
        RETURN (?);
      ELSE
        V := IfcNormalise(Arg);
      END_IF;
    END_IF;
    XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);
    XAxis := IfcVectorDifference(V, XVec).Orientation;
    XAxis := IfcNormalise(XAxis);
  END_IF;
  RETURN(XAxis);

END_FUNCTION;

FUNCTION IfcGetBasisSurface
(C : IfcCurveOnSurface) : SET[0:2] OF IfcSurface;

  LOCAL
    Surfs : SET[0:2] OF IfcSurface;
    N : INTEGER;
  END_LOCAL;

  Surfs := [];
  IF 'IFC4X3.IFCPCURVE' IN TYPEOF (C) THEN
    Surfs := [C\IfcPCurve.BasisSurface];
  ELSE
    IF 'IFC4X3.IFCSURFACECURVE' IN TYPEOF (C) THEN
      N := SIZEOF(C\IfcSurfaceCurve.AssociatedGeometry);
      REPEAT i := 1 TO N;
      Surfs := Surfs + IfcAssociatedSurface(C\IfcSurfaceCurve.AssociatedGeometry[i]);
      END_REPEAT;
    END_IF;
  END_IF;
  IF 'IFC4X3.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN

    (* For an IfcCompositeCurveOnSurface the BasisSurface is the intersection of the BasisSurface of all the segments. *)

    N := SIZEOF(C\IfcCompositeCurve.Segments);
    Surfs := IfcGetBasisSurface(C\IfcCompositeCurve.Segments[1].ParentCurve);
    IF N > 1 THEN
      REPEAT i := 2 TO N;
        Surfs := Surfs * IfcGetBasisSurface(C\IfcCompositeCurve.Segments[1].ParentCurve);
      END_REPEAT;
    END_IF;
  END_IF;
  RETURN(Surfs);

END_FUNCTION;

FUNCTION IfcGradient
(GradientCurve : IfcGradientCurve) : IfcLengthMeasure;
  RETURN(1);

END_FUNCTION;

FUNCTION IfcListToArray
(Lis : LIST [0:?] OF GENERIC : T;
       Low,U : INTEGER) : ARRAY OF GENERIC : T;
   LOCAL
     N   : INTEGER;
     Res : ARRAY [Low:U] OF GENERIC : T;
   END_LOCAL;
      
   N := SIZEOF(Lis);
   IF (N <> (U-Low +1)) THEN
     RETURN(?);
   ELSE
     Res := [Lis[1] : N];
     REPEAT i := 2 TO N;
       Res[Low+i-1] := Lis[i];
     END_REPEAT;
     RETURN(Res);
   END_IF;

END_FUNCTION;

FUNCTION IfcLoopHeadToTail
(ALoop : IfcEdgeLoop) : LOGICAL;
   LOCAL
     N : INTEGER;
     P : LOGICAL := TRUE;
   END_LOCAL;
     
     N := SIZEOF (ALoop.EdgeList);
     REPEAT i := 2 TO N;
       P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:
                   ALoop.EdgeList[i].EdgeStart);
     END_REPEAT;     
     RETURN (P);

END_FUNCTION;

FUNCTION IfcMakeArrayOfArray
(Lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T;
 Low1, U1, Low2, U2 : INTEGER):
ARRAY [Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;

  LOCAL
    Res : ARRAY[Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;
  END_LOCAL;

  (* Check input dimensions for consistency *)
  IF (U1-Low1+1) <> SIZEOF(Lis) THEN
    RETURN (?);
  END_IF;
  IF (U2 - Low2 + 1 ) <> SIZEOF(Lis[1]) THEN
    RETURN (?) ;
  END_IF;

  (* Initialise Res with values from Lis[1] *)
  Res := [IfcListToArray(Lis[1], Low2, U2) : (U1-Low1 + 1)];
  REPEAT i := 2 TO HIINDEX(Lis);
    IF (U2-Low2+1) <> SIZEOF(Lis[i]) THEN
      RETURN (?);
    END_IF;
    Res[Low1+i-1] := IfcListToArray(Lis[i], Low2, U2);
  END_REPEAT;
  RETURN (Res);

END_FUNCTION;

FUNCTION IfcMlsTotalThickness
(LayerSet : IfcMaterialLayerSet) : IfcLengthMeasure;
  LOCAL
    Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    
  END_LOCAL;

  IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN
    REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);
       Max := Max + LayerSet.MaterialLayers[i].LayerThickness;
    END_REPEAT;
  END_IF;
  RETURN (Max);

END_FUNCTION;

FUNCTION IfcNormalise
  (Arg : IfcVectorOrDirection) 
    : IfcVectorOrDirection;
LOCAL
  Ndim : INTEGER;
  V    : IfcDirection
         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); 
  Vec  : IfcVector 
         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (
            IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);
  Mag  : REAL;
  Result : IfcVectorOrDirection
         := V;
END_LOCAL;

  IF NOT EXISTS (Arg) THEN
    RETURN (?);
  ELSE
    IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg) THEN
      BEGIN
        Ndim := Arg\IfcVector.Dim;
 V.DirectionRatios := Arg\IfcVector.Orientation.DirectionRatios;
        Vec.Magnitude := Arg\IfcVector.Magnitude;
 Vec.Orientation := V;
        IF Arg\IfcVector.Magnitude = 0.0 THEN
          RETURN(?);
        ELSE
          Vec.Magnitude := 1.0;
        END_IF;
      END;
    ELSE
      BEGIN
        Ndim := Arg\IfcDirection.Dim;
        V.DirectionRatios := Arg\IfcDirection.DirectionRatios;
      END;
    END_IF;

    Mag := 0.0;
      REPEAT i := 1 TO Ndim;
        Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];
      END_REPEAT;
    IF Mag > 0.0 THEN
      Mag := SQRT(Mag);
      REPEAT i := 1 TO Ndim;
        V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;
      END_REPEAT;
      IF 'IFC4X3.IFCVECTOR' IN TYPEOF(arg) THEN
        Vec.Orientation := V;
        Result := Vec;
      ELSE
        Result := V;
      END_IF;
    ELSE
      RETURN(?);
    END_IF;
  END_IF;
  RETURN (Result);

END_FUNCTION;

FUNCTION IfcOrthogonalComplement
  (Vec : IfcDirection) 
    : IfcDirection;
LOCAL
  Result : IfcDirection ;
END_LOCAL;
  IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN
    RETURN(?);
  ELSE
    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);
    RETURN(Result);
  END_IF;

END_FUNCTION;

FUNCTION IfcPathHeadToTail
(APath : IfcPath) : LOGICAL;
   LOCAL
     N : INTEGER := 0;
     P : LOGICAL := UNKNOWN;
   END_LOCAL;
     N := SIZEOF (APath.EdgeList);
   REPEAT i := 2 TO N;
      P := P AND (APath.EdgeList[i-1].EdgeEnd :=:
                  APath.EdgeList[i].EdgeStart);
   END_REPEAT;
   RETURN (P);

END_FUNCTION;

FUNCTION IfcPointListDim
(PointList : IfcCartesianPointList)
           : IfcDimensionCount;

  IF ('IFC4X3.IFCCARTESIANPOINTLIST2D' IN TYPEOF(PointList))
    THEN RETURN(2);
  END_IF;     
  IF ('IFC4X3.IFCCARTESIANPOINTLIST3D' IN TYPEOF(PointList))
    THEN RETURN(3);
  END_IF;     
  RETURN (?);

END_FUNCTION;

FUNCTION IfcSameAxis2Placement
  (ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)
  : LOGICAL ;

  RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND
          IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND
          IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));

END_FUNCTION;

FUNCTION IfcSameCartesianPoint
 (cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)
 : LOGICAL;
  
  LOCAL
    cp1x : REAL := cp1.Coordinates[1];
    cp1y : REAL := cp1.Coordinates[2];
    cp1z : REAL := 0;
    cp2x : REAL := cp2.Coordinates[1];
    cp2y : REAL := cp2.Coordinates[2];
    cp2z : REAL := 0;
  END_LOCAL;

  IF (SIZEOF(cp1.Coordinates) > 2) THEN
    cp1z := cp1.Coordinates[3];
  END_IF;

  IF (SIZEOF(cp2.Coordinates) > 2) THEN
    cp2z := cp2.Coordinates[3];
  END_IF;

  RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND
          IfcSameValue(cp1y,cp2y,Epsilon) AND
          IfcSameValue(cp1z,cp2z,Epsilon));

END_FUNCTION;

FUNCTION IfcSameDirection
 (dir1, dir2 : IfcDirection; Epsilon : REAL)
 : LOGICAL;
  LOCAL
    dir1x : REAL := dir1.DirectionRatios[1];
    dir1y : REAL := dir1.DirectionRatios[2];
    dir1z : REAL := 0;
    dir2x : REAL := dir2.DirectionRatios[1];
    dir2y : REAL := dir2.DirectionRatios[2];
    dir2z : REAL := 0;
  END_LOCAL;

  IF (SIZEOF(dir1.DirectionRatios) > 2) THEN
    dir1z := dir1.DirectionRatios[3];
  END_IF;

  IF (SIZEOF(dir2.DirectionRatios) > 2) THEN
    dir2z := dir2.DirectionRatios[3];
  END_IF;
  
  RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND
          IfcSameValue(dir1y,dir2y,Epsilon) AND
          IfcSameValue(dir1z,dir2z,Epsilon));

END_FUNCTION;

FUNCTION IfcSameValidPrecision
   (Epsilon1, Epsilon2 : REAL) : LOGICAL ;
  LOCAL
    ValidEps1, ValidEps2 : REAL;
    DefaultEps           : REAL := 0.000001;
    DerivationOfEps      : REAL := 1.001;
    UpperEps             : REAL := 1.0;
  END_LOCAL;
  
    ValidEps1 := NVL(Epsilon1, DefaultEps);
    ValidEps2 := NVL(Epsilon2, DefaultEps);
    RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND 
            (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps));

END_FUNCTION;

FUNCTION IfcSameValue
 (Value1, Value2 : REAL; Epsilon : REAL)
 : LOGICAL;
  LOCAL
    ValidEps    : REAL;
    DefaultEps  : REAL := 0.000001;
  END_LOCAL;
  
  ValidEps := NVL(Epsilon, DefaultEps);
  RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));

END_FUNCTION;

FUNCTION IfcScalarTimesVector
  (Scalar : REAL; Vec : IfcVectorOrDirection)
    : IfcVector;
LOCAL
  V : IfcDirection;
  Mag : REAL;
  Result : IfcVector;
END_LOCAL;

  IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN
    RETURN (?) ;
  ELSE
    IF 'IFC4X3.IFCVECTOR' IN TYPEOF (Vec) THEN
      V := Vec\IfcVector.Orientation;
      Mag := Scalar * Vec\IfcVector.Magnitude;
    ELSE
      V := Vec;
      Mag := Scalar;
    END_IF;
    IF (Mag < 0.0 ) THEN
      REPEAT i := 1 TO SIZEOF(V.DirectionRatios);
        V.DirectionRatios[i] := -V.DirectionRatios[i];
      END_REPEAT;
      Mag := -Mag;
    END_IF;
    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);
  END_IF;
  RETURN (Result);

END_FUNCTION;

FUNCTION IfcSecondProjAxis
  (ZAxis, XAxis, Arg: IfcDirection) 
    : IfcDirection;
LOCAL
  YAxis : IfcVector;
  V     : IfcDirection;
  Temp  : IfcVector;
END_LOCAL;

  IF NOT EXISTS(Arg) THEN
    V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);
  ELSE
    V := Arg;
  END_IF;
  Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);
  YAxis := IfcVectorDifference(V, Temp);
  Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);
  YAxis := IfcVectorDifference(YAxis, Temp);
  YAxis := IfcNormalise(YAxis);
  RETURN(YAxis.Orientation);

END_FUNCTION;

FUNCTION IfcShapeRepresentationTypes
(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;
    
    LOCAL
      Count : INTEGER := 0;
    END_LOCAL;

    CASE RepType OF 
    'Point' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCPOINT' IN TYPEOF(temp))));
      END;

    'PointCloud' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp))));
      END;

    'Curve' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCURVE' IN TYPEOF(temp))));
      END;

    'Curve2D' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCURVE' IN TYPEOF(temp)) 
                 AND (temp\IfcCurve.Dim = 2)));
      END;

    'Curve3D' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCCURVE' IN TYPEOF(temp)) 
                 AND (temp\IfcCurve.Dim = 3)));
      END;

    'Segment' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSEGMENT' IN TYPEOF(temp))));
      END;

    'Surface' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSURFACE' IN TYPEOF(temp))));
      END;

    'Surface2D' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSURFACE' IN TYPEOF(temp)) 
                 AND (temp\IfcSurface.Dim = 2)));
      END;

    'Surface3D' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSURFACE' IN TYPEOF(temp)) 
                 AND (temp\IfcSurface.Dim = 3)));
      END;

    'SectionedSurface' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3.IFCSECTIONEDSURFACE' IN TYPEOF(temp)));
      END;

    'FillArea' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCANNOTATIONFILLAREA' IN TYPEOF(temp))));
      END;

    'Text' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCTEXTLITERAL' IN TYPEOF(temp))));
      END;

    'AdvancedSurface' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3.IFCBSPLINESURFACE' IN TYPEOF(temp)));
      END;

    'Annotation2D' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | (
                  SIZEOF(TYPEOF(temp) * [
                   'IFC4X3.IFCPOINT',
                   'IFC4X3.IFCCURVE',
                   'IFC4X3.IFCGEOMETRICCURVESET',
                   'IFC4X3.IFCANNOTATIONFILLAREA',
                   'IFC4X3.IFCTEXTLITERAL']) = 1)
                 ));
      END;

    'GeometricSet' : 
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCGEOMETRICSET' IN TYPEOF(temp))
                 OR ('IFC4X3.IFCPOINT' IN TYPEOF(temp))
                 OR ('IFC4X3.IFCCURVE' IN TYPEOF(temp))
                 OR ('IFC4X3.IFCSURFACE' IN TYPEOF(temp))));
      END;

    'GeometricCurveSet' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCGEOMETRICCURVESET' IN TYPEOF(temp))
                 OR ('IFC4X3.IFCGEOMETRICSET' IN TYPEOF(temp))
                 OR ('IFC4X3.IFCPOINT' IN TYPEOF(temp))
                 OR ('IFC4X3.IFCCURVE' IN TYPEOF(temp))));
         REPEAT i:=1 TO HIINDEX(Items);  
           IF ('IFC4X3.IFCGEOMETRICSET' IN TYPEOF(Items[i]))
           THEN
             IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC4X3.IFCSURFACE' IN TYPEOF(temp))) > 0)
             THEN
               Count := Count - 1;
             END_IF;
           END_IF;
         END_REPEAT;
      END;

    'Tessellation' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3.IFCTESSELLATEDITEM' IN TYPEOF(temp)));
      END;

    'SurfaceOrSolidModel' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
                   'IFC4X3.IFCTESSELLATEDITEM',
                   'IFC4X3.IFCSHELLBASEDSURFACEMODEL',
                   'IFC4X3.IFCFACEBASEDSURFACEMODEL',
                   'IFC4X3.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1
                 ));      
      END;

    'SurfaceModel' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
                   'IFC4X3.IFCTESSELLATEDITEM',
                   'IFC4X3.IFCSHELLBASEDSURFACEMODEL',
                   'IFC4X3.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1
                 ));      
      END;

    'SolidModel' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSOLIDMODEL' IN TYPEOF(temp))));            
      END;

    'SweptSolid' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([
                   'IFC4X3.IFCEXTRUDEDAREASOLID',
                   'IFC4X3.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1
                   ) AND (SIZEOF([
                   'IFC4X3.IFCEXTRUDEDAREASOLIDTAPERED',
                   'IFC4X3.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0
                   )
                 ));                             
      END;

    'AdvancedSweptSolid' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
                   'IFC4X3.IFCSWEPTAREASOLID',
                   'IFC4X3.IFCSWEPTDISKSOLID',
                   'IFC4X3.IFCSECTIONEDSOLIDHORIZONTAL'] *  TYPEOF(temp)) >= 1
                 ));      
      END;

    'CSG' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
                   'IFC4X3.IFCBOOLEANRESULT',
                   'IFC4X3.IFCCSGPRIMITIVE3D',
                   'IFC4X3.IFCCSGSOLID'] *  TYPEOF(temp)) >= 1
                 ));            
      END;

    'Clipping' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
                   'IFC4X3.IFCCSGSOLID',
                   'IFC4X3.IFCBOOLEANCLIPPINGRESULT'] * TYPEOF(temp)) >= 1
                 )); 
      END;

    'Brep' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCFACETEDBREP' IN TYPEOF(temp))));      
      END;

    'AdvancedBrep' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp))));      
      END;

    'BoundingBox' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCBOUNDINGBOX' IN TYPEOF(temp))));
        IF (SIZEOF(Items) > 1)
        THEN
          Count := 0;
        END_IF;   
      END;

    'SectionedSpine' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      
      END;

    'LightSource' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCLIGHTSOURCE' IN TYPEOF(temp))));      
      END;

    'MappedRepresentation' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3.IFCMAPPEDITEM' IN TYPEOF(temp))));  
      END;

     OTHERWISE : RETURN(?);
    END_CASE;
    RETURN (Count = SIZEOF(Items));

END_FUNCTION;

FUNCTION IfcSurfaceWeightsPositive
( B: IfcRationalBSplineSurfaceWithKnots) 
: BOOLEAN; 

  LOCAL 
    Result : BOOLEAN := TRUE; 
    Weights : ARRAY [ 0 : B\IfcBSplineSurface.UUpper ] OF ARRAY [ 0 : B\IfcBSplineSurface.VUpper ] OF REAL := B.Weights; 
  END_LOCAL; 

  REPEAT i := 0 TO B\IfcBSplineSurface.UUpper; 
    REPEAT j := 0 TO B\IfcBSplineSurface.VUpper; 
      IF (Weights[i][j] <= 0.0) THEN 
        Result := FALSE; 
        RETURN(Result); 
      END_IF; 
    END_REPEAT; 
  END_REPEAT; 
  RETURN(Result);

END_FUNCTION;

FUNCTION IfcTaperedSweptAreaProfiles
(StartArea, EndArea : IfcProfileDef)
 : LOGICAL;

LOCAL
   Result : LOGICAL := FALSE;
END_LOCAL;
   
IF ('IFC4X3.IFCPARAMETERIZEDPROFILEDEF' IN TYPEOF(StartArea)) THEN
   IF ('IFC4X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN
      Result := (StartArea :=: EndArea\IfcDerivedProfileDef.ParentProfile);
   ELSE
      Result := (TYPEOF(StartArea) = TYPEOF(EndArea));
   END_IF;
ELSE
   IF ('IFC4X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN
      Result := (StartArea :=: EndArea\IfcDerivedProfileDef.ParentProfile);
   ELSE
      Result := FALSE;
   END_IF;
END_IF;

RETURN(Result);

END_FUNCTION;

FUNCTION IfcTopologyRepresentationTypes
(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;
    
    LOCAL
      Count : INTEGER := 0;
    END_LOCAL;

    CASE RepType OF 
    'Vertex' :
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | 
                  ('IFC4X3.IFCVERTEX' IN TYPEOF(temp))));
      END;
    'Edge' : 
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | 
                  ('IFC4X3.IFCEDGE' IN TYPEOF(temp))));
      END;
    'Path' : 
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | 
                  ('IFC4X3.IFCPATH' IN TYPEOF(temp))));
      END;
    'Face' : 
      BEGIN 
        Count := SIZEOF(QUERY(temp <* Items | 
                  ('IFC4X3.IFCFACE' IN TYPEOF(temp))));
      END;
    'Shell' :
      BEGIN
        Count := SIZEOF(QUERY(temp <* Items | 
                  ('IFC4X3.IFCOPENSHELL' IN TYPEOF(temp))
                    OR ('IFC4X3.IFCCLOSEDSHELL' IN TYPEOF(temp))));
      END;
    'Undefined': RETURN(TRUE);
     OTHERWISE : RETURN(?);
    END_CASE;
    RETURN (Count = SIZEOF(Items));

END_FUNCTION;

FUNCTION IfcUniqueDefinitionNames
(Relations : SET [1:?] OF IfcRelDefinesByProperties)
:LOGICAL;

LOCAL
  Definition : IfcPropertySetDefinitionSelect;
  DefinitionSet : IfcPropertySetDefinitionSet;
  Properties : SET OF IfcPropertySetDefinition := [];
  Result : LOGICAL;
END_LOCAL;

IF SIZEOF(Relations) = 0 THEN
  RETURN(TRUE);
END_IF;

REPEAT i:=1 TO HIINDEX(Relations);
  Definition := Relations[i].RelatingPropertyDefinition;
  IF 'IFC4X3.IFCPROPERTYSETDEFINITION' IN TYPEOF(Definition) THEN
    Properties := Properties + Definition;
  ELSE 
    IF 'IFC4X3.IFCPROPERTYSETDEFINITIONSET' IN TYPEOF(Definition) THEN
      BEGIN
        DefinitionSet := Definition;
        REPEAT j:= 1 TO HIINDEX(DefinitionSet);
          Properties := Properties + DefinitionSet[j];
        END_REPEAT;
      END;
 END_IF;
  END_IF;
END_REPEAT;

Result := IfcUniquePropertySetNames(Properties);
RETURN (Result);

END_FUNCTION;

FUNCTION IfcUniquePropertyName
(Properties : SET [1:?] OF IfcProperty)
 :LOGICAL;

 LOCAL
   Names : SET OF IfcIdentifier := [];
 END_LOCAL;

 REPEAT i:=1 TO HIINDEX(Properties);
   Names := Names + Properties[i].Name;
 END_REPEAT;

 RETURN (SIZEOF(Names) = SIZEOF(Properties));

END_FUNCTION;

FUNCTION IfcUniquePropertySetNames
(Properties : SET [1:?] OF IfcPropertySetDefinition)
:LOGICAL;

LOCAL
  Names : SET OF IfcLabel := [];
  Unnamed : INTEGER := 0;
END_LOCAL;

REPEAT i:=1 TO HIINDEX(Properties);
  IF 'IFC4X3.IFCPROPERTYSET' IN TYPEOF(Properties[i]) THEN
    Names := Names + Properties[i]\IfcRoot.Name;
  ELSE
    Unnamed := Unnamed + 1;
  END_IF;
END_REPEAT;

RETURN (SIZEOF(Names) + Unnamed = SIZEOF(Properties));

END_FUNCTION;

FUNCTION IfcUniquePropertyTemplateNames
(Properties : SET [1:?] OF IfcPropertyTemplate)
:LOGICAL;

LOCAL
  Names : SET OF IfcLabel := [];
END_LOCAL;

REPEAT i:=1 TO HIINDEX(Properties);
  Names := Names + Properties[i].Name;
END_REPEAT;
RETURN (SIZEOF(Names) = SIZEOF(Properties));

END_FUNCTION;

FUNCTION IfcUniqueQuantityNames
(Properties : SET [1:?] OF IfcPhysicalQuantity)
:LOGICAL;

LOCAL
  Names : SET OF IfcLabel := [];
END_LOCAL;

REPEAT i:=1 TO HIINDEX(Properties);
  Names := Names + Properties[i].Name;
END_REPEAT;
RETURN (SIZEOF(Names) = SIZEOF(Properties));

END_FUNCTION;

FUNCTION IfcVectorDifference
  (Arg1, Arg2 : IfcVectorOrDirection)
    : IfcVector;
LOCAL
  Result : IfcVector;
  Res, Vec1, Vec2 : IfcDirection;
  Mag, Mag1, Mag2 : REAL;
  Ndim : INTEGER;
END_LOCAL;

  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN
    RETURN (?) ;
  ELSE
    BEGIN
      IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg1) THEN
        Mag1 := Arg1\IfcVector.Magnitude;
        Vec1 := Arg1\IfcVector.Orientation;
      ELSE
        Mag1 := 1.0;
        Vec1 := Arg1;
      END_IF;
      IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg2) THEN
        Mag2 := Arg2\IfcVector.Magnitude;
        Vec2 := Arg2\IfcVector.Orientation;
      ELSE
        Mag2 := 1.0;
        Vec2 := Arg2;
      END_IF;
      Vec1 := IfcNormalise (Vec1);
      Vec2 := IfcNormalise (Vec2);
      Ndim := SIZEOF(Vec1.DirectionRatios);
      Mag  := 0.0;
      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);

      REPEAT i := 1 TO Ndim;
        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i];
        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);
      END_REPEAT;

      IF (Mag > 0.0 ) THEN
        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));
      ELSE
        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);
      END_IF;
    END;
  END_IF;
  RETURN (Result);

END_FUNCTION;

FUNCTION IfcVectorSum
  (Arg1, Arg2 : IfcVectorOrDirection) 
    : IfcVector;
LOCAL
  Result : IfcVector;
  Res, Vec1, Vec2 : IfcDirection;
  Mag, Mag1, Mag2 : REAL;
  Ndim : INTEGER;
END_LOCAL;

  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN
    RETURN (?) ;
  ELSE
    BEGIN
      IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg1) THEN
        Mag1 := Arg1\IfcVector.Magnitude;
        Vec1 := Arg1\IfcVector.Orientation;
      ELSE
        Mag1 := 1.0;
        Vec1 := Arg1;
      END_IF;
      IF 'IFC4X3.IFCVECTOR' IN TYPEOF(Arg2) THEN
        Mag2 := Arg2\IfcVector.Magnitude;
        Vec2 := Arg2\IfcVector.Orientation;
      ELSE
        Mag2 := 1.0;
        Vec2 := Arg2;
      END_IF;
      Vec1 := IfcNormalise (Vec1);
      Vec2 := IfcNormalise (Vec2);
      Ndim := SIZEOF(Vec1.DirectionRatios);
      Mag  := 0.0;
      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);

      REPEAT i := 1 TO Ndim;
        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];
        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);
      END_REPEAT;

      IF (Mag > 0.0 ) THEN
        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));
      ELSE
        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);
      END_IF;
    END;
  END_IF;
  RETURN (Result);

END_FUNCTION;

RULE IfcRepresentationContextSameWCS FOR
 (IfcGeometricRepresentationContext);
LOCAL
  IsDifferent  : LOGICAL := FALSE;
END_LOCAL;
  IF (SIZEOF(IfcGeometricRepresentationContext) > 1)
  THEN
    REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);
      IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)
      THEN
        IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,
                                                  IfcGeometricRepresentationContext[i].Precision)))
                    OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,
                                                  IfcGeometricRepresentationContext[i].WorldCoordinateSystem,
                                                  IfcGeometricRepresentationContext[1].Precision)));
        IF (IsDifferent = TRUE) THEN
          ESCAPE;
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;

    WHERE
      WR1 : IsDifferent = FALSE;
END_RULE;

RULE IfcSingleProjectInstance FOR
 (IfcProject);

    WHERE
      WR1 : SIZEOF(IfcProject) <= 1;
END_RULE;

END_SCHEMA;

  

 

 

####################

posted @ 2023-01-21 22:20  西北逍遥  阅读(69)  评论(0编辑  收藏  举报