(* Copyright by: buildingSMART International Ltd, 1996-2013 Any technical documentation made available by buildingSMART International Limited is the copyrighted work of buildingSMART International Limited and is owned by the buildingSMART International Limited. It may be photocopied, used in software development, or translated into another computer language without prior written consent from buildingSMART International Limited provided that full attribution is given. Prior written consent is required if changes are made to the technical specification. This material is delivered to you as is and buildingSMART International Limited makes no warranty of any kind with regard to it, including, but not limited to, the implied warranties as to its accuracy or fitness for a particular purpose. Any use of the technical documentation or the information contained therein is at the risk of the user. Documentation may include technical or other inaccuracies or typographical errors. buildingSMART International Limited shall not be liable for errors contained therein or for incidental consequential damages in connection with the furnishing, performance or use of the material. The information contained in this document is subject to change without notice. Content: full IFC object model EXPRESS definitions for the IFC4 Release (released for production) - express longform distribution - compiled for EXPRESS version 1 technical corrigendum 2 Issue date: February 28, 2013 Development Team: Modeling Support Group of buildingSMART International compiled by Thomas Liebich tl@aec3.com *) SCHEMA IFC4; TYPE IfcAbsorbedDoseMeasure = REAL; END_TYPE; TYPE IfcAccelerationMeasure = REAL; END_TYPE; TYPE IfcAmountOfSubstanceMeasure = REAL; END_TYPE; TYPE IfcAngularVelocityMeasure = REAL; END_TYPE; TYPE IfcAreaDensityMeasure = REAL; END_TYPE; TYPE IfcAreaMeasure = REAL; END_TYPE; TYPE IfcBoolean = BOOLEAN; END_TYPE; TYPE IfcBoxAlignment = IfcLabel; WHERE WR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right']; END_TYPE; TYPE IfcCardinalPointReference = INTEGER; WHERE GreaterThanZero : SELF > 0; END_TYPE; TYPE IfcComplexNumber = ARRAY [1:2] OF REAL; END_TYPE; TYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER; WHERE MinutesInRange : ABS(SELF[2]) < 60; SecondsInRange : ABS(SELF[3]) < 60; MicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000); ConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0))) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0))); END_TYPE; TYPE IfcContextDependentMeasure = REAL; END_TYPE; TYPE IfcCountMeasure = NUMBER; END_TYPE; TYPE IfcCurvatureMeasure = REAL; END_TYPE; TYPE IfcDate = STRING; END_TYPE; TYPE IfcDateTime = STRING; END_TYPE; TYPE IfcDayInMonthNumber = INTEGER; WHERE ValidRange : {1 <= SELF <= 31}; END_TYPE; TYPE IfcDayInWeekNumber = INTEGER; WHERE ValidRange : {1 <= SELF <= 7}; END_TYPE; TYPE IfcDescriptiveMeasure = STRING; END_TYPE; TYPE IfcDimensionCount = INTEGER; WHERE WR1 : { 0 < SELF <= 3 }; END_TYPE; TYPE IfcDoseEquivalentMeasure = REAL; END_TYPE; TYPE IfcDuration = STRING; END_TYPE; TYPE IfcDynamicViscosityMeasure = REAL; END_TYPE; TYPE IfcElectricCapacitanceMeasure = REAL; END_TYPE; TYPE IfcElectricChargeMeasure = REAL; END_TYPE; TYPE IfcElectricConductanceMeasure = REAL; END_TYPE; TYPE IfcElectricCurrentMeasure = REAL; END_TYPE; TYPE IfcElectricResistanceMeasure = REAL; END_TYPE; TYPE IfcElectricVoltageMeasure = REAL; END_TYPE; TYPE IfcEnergyMeasure = REAL; END_TYPE; TYPE IfcFontStyle = STRING; WHERE WR1 : SELF IN ['normal','italic','oblique']; END_TYPE; TYPE IfcFontVariant = STRING; WHERE WR1 : SELF IN ['normal','small-caps']; END_TYPE; TYPE IfcFontWeight = STRING; WHERE WR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900']; END_TYPE; TYPE IfcForceMeasure = REAL; END_TYPE; TYPE IfcFrequencyMeasure = REAL; END_TYPE; TYPE IfcGloballyUniqueId = STRING(22) FIXED; END_TYPE; TYPE IfcHeatFluxDensityMeasure = REAL; END_TYPE; TYPE IfcHeatingValueMeasure = REAL; WHERE WR1 : SELF > 0.; END_TYPE; TYPE IfcIdentifier = STRING(255); END_TYPE; TYPE IfcIlluminanceMeasure = REAL; END_TYPE; TYPE IfcInductanceMeasure = REAL; END_TYPE; TYPE IfcInteger = INTEGER; END_TYPE; TYPE IfcIntegerCountRateMeasure = INTEGER; END_TYPE; TYPE IfcIonConcentrationMeasure = REAL; END_TYPE; TYPE IfcIsothermalMoistureCapacityMeasure = REAL; END_TYPE; TYPE IfcKinematicViscosityMeasure = REAL; END_TYPE; TYPE IfcLabel = STRING(255); END_TYPE; TYPE IfcLanguageId = IfcIdentifier; END_TYPE; TYPE IfcLengthMeasure = REAL; END_TYPE; TYPE IfcLinearForceMeasure = REAL; END_TYPE; TYPE IfcLinearMomentMeasure = REAL; END_TYPE; TYPE IfcLinearStiffnessMeasure = REAL; END_TYPE; TYPE IfcLinearVelocityMeasure = REAL; END_TYPE; TYPE IfcLogical = LOGICAL; END_TYPE; TYPE IfcLuminousFluxMeasure = REAL; END_TYPE; TYPE IfcLuminousIntensityDistributionMeasure = REAL; END_TYPE; TYPE IfcLuminousIntensityMeasure = REAL; END_TYPE; TYPE IfcMagneticFluxDensityMeasure = REAL; END_TYPE; TYPE IfcMagneticFluxMeasure = REAL; END_TYPE; TYPE IfcMassDensityMeasure = REAL; END_TYPE; TYPE IfcMassFlowRateMeasure = REAL; END_TYPE; TYPE IfcMassMeasure = REAL; END_TYPE; TYPE IfcMassPerLengthMeasure = REAL; END_TYPE; TYPE IfcModulusOfElasticityMeasure = REAL; END_TYPE; TYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL; END_TYPE; TYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL; END_TYPE; TYPE IfcModulusOfSubgradeReactionMeasure = REAL; END_TYPE; TYPE IfcMoistureDiffusivityMeasure = REAL; END_TYPE; TYPE IfcMolecularWeightMeasure = REAL; END_TYPE; TYPE IfcMomentOfInertiaMeasure = REAL; END_TYPE; TYPE IfcMonetaryMeasure = REAL; END_TYPE; TYPE IfcMonthInYearNumber = INTEGER; WHERE ValidRange : {1 <= SELF <= 12}; END_TYPE; TYPE IfcNonNegativeLengthMeasure = IfcLengthMeasure; WHERE NotNegative : SELF >= 0.; END_TYPE; TYPE IfcNormalisedRatioMeasure = IfcRatioMeasure; WHERE WR1 : {0.0 <= SELF <= 1.0}; END_TYPE; TYPE IfcNumericMeasure = NUMBER; END_TYPE; TYPE IfcPHMeasure = REAL; WHERE WR21 : {0.0 <= SELF <= 14.0}; END_TYPE; TYPE IfcParameterValue = REAL; END_TYPE; TYPE IfcPlanarForceMeasure = REAL; END_TYPE; TYPE IfcPlaneAngleMeasure = REAL; END_TYPE; TYPE IfcPositiveLengthMeasure = IfcLengthMeasure; WHERE WR1 : SELF > 0.; END_TYPE; TYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure; WHERE WR1 : SELF > 0.; END_TYPE; TYPE IfcPositiveRatioMeasure = IfcRatioMeasure; WHERE WR1 : SELF > 0.; END_TYPE; TYPE IfcPowerMeasure = REAL; END_TYPE; TYPE IfcPresentableText = STRING; END_TYPE; TYPE IfcPressureMeasure = REAL; END_TYPE; TYPE IfcPropertySetDefinitionSet = SET [1:?] OF IfcPropertySetDefinition; END_TYPE; TYPE IfcRadioActivityMeasure = REAL; END_TYPE; TYPE IfcRatioMeasure = REAL; END_TYPE; TYPE IfcReal = REAL; END_TYPE; TYPE IfcRotationalFrequencyMeasure = REAL; END_TYPE; TYPE IfcRotationalMassMeasure = REAL; END_TYPE; TYPE IfcRotationalStiffnessMeasure = REAL; END_TYPE; TYPE IfcSectionModulusMeasure = REAL; END_TYPE; TYPE IfcSectionalAreaIntegralMeasure = REAL; END_TYPE; TYPE IfcShearModulusMeasure = REAL; END_TYPE; TYPE IfcSolidAngleMeasure = REAL; END_TYPE; TYPE IfcSoundPowerLevelMeasure = REAL; END_TYPE; TYPE IfcSoundPowerMeasure = REAL; END_TYPE; TYPE IfcSoundPressureLevelMeasure = REAL; END_TYPE; TYPE IfcSoundPressureMeasure = REAL; END_TYPE; TYPE IfcSpecificHeatCapacityMeasure = REAL; END_TYPE; TYPE IfcSpecularExponent = REAL; END_TYPE; TYPE IfcSpecularRoughness = REAL; WHERE WR1 : {0.0 <= SELF <= 1.0}; END_TYPE; TYPE IfcTemperatureGradientMeasure = REAL; END_TYPE; TYPE IfcTemperatureRateOfChangeMeasure = REAL; END_TYPE; TYPE IfcText = STRING; END_TYPE; TYPE IfcTextAlignment = STRING; WHERE WR1 : SELF IN ['left', 'right', 'center', 'justify']; END_TYPE; TYPE IfcTextDecoration = STRING; WHERE WR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink']; END_TYPE; TYPE IfcTextFontName = STRING; END_TYPE; TYPE IfcTextTransformation = STRING; WHERE WR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none']; END_TYPE; TYPE IfcThermalAdmittanceMeasure = REAL; END_TYPE; TYPE IfcThermalConductivityMeasure = REAL; END_TYPE; TYPE IfcThermalExpansionCoefficientMeasure = REAL; END_TYPE; TYPE IfcThermalResistanceMeasure = REAL; END_TYPE; TYPE IfcThermalTransmittanceMeasure = REAL; END_TYPE; TYPE IfcThermodynamicTemperatureMeasure = REAL; END_TYPE; TYPE IfcTime = STRING; END_TYPE; TYPE IfcTimeMeasure = REAL; END_TYPE; TYPE IfcTimeStamp = INTEGER; END_TYPE; TYPE IfcTorqueMeasure = REAL; END_TYPE; TYPE IfcURIReference = STRING; END_TYPE; TYPE IfcVaporPermeabilityMeasure = REAL; END_TYPE; TYPE IfcVolumeMeasure = REAL; END_TYPE; TYPE IfcVolumetricFlowRateMeasure = REAL; END_TYPE; TYPE IfcWarpingConstantMeasure = REAL; END_TYPE; TYPE IfcWarpingMomentMeasure = REAL; END_TYPE; TYPE IfcActionRequestTypeEnum = ENUMERATION OF (EMAIL ,FAX ,PHONE ,POST ,VERBAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcActionSourceTypeEnum = ENUMERATION OF (DEAD_LOAD_G ,COMPLETION_G1 ,LIVE_LOAD_Q ,SNOW_S ,WIND_W ,PRESTRESSING_P ,SETTLEMENT_U ,TEMPERATURE_T ,EARTHQUAKE_E ,FIRE ,IMPULSE ,IMPACT ,TRANSPORT ,ERECTION ,PROPPING ,SYSTEM_IMPERFECTION ,SHRINKAGE ,CREEP ,LACK_OF_FIT ,BUOYANCY ,ICE ,CURRENT ,WAVE ,RAIN ,BRAKES ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcActionTypeEnum = ENUMERATION OF (PERMANENT_G ,VARIABLE_Q ,EXTRAORDINARY_A ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcActuatorTypeEnum = ENUMERATION OF (ELECTRICACTUATOR ,HANDOPERATEDACTUATOR ,HYDRAULICACTUATOR ,PNEUMATICACTUATOR ,THERMOSTATICACTUATOR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcAddressTypeEnum = ENUMERATION OF (OFFICE ,SITE ,HOME ,DISTRIBUTIONPOINT ,USERDEFINED); END_TYPE; TYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF (CONSTANTFLOW ,VARIABLEFLOWPRESSUREDEPENDANT ,VARIABLEFLOWPRESSUREINDEPENDANT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcAirTerminalTypeEnum = ENUMERATION OF (DIFFUSER ,GRILLE ,LOUVRE ,REGISTER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF (FIXEDPLATECOUNTERFLOWEXCHANGER ,FIXEDPLATECROSSFLOWEXCHANGER ,FIXEDPLATEPARALLELFLOWEXCHANGER ,ROTARYWHEEL ,RUNAROUNDCOILLOOP ,HEATPIPE ,TWINTOWERENTHALPYRECOVERYLOOPS ,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS ,THERMOSIPHONCOILTYPEHEATEXCHANGERS ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcAlarmTypeEnum = ENUMERATION OF (BELL ,BREAKGLASSBUTTON ,LIGHT ,MANUALPULLBOX ,SIREN ,WHISTLE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcAnalysisModelTypeEnum = ENUMERATION OF (IN_PLANE_LOADING_2D ,OUT_PLANE_LOADING_2D ,LOADING_3D ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF (FIRST_ORDER_THEORY ,SECOND_ORDER_THEORY ,THIRD_ORDER_THEORY ,FULL_NONLINEAR_THEORY ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcArithmeticOperatorEnum = ENUMERATION OF (ADD ,DIVIDE ,MULTIPLY ,SUBTRACT); END_TYPE; TYPE IfcAssemblyPlaceEnum = ENUMERATION OF (SITE ,FACTORY ,NOTDEFINED); END_TYPE; TYPE IfcAudioVisualApplianceTypeEnum = ENUMERATION OF (AMPLIFIER ,CAMERA ,DISPLAY ,MICROPHONE ,PLAYER ,PROJECTOR ,RECEIVER ,SPEAKER ,SWITCHER ,TELEPHONE ,TUNER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcBSplineCurveForm = ENUMERATION OF (POLYLINE_FORM ,CIRCULAR_ARC ,ELLIPTIC_ARC ,PARABOLIC_ARC ,HYPERBOLIC_ARC ,UNSPECIFIED); END_TYPE; TYPE IfcBSplineSurfaceForm = ENUMERATION OF (PLANE_SURF ,CYLINDRICAL_SURF ,CONICAL_SURF ,SPHERICAL_SURF ,TOROIDAL_SURF ,SURF_OF_REVOLUTION ,RULED_SURF ,GENERALISED_CONE ,QUADRIC_SURF ,SURF_OF_LINEAR_EXTRUSION ,UNSPECIFIED); END_TYPE; TYPE IfcBeamTypeEnum = ENUMERATION OF (BEAM ,JOIST ,HOLLOWCORE ,LINTEL ,SPANDREL ,T_BEAM ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcBenchmarkEnum = ENUMERATION OF (GREATERTHAN ,GREATERTHANOREQUALTO ,LESSTHAN ,LESSTHANOREQUALTO ,EQUALTO ,NOTEQUALTO ,INCLUDES ,NOTINCLUDES ,INCLUDEDIN ,NOTINCLUDEDIN); END_TYPE; TYPE IfcBoilerTypeEnum = ENUMERATION OF (WATER ,STEAM ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcBooleanOperator = ENUMERATION OF (UNION ,INTERSECTION ,DIFFERENCE); END_TYPE; TYPE IfcBuildingElementPartTypeEnum = ENUMERATION OF (INSULATION ,PRECASTPANEL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF (COMPLEX ,ELEMENT ,PARTIAL ,PROVISIONFORVOID ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcBuildingSystemTypeEnum = ENUMERATION OF (FENESTRATION ,FOUNDATION ,LOADBEARING ,OUTERSHELL ,SHADING ,TRANSPORT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcBurnerTypeEnum = ENUMERATION OF (USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF (BEND ,CROSS ,REDUCER ,TEE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF (CABLELADDERSEGMENT ,CABLETRAYSEGMENT ,CABLETRUNKINGSEGMENT ,CONDUITSEGMENT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCableFittingTypeEnum = ENUMERATION OF (CONNECTOR ,ENTRY ,EXIT ,JUNCTION ,TRANSITION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCableSegmentTypeEnum = ENUMERATION OF (BUSBARSEGMENT ,CABLESEGMENT ,CONDUCTORSEGMENT ,CORESEGMENT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcChangeActionEnum = ENUMERATION OF (NOCHANGE ,MODIFIED ,ADDED ,DELETED ,NOTDEFINED); END_TYPE; TYPE IfcChillerTypeEnum = ENUMERATION OF (AIRCOOLED ,WATERCOOLED ,HEATRECOVERY ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcChimneyTypeEnum = ENUMERATION OF (USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCoilTypeEnum = ENUMERATION OF (DXCOOLINGCOIL ,ELECTRICHEATINGCOIL ,GASHEATINGCOIL ,HYDRONICCOIL ,STEAMHEATINGCOIL ,WATERCOOLINGCOIL ,WATERHEATINGCOIL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcColumnTypeEnum = ENUMERATION OF (COLUMN ,PILASTER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCommunicationsApplianceTypeEnum = ENUMERATION OF (ANTENNA ,COMPUTER ,FAX ,GATEWAY ,MODEM ,NETWORKAPPLIANCE ,NETWORKBRIDGE ,NETWORKHUB ,PRINTER ,REPEATER ,ROUTER ,SCANNER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcComplexPropertyTemplateTypeEnum = ENUMERATION OF (P_COMPLEX ,Q_COMPLEX); END_TYPE; TYPE IfcCompressorTypeEnum = ENUMERATION OF (DYNAMIC ,RECIPROCATING ,ROTARY ,SCROLL ,TROCHOIDAL ,SINGLESTAGE ,BOOSTER ,OPENTYPE ,HERMETIC ,SEMIHERMETIC ,WELDEDSHELLHERMETIC ,ROLLINGPISTON ,ROTARYVANE ,SINGLESCREW ,TWINSCREW ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCondenserTypeEnum = ENUMERATION OF (AIRCOOLED ,EVAPORATIVECOOLED ,WATERCOOLED ,WATERCOOLEDBRAZEDPLATE ,WATERCOOLEDSHELLCOIL ,WATERCOOLEDSHELLTUBE ,WATERCOOLEDTUBEINTUBE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcConnectionTypeEnum = ENUMERATION OF (ATPATH ,ATSTART ,ATEND ,NOTDEFINED); END_TYPE; TYPE IfcConstraintEnum = ENUMERATION OF (HARD ,SOFT ,ADVISORY ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF (DEMOLISHING ,EARTHMOVING ,ERECTING ,HEATING ,LIGHTING ,PAVING ,PUMPING ,TRANSPORTING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF (AGGREGATES ,CONCRETE ,DRYWALL ,FUEL ,GYPSUM ,MASONRY ,METAL ,PLASTIC ,WOOD ,NOTDEFINED ,USERDEFINED); END_TYPE; TYPE IfcConstructionProductResourceTypeEnum = ENUMERATION OF (ASSEMBLY ,FORMWORK ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcControllerTypeEnum = ENUMERATION OF (FLOATING ,PROGRAMMABLE ,PROPORTIONAL ,MULTIPOSITION ,TWOPOSITION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCooledBeamTypeEnum = ENUMERATION OF (ACTIVE ,PASSIVE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCoolingTowerTypeEnum = ENUMERATION OF (NATURALDRAFT ,MECHANICALINDUCEDDRAFT ,MECHANICALFORCEDDRAFT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCostItemTypeEnum = ENUMERATION OF (USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCostScheduleTypeEnum = ENUMERATION OF (BUDGET ,COSTPLAN ,ESTIMATE ,TENDER ,PRICEDBILLOFQUANTITIES ,UNPRICEDBILLOFQUANTITIES ,SCHEDULEOFRATES ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCoveringTypeEnum = ENUMERATION OF (CEILING ,FLOORING ,CLADDING ,ROOFING ,MOLDING ,SKIRTINGBOARD ,INSULATION ,MEMBRANE ,SLEEVING ,WRAPPING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCrewResourceTypeEnum = ENUMERATION OF (OFFICE ,SITE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCurtainWallTypeEnum = ENUMERATION OF (USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcCurveInterpolationEnum = ENUMERATION OF (LINEAR ,LOG_LINEAR ,LOG_LOG ,NOTDEFINED); END_TYPE; TYPE IfcDamperTypeEnum = ENUMERATION OF (BACKDRAFTDAMPER ,BALANCINGDAMPER ,BLASTDAMPER ,CONTROLDAMPER ,FIREDAMPER ,FIRESMOKEDAMPER ,FUMEHOODEXHAUST ,GRAVITYDAMPER ,GRAVITYRELIEFDAMPER ,RELIEFDAMPER ,SMOKEDAMPER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDataOriginEnum = ENUMERATION OF (MEASURED ,PREDICTED ,SIMULATED ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDerivedUnitEnum = ENUMERATION OF (ANGULARVELOCITYUNIT ,AREADENSITYUNIT ,COMPOUNDPLANEANGLEUNIT ,DYNAMICVISCOSITYUNIT ,HEATFLUXDENSITYUNIT ,INTEGERCOUNTRATEUNIT ,ISOTHERMALMOISTURECAPACITYUNIT ,KINEMATICVISCOSITYUNIT ,LINEARVELOCITYUNIT ,MASSDENSITYUNIT ,MASSFLOWRATEUNIT ,MOISTUREDIFFUSIVITYUNIT ,MOLECULARWEIGHTUNIT ,SPECIFICHEATCAPACITYUNIT ,THERMALADMITTANCEUNIT ,THERMALCONDUCTANCEUNIT ,THERMALRESISTANCEUNIT ,THERMALTRANSMITTANCEUNIT ,VAPORPERMEABILITYUNIT ,VOLUMETRICFLOWRATEUNIT ,ROTATIONALFREQUENCYUNIT ,TORQUEUNIT ,MOMENTOFINERTIAUNIT ,LINEARMOMENTUNIT ,LINEARFORCEUNIT ,PLANARFORCEUNIT ,MODULUSOFELASTICITYUNIT ,SHEARMODULUSUNIT ,LINEARSTIFFNESSUNIT ,ROTATIONALSTIFFNESSUNIT ,MODULUSOFSUBGRADEREACTIONUNIT ,ACCELERATIONUNIT ,CURVATUREUNIT ,HEATINGVALUEUNIT ,IONCONCENTRATIONUNIT ,LUMINOUSINTENSITYDISTRIBUTIONUNIT ,MASSPERLENGTHUNIT ,MODULUSOFLINEARSUBGRADEREACTIONUNIT ,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT ,PHUNIT ,ROTATIONALMASSUNIT ,SECTIONAREAINTEGRALUNIT ,SECTIONMODULUSUNIT ,SOUNDPOWERLEVELUNIT ,SOUNDPOWERUNIT ,SOUNDPRESSURELEVELUNIT ,SOUNDPRESSUREUNIT ,TEMPERATUREGRADIENTUNIT ,TEMPERATURERATEOFCHANGEUNIT ,THERMALEXPANSIONCOEFFICIENTUNIT ,WARPINGCONSTANTUNIT ,WARPINGMOMENTUNIT ,USERDEFINED); END_TYPE; TYPE IfcDirectionSenseEnum = ENUMERATION OF (POSITIVE ,NEGATIVE); END_TYPE; TYPE IfcDiscreteAccessoryTypeEnum = ENUMERATION OF (ANCHORPLATE ,BRACKET ,SHOE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF (FORMEDDUCT ,INSPECTIONCHAMBER ,INSPECTIONPIT ,MANHOLE ,METERCHAMBER ,SUMP ,TRENCH ,VALVECHAMBER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDistributionPortTypeEnum = ENUMERATION OF (CABLE ,CABLECARRIER ,DUCT ,PIPE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDistributionSystemEnum = ENUMERATION OF (AIRCONDITIONING ,AUDIOVISUAL ,CHEMICAL ,CHILLEDWATER ,COMMUNICATION ,COMPRESSEDAIR ,CONDENSERWATER ,CONTROL ,CONVEYING ,DATA ,DISPOSAL ,DOMESTICCOLDWATER ,DOMESTICHOTWATER ,DRAINAGE ,EARTHING ,ELECTRICAL ,ELECTROACOUSTIC ,EXHAUST ,FIREPROTECTION ,FUEL ,GAS ,HAZARDOUS ,HEATING ,LIGHTING ,LIGHTNINGPROTECTION ,MUNICIPALSOLIDWASTE ,OIL ,OPERATIONAL ,POWERGENERATION ,RAINWATER ,REFRIGERATION ,SECURITY ,SEWAGE ,SIGNAL ,STORMWATER ,TELEPHONE ,TV ,VACUUM ,VENT ,VENTILATION ,WASTEWATER ,WATERSUPPLY ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDocumentConfidentialityEnum = ENUMERATION OF (PUBLIC ,RESTRICTED ,CONFIDENTIAL ,PERSONAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDocumentStatusEnum = ENUMERATION OF (DRAFT ,FINALDRAFT ,FINAL ,REVISION ,NOTDEFINED); END_TYPE; TYPE IfcDoorPanelOperationEnum = ENUMERATION OF (SWINGING ,DOUBLE_ACTING ,SLIDING ,FOLDING ,REVOLVING ,ROLLINGUP ,FIXEDPANEL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDoorPanelPositionEnum = ENUMERATION OF (LEFT ,MIDDLE ,RIGHT ,NOTDEFINED); END_TYPE; TYPE IfcDoorStyleConstructionEnum = ENUMERATION OF (ALUMINIUM ,HIGH_GRADE_STEEL ,STEEL ,WOOD ,ALUMINIUM_WOOD ,ALUMINIUM_PLASTIC ,PLASTIC ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDoorStyleOperationEnum = ENUMERATION OF (SINGLE_SWING_LEFT ,SINGLE_SWING_RIGHT ,DOUBLE_DOOR_SINGLE_SWING ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT ,DOUBLE_SWING_LEFT ,DOUBLE_SWING_RIGHT ,DOUBLE_DOOR_DOUBLE_SWING ,SLIDING_TO_LEFT ,SLIDING_TO_RIGHT ,DOUBLE_DOOR_SLIDING ,FOLDING_TO_LEFT ,FOLDING_TO_RIGHT ,DOUBLE_DOOR_FOLDING ,REVOLVING ,ROLLINGUP ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDoorTypeEnum = ENUMERATION OF (DOOR ,GATE ,TRAPDOOR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDoorTypeOperationEnum = ENUMERATION OF (SINGLE_SWING_LEFT ,SINGLE_SWING_RIGHT ,DOUBLE_DOOR_SINGLE_SWING ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT ,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT ,DOUBLE_SWING_LEFT ,DOUBLE_SWING_RIGHT ,DOUBLE_DOOR_DOUBLE_SWING ,SLIDING_TO_LEFT ,SLIDING_TO_RIGHT ,DOUBLE_DOOR_SLIDING ,FOLDING_TO_LEFT ,FOLDING_TO_RIGHT ,DOUBLE_DOOR_FOLDING ,REVOLVING ,ROLLINGUP ,SWING_FIXED_LEFT ,SWING_FIXED_RIGHT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDuctFittingTypeEnum = ENUMERATION OF (BEND ,CONNECTOR ,ENTRY ,EXIT ,JUNCTION ,OBSTRUCTION ,TRANSITION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDuctSegmentTypeEnum = ENUMERATION OF (RIGIDSEGMENT ,FLEXIBLESEGMENT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDuctSilencerTypeEnum = ENUMERATION OF (FLATOVAL ,RECTANGULAR ,ROUND ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElectricApplianceTypeEnum = ENUMERATION OF (DISHWASHER ,ELECTRICCOOKER ,FREESTANDINGELECTRICHEATER ,FREESTANDINGFAN ,FREESTANDINGWATERHEATER ,FREESTANDINGWATERCOOLER ,FREEZER ,FRIDGE_FREEZER ,HANDDRYER ,KITCHENMACHINE ,MICROWAVE ,PHOTOCOPIER ,REFRIGERATOR ,TUMBLEDRYER ,VENDINGMACHINE ,WASHINGMACHINE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElectricDistributionBoardTypeEnum = ENUMERATION OF (CONSUMERUNIT ,DISTRIBUTIONBOARD ,MOTORCONTROLCENTRE ,SWITCHBOARD ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF (BATTERY ,CAPACITORBANK ,HARMONICFILTER ,INDUCTORBANK ,UPS ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF (CHP ,ENGINEGENERATOR ,STANDALONE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElectricMotorTypeEnum = ENUMERATION OF (DC ,INDUCTION ,POLYPHASE ,RELUCTANCESYNCHRONOUS ,SYNCHRONOUS ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF (TIMECLOCK ,TIMEDELAY ,RELAY ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElementAssemblyTypeEnum = ENUMERATION OF (ACCESSORY_ASSEMBLY ,ARCH ,BEAM_GRID ,BRACED_FRAME ,GIRDER ,REINFORCEMENT_UNIT ,RIGID_FRAME ,SLAB_FIELD ,TRUSS ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcElementCompositionEnum = ENUMERATION OF (COMPLEX ,ELEMENT ,PARTIAL); END_TYPE; TYPE IfcEngineTypeEnum = ENUMERATION OF (EXTERNALCOMBUSTION ,INTERNALCOMBUSTION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF (DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER ,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER ,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER ,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER ,DIRECTEVAPORATIVEAIRWASHER ,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER ,INDIRECTEVAPORATIVEWETCOIL ,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER ,INDIRECTDIRECTCOMBINATION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcEvaporatorTypeEnum = ENUMERATION OF (DIRECTEXPANSION ,DIRECTEXPANSIONSHELLANDTUBE ,DIRECTEXPANSIONTUBEINTUBE ,DIRECTEXPANSIONBRAZEDPLATE ,FLOODEDSHELLANDTUBE ,SHELLANDCOIL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcEventTriggerTypeEnum = ENUMERATION OF (EVENTRULE ,EVENTMESSAGE ,EVENTTIME ,EVENTCOMPLEX ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcEventTypeEnum = ENUMERATION OF (STARTEVENT ,ENDEVENT ,INTERMEDIATEEVENT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcExternalSpatialElementTypeEnum = ENUMERATION OF (EXTERNAL ,EXTERNAL_EARTH ,EXTERNAL_WATER ,EXTERNAL_FIRE ,USERDEFINED ,NOTDEFIEND); END_TYPE; TYPE IfcFanTypeEnum = ENUMERATION OF (CENTRIFUGALFORWARDCURVED ,CENTRIFUGALRADIAL ,CENTRIFUGALBACKWARDINCLINEDCURVED ,CENTRIFUGALAIRFOIL ,TUBEAXIAL ,VANEAXIAL ,PROPELLORAXIAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcFastenerTypeEnum = ENUMERATION OF (GLUE ,MORTAR ,WELD ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcFilterTypeEnum = ENUMERATION OF (AIRPARTICLEFILTER ,COMPRESSEDAIRFILTER ,ODORFILTER ,OILFILTER ,STRAINER ,WATERFILTER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF (BREECHINGINLET ,FIREHYDRANT ,HOSEREEL ,SPRINKLER ,SPRINKLERDEFLECTOR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcFlowDirectionEnum = ENUMERATION OF (SOURCE ,SINK ,SOURCEANDSINK ,NOTDEFINED); END_TYPE; TYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF (PRESSUREGAUGE ,THERMOMETER ,AMMETER ,FREQUENCYMETER ,POWERFACTORMETER ,PHASEANGLEMETER ,VOLTMETER_PEAK ,VOLTMETER_RMS ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcFlowMeterTypeEnum = ENUMERATION OF (ENERGYMETER ,GASMETER ,OILMETER ,WATERMETER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcFootingTypeEnum = ENUMERATION OF (CAISSON_FOUNDATION ,FOOTING_BEAM ,PAD_FOOTING ,PILE_CAP ,STRIP_FOOTING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcFurnitureTypeEnum = ENUMERATION OF (CHAIR ,TABLE ,DESK ,BED ,FILECABINET ,SHELF ,SOFA ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcGeographicElementTypeEnum = ENUMERATION OF (TERRAIN ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcGeometricProjectionEnum = ENUMERATION OF (GRAPH_VIEW ,SKETCH_VIEW ,MODEL_VIEW ,PLAN_VIEW ,REFLECTED_PLAN_VIEW ,SECTION_VIEW ,ELEVATION_VIEW ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcGlobalOrLocalEnum = ENUMERATION OF (GLOBAL_COORDS ,LOCAL_COORDS); END_TYPE; TYPE IfcGridTypeEnum = ENUMERATION OF (RECTANGULAR ,RADIAL ,TRIANGULAR ,IRREGULAR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcHeatExchangerTypeEnum = ENUMERATION OF (PLATE ,SHELLANDTUBE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcHumidifierTypeEnum = ENUMERATION OF (STEAMINJECTION ,ADIABATICAIRWASHER ,ADIABATICPAN ,ADIABATICWETTEDELEMENT ,ADIABATICATOMIZING ,ADIABATICULTRASONIC ,ADIABATICRIGIDMEDIA ,ADIABATICCOMPRESSEDAIRNOZZLE ,ASSISTEDELECTRIC ,ASSISTEDNATURALGAS ,ASSISTEDPROPANE ,ASSISTEDBUTANE ,ASSISTEDSTEAM ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcInterceptorTypeEnum = ENUMERATION OF (CYCLONIC ,GREASE ,OIL ,PETROL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcInternalOrExternalEnum = ENUMERATION OF (INTERNAL ,EXTERNAL ,EXTERNAL_EARTH ,EXTERNAL_WATER ,EXTERNAL_FIRE ,NOTDEFINED); END_TYPE; TYPE IfcInventoryTypeEnum = ENUMERATION OF (ASSETINVENTORY ,SPACEINVENTORY ,FURNITUREINVENTORY ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcJunctionBoxTypeEnum = ENUMERATION OF (DATA ,POWER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcKnotType = ENUMERATION OF (UNIFORM_KNOTS ,QUASI_UNIFORM_KNOTS ,PIECEWISE_BEZIER_KNOTS ,UNSPECIFIED); END_TYPE; TYPE IfcLaborResourceTypeEnum = ENUMERATION OF (ADMINISTRATION ,CARPENTRY ,CLEANING ,CONCRETE ,DRYWALL ,ELECTRIC ,FINISHING ,FLOORING ,GENERAL ,HVAC ,LANDSCAPING ,MASONRY ,PAINTING ,PAVING ,PLUMBING ,ROOFING ,SITEGRADING ,STEELWORK ,SURVEYING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcLampTypeEnum = ENUMERATION OF (COMPACTFLUORESCENT ,FLUORESCENT ,HALOGEN ,HIGHPRESSUREMERCURY ,HIGHPRESSURESODIUM ,LED ,METALHALIDE ,OLED ,TUNGSTENFILAMENT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcLayerSetDirectionEnum = ENUMERATION OF (AXIS1 ,AXIS2 ,AXIS3); END_TYPE; TYPE IfcLightDistributionCurveEnum = ENUMERATION OF (TYPE_A ,TYPE_B ,TYPE_C ,NOTDEFINED); END_TYPE; TYPE IfcLightEmissionSourceEnum = ENUMERATION OF (COMPACTFLUORESCENT ,FLUORESCENT ,HIGHPRESSUREMERCURY ,HIGHPRESSURESODIUM ,LIGHTEMITTINGDIODE ,LOWPRESSURESODIUM ,LOWVOLTAGEHALOGEN ,MAINVOLTAGEHALOGEN ,METALHALIDE ,TUNGSTENFILAMENT ,NOTDEFINED); END_TYPE; TYPE IfcLightFixtureTypeEnum = ENUMERATION OF (POINTSOURCE ,DIRECTIONSOURCE ,SECURITYLIGHTING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcLoadGroupTypeEnum = ENUMERATION OF (LOAD_GROUP ,LOAD_CASE ,LOAD_COMBINATION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcLogicalOperatorEnum = ENUMERATION OF (LOGICALAND ,LOGICALOR ,LOGICALXOR ,LOGICALNOTAND ,LOGICALNOTOR); END_TYPE; TYPE IfcMechanicalFastenerTypeEnum = ENUMERATION OF (ANCHORBOLT ,BOLT ,DOWEL ,NAIL ,NAILPLATE ,RIVET ,SCREW ,SHEARCONNECTOR ,STAPLE ,STUDSHEARCONNECTOR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcMedicalDeviceTypeEnum = ENUMERATION OF (AIRSTATION ,FEEDAIRUNIT ,OXYGENGENERATOR ,OXYGENPLANT ,VACUUMSTATION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcMemberTypeEnum = ENUMERATION OF (BRACE ,CHORD ,COLLAR ,MEMBER ,MULLION ,PLATE ,POST ,PURLIN ,RAFTER ,STRINGER ,STRUT ,STUD ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcMotorConnectionTypeEnum = ENUMERATION OF (BELTDRIVE ,COUPLING ,DIRECTDRIVE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcNullStyle = ENUMERATION OF (NULL); END_TYPE; TYPE IfcObjectTypeEnum = ENUMERATION OF (PRODUCT ,PROCESS ,CONTROL ,RESOURCE ,ACTOR ,GROUP ,PROJECT ,NOTDEFINED); END_TYPE; TYPE IfcObjectiveEnum = ENUMERATION OF (CODECOMPLIANCE ,CODEWAIVER ,DESIGNINTENT ,EXTERNAL ,HEALTHANDSAFETY ,MERGECONFLICT ,MODELVIEW ,PARAMETER ,REQUIREMENT ,SPECIFICATION ,TRIGGERCONDITION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcOccupantTypeEnum = ENUMERATION OF (ASSIGNEE ,ASSIGNOR ,LESSEE ,LESSOR ,LETTINGAGENT ,OWNER ,TENANT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcOpeningElementTypeEnum = ENUMERATION OF (OPENING ,RECESS ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcOutletTypeEnum = ENUMERATION OF (AUDIOVISUALOUTLET ,COMMUNICATIONSOUTLET ,POWEROUTLET ,DATAOUTLET ,TELEPHONEOUTLET ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPerformanceHistoryTypeEnum = ENUMERATION OF (USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF (GRILL ,LOUVER ,SCREEN ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPermitTypeEnum = ENUMERATION OF (ACCESS ,BUILDING ,WORK ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF (PHYSICAL ,VIRTUAL ,NOTDEFINED); END_TYPE; TYPE IfcPileConstructionEnum = ENUMERATION OF (CAST_IN_PLACE ,COMPOSITE ,PRECAST_CONCRETE ,PREFAB_STEEL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPileTypeEnum = ENUMERATION OF (BORED ,DRIVEN ,JETGROUTING ,COHESION ,FRICTION ,SUPPORT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPipeFittingTypeEnum = ENUMERATION OF (BEND ,CONNECTOR ,ENTRY ,EXIT ,JUNCTION ,OBSTRUCTION ,TRANSITION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPipeSegmentTypeEnum = ENUMERATION OF (CULVERT ,FLEXIBLESEGMENT ,RIGIDSEGMENT ,GUTTER ,SPOOL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPlateTypeEnum = ENUMERATION OF (CURTAIN_PANEL ,SHEET ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcProcedureTypeEnum = ENUMERATION OF (ADVICE_CAUTION ,ADVICE_NOTE ,ADVICE_WARNING ,CALIBRATION ,DIAGNOSTIC ,SHUTDOWN ,STARTUP ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcProfileTypeEnum = ENUMERATION OF (CURVE ,AREA); END_TYPE; TYPE IfcProjectOrderTypeEnum = ENUMERATION OF (CHANGEORDER ,MAINTENANCEWORKORDER ,MOVEORDER ,PURCHASEORDER ,WORKORDER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF (PROJECTED_LENGTH ,TRUE_LENGTH); END_TYPE; TYPE IfcProjectionElementTypeEnum = ENUMERATION OF (USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPropertySetTemplateTypeEnum = ENUMERATION OF (PSET_TYPEDRIVENONLY ,PSET_TYPEDRIVENOVERRIDE ,PSET_OCCURRENCEDRIVEN ,PSET_PERFORMANCEDRIVEN ,QTO_TYPEDRIVENONLY ,QTO_TYPEDRIVENOVERRIDE ,QTO_OCCURRENCEDRIVEN ,NOTDEFINED); END_TYPE; TYPE IfcProtectiveDeviceTrippingUnitTypeEnum = ENUMERATION OF (ELECTRONIC ,ELECTROMAGNETIC ,RESIDUALCURRENT ,THERMAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF (CIRCUITBREAKER ,EARTHLEAKAGECIRCUITBREAKER ,EARTHINGSWITCH ,FUSEDISCONNECTOR ,RESIDUALCURRENTCIRCUITBREAKER ,RESIDUALCURRENTSWITCH ,VARISTOR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcPumpTypeEnum = ENUMERATION OF (CIRCULATOR ,ENDSUCTION ,SPLITCASE ,SUBMERSIBLEPUMP ,SUMPPUMP ,VERTICALINLINE ,VERTICALTURBINE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcRailingTypeEnum = ENUMERATION OF (HANDRAIL ,GUARDRAIL ,BALUSTRADE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcRampFlightTypeEnum = ENUMERATION OF (STRAIGHT ,SPIRAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcRampTypeEnum = ENUMERATION OF (STRAIGHT_RUN_RAMP ,TWO_STRAIGHT_RUN_RAMP ,QUARTER_TURN_RAMP ,TWO_QUARTER_TURN_RAMP ,HALF_TURN_RAMP ,SPIRAL_RAMP ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcRecurrenceTypeEnum = ENUMERATION OF (DAILY ,WEEKLY ,MONTHLY_BY_DAY_OF_MONTH ,MONTHLY_BY_POSITION ,BY_DAY_COUNT ,BY_WEEKDAY_COUNT ,YEARLY_BY_DAY_OF_MONTH ,YEARLY_BY_POSITION); END_TYPE; TYPE IfcReflectanceMethodEnum = ENUMERATION OF (BLINN ,FLAT ,GLASS ,MATT ,METAL ,MIRROR ,PHONG ,PLASTIC ,STRAUSS ,NOTDEFINED); END_TYPE; TYPE IfcReinforcingBarRoleEnum = ENUMERATION OF (MAIN ,SHEAR ,LIGATURE ,STUD ,PUNCHING ,EDGE ,RING ,ANCHORING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF (PLAIN ,TEXTURED); END_TYPE; TYPE IfcReinforcingBarTypeEnum = ENUMERATION OF (ANCHORING ,EDGE ,LIGATURE ,MAIN ,PUNCHING ,RING ,SHEAR ,STUD ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcReinforcingMeshTypeEnum = ENUMERATION OF (USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcRoleEnum = ENUMERATION OF (SUPPLIER ,MANUFACTURER ,CONTRACTOR ,SUBCONTRACTOR ,ARCHITECT ,STRUCTURALENGINEER ,COSTENGINEER ,CLIENT ,BUILDINGOWNER ,BUILDINGOPERATOR ,MECHANICALENGINEER ,ELECTRICALENGINEER ,PROJECTMANAGER ,FACILITIESMANAGER ,CIVILENGINEER ,COMMISSIONINGENGINEER ,ENGINEER ,OWNER ,CONSULTANT ,CONSTRUCTIONMANAGER ,FIELDCONSTRUCTIONMANAGER ,RESELLER ,USERDEFINED); END_TYPE; TYPE IfcRoofTypeEnum = ENUMERATION OF (FLAT_ROOF ,SHED_ROOF ,GABLE_ROOF ,HIP_ROOF ,HIPPED_GABLE_ROOF ,GAMBREL_ROOF ,MANSARD_ROOF ,BARREL_ROOF ,RAINBOW_ROOF ,BUTTERFLY_ROOF ,PAVILION_ROOF ,DOME_ROOF ,FREEFORM ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSIPrefix = ENUMERATION OF (EXA ,PETA ,TERA ,GIGA ,MEGA ,KILO ,HECTO ,DECA ,DECI ,CENTI ,MILLI ,MICRO ,NANO ,PICO ,FEMTO ,ATTO); END_TYPE; TYPE IfcSIUnitName = ENUMERATION OF (AMPERE ,BECQUEREL ,CANDELA ,COULOMB ,CUBIC_METRE ,DEGREE_CELSIUS ,FARAD ,GRAM ,GRAY ,HENRY ,HERTZ ,JOULE ,KELVIN ,LUMEN ,LUX ,METRE ,MOLE ,NEWTON ,OHM ,PASCAL ,RADIAN ,SECOND ,SIEMENS ,SIEVERT ,SQUARE_METRE ,STERADIAN ,TESLA ,VOLT ,WATT ,WEBER); END_TYPE; TYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF (BATH ,BIDET ,CISTERN ,SHOWER ,SINK ,SANITARYFOUNTAIN ,TOILETPAN ,URINAL ,WASHHANDBASIN ,WCSEAT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSectionTypeEnum = ENUMERATION OF (UNIFORM ,TAPERED); END_TYPE; TYPE IfcSensorTypeEnum = ENUMERATION OF (CONDUCTANCESENSOR ,CONTACTSENSOR ,FIRESENSOR ,FLOWSENSOR ,GASSENSOR ,HEATSENSOR ,HUMIDITYSENSOR ,IONCONCENTRATIONSENSOR ,LEVELSENSOR ,LIGHTSENSOR ,MOISTURESENSOR ,MOVEMENTSENSOR ,PHSENSOR ,PRESSURESENSOR ,RADIATIONSENSOR ,RADIOACTIVITYSENSOR ,SMOKESENSOR ,SOUNDSENSOR ,TEMPERATURESENSOR ,WINDSENSOR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSequenceEnum = ENUMERATION OF (START_START ,START_FINISH ,FINISH_START ,FINISH_FINISH ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcShadingDeviceTypeEnum = ENUMERATION OF (JALOUSIE ,SHUTTER ,AWNING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSimplePropertyTemplateTypeEnum = ENUMERATION OF (P_SINGLEVALUE ,P_ENUMERATEDVALUE ,P_BOUNDEDVALUE ,P_LISTVALUE ,P_TABLEVALUE ,P_REFERENCEVALUE ,Q_LENGTH ,Q_AREA ,Q_VOLUME ,Q_COUNT ,Q_WEIGHT ,Q_TIME); END_TYPE; TYPE IfcSlabTypeEnum = ENUMERATION OF (FLOOR ,ROOF ,LANDING ,BASESLAB ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSolarDeviceTypeEnum = ENUMERATION OF (SOLARCOLLECTOR ,SOLARPANEL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF (CONVECTOR ,RADIATOR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSpaceTypeEnum = ENUMERATION OF (SPACE ,PARKING ,GFA ,INTERNAL ,EXTERNAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSpatialZoneTypeEnum = ENUMERATION OF (CONSTRUCTION ,FIRESAFETY ,LIGHTING ,OCCUPANCY ,SECURITY ,THERMAL ,TRANSPORT ,VENTILATION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcStackTerminalTypeEnum = ENUMERATION OF (BIRDCAGE ,COWL ,RAINWATERHOPPER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcStairFlightTypeEnum = ENUMERATION OF (STRAIGHT ,WINDER ,SPIRAL ,CURVED ,FREEFORM ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcStairTypeEnum = ENUMERATION OF (STRAIGHT_RUN_STAIR ,TWO_STRAIGHT_RUN_STAIR ,QUARTER_WINDING_STAIR ,QUARTER_TURN_STAIR ,HALF_WINDING_STAIR ,HALF_TURN_STAIR ,TWO_QUARTER_WINDING_STAIR ,TWO_QUARTER_TURN_STAIR ,THREE_QUARTER_WINDING_STAIR ,THREE_QUARTER_TURN_STAIR ,SPIRAL_STAIR ,DOUBLE_RETURN_STAIR ,CURVED_RUN_STAIR ,TWO_CURVED_RUN_STAIR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcStateEnum = ENUMERATION OF (READWRITE ,READONLY ,LOCKED ,READWRITELOCKED ,READONLYLOCKED); END_TYPE; TYPE IfcStructuralCurveActivityTypeEnum = ENUMERATION OF (CONST ,LINEAR ,POLYGONAL ,EQUIDISTANT ,SINUS ,PARABOLA ,DISCRETE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcStructuralCurveMemberTypeEnum = ENUMERATION OF (RIGID_JOINED_MEMBER ,PIN_JOINED_MEMBER ,CABLE ,TENSION_MEMBER ,COMPRESSION_MEMBER ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcStructuralSurfaceActivityTypeEnum = ENUMERATION OF (CONST ,BILINEAR ,DISCRETE ,ISOCONTOUR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcStructuralSurfaceMemberTypeEnum = ENUMERATION OF (BENDING_ELEMENT ,MEMBRANE_ELEMENT ,SHELL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSubContractResourceTypeEnum = ENUMERATION OF (PURCHASE ,WORK ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSurfaceFeatureTypeEnum = ENUMERATION OF (MARK ,TAG ,TREATMENT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSurfaceSide = ENUMERATION OF (POSITIVE ,NEGATIVE ,BOTH); END_TYPE; TYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF (CONTACTOR ,DIMMERSWITCH ,EMERGENCYSTOP ,KEYPAD ,MOMENTARYSWITCH ,SELECTORSWITCH ,STARTER ,SWITCHDISCONNECTOR ,TOGGLESWITCH ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcSystemFurnitureElementTypeEnum = ENUMERATION OF (PANEL ,WORKSURFACE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcTankTypeEnum = ENUMERATION OF (BASIN ,BREAKPRESSURE ,EXPANSION ,FEEDANDEXPANSION ,PRESSUREVESSEL ,STORAGE ,VESSEL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcTaskDurationEnum = ENUMERATION OF (ELAPSEDTIME ,WORKTIME ,NOTDEFINED); END_TYPE; TYPE IfcTaskTypeEnum = ENUMERATION OF (ATTENDANCE ,CONSTRUCTION ,DEMOLITION ,DISMANTLE ,DISPOSAL ,INSTALLATION ,LOGISTIC ,MAINTENANCE ,MOVE ,OPERATION ,REMOVAL ,RENOVATION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcTendonAnchorTypeEnum = ENUMERATION OF (COUPLER ,FIXED_END ,TENSIONING_END ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcTendonTypeEnum = ENUMERATION OF (BAR ,COATED ,STRAND ,WIRE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcTextPath = ENUMERATION OF (LEFT ,RIGHT ,UP ,DOWN); END_TYPE; TYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF (CONTINUOUS ,DISCRETE ,DISCRETEBINARY ,PIECEWISEBINARY ,PIECEWISECONSTANT ,PIECEWISECONTINUOUS ,NOTDEFINED); END_TYPE; TYPE IfcTransformerTypeEnum = ENUMERATION OF (CURRENT ,FREQUENCY ,INVERTER ,RECTIFIER ,VOLTAGE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcTransitionCode = ENUMERATION OF (DISCONTINUOUS ,CONTINUOUS ,CONTSAMEGRADIENT ,CONTSAMEGRADIENTSAMECURVATURE); END_TYPE; TYPE IfcTransportElementTypeEnum = ENUMERATION OF (ELEVATOR ,ESCALATOR ,MOVINGWALKWAY ,CRANEWAY ,LIFTINGGEAR ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcTrimmingPreference = ENUMERATION OF (CARTESIAN ,PARAMETER ,UNSPECIFIED); END_TYPE; TYPE IfcTubeBundleTypeEnum = ENUMERATION OF (FINNED ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcUnitEnum = ENUMERATION OF (ABSORBEDDOSEUNIT ,AMOUNTOFSUBSTANCEUNIT ,AREAUNIT ,DOSEEQUIVALENTUNIT ,ELECTRICCAPACITANCEUNIT ,ELECTRICCHARGEUNIT ,ELECTRICCONDUCTANCEUNIT ,ELECTRICCURRENTUNIT ,ELECTRICRESISTANCEUNIT ,ELECTRICVOLTAGEUNIT ,ENERGYUNIT ,FORCEUNIT ,FREQUENCYUNIT ,ILLUMINANCEUNIT ,INDUCTANCEUNIT ,LENGTHUNIT ,LUMINOUSFLUXUNIT ,LUMINOUSINTENSITYUNIT ,MAGNETICFLUXDENSITYUNIT ,MAGNETICFLUXUNIT ,MASSUNIT ,PLANEANGLEUNIT ,POWERUNIT ,PRESSUREUNIT ,RADIOACTIVITYUNIT ,SOLIDANGLEUNIT ,THERMODYNAMICTEMPERATUREUNIT ,TIMEUNIT ,VOLUMEUNIT ,USERDEFINED); END_TYPE; TYPE IfcUnitaryControlElementTypeEnum = ENUMERATION OF (ALARMPANEL ,CONTROLPANEL ,GASDETECTIONPANEL ,INDICATORPANEL ,MIMICPANEL ,HUMIDISTAT ,THERMOSTAT ,WEATHERSTATION ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF (AIRHANDLER ,AIRCONDITIONINGUNIT ,DEHUMIDIFIER ,SPLITSYSTEM ,ROOFTOPUNIT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcValveTypeEnum = ENUMERATION OF (AIRRELEASE ,ANTIVACUUM ,CHANGEOVER ,CHECK ,COMMISSIONING ,DIVERTING ,DRAWOFFCOCK ,DOUBLECHECK ,DOUBLEREGULATING ,FAUCET ,FLUSHING ,GASCOCK ,GASTAP ,ISOLATING ,MIXING ,PRESSUREREDUCING ,PRESSURERELIEF ,REGULATING ,SAFETYCUTOFF ,STEAMTRAP ,STOPCOCK ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF (COMPRESSION ,SPRING ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcVoidingFeatureTypeEnum = ENUMERATION OF (CUTOUT ,NOTCH ,HOLE ,MITER ,CHAMFER ,EDGE ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWallTypeEnum = ENUMERATION OF (MOVABLE ,PARAPET ,PARTITIONING ,PLUMBINGWALL ,SHEAR ,SOLIDWALL ,STANDARD ,POLYGONAL ,ELEMENTEDWALL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWasteTerminalTypeEnum = ENUMERATION OF (FLOORTRAP ,FLOORWASTE ,GULLYSUMP ,GULLYTRAP ,ROOFDRAIN ,WASTEDISPOSALUNIT ,WASTETRAP ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWindowPanelOperationEnum = ENUMERATION OF (SIDEHUNGRIGHTHAND ,SIDEHUNGLEFTHAND ,TILTANDTURNRIGHTHAND ,TILTANDTURNLEFTHAND ,TOPHUNG ,BOTTOMHUNG ,PIVOTHORIZONTAL ,PIVOTVERTICAL ,SLIDINGHORIZONTAL ,SLIDINGVERTICAL ,REMOVABLECASEMENT ,FIXEDCASEMENT ,OTHEROPERATION ,NOTDEFINED); END_TYPE; TYPE IfcWindowPanelPositionEnum = ENUMERATION OF (LEFT ,MIDDLE ,RIGHT ,BOTTOM ,TOP ,NOTDEFINED); END_TYPE; TYPE IfcWindowStyleConstructionEnum = ENUMERATION OF (ALUMINIUM ,HIGH_GRADE_STEEL ,STEEL ,WOOD ,ALUMINIUM_WOOD ,PLASTIC ,OTHER_CONSTRUCTION ,NOTDEFINED); END_TYPE; TYPE IfcWindowStyleOperationEnum = ENUMERATION OF (SINGLE_PANEL ,DOUBLE_PANEL_VERTICAL ,DOUBLE_PANEL_HORIZONTAL ,TRIPLE_PANEL_VERTICAL ,TRIPLE_PANEL_BOTTOM ,TRIPLE_PANEL_TOP ,TRIPLE_PANEL_LEFT ,TRIPLE_PANEL_RIGHT ,TRIPLE_PANEL_HORIZONTAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWindowTypeEnum = ENUMERATION OF (WINDOW ,SKYLIGHT ,LIGHTDOME ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWindowTypePartitioningEnum = ENUMERATION OF (SINGLE_PANEL ,DOUBLE_PANEL_VERTICAL ,DOUBLE_PANEL_HORIZONTAL ,TRIPLE_PANEL_VERTICAL ,TRIPLE_PANEL_BOTTOM ,TRIPLE_PANEL_TOP ,TRIPLE_PANEL_LEFT ,TRIPLE_PANEL_RIGHT ,TRIPLE_PANEL_HORIZONTAL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWorkCalendarTypeEnum = ENUMERATION OF (FIRSTSHIFT ,SECONDSHIFT ,THIRDSHIFT ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWorkPlanTypeEnum = ENUMERATION OF (ACTUAL ,BASELINE ,PLANNED ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWorkScheduleTypeEnum = ENUMERATION OF (ACTUAL ,BASELINE ,PLANNED ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcActorSelect = SELECT (IfcOrganization ,IfcPerson ,IfcPersonAndOrganization); END_TYPE; TYPE IfcAppliedValueSelect = SELECT (IfcMeasureWithUnit ,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); 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 IfcCurveOnSurface = SELECT (IfcCompositeCurveOnSurface ,IfcPcurve); 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 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 IfcPresentationStyleSelect = SELECT (IfcCurveStyle ,IfcFillAreaStyle ,IfcNullStyle ,IfcSurfaceStyle ,IfcTextStyle); 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 ,IfcTimeSeries); END_TYPE; TYPE IfcResourceSelect = SELECT (IfcResource ,IfcTypeResource); END_TYPE; TYPE IfcRotationalStiffnessSelect = SELECT (IfcBoolean ,IfcRotationalStiffnessMeasure); END_TYPE; TYPE IfcShell = SELECT (IfcClosedShell ,IfcOpenShell); END_TYPE; TYPE IfcSimpleValue = SELECT (IfcBoolean ,IfcDate ,IfcDateTime ,IfcDuration ,IfcIdentifier ,IfcInteger ,IfcLabel ,IfcLogical ,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 IfcSpecularHighlightSelect = SELECT (IfcSpecularExponent ,IfcSpecularRoughness); END_TYPE; TYPE IfcStructuralActivityAssignmentSelect = SELECT (IfcElement ,IfcStructuralItem); END_TYPE; TYPE IfcStyleAssignmentSelect = SELECT (IfcPresentationStyle ,IfcPresentationStyleAssignment); 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 ('IFC4.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 ('IFC4.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 ('IFC4.IFCADVANCEDFACE' IN TYPEOF(Afs))) )) = 0 )) = 0; END_ENTITY; ENTITY IfcAdvancedFace SUBTYPE OF (IfcFaceSurface); WHERE ApplicableSurface : SIZEOF ( ['IFC4.IFCELEMENTARYSURFACE', 'IFC4.IFCSWEPTSURFACE', 'IFC4.IFCBSPLINESURFACE'] * TYPEOF(SELF\IfcFaceSurface.FaceSurface)) = 1; RequiresEdgeCurve : SIZEOF(QUERY (ElpFbnds <* QUERY (Bnds <* SELF\IfcFace.Bounds | 'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | NOT('IFC4.IFCEDGECURVE' IN TYPEOF(Oe\IfcOrientedEdge.EdgeElement) ))) = 0 ))) = 0; ApplicableEdgeCurves : SIZEOF(QUERY (ElpFbnds <* QUERY (Bnds <* SELF\IfcFace.Bounds | 'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | NOT (SIZEOF (['IFC4.IFCLINE', 'IFC4.IFCCONIC', 'IFC4.IFCPOLYLINE', 'IFC4.IFCBSPLINECURVE'] * TYPEOF(Oe\IfcOrientedEdge.EdgeElement\IfcEdgeCurve.EdgeGeometry)) = 1 ) )) = 0 ))) = 0; END_ENTITY; ENTITY IfcAirTerminal SUBTYPE OF (IfcFlowTerminal); PredefinedType : OPTIONAL IfcAirTerminalTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.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 ('IFC4.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 ('IFC4.IFCALARMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcAlarmType SUBTYPE OF (IfcDistributionControlElementType); PredefinedType : IfcAlarmTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcAnnotation SUBTYPE OF (IfcProduct); INVERSE ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; END_ENTITY; ENTITY IfcAnnotationFillArea SUBTYPE OF (IfcGeometricRepresentationItem); OuterBoundary : IfcCurve; InnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve; END_ENTITY; ENTITY IfcApplication; ApplicationDeveloper : IfcOrganization; Version : IfcLabel; ApplicationFullName : IfcLabel; ApplicationIdentifier : IfcIdentifier; UNIQUE UR1 : ApplicationIdentifier; UR2 : ApplicationFullName, Version; END_ENTITY; ENTITY IfcAppliedValue SUPERTYPE OF (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('IFC4.IFCLINE' IN TYPEOF(OuterCurve)); WR3 : NOT('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve)); END_ENTITY; ENTITY IfcArbitraryOpenProfileDef SUPERTYPE OF (ONEOF (IfcCenterLineProfileDef)) SUBTYPE OF (IfcProfileDef); Curve : IfcBoundedCurve; WHERE WR11 : ('IFC4.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 | 'IFC4.IFCLINE' IN TYPEOF(temp))) = 0; END_ENTITY; ENTITY IfcAsset SUBTYPE OF (IfcGroup); Identification : OPTIONAL IfcIdentifier; OriginalValue : OPTIONAL IfcCostValue; CurrentValue : OPTIONAL IfcCostValue; TotalReplacementCost : OPTIONAL IfcCostValue; Owner : OPTIONAL IfcActorSelect; User : OPTIONAL IfcActorSelect; ResponsiblePerson : OPTIONAL IfcPerson; IncorporationDate : OPTIONAL IfcDate; DepreciatedValue : OPTIONAL IfcCostValue; END_ENTITY; ENTITY IfcAsymmetricIShapeProfileDef SUBTYPE OF (IfcParameterizedProfileDef); BottomFlangeWidth : IfcPositiveLengthMeasure; OverallDepth : IfcPositiveLengthMeasure; WebThickness : IfcPositiveLengthMeasure; BottomFlangeThickness : IfcPositiveLengthMeasure; BottomFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; TopFlangeWidth : IfcPositiveLengthMeasure; TopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure; TopFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; BottomFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; BottomFlangeSlope : OPTIONAL IfcPlaneAngleMeasure; TopFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; TopFlangeSlope : OPTIONAL IfcPlaneAngleMeasure; WHERE ValidFlangeThickness : NOT(EXISTS(TopFlangeThickness)) OR ((BottomFlangeThickness + TopFlangeThickness) < OverallDepth); ValidWebThickness : (WebThickness < BottomFlangeWidth) AND (WebThickness < TopFlangeWidth); ValidBottomFilletRadius : (NOT(EXISTS(BottomFlangeFilletRadius))) OR (BottomFlangeFilletRadius <= (BottomFlangeWidth - WebThickness)/2.); ValidTopFilletRadius : (NOT(EXISTS(TopFlangeFilletRadius))) OR (TopFlangeFilletRadius <= (TopFlangeWidth - WebThickness)/2.); END_ENTITY; ENTITY IfcAudioVisualAppliance SUBTYPE OF (IfcFlowTerminal); PredefinedType : OPTIONAL IfcAudioVisualApplianceTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcAudioVisualApplianceType SUBTYPE OF (IfcFlowTerminalType); PredefinedType : IfcAudioVisualApplianceTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcAxis1Placement SUBTYPE OF (IfcPlacement); Axis : OPTIONAL IfcDirection; DERIVE Z : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0])); WHERE AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); LocationIs3D : SELF\IfcPlacement.Location.Dim = 3; END_ENTITY; ENTITY IfcAxis2Placement2D SUBTYPE OF (IfcPlacement); RefDirection : OPTIONAL IfcDirection; DERIVE P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection); WHERE RefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2); LocationIs2D : SELF\IfcPlacement.Location.Dim = 2; END_ENTITY; ENTITY IfcAxis2Placement3D SUBTYPE OF (IfcPlacement); Axis : OPTIONAL IfcDirection; RefDirection : OPTIONAL IfcDirection; DERIVE P : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection); WHERE LocationIs3D : SELF\IfcPlacement.Location.Dim = 3; AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); RefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3); AxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0); AxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection))); END_ENTITY; ENTITY IfcBSplineCurve ABSTRACT SUPERTYPE OF (ONEOF (IfcBSplineCurveWithKnots)) SUBTYPE OF (IfcBoundedCurve); Degree : INTEGER; ControlPointsList : LIST [2:?] OF IfcCartesianPoint; CurveForm : IfcBSplineCurveForm; ClosedCurve : LOGICAL; SelfIntersect : LOGICAL; DERIVE UpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1); ControlPoints : ARRAY [0:UpperIndexOnControlPoints] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints); WHERE SameDim : SIZEOF(QUERY(Temp <* ControlPointsList | Temp.Dim <> ControlPointsList[1].Dim)) = 0; END_ENTITY; ENTITY IfcBSplineCurveWithKnots SUPERTYPE OF (ONEOF (IfcRationalBSplineCurveWithKnots)) SUBTYPE OF (IfcBSplineCurve); KnotMultiplicities : LIST [2:?] OF INTEGER; Knots : LIST [2:?] OF IfcParameterValue; KnotSpec : IfcKnotType; DERIVE UpperIndexOnKnots : INTEGER := SIZEOF(Knots); WHERE ConsistentBSpline : IfcConstraintsParamBSpline(Degree, UpperIndexOnKnots, UpperIndexOnControlPoints, KnotMultiplicities, Knots); CorrespondingKnotLists : SIZEOF(KnotMultiplicities) = UpperIndexOnKnots; END_ENTITY; ENTITY IfcBSplineSurface ABSTRACT SUPERTYPE OF (ONEOF (IfcBSplineSurfaceWithKnots)) SUBTYPE OF (IfcBoundedSurface); UDegree : INTEGER; VDegree : INTEGER; ControlPointsList : LIST [2:?] OF LIST [2:?] OF IfcCartesianPoint; SurfaceForm : IfcBSplineSurfaceForm; UClosed : LOGICAL; VClosed : LOGICAL; SelfIntersect : LOGICAL; DERIVE UUpper : INTEGER := SIZEOF(ControlPointsList) - 1; VUpper : INTEGER := SIZEOF(ControlPointsList[1]) - 1; ControlPoints : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcCartesianPoint := IfcMakeArrayOfArray(ControlPointsList, 0,UUpper,0,VUpper); END_ENTITY; ENTITY IfcBSplineSurfaceWithKnots SUPERTYPE OF (ONEOF (IfcRationalBSplineSurfaceWithKnots)) SUBTYPE OF (IfcBSplineSurface); UMultiplicities : LIST [2:?] OF INTEGER; VMultiplicities : LIST [2:?] OF INTEGER; UKnots : LIST [2:?] OF IfcParameterValue; VKnots : LIST [2:?] OF IfcParameterValue; KnotSpec : IfcKnotType; DERIVE KnotVUpper : INTEGER := SIZEOF(VKnots); KnotUUpper : INTEGER := SIZEOF(UKnots); WHERE UDirectionConstraints : IfcConstraintsParamBSpline ( SELF\IfcBSplineSurface.UDegree, KnotUUpper, SELF\IfcBSplineSurface.UUpper, UMultiplicities, UKnots); VDirectionConstraints : IfcConstraintsParamBSpline ( SELF\IfcBSplineSurface.VDegree, KnotVUpper, SELF\IfcBSplineSurface.VUpper, VMultiplicities, VKnots); CorrespondingULists : SIZEOF(UMultiplicities) = KnotUUpper; CorrespondingVLists : SIZEOF(VMultiplicities) = KnotVUpper; END_ENTITY; ENTITY IfcBeam SUPERTYPE OF (ONEOF (IfcBeamStandardCase)) SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcBeamTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCBEAMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcBeamStandardCase SUBTYPE OF (IfcBeam); WHERE HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; ENTITY IfcBeamType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcBeamTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcBlobTexture SUBTYPE OF (IfcSurfaceTexture); RasterFormat : IfcIdentifier; RasterCode : BINARY; WHERE SupportedRasterFormat : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG']; RasterCodeByteStream : BLENGTH(RasterCode) MOD 8 = 0; END_ENTITY; ENTITY IfcBlock SUBTYPE OF (IfcCsgPrimitive3D); XLength : IfcPositiveLengthMeasure; YLength : IfcPositiveLengthMeasure; ZLength : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcBoiler SUBTYPE OF (IfcEnergyConversionDevice); PredefinedType : OPTIONAL IfcBoilerTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 : ('IFC4.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC4.IFCSWEPTDISCSOLID' IN TYPEOF(FirstOperand)) OR ('IFC4.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand)); SecondOperandType : ('IFC4.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand)); OperatorType : Operator = DIFFERENCE; END_ENTITY; ENTITY IfcBooleanResult SUPERTYPE OF (ONEOF (IfcBooleanClippingResult)) SUBTYPE OF (IfcGeometricRepresentationItem); Operator : IfcBooleanOperator; FirstOperand : IfcBooleanOperand; SecondOperand : IfcBooleanOperand; DERIVE Dim : IfcDimensionCount := FirstOperand.Dim; WHERE SameDim : FirstOperand.Dim = SecondOperand.Dim; END_ENTITY; ENTITY IfcBoundaryCondition ABSTRACT SUPERTYPE OF (ONEOF (IfcBoundaryEdgeCondition ,IfcBoundaryFaceCondition ,IfcBoundaryNodeCondition)); Name : OPTIONAL IfcLabel; END_ENTITY; ENTITY IfcBoundaryCurve SUPERTYPE OF (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 ,IfcPolyline ,IfcTrimmedCurve)) SUBTYPE OF (IfcCurve); END_ENTITY; ENTITY IfcBoundedSurface ABSTRACT SUPERTYPE OF (ONEOF (IfcBSplineSurface ,IfcCurveBoundedPlane ,IfcCurveBoundedSurface ,IfcRectangularTrimmedSurface)) SUBTYPE OF (IfcSurface); END_ENTITY; ENTITY IfcBoundingBox SUBTYPE OF (IfcGeometricRepresentationItem); Corner : IfcCartesianPoint; XDim : IfcPositiveLengthMeasure; YDim : IfcPositiveLengthMeasure; ZDim : IfcPositiveLengthMeasure; DERIVE Dim : IfcDimensionCount := 3; END_ENTITY; ENTITY IfcBoxedHalfSpace SUBTYPE OF (IfcHalfSpaceSolid); Enclosure : IfcBoundingBox; END_ENTITY; ENTITY IfcBuilding SUBTYPE OF (IfcSpatialStructureElement); ElevationOfRefHeight : OPTIONAL IfcLengthMeasure; ElevationOfTerrain : OPTIONAL IfcLengthMeasure; BuildingAddress : OPTIONAL IfcPostalAddress; END_ENTITY; ENTITY IfcBuildingElement ABSTRACT SUPERTYPE OF (ONEOF (IfcBeam ,IfcBuildingElementProxy ,IfcChimney ,IfcColumn ,IfcCovering ,IfcCurtainWall ,IfcDoor ,IfcFooting ,IfcMember ,IfcPile ,IfcPlate ,IfcRailing ,IfcRamp ,IfcRampFlight ,IfcRoof ,IfcShadingDevice ,IfcSlab ,IfcStair ,IfcStairFlight ,IfcWall ,IfcWindow)) SUBTYPE OF (IfcElement); INVERSE HasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement; WHERE MaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | 'IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) <= 1; END_ENTITY; ENTITY IfcBuildingElementPart SUBTYPE OF (IfcElementComponent); PredefinedType : OPTIONAL IfcBuildingElementPartTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcBuildingElementPartType SUBTYPE OF (IfcElementComponentType); PredefinedType : IfcBuildingElementPartTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcBuildingElementProxy SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcBuildingElementProxyTypeEnum; WHERE HasObjectName : EXISTS(SELF\IfcRoot.Name); CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCBUILDINGELEMENTPROXYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcBuildingElementProxyType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcBuildingElementProxyTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcBuildingElementType ABSTRACT SUPERTYPE OF (ONEOF (IfcBeamType ,IfcBuildingElementProxyType ,IfcChimneyType ,IfcColumnType ,IfcCoveringType ,IfcCurtainWallType ,IfcDoorType ,IfcFootingType ,IfcMemberType ,IfcPileType ,IfcPlateType ,IfcRailingType ,IfcRampFlightType ,IfcRampType ,IfcRoofType ,IfcShadingDeviceType ,IfcSlabType ,IfcStairFlightType ,IfcStairType ,IfcWallType ,IfcWindowType)) SUBTYPE OF (IfcElementType); END_ENTITY; ENTITY IfcBuildingStorey SUBTYPE OF (IfcSpatialStructureElement); Elevation : OPTIONAL IfcLengthMeasure; END_ENTITY; ENTITY IfcBuildingSystem SUBTYPE OF (IfcSystem); PredefinedType : OPTIONAL IfcBuildingSystemTypeEnum; END_ENTITY; ENTITY IfcBurner SUBTYPE OF (IfcEnergyConversionDevice); PredefinedType : OPTIONAL IfcBurnerTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.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 ('IFC4.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 ('IFC4.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 ('IFC4.IFCCABLESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCableSegmentType SUBTYPE OF (IfcFlowSegmentType); PredefinedType : IfcCableSegmentTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcCartesianPoint SUBTYPE OF (IfcPoint); Coordinates : LIST [1:3] OF IfcLengthMeasure; DERIVE Dim : IfcDimensionCount := HIINDEX(Coordinates); WHERE CP2Dor3D : HIINDEX(Coordinates) >= 2; END_ENTITY; ENTITY IfcCartesianPointList ABSTRACT SUPERTYPE OF (ONEOF (IfcCartesianPointList3D)) SUBTYPE OF (IfcGeometricRepresentationItem); END_ENTITY; ENTITY IfcCartesianPointList3D SUBTYPE OF (IfcCartesianPointList); CoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure; END_ENTITY; ENTITY IfcCartesianTransformationOperator ABSTRACT SUPERTYPE OF (ONEOF (IfcCartesianTransformationOperator2D ,IfcCartesianTransformationOperator3D)) SUBTYPE OF (IfcGeometricRepresentationItem); Axis1 : OPTIONAL IfcDirection; Axis2 : OPTIONAL IfcDirection; LocalOrigin : IfcCartesianPoint; Scale : OPTIONAL REAL; DERIVE Scl : REAL := NVL(Scale, 1.0); Dim : IfcDimensionCount := LocalOrigin.Dim; WHERE ScaleGreaterZero : Scl > 0.0; END_ENTITY; ENTITY IfcCartesianTransformationOperator2D SUPERTYPE OF (ONEOF (IfcCartesianTransformationOperator2DnonUniform)) SUBTYPE OF (IfcCartesianTransformationOperator); DERIVE U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\IfcCartesianTransformationOperator.Axis1, SELF\IfcCartesianTransformationOperator.Axis2,?); WHERE DimEqual2 : SELF\IfcCartesianTransformationOperator.Dim = 2; Axis1Is2D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2); Axis2Is2D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 2); END_ENTITY; ENTITY IfcCartesianTransformationOperator2DnonUniform SUBTYPE OF (IfcCartesianTransformationOperator2D); Scale2 : OPTIONAL REAL; DERIVE Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); WHERE Scale2GreaterZero : Scl2 > 0.0; END_ENTITY; ENTITY IfcCartesianTransformationOperator3D SUPERTYPE OF (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 DimIs3D : SELF\IfcCartesianTransformationOperator.Dim = 3; Axis1Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3); Axis2Is3D : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3); Axis3Is3D : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3); END_ENTITY; ENTITY IfcCartesianTransformationOperator3DnonUniform SUBTYPE OF (IfcCartesianTransformationOperator3D); Scale2 : OPTIONAL REAL; Scale3 : OPTIONAL REAL; DERIVE Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); Scl3 : REAL := NVL(Scale3, SELF\IfcCartesianTransformationOperator.Scl); WHERE Scale2GreaterZero : Scl2 > 0.0; Scale3GreaterZero : Scl3 > 0.0; END_ENTITY; ENTITY IfcCenterLineProfileDef SUBTYPE OF (IfcArbitraryOpenProfileDef); Thickness : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcChiller SUBTYPE OF (IfcEnergyConversionDevice); PredefinedType : OPTIONAL IfcChillerTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCCHILLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcChillerType SUBTYPE OF (IfcEnergyConversionDeviceType); PredefinedType : IfcChillerTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcChimney SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcChimneyTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCCHIMNEYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcChimneyType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcChimneyTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcCircle SUBTYPE OF (IfcConic); Radius : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcCircleHollowProfileDef SUBTYPE OF (IfcCircleProfileDef); WallThickness : IfcPositiveLengthMeasure; WHERE WR1 : WallThickness < SELF\IfcCircleProfileDef.Radius; END_ENTITY; ENTITY IfcCircleProfileDef SUPERTYPE OF (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; Location : 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 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 ('IFC4.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 SUPERTYPE OF (ONEOF (IfcColumnStandardCase)) SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcColumnTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCCOLUMNTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcColumnStandardCase SUBTYPE OF (IfcColumn); WHERE HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; ENTITY IfcColumnType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcColumnTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcCommunicationsAppliance SUBTYPE OF (IfcFlowTerminal); PredefinedType : OPTIONAL IfcCommunicationsApplianceTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCommunicationsApplianceType SUBTYPE OF (IfcFlowTerminalType); PredefinedType : IfcCommunicationsApplianceTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcComplexProperty SUBTYPE OF (IfcProperty); UsageName : IfcIdentifier; HasProperties : SET [1:?] OF IfcProperty; WHERE WR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0; WR22 : IfcUniquePropertyName(HasProperties); END_ENTITY; ENTITY IfcComplexPropertyTemplate SUBTYPE OF (IfcPropertyTemplate); UsageName : OPTIONAL IfcLabel; TemplateType : OPTIONAL IfcComplexPropertyTemplateTypeEnum; HasPropertyTemplates : OPTIONAL SET [1:?] OF IfcPropertyTemplate; WHERE UniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates); NoSelfReference : SIZEOF(QUERY(temp <* HasPropertyTemplates | SELF :=: temp)) = 0; END_ENTITY; ENTITY IfcCompositeCurve SUPERTYPE OF (ONEOF (IfcCompositeCurveOnSurface)) SUBTYPE OF (IfcBoundedCurve); Segments : LIST [1:?] OF IfcCompositeCurveSegment; SelfIntersect : LOGICAL; DERIVE NSegments : INTEGER := SIZEOF(Segments); ClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous; WHERE CurveContinuous : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0)); SameDim : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0; END_ENTITY; ENTITY IfcCompositeCurveOnSurface SUPERTYPE OF (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 (IfcGeometricRepresentationItem); Transition : IfcTransitionCode; SameSense : BOOLEAN; ParentCurve : IfcCurve; DERIVE Dim : IfcDimensionCount := ParentCurve.Dim; INVERSE UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments; WHERE ParentIsBoundedCurve : ('IFC4.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 | 'IFC4.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 ('IFC4.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 ('IFC4.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 ('IFC4.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 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 ('IFC4.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 ('IFC4.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 : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; GeodeticDatum : IfcIdentifier; VerticalDatum : OPTIONAL IfcIdentifier; END_ENTITY; ENTITY IfcCostItem SUBTYPE OF (IfcControl); PredefinedType : OPTIONAL IfcCostItemTypeEnum; CostValues : OPTIONAL LIST [1:?] OF IfcCostValue; CostQuantities : OPTIONAL LIST [1:?] OF IfcPhysicalQuantity; END_ENTITY; ENTITY IfcCostSchedule SUBTYPE OF (IfcControl); PredefinedType : OPTIONAL IfcCostScheduleTypeEnum; Status : OPTIONAL IfcLabel; SubmittedOn : OPTIONAL IfcDateTime; UpdateDate : OPTIONAL IfcDateTime; END_ENTITY; ENTITY IfcCostValue SUBTYPE OF (IfcAppliedValue); END_ENTITY; ENTITY IfcCovering SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcCoveringTypeEnum; INVERSE CoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings; CoversElements : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCCOVERINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCoveringType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcCoveringTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcCrewResource SUBTYPE OF (IfcConstructionResource); PredefinedType : OPTIONAL IfcCrewResourceTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); END_ENTITY; ENTITY IfcCrewResourceType SUBTYPE OF (IfcConstructionResourceType); PredefinedType : IfcCrewResourceTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); END_ENTITY; ENTITY IfcCsgPrimitive3D ABSTRACT SUPERTYPE OF (ONEOF (IfcBlock ,IfcRectangularPyramid ,IfcRightCircularCone ,IfcRightCircularCylinder ,IfcSphere)) SUBTYPE OF (IfcGeometricRepresentationItem); Position : IfcAxis2Placement3D; DERIVE Dim : IfcDimensionCount := 3; END_ENTITY; ENTITY IfcCsgSolid SUBTYPE OF (IfcSolidModel); TreeRootExpression : IfcCsgSelect; END_ENTITY; ENTITY IfcCurrencyRelationship SUBTYPE OF (IfcResourceLevelRelationship); RelatingMonetaryUnit : IfcMonetaryUnit; RelatedMonetaryUnit : IfcMonetaryUnit; ExchangeRate : IfcPositiveRatioMeasure; RateDateTime : OPTIONAL IfcDateTime; RateSource : OPTIONAL IfcLibraryInformation; END_ENTITY; ENTITY IfcCurtainWall SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcCurtainWallTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCCURTAINWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCurtainWallType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcCurtainWallTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcCurve ABSTRACT SUPERTYPE OF (ONEOF (IfcBoundedCurve ,IfcConic ,IfcLine ,IfcOffsetCurve2D ,IfcOffsetCurve3D ,IfcPcurve)) SUBTYPE OF (IfcGeometricRepresentationItem); DERIVE Dim : IfcDimensionCount := IfcCurveDim(SELF); END_ENTITY; ENTITY IfcCurveBoundedPlane SUBTYPE OF (IfcBoundedSurface); BasisSurface : IfcPlane; OuterBoundary : IfcCurve; InnerBoundaries : SET [0:?] OF IfcCurve; END_ENTITY; ENTITY IfcCurveBoundedSurface SUBTYPE OF (IfcBoundedSurface); BasisSurface : IfcSurface; Boundaries : SET [1:?] OF IfcBoundaryCurve; ImplicitOuter : BOOLEAN; END_ENTITY; ENTITY IfcCurveStyle SUBTYPE OF (IfcPresentationStyle); CurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect; CurveWidth : OPTIONAL IfcSizeSelect; CurveColour : OPTIONAL IfcColour; ModelOrDraughting : OPTIONAL BOOLEAN; WHERE MeasureOfWidth : (NOT(EXISTS(CurveWidth))) OR ('IFC4.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR (('IFC4.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND (CurveWidth = 'by layer')); IdentifiableCurveStyle : EXISTS(CurveFont) OR EXISTS(CurveWidth) OR EXISTS(CurveColour); END_ENTITY; ENTITY IfcCurveStyleFont SUBTYPE OF (IfcPresentationItem); Name : OPTIONAL IfcLabel; PatternList : LIST [1:?] OF IfcCurveStyleFontPattern; END_ENTITY; ENTITY IfcCurveStyleFontAndScaling SUBTYPE OF (IfcPresentationItem); Name : OPTIONAL IfcLabel; CurveFont : IfcCurveStyleFontSelect; CurveFontScaling : IfcPositiveRatioMeasure; END_ENTITY; ENTITY IfcCurveStyleFontPattern SUBTYPE OF (IfcPresentationItem); VisibleSegmentLength : IfcLengthMeasure; InvisibleSegmentLength : IfcPositiveLengthMeasure; WHERE VisibleLengthGreaterEqualZero : VisibleSegmentLength >= 0.; END_ENTITY; ENTITY IfcCylindricalSurface SUBTYPE OF (IfcElementarySurface); Radius : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcDamper SUBTYPE OF (IfcFlowController); PredefinedType : OPTIONAL IfcDamperTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCDAMPERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDamperType SUBTYPE OF (IfcFlowControllerType); PredefinedType : IfcDamperTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcDerivedProfileDef SUPERTYPE OF (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; DERIVE Dimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements); WHERE WR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 )); WR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND (EXISTS(SELF.UserDefinedType))); END_ENTITY; ENTITY IfcDerivedUnitElement; Unit : IfcNamedUnit; Exponent : INTEGER; END_ENTITY; ENTITY IfcDimensionalExponents; LengthExponent : INTEGER; MassExponent : INTEGER; TimeExponent : INTEGER; ElectricCurrentExponent : INTEGER; ThermodynamicTemperatureExponent : INTEGER; AmountOfSubstanceExponent : INTEGER; LuminousIntensityExponent : INTEGER; END_ENTITY; ENTITY IfcDirection SUBTYPE OF (IfcGeometricRepresentationItem); DirectionRatios : LIST [2:3] OF REAL; DERIVE Dim : IfcDimensionCount := HIINDEX(DirectionRatios); WHERE MagnitudeGreaterZero : SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0; END_ENTITY; ENTITY IfcDiscreteAccessory SUBTYPE OF (IfcElementComponent); PredefinedType : OPTIONAL IfcDiscreteAccessoryTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDiscreteAccessoryType SUBTYPE OF (IfcElementComponentType); PredefinedType : IfcDiscreteAccessoryTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcDistributionChamberElement SUBTYPE OF (IfcDistributionFlowElement); PredefinedType : OPTIONAL IfcDistributionChamberElementTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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; 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 SUPERTYPE OF (ONEOF (IfcDoorStandardCase)) SUBTYPE OF (IfcBuildingElement); OverallHeight : OPTIONAL IfcPositiveLengthMeasure; OverallWidth : OPTIONAL IfcPositiveLengthMeasure; PredefinedType : OPTIONAL IfcDoorTypeEnum; OperationType : OPTIONAL IfcDoorTypeOperationEnum; UserDefinedOperationType : OPTIONAL IfcLabel; WHERE CorrectStyleAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ( ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR ('IFC4.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 ( ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR ('IFC4.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) ); END_ENTITY; ENTITY IfcDoorStandardCase SUBTYPE OF (IfcDoor); END_ENTITY; ENTITY IfcDoorStyle SUBTYPE OF (IfcTypeProduct); OperationType : IfcDoorStyleOperationEnum; ConstructionType : IfcDoorStyleConstructionEnum; ParameterTakesPrecedence : BOOLEAN; Sizeable : BOOLEAN; END_ENTITY; ENTITY IfcDoorType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcDoorTypeEnum; OperationType : IfcDoorTypeOperationEnum; ParameterTakesPrecedence : OPTIONAL BOOLEAN; UserDefinedOperationType : OPTIONAL IfcLabel; WHERE CorrectPredefinedType : (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcDraughtingPreDefinedColour SUBTYPE OF (IfcPreDefinedColour); WHERE PreDefinedColourNames : SELF\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow', 'magenta','cyan','white','by layer']; END_ENTITY; ENTITY IfcDraughtingPreDefinedCurveFont SUBTYPE OF (IfcPreDefinedCurveFont); WHERE PreDefinedCurveFontNames : SELF\IfcPredefinedItem.Name IN ['continuous', 'chain', 'chain double dash', 'dashed', 'dotted', 'by layer']; END_ENTITY; ENTITY IfcDuctFitting SUBTYPE OF (IfcFlowFitting); PredefinedType : OPTIONAL IfcDuctFittingTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.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 ('IFC4.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDuctSilencerType SUBTYPE OF (IfcFlowTreatmentDeviceType); PredefinedType : IfcDuctSilencerTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcEdge SUPERTYPE OF (ONEOF (IfcEdgeCurve ,IfcOrientedEdge ,IfcSubedge)) SUBTYPE OF (IfcTopologicalRepresentationItem); EdgeStart : IfcVertex; EdgeEnd : IfcVertex; END_ENTITY; ENTITY IfcEdgeCurve SUBTYPE OF (IfcEdge); EdgeGeometry : IfcCurve; SameSense : BOOLEAN; END_ENTITY; ENTITY IfcEdgeLoop SUBTYPE OF (IfcLoop); EdgeList : LIST [1:?] OF IfcOrientedEdge; DERIVE Ne : INTEGER := SIZEOF(EdgeList); WHERE IsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd); IsContinuous : IfcLoopHeadToTail(SELF); END_ENTITY; ENTITY IfcElectricAppliance SUBTYPE OF (IfcFlowTerminal); PredefinedType : OPTIONAL IfcElectricApplianceTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.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 ('IFC4.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricFlowStorageDeviceType SUBTYPE OF (IfcFlowStorageDeviceType); PredefinedType : IfcElectricFlowStorageDeviceTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcElectricGenerator SUBTYPE OF (IfcEnergyConversionDevice); PredefinedType : OPTIONAL IfcElectricGeneratorTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.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 ('IFC4.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricTimeControlType SUBTYPE OF (IfcFlowControllerType); PredefinedType : IfcElectricTimeControlTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcElement ABSTRACT SUPERTYPE OF (ONEOF (IfcBuildingElement ,IfcCivilElement ,IfcDistributionElement ,IfcElementAssembly ,IfcElementComponent ,IfcFeatureElement ,IfcFurnishingElement ,IfcGeographicElement ,IfcTransportElement ,IfcVirtualElement)) SUBTYPE OF (IfcProduct); Tag : OPTIONAL IfcIdentifier; INVERSE FillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement; ConnectedTo : SET [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; ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements; HasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement; IsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements; ProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement; ConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement; ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; END_ENTITY; ENTITY IfcElementAssembly SUBTYPE OF (IfcElement); AssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum; PredefinedType : 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 ('IFC4.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElementAssemblyType SUBTYPE OF (IfcElementType); PredefinedType : IfcElementAssemblyTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcElementComponent ABSTRACT SUPERTYPE OF (ONEOF (IfcBuildingElementPart ,IfcDiscreteAccessory ,IfcFastener ,IfcMechanicalFastener ,IfcReinforcingElement ,IfcVibrationIsolator)) SUBTYPE OF (IfcElement); END_ENTITY; ENTITY IfcElementComponentType ABSTRACT SUPERTYPE OF (ONEOF (IfcBuildingElementPartType ,IfcDiscreteAccessoryType ,IfcFastenerType ,IfcMechanicalFastenerType ,IfcReinforcingElementType ,IfcVibrationIsolatorType)) SUBTYPE OF (IfcElementType); END_ENTITY; ENTITY IfcElementQuantity SUBTYPE OF (IfcQuantitySet); MethodOfMeasurement : OPTIONAL IfcLabel; Quantities : SET [1:?] OF IfcPhysicalQuantity; WHERE UniqueQuantityNames : IfcUniqueQuantityNames(Quantities); END_ENTITY; ENTITY IfcElementType ABSTRACT SUPERTYPE OF (ONEOF (IfcBuildingElementType ,IfcCivilElementType ,IfcDistributionElementType ,IfcElementAssemblyType ,IfcElementComponentType ,IfcFurnishingElementType ,IfcGeographicElementType ,IfcTransportElementType)) SUBTYPE OF (IfcTypeProduct); ElementType : OPTIONAL IfcLabel; END_ENTITY; ENTITY IfcElementarySurface ABSTRACT SUPERTYPE OF (ONEOF (IfcCylindricalSurface ,IfcPlane)) SUBTYPE OF (IfcSurface); Position : IfcAxis2Placement3D; END_ENTITY; ENTITY IfcEllipse SUBTYPE OF (IfcConic); SemiAxis1 : IfcPositiveLengthMeasure; SemiAxis2 : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcEllipseProfileDef SUBTYPE OF (IfcParameterizedProfileDef); SemiAxis1 : IfcPositiveLengthMeasure; SemiAxis2 : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcEnergyConversionDevice SUPERTYPE OF (ONEOF (IfcAirToAirHeatRecovery ,IfcBoiler ,IfcBurner ,IfcChiller ,IfcCoil ,IfcCondenser ,IfcCooledBeam ,IfcCoolingTower ,IfcElectricGenerator ,IfcElectricMotor ,IfcEngine ,IfcEvaporativeCooler ,IfcEvaporator ,IfcHeatExchanger ,IfcHumidifier ,IfcMotorConnection ,IfcSolarDevice ,IfcTransformer ,IfcTubeBundle ,IfcUnitaryEquipment)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcEnergyConversionDeviceType ABSTRACT SUPERTYPE OF (ONEOF (IfcAirToAirHeatRecoveryType ,IfcBoilerType ,IfcBurnerType ,IfcChillerType ,IfcCoilType ,IfcCondenserType ,IfcCooledBeamType ,IfcCoolingTowerType ,IfcElectricGeneratorType ,IfcElectricMotorType ,IfcEngineType ,IfcEvaporativeCoolerType ,IfcEvaporatorType ,IfcHeatExchangerType ,IfcHumidifierType ,IfcMotorConnectionType ,IfcSolarDeviceType ,IfcTransformerType ,IfcTubeBundleType ,IfcUnitaryEquipmentType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcEngine SUBTYPE OF (IfcEnergyConversionDevice); PredefinedType : OPTIONAL IfcEngineTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.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 ('IFC4.IFCEVAPORATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcEvaporatorType SUBTYPE OF (IfcEnergyConversionDeviceType); PredefinedType : IfcEvaporatorTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcEvent SUBTYPE OF (IfcProcess); PredefinedType : OPTIONAL IfcEventTypeEnum; EventTriggerType : OPTIONAL IfcEventTriggerTypeEnum; UserDefinedEventTriggerType : OPTIONAL IfcLabel; EventOccurenceTime : OPTIONAL IfcEventTime; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); CorrectTypeAssigned : NOT(EXISTS(EventTriggerType)) OR (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType)); END_ENTITY; ENTITY IfcEventTime SUBTYPE OF (IfcSchedulingTime); ActualDate : OPTIONAL IfcDateTime; EarlyDate : OPTIONAL IfcDateTime; LateDate : OPTIONAL IfcDateTime; ScheduleDate : OPTIONAL IfcDateTime; END_ENTITY; ENTITY IfcEventType SUBTYPE OF (IfcTypeProcess); PredefinedType : IfcEventTypeEnum; EventTriggerType : IfcEventTriggerTypeEnum; UserDefinedEventTriggerType : OPTIONAL IfcLabel; WHERE CorrectPredefinedType : (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType)); CorrectEventTriggerType : (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType)); END_ENTITY; ENTITY IfcExtendedProperties ABSTRACT SUPERTYPE OF (ONEOF (IfcMaterialProperties ,IfcProfileProperties)) SUBTYPE OF (IfcPropertyAbstraction); Name : OPTIONAL IfcIdentifier; Description : OPTIONAL IfcText; Properties : SET [1:?] OF IfcProperty; END_ENTITY; ENTITY IfcExternalInformation ABSTRACT SUPERTYPE OF (ONEOF (IfcClassification ,IfcDocumentInformation ,IfcLibraryInformation)); END_ENTITY; ENTITY IfcExternalReference ABSTRACT SUPERTYPE OF (ONEOF (IfcClassificationReference ,IfcDocumentReference ,IfcExternallyDefinedHatchStyle ,IfcExternallyDefinedSurfaceStyle ,IfcExternallyDefinedTextFont ,IfcLibraryReference)); Location : OPTIONAL IfcURIReference; Identification : OPTIONAL IfcIdentifier; Name : OPTIONAL IfcLabel; INVERSE ExternalReferenceForResources : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatingReference; WHERE WR1 : EXISTS(Identification) OR EXISTS(Location) OR EXISTS(Name); END_ENTITY; ENTITY IfcExternalReferenceRelationship SUBTYPE OF (IfcResourceLevelRelationship); RelatingReference : IfcExternalReference; RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect; END_ENTITY; ENTITY IfcExternalSpatialElement SUBTYPE OF (IfcExternalSpatialStructureElement); PredefinedType : OPTIONAL IfcExternalSpatialElementTypeEnum; INVERSE BoundedBy : SET [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 | 'IFC4.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1; END_ENTITY; ENTITY IfcFaceBasedSurfaceModel SUBTYPE OF (IfcGeometricRepresentationItem); FbsmFaces : SET [1:?] OF IfcConnectedFaceSet; DERIVE Dim : IfcDimensionCount := 3; END_ENTITY; ENTITY IfcFaceBound SUPERTYPE OF (ONEOF (IfcFaceOuterBound)) SUBTYPE OF (IfcTopologicalRepresentationItem); Bound : IfcLoop; Orientation : BOOLEAN; END_ENTITY; ENTITY IfcFaceOuterBound SUBTYPE OF (IfcFaceBound); END_ENTITY; ENTITY IfcFaceSurface SUPERTYPE OF (ONEOF (IfcAdvancedFace)) SUBTYPE OF (IfcFace); FaceSurface : IfcSurface; SameSense : BOOLEAN; 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 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 ('IFC4.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 ('IFC4.IFCFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFastenerType SUBTYPE OF (IfcElementComponentType); PredefinedType : IfcFastenerTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcFeatureElement ABSTRACT SUPERTYPE OF (ONEOF (IfcFeatureElementAddition ,IfcFeatureElementSubtraction ,IfcSurfaceFeature)) SUBTYPE OF (IfcElement); END_ENTITY; ENTITY IfcFeatureElementAddition ABSTRACT SUPERTYPE OF (ONEOF (IfcProjectionElement)) SUBTYPE OF (IfcFeatureElement); INVERSE ProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement; END_ENTITY; ENTITY IfcFeatureElementSubtraction ABSTRACT SUPERTYPE OF (ONEOF (IfcOpeningElement ,IfcVoidingFeature)) SUBTYPE OF (IfcFeatureElement); INVERSE VoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement; WHERE HasNoSubtraction : SIZEOF(SELF\IfcElement.HasOpenings) = 0; IsNotFilling : SIZEOF(SELF\IfcElement.FillsVoids) = 0; END_ENTITY; ENTITY IfcFillAreaStyle SUBTYPE OF (IfcPresentationStyle); FillStyles : SET [1:?] OF IfcFillStyleSelect; ModelorDraughting : OPTIONAL BOOLEAN; WHERE MaxOneColour : SIZEOF(QUERY(Style <* SELF.FillStyles | 'IFC4.IFCCOLOUR' IN TYPEOF(Style) )) <= 1; MaxOneExtHatchStyle : SIZEOF(QUERY(Style <* SELF.FillStyles | 'IFC4.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN TYPEOF(Style) )) <= 1; ConsistentHatchStyleDef : IfcCorrectFillAreaStyle(SELF.FillStyles); END_ENTITY; ENTITY IfcFillAreaStyleHatching SUBTYPE OF (IfcGeometricRepresentationItem); HatchLineAppearance : IfcCurveStyle; StartOfNextHatchLine : IfcHatchLineDistanceSelect; PointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint; PatternStart : OPTIONAL IfcCartesianPoint; HatchLineAngle : IfcPlaneAngleMeasure; WHERE PatternStart2D : NOT(EXISTS(PatternStart)) OR (PatternStart.Dim = 2); RefHatchLine2D : NOT(EXISTS(PointOfReferenceHatchLine)) OR (PointOfReferenceHatchLine.Dim = 2); END_ENTITY; ENTITY IfcFillAreaStyleTiles SUBTYPE OF (IfcGeometricRepresentationItem); TilingPattern : LIST [2:2] OF IfcVector; Tiles : SET [1:?] OF IfcStyledItem; TilingScale : IfcPositiveRatioMeasure; END_ENTITY; ENTITY IfcFilter SUBTYPE OF (IfcFlowTreatmentDevice); PredefinedType : OPTIONAL IfcFilterTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFireSuppressionTerminalType SUBTYPE OF (IfcFlowTerminalType); PredefinedType : IfcFireSuppressionTerminalTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcFixedReferenceSweptAreaSolid SUBTYPE OF (IfcSweptAreaSolid); Directrix : IfcCurve; StartParam : OPTIONAL IfcParameterValue; EndParam : OPTIONAL IfcParameterValue; FixedReference : IfcDirection; WHERE DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR (SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1); END_ENTITY; ENTITY IfcFlowController SUPERTYPE OF (ONEOF (IfcAirTerminalBox ,IfcDamper ,IfcElectricDistributionBoard ,IfcElectricTimeControl ,IfcFlowMeter ,IfcProtectiveDevice ,IfcSwitchingDevice ,IfcValve)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcFlowControllerType ABSTRACT SUPERTYPE OF (ONEOF (IfcAirTerminalBoxType ,IfcDamperType ,IfcElectricDistributionBoardType ,IfcElectricTimeControlType ,IfcFlowMeterType ,IfcProtectiveDeviceType ,IfcSwitchingDeviceType ,IfcValveType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcFlowFitting SUPERTYPE OF (ONEOF (IfcCableCarrierFitting ,IfcCableFitting ,IfcDuctFitting ,IfcJunctionBox ,IfcPipeFitting)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcFlowFittingType ABSTRACT SUPERTYPE OF (ONEOF (IfcCableCarrierFittingType ,IfcCableFittingType ,IfcDuctFittingType ,IfcJunctionBoxType ,IfcPipeFittingType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcFlowInstrument SUBTYPE OF (IfcDistributionControlElement); PredefinedType : OPTIONAL IfcFlowInstrumentTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.IFCFLOWMETERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFlowMeterType SUBTYPE OF (IfcFlowControllerType); PredefinedType : IfcFlowMeterTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcFlowMovingDevice SUPERTYPE OF (ONEOF (IfcCompressor ,IfcFan ,IfcPump)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcFlowMovingDeviceType ABSTRACT SUPERTYPE OF (ONEOF (IfcCompressorType ,IfcFanType ,IfcPumpType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcFlowSegment SUPERTYPE OF (ONEOF (IfcCableCarrierSegment ,IfcCableSegment ,IfcDuctSegment ,IfcPipeSegment)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcFlowSegmentType ABSTRACT SUPERTYPE OF (ONEOF (IfcCableCarrierSegmentType ,IfcCableSegmentType ,IfcDuctSegmentType ,IfcPipeSegmentType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcFlowStorageDevice SUPERTYPE OF (ONEOF (IfcElectricFlowStorageDevice ,IfcTank)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcFlowStorageDeviceType ABSTRACT SUPERTYPE OF (ONEOF (IfcElectricFlowStorageDeviceType ,IfcTankType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcFlowTerminal SUPERTYPE OF (ONEOF (IfcAirTerminal ,IfcAudioVisualAppliance ,IfcCommunicationsAppliance ,IfcElectricAppliance ,IfcFireSuppressionTerminal ,IfcLamp ,IfcLightFixture ,IfcMedicalDevice ,IfcOutlet ,IfcSanitaryTerminal ,IfcSpaceHeater ,IfcStackTerminal ,IfcWasteTerminal)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcFlowTerminalType ABSTRACT SUPERTYPE OF (ONEOF (IfcAirTerminalType ,IfcAudioVisualApplianceType ,IfcCommunicationsApplianceType ,IfcElectricApplianceType ,IfcFireSuppressionTerminalType ,IfcLampType ,IfcLightFixtureType ,IfcMedicalDeviceType ,IfcOutletType ,IfcSanitaryTerminalType ,IfcSpaceHeaterType ,IfcStackTerminalType ,IfcWasteTerminalType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcFlowTreatmentDevice SUPERTYPE OF (ONEOF (IfcDuctSilencer ,IfcFilter ,IfcInterceptor)) SUBTYPE OF (IfcDistributionFlowElement); END_ENTITY; ENTITY IfcFlowTreatmentDeviceType ABSTRACT SUPERTYPE OF (ONEOF (IfcDuctSilencerType ,IfcFilterType ,IfcInterceptorType)) SUBTYPE OF (IfcDistributionFlowElementType); END_ENTITY; ENTITY IfcFooting SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcFootingTypeEnum; WHERE CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCFOOTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFootingType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcFootingTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcFurnishingElement SUPERTYPE OF (ONEOF (IfcFurniture ,IfcSystemFurnitureElement)) SUBTYPE OF (IfcElement); END_ENTITY; ENTITY IfcFurnishingElementType SUPERTYPE OF (ONEOF (IfcFurnitureType ,IfcSystemFurnitureElementType)) SUBTYPE OF (IfcElementType); END_ENTITY; ENTITY IfcFurniture SUBTYPE OF (IfcFurnishingElement); PredefinedType : OPTIONAL IfcFurnitureTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCFURNITURETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFurnitureType SUBTYPE OF (IfcFurnishingElementType); AssemblyPlace : IfcAssemblyPlaceEnum; PredefinedType : OPTIONAL IfcFurnitureTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcGeographicElement SUBTYPE OF (IfcElement); PredefinedType : OPTIONAL IfcGeographicElementTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 | 'IFC4.IFCSURFACE' IN TYPEOF(Temp))) = 0; END_ENTITY; ENTITY IfcGeometricRepresentationContext SUPERTYPE OF (ONEOF (IfcGeometricRepresentationSubContext)) SUBTYPE OF (IfcRepresentationContext); CoordinateSpaceDimension : IfcDimensionCount; Precision : OPTIONAL REAL; WorldCoordinateSystem : IfcAxis2Placement; TrueNorth : OPTIONAL IfcDirection; INVERSE HasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext; WHERE WR11 : NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2); END_ENTITY; ENTITY IfcGeometricRepresentationItem ABSTRACT SUPERTYPE OF (ONEOF (IfcAnnotationFillArea ,IfcBooleanResult ,IfcBoundingBox ,IfcCartesianPointList ,IfcCartesianTransformationOperator ,IfcCompositeCurveSegment ,IfcCsgPrimitive3D ,IfcCurve ,IfcDirection ,IfcFaceBasedSurfaceModel ,IfcFillAreaStyleHatching ,IfcFillAreaStyleTiles ,IfcGeometricSet ,IfcHalfSpaceSolid ,IfcLightSource ,IfcPlacement ,IfcPlanarExtent ,IfcPoint ,IfcSectionedSpine ,IfcShellBasedSurfaceModel ,IfcSolidModel ,IfcSurface ,IfcTessellatedItem ,IfcTextLiteral ,IfcVector)) SUBTYPE OF (IfcRepresentationItem); END_ENTITY; ENTITY IfcGeometricRepresentationSubContext SUBTYPE OF (IfcGeometricRepresentationContext); ParentContext : IfcGeometricRepresentationContext; TargetScale : OPTIONAL IfcPositiveRatioMeasure; TargetView : IfcGeometricProjectionEnum; UserDefinedTargetView : OPTIONAL IfcLabel; DERIVE SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem; SELF\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension; SELF\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth, IfcConvertDirectionInto2D(SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem.P[2])); SELF\IfcGeometricRepresentationContext.Precision : REAL := NVL(ParentContext.Precision,1.E-5); WHERE WR31 : NOT('IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext)); WR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR ((TargetView = IfcGeometricProjectionEnum.USERDEFINED) AND EXISTS(UserDefinedTargetView)); END_ENTITY; ENTITY IfcGeometricSet SUPERTYPE OF (ONEOF (IfcGeometricCurveSet)) SUBTYPE OF (IfcGeometricRepresentationItem); Elements : SET [1:?] OF IfcGeometricSetSelect; DERIVE Dim : IfcDimensionCount := Elements[1].Dim; WHERE ConsistentDim : SIZEOF(QUERY(Temp <* Elements | Temp.Dim <> Elements[1].Dim)) = 0; END_ENTITY; ENTITY IfcGrid SUBTYPE OF (IfcProduct); UAxes : LIST [1:?] OF UNIQUE IfcGridAxis; VAxes : LIST [1:?] OF UNIQUE IfcGridAxis; WAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis; PredefinedType : OPTIONAL IfcGridTypeEnum; INVERSE ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements; WHERE HasPlacement : EXISTS(SELF\IfcProduct.ObjectPlacement); END_ENTITY; ENTITY IfcGridAxis; AxisTag : OPTIONAL IfcLabel; AxisCurve : IfcCurve; SameSense : IfcBoolean; INVERSE PartOfW : SET [0:1] OF IfcGrid FOR WAxes; PartOfV : SET [0:1] OF IfcGrid FOR VAxes; PartOfU : SET [0:1] OF IfcGrid FOR UAxes; HasIntersections : SET [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; END_ENTITY; ENTITY IfcHalfSpaceSolid SUPERTYPE OF (ONEOF (IfcBoxedHalfSpace ,IfcPolygonalBoundedHalfSpace)) SUBTYPE OF (IfcGeometricRepresentationItem); BaseSurface : IfcSurface; AgreementFlag : BOOLEAN; DERIVE Dim : IfcDimensionCount := 3; END_ENTITY; ENTITY IfcHeatExchanger SUBTYPE OF (IfcEnergyConversionDevice); PredefinedType : OPTIONAL IfcHeatExchangerTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcHumidifierType SUBTYPE OF (IfcEnergyConversionDeviceType); PredefinedType : IfcHumidifierTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcIShapeProfileDef SUBTYPE OF (IfcParameterizedProfileDef); OverallWidth : IfcPositiveLengthMeasure; OverallDepth : IfcPositiveLengthMeasure; WebThickness : IfcPositiveLengthMeasure; FlangeThickness : IfcPositiveLengthMeasure; FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; FlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; FlangeSlope : OPTIONAL IfcPlaneAngleMeasure; WHERE ValidFlangeThickness : (2. * FlangeThickness) < OverallDepth; ValidWebThickness : WebThickness < OverallWidth; ValidFilletRadius : NOT(EXISTS(FilletRadius)) OR ((FilletRadius <= (OverallWidth - WebThickness)/2.) AND (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.)); END_ENTITY; ENTITY IfcImageTexture SUBTYPE OF (IfcSurfaceTexture); URLReference : IfcURIReference; END_ENTITY; ENTITY IfcIndexedColourMap SUBTYPE OF (IfcPresentationItem); MappedTo : IfcTessellatedFaceSet; Overrides : OPTIONAL IfcSurfaceStyleShading; Colours : IfcColourRgbList; ColourIndex : LIST [1:?] OF INTEGER; END_ENTITY; ENTITY IfcIndexedTextureMap ABSTRACT SUPERTYPE OF (ONEOF (IfcIndexedTriangleTextureMap)) SUBTYPE OF (IfcTextureCoordinate); MappedTo : IfcTessellatedFaceSet; TexCoords : IfcTextureVertexList; END_ENTITY; ENTITY IfcIndexedTriangleTextureMap SUBTYPE OF (IfcIndexedTextureMap); TexCoordIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF INTEGER; END_ENTITY; ENTITY IfcInterceptor SUBTYPE OF (IfcFlowTreatmentDevice); PredefinedType : OPTIONAL IfcInterceptorTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCINTERCEPTORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcInterceptorType SUBTYPE OF (IfcFlowTreatmentDeviceType); PredefinedType : IfcInterceptorTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcInventory SUBTYPE OF (IfcGroup); PredefinedType : OPTIONAL IfcInventoryTypeEnum; Jurisdiction : OPTIONAL IfcActorSelect; ResponsiblePersons : OPTIONAL SET [1:?] OF IfcPerson; LastUpdateDate : OPTIONAL IfcDate; CurrentValue : OPTIONAL IfcCostValue; OriginalValue : OPTIONAL IfcCostValue; END_ENTITY; ENTITY IfcIrregularTimeSeries SUBTYPE OF (IfcTimeSeries); Values : LIST [1:?] OF IfcIrregularTimeSeriesValue; END_ENTITY; ENTITY IfcIrregularTimeSeriesValue; TimeStamp : IfcDateTime; ListValues : LIST [1:?] OF IfcValue; END_ENTITY; ENTITY IfcJunctionBox SUBTYPE OF (IfcFlowFitting); PredefinedType : OPTIONAL IfcJunctionBoxTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCJUNCTIONBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcJunctionBoxType SUBTYPE OF (IfcFlowFittingType); PredefinedType : IfcJunctionBoxTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcLShapeProfileDef SUBTYPE OF (IfcParameterizedProfileDef); Depth : IfcPositiveLengthMeasure; Width : OPTIONAL IfcPositiveLengthMeasure; Thickness : IfcPositiveLengthMeasure; FilletRadius : OPTIONAL IfcNonNegativeLengthMeasure; EdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure; LegSlope : OPTIONAL IfcPlaneAngleMeasure; WHERE ValidThickness : (Thickness < Depth) AND (NOT(EXISTS(Width)) OR (Thickness < Width)); END_ENTITY; ENTITY IfcLaborResource SUBTYPE OF (IfcConstructionResource); PredefinedType : OPTIONAL IfcLaborResourceTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); END_ENTITY; ENTITY IfcLaborResourceType SUBTYPE OF (IfcConstructionResourceType); PredefinedType : IfcLaborResourceTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeResource.ResourceType)); END_ENTITY; ENTITY IfcLagTime SUBTYPE OF (IfcSchedulingTime); LagValue : IfcTimeOrRatioSelect; DurationType : IfcTaskDurationEnum; END_ENTITY; ENTITY IfcLamp SUBTYPE OF (IfcFlowTerminal); PredefinedType : OPTIONAL IfcLampTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.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 IfcLocalPlacement SUBTYPE OF (IfcObjectPlacement); PlacementRelTo : OPTIONAL IfcObjectPlacement; RelativePlacement : IfcAxis2Placement; WHERE WR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo); END_ENTITY; ENTITY IfcLoop SUPERTYPE OF (ONEOF (IfcEdgeLoop ,IfcPolyLoop ,IfcVertexLoop)) SUBTYPE OF (IfcTopologicalRepresentationItem); END_ENTITY; ENTITY IfcManifoldSolidBrep ABSTRACT SUPERTYPE OF (ONEOF (IfcAdvancedBrep ,IfcFacetedBrep)) SUBTYPE OF (IfcSolidModel); Outer : IfcClosedShell; END_ENTITY; ENTITY IfcMapConversion SUBTYPE OF (IfcCoordinateOperation); Eastings : IfcLengthMeasure; Northings : IfcLengthMeasure; OrthogonalHeight : IfcLengthMeasure; XAxisAbscissa : OPTIONAL IfcReal; XAxisOrdinate : OPTIONAL IfcReal; Scale : OPTIONAL IfcReal; END_ENTITY; ENTITY IfcMappedItem SUBTYPE OF (IfcRepresentationItem); MappingSource : IfcRepresentationMap; MappingTarget : IfcCartesianTransformationOperator; END_ENTITY; ENTITY IfcMaterial SUBTYPE OF (IfcMaterialDefinition); Name : IfcLabel; Description : OPTIONAL IfcText; Category : OPTIONAL IfcLabel; INVERSE HasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial; IsRelatedWith : SET [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('IFC4.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 IfcNormalisedRatioMeasure; INVERSE ToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers; END_ENTITY; ENTITY IfcMaterialLayerSet SUBTYPE OF (IfcMaterialDefinition); MaterialLayers : LIST [1:?] OF IfcMaterialLayer; LayerSetName : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; DERIVE TotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF); END_ENTITY; ENTITY IfcMaterialLayerSetUsage SUBTYPE OF (IfcMaterialUsageDefinition); ForLayerSet : IfcMaterialLayerSet; LayerSetDirection : IfcLayerSetDirectionEnum; DirectionSense : IfcDirectionSenseEnum; OffsetFromReferenceLine : IfcLengthMeasure; ReferenceExtent : OPTIONAL IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcMaterialLayerWithOffsets SUBTYPE OF (IfcMaterialLayer); OffsetDirection : IfcLayerSetDirectionEnum; OffsetValues : ARRAY [1:2] OF IfcLengthMeasure; END_ENTITY; ENTITY IfcMaterialList; Materials : LIST [1:?] OF IfcMaterial; END_ENTITY; ENTITY IfcMaterialProfile SUPERTYPE OF (ONEOF (IfcMaterialProfileWithOffsets)) SUBTYPE OF (IfcMaterialDefinition); Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; Material : OPTIONAL IfcMaterial; Profile : IfcProfileDef; Priority : OPTIONAL IfcNormalisedRatioMeasure; Category : OPTIONAL IfcLabel; INVERSE ToMaterialProfileSet : IfcMaterialProfileSet FOR MaterialProfiles; END_ENTITY; ENTITY IfcMaterialProfileSet SUBTYPE OF (IfcMaterialDefinition); Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; MaterialProfiles : LIST [1:?] OF IfcMaterialProfile; CompositeProfile : OPTIONAL IfcCompositeProfileDef; END_ENTITY; ENTITY IfcMaterialProfileSetUsage SUPERTYPE OF (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; Expression : OPTIONAL IfcLabel; END_ENTITY; ENTITY IfcMaterialUsageDefinition ABSTRACT SUPERTYPE OF (ONEOF (IfcMaterialLayerSetUsage ,IfcMaterialProfileSetUsage)); INVERSE AssociatedTo : SET [1:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial; END_ENTITY; ENTITY IfcMeasureWithUnit; ValueComponent : IfcValue; UnitComponent : IfcUnit; END_ENTITY; ENTITY IfcMechanicalFastener SUBTYPE OF (IfcElementComponent); NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; NominalLength : OPTIONAL IfcPositiveLengthMeasure; PredefinedType : OPTIONAL IfcMechanicalFastenerTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.IFCMEDICALDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcMedicalDeviceType SUBTYPE OF (IfcFlowTerminalType); PredefinedType : IfcMedicalDeviceTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcMember SUPERTYPE OF (ONEOF (IfcMemberStandardCase)) SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcMemberTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCMEMBERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcMemberStandardCase SUBTYPE OF (IfcMember); WHERE HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; ENTITY IfcMemberType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcMemberTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcMetric SUBTYPE OF (IfcConstraint); Benchmark : IfcBenchmarkEnum; ValueSource : OPTIONAL IfcLabel; DataValue : IfcMetricValueSelect; ReferencePath : OPTIONAL IfcReference; END_ENTITY; ENTITY IfcMirroredProfileDef SUBTYPE OF (IfcDerivedProfileDef); DERIVE SELF\IfcDerivedProfileDef.Operator : IfcCartesianTransformationOperator2D := IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcCartesianTransformationOperator( IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([-1., 0.]), IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([ 0., 1.]), IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcPoint() || IfcCartesianPoint([0., 0.]), 1.) || IfcCartesianTransformationOperator2D(); END_ENTITY; ENTITY IfcMonetaryUnit; Currency : IfcLabel; END_ENTITY; ENTITY IfcMotorConnection SUBTYPE OF (IfcEnergyConversionDevice); PredefinedType : OPTIONAL IfcMotorConnectionTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCMOTORCONNECTIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcMotorConnectionType SUBTYPE OF (IfcEnergyConversionDeviceType); PredefinedType : IfcMotorConnectionTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcNamedUnit ABSTRACT SUPERTYPE OF (ONEOF (IfcContextDependentUnit ,IfcConversionBasedUnit ,IfcSIUnit)); Dimensions : IfcDimensionalExponents; UnitType : IfcUnitEnum; WHERE WR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions); END_ENTITY; ENTITY IfcObject ABSTRACT SUPERTYPE OF (ONEOF (IfcActor ,IfcControl ,IfcGroup ,IfcProcess ,IfcProduct ,IfcResource)) SUBTYPE OF (IfcObjectDefinition); ObjectType : OPTIONAL IfcLabel; INVERSE IsDeclaredBy : SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects; Declares : SET [0:?] OF IfcRelDefinesByObject FOR RelatingObject; IsTypedBy : SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects; IsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects; 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 ,IfcLocalPlacement)); INVERSE PlacesObject : SET [0:?] OF IfcProduct FOR ObjectPlacement; ReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo; END_ENTITY; ENTITY IfcObjective SUBTYPE OF (IfcConstraint); BenchmarkValues : OPTIONAL LIST [1:?] OF IfcConstraint; LogicalAggregator : OPTIONAL IfcLogicalOperatorEnum; ObjectiveQualifier : IfcObjectiveEnum; UserDefinedQualifier : OPTIONAL IfcLabel; WHERE WR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\IfcObjective.UserDefinedQualifier)); END_ENTITY; ENTITY IfcOccupant SUBTYPE OF (IfcActor); PredefinedType : OPTIONAL IfcOccupantTypeEnum; WHERE WR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); END_ENTITY; ENTITY IfcOffsetCurve2D SUBTYPE OF (IfcCurve); BasisCurve : IfcCurve; Distance : IfcLengthMeasure; SelfIntersect : LOGICAL; WHERE DimIs2D : BasisCurve.Dim = 2; END_ENTITY; ENTITY IfcOffsetCurve3D SUBTYPE OF (IfcCurve); BasisCurve : IfcCurve; Distance : IfcLengthMeasure; SelfIntersect : LOGICAL; RefDirection : IfcDirection; WHERE DimIs2D : BasisCurve.Dim = 3; END_ENTITY; ENTITY IfcOpenShell SUBTYPE OF (IfcConnectedFaceSet); END_ENTITY; ENTITY IfcOpeningElement SUPERTYPE OF (ONEOF (IfcOpeningStandardCase)) SUBTYPE OF (IfcFeatureElementSubtraction); PredefinedType : OPTIONAL IfcOpeningElementTypeEnum; INVERSE HasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement; END_ENTITY; ENTITY IfcOpeningStandardCase SUBTYPE OF (IfcOpeningElement); END_ENTITY; ENTITY IfcOrganization; Identification : OPTIONAL IfcIdentifier; Name : IfcLabel; Description : OPTIONAL IfcText; Roles : OPTIONAL LIST [1:?] OF IfcActorRole; Addresses : OPTIONAL LIST [1:?] OF IfcAddress; INVERSE IsRelatedBy : SET [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 : BOOLEAN; DERIVE SELF\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd); SELF\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart); WHERE EdgeElementNotOriented : NOT('IFC4.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 ('IFC4.IFCOUTLETTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcOutletType SUBTYPE OF (IfcFlowTerminalType); PredefinedType : IfcOutletTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcOwnerHistory; OwningUser : IfcPersonAndOrganization; OwningApplication : IfcApplication; State : OPTIONAL IfcStateEnum; ChangeAction : OPTIONAL IfcChangeActionEnum; LastModifiedDate : OPTIONAL IfcTimeStamp; LastModifyingUser : OPTIONAL IfcPersonAndOrganization; LastModifyingApplication : OPTIONAL IfcApplication; CreationDate : IfcTimeStamp; WHERE CorrectChangeAction : (EXISTS(LastModifiedDate)) OR (NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR (NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE))); END_ENTITY; ENTITY IfcParameterizedProfileDef ABSTRACT SUPERTYPE OF (ONEOF (IfcAsymmetricIShapeProfileDef ,IfcCShapeProfileDef ,IfcCircleProfileDef ,IfcEllipseProfileDef ,IfcIShapeProfileDef ,IfcLShapeProfileDef ,IfcRectangleProfileDef ,IfcTShapeProfileDef ,IfcTrapeziumProfileDef ,IfcUShapeProfileDef ,IfcZShapeProfileDef)) SUBTYPE OF (IfcProfileDef); Position : OPTIONAL IfcAxis2Placement2D; END_ENTITY; ENTITY IfcPath SUBTYPE OF (IfcTopologicalRepresentationItem); EdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge; WHERE IsContinuous : IfcPathHeadToTail(SELF); END_ENTITY; ENTITY IfcPcurve SUBTYPE OF (IfcCurve); BasisSurface : IfcSurface; ReferenceCurve : IfcCurve; WHERE DimIs2D : ReferenceCurve.Dim = 2; END_ENTITY; ENTITY IfcPerformanceHistory SUBTYPE OF (IfcControl); LifeCyclePhase : IfcLabel; PredefinedType : OPTIONAL IfcPerformanceHistoryTypeEnum; END_ENTITY; ENTITY IfcPermeableCoveringProperties SUBTYPE OF (IfcPreDefinedPropertySet); OperationType : IfcPermeableCoveringOperationEnum; PanelPosition : IfcWindowPanelPositionEnum; FrameDepth : OPTIONAL IfcPositiveLengthMeasure; FrameThickness : OPTIONAL IfcPositiveLengthMeasure; ShapeAspectStyle : OPTIONAL IfcShapeAspect; END_ENTITY; ENTITY IfcPermit SUBTYPE OF (IfcControl); PredefinedType : OPTIONAL IfcPermitTypeEnum; Status : OPTIONAL IfcLabel; LongDescription : OPTIONAL IfcText; END_ENTITY; ENTITY IfcPerson; Identification : OPTIONAL IfcIdentifier; FamilyName : OPTIONAL IfcLabel; GivenName : OPTIONAL IfcLabel; MiddleNames : OPTIONAL LIST [1:?] OF IfcLabel; PrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel; SuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel; Roles : OPTIONAL LIST [1:?] OF IfcActorRole; Addresses : OPTIONAL LIST [1:?] OF IfcAddress; INVERSE EngagedIn : SET [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 ,IfcQuantityTime ,IfcQuantityVolume ,IfcQuantityWeight)) SUBTYPE OF (IfcPhysicalQuantity); Unit : OPTIONAL IfcNamedUnit; END_ENTITY; ENTITY IfcPile SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcPileTypeEnum; ConstructionType : OPTIONAL IfcPileConstructionEnum; WHERE CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCPILETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcPileType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcPileTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcPipeFitting SUBTYPE OF (IfcFlowFitting); PredefinedType : OPTIONAL IfcPipeFittingTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ('IFC4.IFCPIPESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcPipeSegmentType SUBTYPE OF (IfcFlowSegmentType); PredefinedType : IfcPipeSegmentTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcPixelTexture SUBTYPE OF (IfcSurfaceTexture); Width : IfcInteger; Height : IfcInteger; ColourComponents : IfcInteger; Pixel : LIST [1:?] OF BINARY(32); WHERE MinPixelInS : Width >= 1; MinPixelInT : Height >= 1; NumberOfColours : {1 <= ColourComponents <= 4}; SizeOfPixelList : SIZEOF(Pixel) = (Width * Height); PixelAsByteAndSameLength : SIZEOF(QUERY(temp<* Pixel | (BLENGTH(temp) MOD 8 = 0) AND (BLENGTH(temp) = BLENGTH(Pixel[1])) )) = SIZEOF(Pixel); END_ENTITY; ENTITY IfcPlacement ABSTRACT SUPERTYPE OF (ONEOF (IfcAxis1Placement ,IfcAxis2Placement2D ,IfcAxis2Placement3D)) SUBTYPE OF (IfcGeometricRepresentationItem); Location : IfcCartesianPoint; DERIVE Dim : IfcDimensionCount := Location.Dim; END_ENTITY; ENTITY IfcPlanarBox SUBTYPE OF (IfcPlanarExtent); Placement : IfcAxis2Placement; END_ENTITY; ENTITY IfcPlanarExtent SUPERTYPE OF (ONEOF (IfcPlanarBox)) SUBTYPE OF (IfcGeometricRepresentationItem); SizeInX : IfcLengthMeasure; SizeInY : IfcLengthMeasure; END_ENTITY; ENTITY IfcPlane SUBTYPE OF (IfcElementarySurface); END_ENTITY; ENTITY IfcPlate SUPERTYPE OF (ONEOF (IfcPlateStandardCase)) SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcPlateTypeEnum; WHERE CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCPLATETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcPlateStandardCase SUBTYPE OF (IfcPlate); WHERE HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; ENTITY IfcPlateType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcPlateTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcPoint ABSTRACT SUPERTYPE OF (ONEOF (IfcCartesianPoint ,IfcPointOnCurve ,IfcPointOnSurface)) SUBTYPE OF (IfcGeometricRepresentationItem); END_ENTITY; ENTITY IfcPointOnCurve SUBTYPE OF (IfcPoint); BasisCurve : IfcCurve; PointParameter : IfcParameterValue; DERIVE Dim : IfcDimensionCount := BasisCurve.Dim; END_ENTITY; ENTITY IfcPointOnSurface SUBTYPE OF (IfcPoint); BasisSurface : IfcSurface; PointParameterU : IfcParameterValue; PointParameterV : IfcParameterValue; DERIVE Dim : IfcDimensionCount := BasisSurface.Dim; END_ENTITY; ENTITY IfcPolyLoop SUBTYPE OF (IfcLoop); Polygon : LIST [3:?] OF UNIQUE IfcCartesianPoint; WHERE AllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0; END_ENTITY; ENTITY IfcPolygonalBoundedHalfSpace SUBTYPE OF (IfcHalfSpaceSolid); Position : IfcAxis2Placement3D; PolygonalBoundary : IfcBoundedCurve; WHERE BoundaryDim : PolygonalBoundary.Dim = 2; BoundaryType : SIZEOF(TYPEOF(PolygonalBoundary) * [ 'IFC4.IFCPOLYLINE', 'IFC4.IFCCOMPOSITECURVE'] ) = 1; END_ENTITY; ENTITY IfcPolyline SUBTYPE OF (IfcBoundedCurve); Points : LIST [2:?] OF IfcCartesianPoint; WHERE SameDim : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0; END_ENTITY; ENTITY IfcPort ABSTRACT SUPERTYPE OF (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 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) * [ 'IFC4.IFCSHAPEREPRESENTATION', 'IFC4.IFCGEOMETRICREPRESENTATIONITEM', 'IFC4.IFCMAPPEDITEM']) = 1) )) = SIZEOF(AssignedItems); END_ENTITY; ENTITY IfcPresentationLayerWithStyle SUBTYPE OF (IfcPresentationLayerAssignment); LayerOn : LOGICAL; LayerFrozen : LOGICAL; LayerBlocked : LOGICAL; LayerStyles : SET [0:?] OF IfcPresentationStyle; WHERE ApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | ( SIZEOF(TYPEOF(temp) * [ 'IFC4.IFCGEOMETRICREPRESENTATIONITEM', 'IFC4.IFCMAPPEDITEM']) = 1) )) = SIZEOF(AssignedItems); END_ENTITY; ENTITY IfcPresentationStyle ABSTRACT SUPERTYPE OF (ONEOF (IfcCurveStyle ,IfcFillAreaStyle ,IfcSurfaceStyle ,IfcTextStyle)); Name : OPTIONAL IfcLabel; END_ENTITY; ENTITY IfcPresentationStyleAssignment; Styles : SET [1:?] OF IfcPresentationStyleSelect; END_ENTITY; ENTITY IfcProcedure SUBTYPE OF (IfcProcess); PredefinedType : OPTIONAL IfcProcedureTypeEnum; WHERE HasName : EXISTS(SELF\IfcRoot.Name); CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); END_ENTITY; ENTITY IfcProcedureType SUBTYPE OF (IfcTypeProcess); PredefinedType : IfcProcedureTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcTypeProcess.ProcessType)); END_ENTITY; ENTITY IfcProcess ABSTRACT SUPERTYPE OF (ONEOF (IfcEvent ,IfcProcedure ,IfcTask)) SUBTYPE OF (IfcObject); Identification : OPTIONAL IfcIdentifier; LongDescription : OPTIONAL IfcText; INVERSE IsPredecessorTo : SET [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 ,IfcGrid ,IfcPort ,IfcProxy ,IfcSpatialElement ,IfcStructuralActivity ,IfcStructuralItem)) SUBTYPE OF (IfcObject); ObjectPlacement : OPTIONAL IfcObjectPlacement; Representation : OPTIONAL IfcProductRepresentation; INVERSE ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct; WHERE PlacementForShapeRepresentation : (EXISTS(Representation) AND EXISTS(ObjectPlacement)) OR (EXISTS(Representation) AND (SIZEOF(QUERY(temp <* Representation.Representations | 'IFC4.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('IFC4.IFCSHAPEMODEL' IN TYPEOF(temp))) )) = 0; END_ENTITY; ENTITY IfcProductRepresentation ABSTRACT SUPERTYPE OF (ONEOF (IfcMaterialDefinitionRepresentation ,IfcProductDefinitionShape)); Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; Representations : LIST [1:?] OF IfcRepresentation; END_ENTITY; ENTITY IfcProfileDef SUPERTYPE OF (ONEOF (IfcArbitraryClosedProfileDef ,IfcArbitraryOpenProfileDef ,IfcCompositeProfileDef ,IfcDerivedProfileDef ,IfcParameterizedProfileDef)); ProfileType : IfcProfileTypeEnum; ProfileName : OPTIONAL IfcLabel; INVERSE HasExternalReference : SET [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 HasName : EXISTS(SELF\IfcRoot.Name); CorrectContext : NOT(EXISTS(SELF\IfcContext.RepresentationContexts)) OR (SIZEOF(QUERY(Temp <* SELF\IfcContext.RepresentationContexts | 'IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp) )) = 0); NoDecomposition : SIZEOF(SELF\IfcObjectDefinition.Decomposes) = 0; HasOwnerHistory : EXISTS(SELF\IfcRoot.OwnerHistory); END_ENTITY; ENTITY IfcProjectLibrary SUBTYPE OF (IfcContext); END_ENTITY; ENTITY IfcProjectOrder SUBTYPE OF (IfcControl); PredefinedType : OPTIONAL IfcProjectOrderTypeEnum; Status : OPTIONAL IfcLabel; LongDescription : OPTIONAL IfcText; END_ENTITY; ENTITY IfcProjectedCRS SUBTYPE OF (IfcCoordinateReferenceSystem); MapProjection : OPTIONAL IfcIdentifier; MapZone : OPTIONAL IfcIdentifier; MapUnit : OPTIONAL IfcNamedUnit; WHERE WR11 : NOT(EXISTS(MapUnit)) OR (MapUnit.UnitType = IfcUnitEnum.LENGTHUNIT); END_ENTITY; ENTITY IfcProjectionElement SUBTYPE OF (IfcFeatureElementAddition); PredefinedType : OPTIONAL IfcProjectionElementTypeEnum; END_ENTITY; ENTITY IfcProperty ABSTRACT SUPERTYPE OF (ONEOF (IfcComplexProperty ,IfcSimpleProperty)) SUBTYPE OF (IfcPropertyAbstraction); Name : IfcIdentifier; Description : OPTIONAL IfcText; INVERSE PartOfPset : SET [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; 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 SameUnitUpperLower : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue)); SameUnitUpperSet : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(SetPointValue)) OR (TYPEOF(UpperBoundValue) = TYPEOF(SetPointValue)); SameUnitLowerSet : NOT(EXISTS(LowerBoundValue)) OR NOT(EXISTS(SetPointValue)) OR (TYPEOF(LowerBoundValue) = TYPEOF(SetPointValue)); END_ENTITY; ENTITY IfcPropertyDefinition ABSTRACT SUPERTYPE OF (ONEOF (IfcPropertySetDefinition ,IfcPropertyTemplateDefinition)) SUBTYPE OF (IfcRoot); INVERSE HasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions; HasAssociations : SET [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:1] 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 ('IFC4.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 ('IFC4.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 IfcProxy SUBTYPE OF (IfcProduct); ProxyType : IfcObjectTypeEnum; Tag : OPTIONAL IfcLabel; WHERE WR1 : EXISTS(SELF\IfcRoot.Name); 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 ('IFC4.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 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 IfcRailing SUBTYPE OF (IfcBuildingElement); 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 ('IFC4.IFCRAILINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRailingType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcRailingTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcRamp SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcRampTypeEnum; WHERE CorrectShapeDecomposition : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND ((NOT(EXISTS(SELF\IfcProduct.Representation))) OR ((EXISTS(SELF\IfcProduct.Representation)) AND (SIZEOF(QUERY( temp <* SELF\IfcProduct.Representation.Representations | temp.RepresentationIdentifier = 'Body')) = 0 ) ) ) ); CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCRAMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRampFlight SUBTYPE OF (IfcBuildingElement); 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 ('IFC4.IFCRAMPFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRampFlightType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcRampFlightTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcRampType SUBTYPE OF (IfcBuildingElementType); 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 REAL; DERIVE Weights : ARRAY [0:UpperIndexOnControlPoints] OF REAL := 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 REAL; DERIVE Weights : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF REAL := 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 ValidWallThickness : (WallThickness < (SELF\IfcRectangleProfileDef.XDim/2.)) AND (WallThickness < (SELF\IfcRectangleProfileDef.YDim/2.)); 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.))); END_ENTITY; ENTITY IfcRectangleProfileDef SUPERTYPE OF (ONEOF (IfcRectangleHollowProfileDef ,IfcRoundedRectangleProfileDef)) SUBTYPE OF (IfcParameterizedProfileDef); XDim : IfcPositiveLengthMeasure; YDim : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcRectangularPyramid SUBTYPE OF (IfcCsgPrimitive3D); XLength : IfcPositiveLengthMeasure; YLength : IfcPositiveLengthMeasure; Height : IfcPositiveLengthMeasure; END_ENTITY; ENTITY IfcRectangularTrimmedSurface SUBTYPE OF (IfcBoundedSurface); BasisSurface : IfcSurface; U1 : IfcParameterValue; V1 : IfcParameterValue; U2 : IfcParameterValue; V2 : IfcParameterValue; Usense : BOOLEAN; Vsense : BOOLEAN; WHERE U1AndU2Different : U1 <> U2; V1AndV2Different : V1 <> V2; UsenseCompatible : (('IFC4.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND (NOT ('IFC4.IFCPLANE' IN TYPEOF(BasisSurface)))) OR ('IFC4.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR (Usense = (U2 > U1)); 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 INTEGER; InnerReference : OPTIONAL IfcReference; END_ENTITY; ENTITY IfcRegularTimeSeries SUBTYPE OF (IfcTimeSeries); TimeStep : IfcTimeMeasure; Values : LIST [1:?] OF IfcTimeSeriesValue; 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 ('IFC4.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 CorrectPredefinedType : (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); BendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode); END_ENTITY; ENTITY IfcReinforcingElement ABSTRACT SUPERTYPE OF (ONEOF (IfcReinforcingBar ,IfcReinforcingMesh ,IfcTendon ,IfcTendonAnchor)) SUBTYPE OF (IfcElementComponent); SteelGrade : OPTIONAL IfcLabel; END_ENTITY; ENTITY IfcReinforcingElementType ABSTRACT SUPERTYPE OF (ONEOF (IfcReinforcingBarType ,IfcReinforcingMeshType ,IfcTendonAnchorType ,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 ('IFC4.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 CorrectPredefinedType : (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); BendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode); 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)) 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 NoVoidElement : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | ('IFC4.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR ('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(temp)) )) = 0; AllowedElements : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | ( SIZEOF(TYPEOF(temp) * [ 'IFC4.IFCELEMENT', 'IFC4.IFCELEMENTTYPE', 'IFC4.IFCWINDOWSTYLE', 'IFC4.IFCDOORSTYLE', 'IFC4.IFCSTRUCTURALMEMBER', 'IFC4.IFCPORT']) = 0) )) = 0; END_ENTITY; ENTITY IfcRelConnects ABSTRACT SUPERTYPE OF (ONEOF (IfcRelConnectsElements ,IfcRelConnectsPortToElement ,IfcRelConnectsPorts ,IfcRelConnectsStructuralActivity ,IfcRelConnectsStructuralMember ,IfcRelContainedInSpatialStructure ,IfcRelCoversBldgElements ,IfcRelCoversSpaces ,IfcRelFillsElement ,IfcRelFlowControlElements ,IfcRelInterferesElements ,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 NUMBER; RelatedPriorities : LIST [0:?] OF NUMBER; RelatedConnectionType : IfcConnectionTypeEnum; RelatingConnectionType : IfcConnectionTypeEnum; WHERE NormalizedRelatingPriorities : (SIZEOF(RelatingPriorities) = 0) OR (SIZEOF (QUERY (temp <* RelatingPriorities | {0.0 <= temp <= 1.0} )) = SIZEOF(RelatingPriorities)); NormalizedRelatedPriorities : (SIZEOF(RelatedPriorities) = 0) OR (SIZEOF (QUERY (temp <* RelatedPriorities | {0.0 <= temp <= 1.0} )) = SIZEOF(RelatedPriorities)); 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 | 'IFC4.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 (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:1] OF IfcObjectDefinition; RelatingPropertyDefinition : IfcPropertySetDefinitionSelect; 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 : IfcElement; RelatedElement : IfcElement; InterferenceGeometry : OPTIONAL IfcConnectionGeometry; InterferenceType : OPTIONAL IfcIdentifier; ImpliedOrder : LOGICAL; WHERE NotSelfReference : 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 IfcRelProjectsElement SUBTYPE OF (IfcRelDecomposes); RelatingElement : IfcElement; RelatedFeatureElement : IfcFeatureElementAddition; END_ENTITY; ENTITY IfcRelReferencedInSpatialStructure SUBTYPE OF (IfcRelConnects); RelatedElements : SET [1:?] OF IfcProduct; RelatingStructure : IfcSpatialElement; WHERE WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4.IFCSPATIALSTRUCTUREELEMENT' 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('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) OR ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND (('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) OR ('IFC4.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 : 'IFC4.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 BOOLEAN; 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 AxisStartInXY : Axis.Location.Coordinates[3] = 0.0; AxisDirectionInXY : Axis.Z.DirectionRatios[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 IfcRoof SUBTYPE OF (IfcBuildingElement); PredefinedType : OPTIONAL IfcRoofTypeEnum; WHERE CorrectShapeDecomposition : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND ((NOT(EXISTS(SELF\IfcProduct.Representation))) OR ((EXISTS(SELF\IfcProduct.Representation)) AND (SIZEOF(QUERY( temp <* SELF\IfcProduct.Representation.Representations | temp.RepresentationIdentifier = 'Body')) = 0 ) ) ) ); CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCROOFTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRoofType SUBTYPE OF (IfcBuildingElementType); 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 ('IFC4.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 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 IfcSectionedSpine SUBTYPE OF (IfcGeometricRepresentationItem); SpineCurve : IfcCompositeCurve; CrossSections : LIST [2:?] OF IfcProfileDef; CrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D; DERIVE Dim : IfcDimensionCount := 3; WHERE CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions); ConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0; SpineCurveDim : SpineCurve.Dim = 3; 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 ('IFC4.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 IfcShadingDevice SUBTYPE OF (IfcBuildingElement); 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 ('IFC4.IFCSHADINGDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcShadingDeviceType SUBTYPE OF (IfcBuildingElementType); 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 : LOGICAL; PartOfProductDefinitionShape : OPTIONAL IfcProductRepresentationSelect; END_ENTITY; ENTITY IfcShapeModel ABSTRACT SUPERTYPE OF (ONEOF (IfcShapeRepresentation ,IfcTopologyRepresentation)) SUBTYPE OF (IfcRepresentation); INVERSE OfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations; WHERE WR11 : (SIZEOF(SELF\IfcRepresentation.OfProductRepresentation) = 1) XOR (SIZEOF(SELF\IfcRepresentation.RepresentationMap) = 1) XOR (SIZEOF(OfShapeAspect) = 1); END_ENTITY; ENTITY IfcShapeRepresentation SUBTYPE OF (IfcShapeModel); WHERE WR21 : 'IFC4.IFCGEOMETRICREPRESENTATIONCONTEXT' IN TYPEOF(SELF\IfcRepresentation.ContextOfItems); WR22 : SIZEOF(QUERY(temp <* Items | ('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) AND (NOT(SIZEOF( ['IFC4.IFCVERTEXPOINT', 'IFC4.IFCEDGECURVE', 'IFC4.IFCFACESURFACE'] * TYPEOF(temp)) = 1)) )) = 0; WR23 : EXISTS(SELF\IfcRepresentation.RepresentationType); WR24 : IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); END_ENTITY; ENTITY IfcShellBasedSurfaceModel SUBTYPE OF (IfcGeometricRepresentationItem); SbsmBoundary : SET [1:?] OF IfcShell; DERIVE Dim : IfcDimensionCount := 3; END_ENTITY; ENTITY IfcSimpleProperty ABSTRACT SUPERTYPE OF (ONEOF (IfcPropertyBoundedValue ,IfcPropertyEnumeratedValue ,IfcPropertyListValue ,IfcPropertyReferenceValue ,IfcPropertySingleValue ,IfcPropertyTableValue)) SUBTYPE OF (IfcProperty); END_ENTITY; ENTITY 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 IfcSite SUBTYPE OF (IfcSpatialStructureElement); RefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure; RefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure; RefElevation : OPTIONAL IfcLengthMeasure; LandTitleNumber : OPTIONAL IfcLabel; SiteAddress : OPTIONAL IfcPostalAddress; END_ENTITY; ENTITY IfcSlab SUPERTYPE OF (ONEOF (IfcSlabElementedCase ,IfcSlabStandardCase)) SUBTYPE OF (IfcBuildingElement); 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 ('IFC4.IFCSLABTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSlabElementedCase SUBTYPE OF (IfcSlab); WHERE HasDecomposition : HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) > 0; END_ENTITY; ENTITY IfcSlabStandardCase SUBTYPE OF (IfcSlab); WHERE HasMaterialLayerSetusage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; ENTITY IfcSlabType SUBTYPE OF (IfcBuildingElementType); 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 ('IFC4.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 ,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 ('IFC4.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 ('IFC4.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; END_ENTITY; ENTITY IfcSpatialElementType ABSTRACT SUPERTYPE OF (ONEOF (IfcSpatialStructureElementType ,IfcSpatialZoneType)) SUBTYPE OF (IfcTypeProduct); ElementType : OPTIONAL IfcLabel; END_ENTITY; ENTITY IfcSpatialStructureElement ABSTRACT SUPERTYPE OF (ONEOF (IfcBuilding ,IfcBuildingStorey ,IfcSite ,IfcSpace)) SUBTYPE OF (IfcSpatialElement); CompositionType : OPTIONAL IfcElementCompositionEnum; WHERE WR41 : (HIINDEX(SELF\IfcObjectDefinition.Decomposes) = 1) AND ('IFC4.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1])) AND (('IFC4.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR ('IFC4.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 ('IFC4.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 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 ('IFC4.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 (IfcBuildingElement); PredefinedType : OPTIONAL IfcStairTypeEnum; WHERE CorrectShapeDecomposition : (HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 0) OR ((HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) = 1) AND ((NOT(EXISTS(SELF\IfcProduct.Representation))) OR ((EXISTS(SELF\IfcProduct.Representation)) AND (SIZEOF(QUERY( temp <* SELF\IfcProduct.Representation.Representations | temp.RepresentationIdentifier = 'Body')) = 0 ) ) ) ); CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.IFCSTAIRTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcStairFlight SUBTYPE OF (IfcBuildingElement); NumberOfRiser : OPTIONAL INTEGER; NumberOfTreads : OPTIONAL INTEGER; 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 ('IFC4.IFCSTAIRFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcStairFlightType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcStairFlightTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcStairType SUBTYPE OF (IfcBuildingElementType); 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 BOOLEAN; 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 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 ProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR ((ProjectedOrTrue <> PROJECTED_LENGTH) OR (SELF\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS)); HasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); SuitablePredefinedType : PredefinedType <> IfcStructuralCurveActivityTypeEnum.EQUIDISTANT; END_ENTITY; ENTITY IfcStructuralCurveConnection SUBTYPE OF (IfcStructuralConnection); Axis : 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 SuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADLINEARFORCE', 'IFC4.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; ConstPredefinedType : SELF\IfcStructuralCurveAction.PredefinedType = IfcStructuralCurveActivityTypeEnum.CONST; 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 SuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADPLANARFORCE', 'IFC4.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; ConstPredefinedType : SELF\IfcStructuralSurfaceAction.PredefinedType = IfcStructuralSurfaceActivityTypeEnum.CONST; END_ENTITY; ENTITY IfcStructuralPointAction SUBTYPE OF (IfcStructuralAction); WHERE SuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.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(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.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 : BOOLEAN; 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 ProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR ((ProjectedOrTrue <> PROJECTED_LENGTH) OR (SELF\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS)); HasObjectType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); 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 IfcStyleAssignmentSelect; Name : OPTIONAL IfcLabel; WHERE ApplicableItem : NOT('IFC4.IFCSTYLEDITEM' IN TYPEOF(Item)); END_ENTITY; ENTITY IfcStyledRepresentation SUBTYPE OF (IfcStyleModel); WHERE OnlyStyledItems : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | (NOT('IFC4.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 ,IfcSweptSurface)) SUBTYPE OF (IfcGeometricRepresentationItem); DERIVE Dim : IfcDimensionCount := 3; END_ENTITY; ENTITY IfcSurfaceCurveSweptAreaSolid SUBTYPE OF (IfcSweptAreaSolid); Directrix : IfcCurve; StartParam : OPTIONAL IfcParameterValue; EndParam : OPTIONAL IfcParameterValue; ReferenceSurface : IfcSurface; WHERE DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR (SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1); END_ENTITY; ENTITY IfcSurfaceFeature SUBTYPE OF (IfcFeatureElement); PredefinedType : OPTIONAL IfcSurfaceFeatureTypeEnum; WHERE 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 SurfaceAndOrShearAreaSpecified : EXISTS(SurfaceReinforcement1) OR EXISTS(SurfaceReinforcement2) OR EXISTS(ShearReinforcement); 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.); END_ENTITY; ENTITY IfcSurfaceStyle SUBTYPE OF (IfcPresentationStyle); Side : IfcSurfaceSide; Styles : SET [1:5] OF IfcSurfaceStyleElementSelect; WHERE MaxOneShading : SIZEOF(QUERY(Style <* SELF.Styles | 'IFC4.IFCSURFACESTYLESHADING' IN TYPEOF(Style) )) <= 1; MaxOneLighting : SIZEOF(QUERY(Style <* SELF.Styles | 'IFC4.IFCSURFACESTYLELIGHTING' IN TYPEOF(Style) )) <= 1; MaxOneRefraction : SIZEOF(QUERY(Style <* SELF.Styles | 'IFC4.IFCSURFACESTYLEREFRACTION' IN TYPEOF(Style) )) <= 1; MaxOneTextures : SIZEOF(QUERY(Style <* SELF.Styles | 'IFC4.IFCSURFACESTYLEWITHTEXTURES' IN TYPEOF(Style) )) <= 1; MaxOneExtDefined : SIZEOF(QUERY(Style <* SELF.Styles | 'IFC4.IFCEXTERNALLYDEFINEDSURFACESTYLE' 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); Transparency : OPTIONAL IfcNormalisedRatioMeasure; DiffuseColour : OPTIONAL IfcColourOrFactor; TransmissionColour : OPTIONAL IfcColourOrFactor; DiffuseTransmissionColour : OPTIONAL IfcColourOrFactor; ReflectionColour : OPTIONAL IfcColourOrFactor; SpecularColour : OPTIONAL IfcColourOrFactor; SpecularHighlight : OPTIONAL IfcSpecularHighlightSelect; ReflectanceMethod : IfcReflectanceMethodEnum; END_ENTITY; ENTITY IfcSurfaceStyleShading SUPERTYPE OF (ONEOF (IfcSurfaceStyleRendering)) SUBTYPE OF (IfcPresentationItem); SurfaceColour : IfcColourRgb; 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 : BOOLEAN; RepeatT : BOOLEAN; 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 (IfcExtrudedAreaSolid ,IfcFixedReferenceSweptAreaSolid ,IfcRevolvedAreaSolid ,IfcSurfaceCurveSweptAreaSolid)) 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 DirectrixDim : Directrix.Dim = 3; InnerRadiusSize : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius); DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR (SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1); END_ENTITY; ENTITY IfcSweptDiskSolidPolygonal SUBTYPE OF (IfcSweptDiskSolid); FilletRadius : OPTIONAL IfcPositiveLengthMeasure; WHERE CorrectRadii : NOT(EXISTS(FilletRadius)) OR (FilletRadius >= SELF\IfcSweptDiskSolid.Radius); DirectrixIsPolyline : 'IFC4.IFCPOLYLINE' IN TYPEOF(SELF\IfcSweptDiskSolid.Directrix); 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 ('IFC4.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 ,IfcDistributionSystem ,IfcStructuralAnalysisModel ,IfcZone)) SUBTYPE OF (IfcGroup); INVERSE ServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem; 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 ('IFC4.IFCSYSTEMFURNITUREELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSystemFurnitureElementType SUBTYPE OF (IfcFurnishingElementType); PredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum; WHERE CorrectPredefinedType : (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 : INTEGER := HIINDEX(Rows[1].RowCells); NumberOfHeadings : INTEGER := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading)); NumberOfDataRows : INTEGER := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading))); WHERE WR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0; WR2 : { 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 BOOLEAN; INVERSE OfTable : IfcTable FOR Rows; 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 ('IFC4.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 : BOOLEAN; Priority : OPTIONAL INTEGER; TaskTime : OPTIONAL IfcTaskTime; PredefinedType : OPTIONAL IfcTaskTypeEnum; WHERE HasName : EXISTS(SELF\IfcRoot.Name); CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); 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 BOOLEAN; 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); Recurrance : 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 ('IFC4.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 ('IFC4.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 IfcTendonType SUBTYPE OF (IfcReinforcingElementType); PredefinedType : IfcTendonTypeEnum; NominalDiameter : OPTIONAL IfcPositiveLengthMeasure; CrossSectionArea : OPTIONAL IfcAreaMeasure; SheethDiameter : OPTIONAL IfcPositiveLengthMeasure; WHERE CorrectPredefinedType : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcTessellatedFaceSet ABSTRACT SUPERTYPE OF (ONEOF (IfcTriangulatedFaceSet)) SUBTYPE OF (IfcTessellatedItem); Coordinates : IfcCartesianPointList3D; Normals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue; Closed : OPTIONAL BOOLEAN; INVERSE HasColours : SET [0:1] OF IfcIndexedColourMap FOR MappedTo; HasTextures : SET [0:?] OF IfcIndexedTextureMap FOR MappedTo; END_ENTITY; ENTITY IfcTessellatedItem ABSTRACT SUPERTYPE OF (ONEOF (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('IFC4.IFCPLANARBOX' IN TYPEOF(Extent)); END_ENTITY; ENTITY IfcTextStyle SUBTYPE OF (IfcPresentationStyle); TextCharacterAppearance : OPTIONAL IfcTextStyleForDefinedFont; TextStyle : OPTIONAL IfcTextStyleTextModel; TextFontStyle : IfcTextFontSelect; ModelOrDraughting : OPTIONAL BOOLEAN; 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 : ('IFC4.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 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 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('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) )) = 0; WR22 : EXISTS(SELF\IfcRepresentation.RepresentationType); WR23 : IfcTopologyRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); 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 ('IFC4.IFCTRANFORMERTYPE' 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 (IfcElement); 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 ('IFC4.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcTransportElementType SUBTYPE OF (IfcElementType); PredefinedType : IfcTransportElementTypeEnum; WHERE CorrectPredefinedType : (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; ENTITY IfcTrapeziumProfileDef SUBTYPE OF (IfcParameterizedProfileDef); BottomXDim : IfcPositiveLengthMeasure; TopXDim : IfcPositiveLengthMeasure; YDim : IfcPositiveLengthMeasure; TopXOffset : IfcLengthMeasure; END_ENTITY; ENTITY IfcTriangulatedFaceSet SUBTYPE OF (IfcTessellatedFaceSet); CoordIndex : LIST [1:?] OF LIST [3:3] OF INTEGER; NormalIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF INTEGER; DERIVE NumberOfTriangles : INTEGER := SIZEOF(CoordIndex); END_ENTITY; ENTITY IfcTrimmedCurve SUBTYPE OF (IfcBoundedCurve); BasisCurve : IfcCurve; Trim1 : SET [1:2] OF IfcTrimmingSelect; Trim2 : SET [1:2] OF IfcTrimmingSelect; SenseAgreement : BOOLEAN; MasterRepresentation : IfcTrimmingPreference; WHERE Trim1ValuesConsistent : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2])); Trim2ValuesConsistent : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2])); NoTrimOfBoundedCurves : NOT('IFC4.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve)); 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 ('IFC4.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 WR1 : EXISTS(SELF\IfcRoot.Name); 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 (IfcDoorStyle ,IfcElementType ,IfcSpatialElementType ,IfcWindowStyle)) 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('IFC4.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 ('IFC4.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 ('IFC4.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 ('IFC4.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 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 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 ('IFC4.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); 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 HasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\IfcObject.ObjectType); END_ENTITY; ENTITY IfcWall SUPERTYPE OF (ONEOF (IfcWallElementedCase ,IfcWallStandardCase)) SUBTYPE OF (IfcBuildingElement); 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 ('IFC4.IFCWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcWallElementedCase SUBTYPE OF (IfcWall); WHERE HasDecomposition : HIINDEX(SELF\IfcObjectDefinition.IsDecomposedBy) > 0; END_ENTITY; ENTITY IfcWallStandardCase SUBTYPE OF (IfcWall); WHERE HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; ENTITY IfcWallType SUBTYPE OF (IfcBuildingElementType); 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 ('IFC4.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 SUPERTYPE OF (ONEOF (IfcWindowStandardCase)) SUBTYPE OF (IfcBuildingElement); OverallHeight : OPTIONAL IfcPositiveLengthMeasure; OverallWidth : OPTIONAL IfcPositiveLengthMeasure; PredefinedType : OPTIONAL IfcWindowTypeEnum; PartitioningType : OPTIONAL IfcWindowTypePartitioningEnum; UserDefinedPartitioningType : OPTIONAL IfcLabel; WHERE CorrectStyleAssigned : (SIZEOF(IsTypedBy) = 0) OR ('IFC4.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 ( ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR ('IFC4.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 ( ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR ('IFC4.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) ); END_ENTITY; ENTITY IfcWindowStandardCase SUBTYPE OF (IfcWindow); END_ENTITY; ENTITY IfcWindowStyle SUBTYPE OF (IfcTypeProduct); ConstructionType : IfcWindowStyleConstructionEnum; OperationType : IfcWindowStyleOperationEnum; ParameterTakesPrecedence : BOOLEAN; Sizeable : BOOLEAN; END_ENTITY; ENTITY IfcWindowType SUBTYPE OF (IfcBuildingElementType); PredefinedType : IfcWindowTypeEnum; PartitioningType : IfcWindowTypePartitioningEnum; ParameterTakesPrecedence : OPTIONAL BOOLEAN; 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; Start : OPTIONAL IfcDate; Finish : 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(('IFC4.IFCZONE' IN TYPEOF(temp)) OR ('IFC4.IFCSPACE' IN TYPEOF(temp)) OR ('IFC4.IFCSPATIALZONE' IN TYPEOF(temp)) ))) = 0); END_ENTITY; 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 IfcConstraintsParamBSpline ( Degree, UpKnots, UpCp : INTEGER; KnotMult : LIST OF INTEGER; Knots : LIST OF IfcParameterValue ) : BOOLEAN; LOCAL Result : BOOLEAN := TRUE; K, Sum : INTEGER; END_LOCAL; Sum := KnotMult[1]; REPEAT i := 2 TO UpKnots; Sum := Sum + KnotMult[i]; END_REPEAT; 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 | 'IFC4.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN TYPEOF(Style))); Hatching := SIZEOF(QUERY(Style <* Styles | 'IFC4.IFCFILLAREASTYLEHATCHING' IN TYPEOF(Style))); Tiles := SIZEOF(QUERY(Style <* Styles | 'IFC4.IFCFILLAREASTYLETILES' IN TYPEOF(Style))); Colour := SIZEOF(QUERY(Style <* Styles | 'IFC4.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 ('IFC4.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN RETURN(?); END_IF; IF ('IFC4.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN IF ('IFC4.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN RETURN(TRUE); END_IF; IF ('IFC4.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('IFC4.IFCPRODUCT' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.PROCESS : BEGIN Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPROCESS' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.CONTROL : BEGIN Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCCONTROL' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.RESOURCE : BEGIN Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCRESOURCE' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.ACTOR : BEGIN Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCACTOR' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.GROUP : BEGIN Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCGROUP' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.PROJECT : BEGIN Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.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 | ('IFC4.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED))); DerivedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC4.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED))); MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units | 'IFC4.IFCMONETARYUNIT' IN TYPEOF(temp))); REPEAT i := 1 TO SIZEOF(Units); IF (('IFC4.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN NamedUnitNames := NamedUnitNames + Units[i]\IfcNamedUnit.UnitType; END_IF; IF (('IFC4.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 ('IFC4.IFCLINE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcLine.Pnt.Dim); END_IF; IF ('IFC4.IFCCONIC' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcConic.Position.Dim); END_IF; IF ('IFC4.IFCPOLYLINE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcPolyline.Points[1].Dim); END_IF; IF ('IFC4.IFCTRIMMEDCURVE' IN TYPEOF(Curve)) THEN RETURN(IfcCurveDim(Curve\IfcTrimmedCurve.BasisCurve)); END_IF; IF ('IFC4.IFCCOMPOSITECURVE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcCompositeCurve.Segments[1].Dim); END_IF; IF ('IFC4.IFCBSPLINECURVE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcBSplineCurve.ControlPointsList[1].Dim); END_IF; IF ('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(Curve)) THEN RETURN(2); END_IF; IF ('IFC4.IFCOFFSETCURVE3D' IN TYPEOF(Curve)) THEN RETURN(3); END_IF; IF ('IFC4.IFCPCURVE' IN TYPEOF(Curve)) THEN RETURN(3); 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 'IFC4.IFCPCURVE' IN TYPEOF (C) THEN Surfs := [C\IfcPCurve.BasisSurface]; ELSE IF 'IFC4.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN 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; END_IF; RETURN(Surfs); 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; IF (U1-Low1+1) <> SIZEOF(Lis) THEN RETURN (?); END_IF; IF (U2 - Low2 + 1 ) <> SIZEOF(Lis[1]) THEN RETURN (?) ; END_IF; 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 'IFC4.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 'IFC4.IFCVECTOR' IN TYPEOF(arg) THEN Vec.Orientation := V; Result := Vec; ELSE Result := V; END_IF; ELSE RETURN(?); END_IF; END_IF; RETURN (Result); END_FUNCTION; FUNCTION IfcOrthogonalComplement (Vec : IfcDirection) : IfcDirection; LOCAL Result : IfcDirection ; END_LOCAL; IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN RETURN(?); ELSE Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]); RETURN(Result); END_IF; END_FUNCTION; FUNCTION IfcPathHeadToTail (APath : IfcPath) : LOGICAL; LOCAL N : INTEGER := 0; P : LOGICAL := UNKNOWN; END_LOCAL; N := SIZEOF (APath.EdgeList); REPEAT i := 2 TO N; P := P AND (APath.EdgeList[i-1].EdgeEnd :=: APath.EdgeList[i].EdgeStart); END_REPEAT; RETURN (P); END_FUNCTION; FUNCTION IfcSameAxis2Placement (ap1, ap2 : IfcAxis2Placement; Epsilon : REAL) : LOGICAL; RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon)); END_FUNCTION; FUNCTION IfcSameCartesianPoint (cp1, cp2 : IfcCartesianPoint; Epsilon : REAL) : LOGICAL; LOCAL cp1x : REAL := cp1.Coordinates[1]; cp1y : REAL := cp1.Coordinates[2]; cp1z : REAL := 0; cp2x : REAL := cp2.Coordinates[1]; cp2y : REAL := cp2.Coordinates[2]; cp2z : REAL := 0; END_LOCAL; IF (SIZEOF(cp1.Coordinates) > 2) THEN cp1z := cp1.Coordinates[3]; END_IF; IF (SIZEOF(cp2.Coordinates) > 2) THEN cp2z := cp2.Coordinates[3]; END_IF; RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND IfcSameValue(cp1y,cp2y,Epsilon) AND IfcSameValue(cp1z,cp2z,Epsilon)); END_FUNCTION; FUNCTION IfcSameDirection (dir1, dir2 : IfcDirection; Epsilon : REAL) : LOGICAL; LOCAL dir1x : REAL := dir1.DirectionRatios[1]; dir1y : REAL := dir1.DirectionRatios[2]; dir1z : REAL := 0; dir2x : REAL := dir2.DirectionRatios[1]; dir2y : REAL := dir2.DirectionRatios[2]; dir2z : REAL := 0; END_LOCAL; IF (SIZEOF(dir1.DirectionRatios) > 2) THEN dir1z := dir1.DirectionRatios[3]; END_IF; IF (SIZEOF(dir2.DirectionRatios) > 2) THEN dir2z := dir2.DirectionRatios[3]; END_IF; RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND IfcSameValue(dir1y,dir2y,Epsilon) AND IfcSameValue(dir1z,dir2z,Epsilon)); END_FUNCTION; FUNCTION IfcSameValidPrecision (Epsilon1, Epsilon2 : REAL) : LOGICAL; LOCAL ValidEps1, ValidEps2 : REAL; DefaultEps : REAL := 0.000001; DerivationOfEps : REAL := 1.001; UpperEps : REAL := 1.0; END_LOCAL; ValidEps1 := NVL(Epsilon1, DefaultEps); ValidEps2 := NVL(Epsilon2, DefaultEps); RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps)); END_FUNCTION; FUNCTION IfcSameValue (Value1, Value2 : REAL; Epsilon : REAL) : LOGICAL; LOCAL ValidEps : REAL; DefaultEps : REAL := 0.000001; END_LOCAL; ValidEps := NVL(Epsilon, DefaultEps); RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps)); END_FUNCTION; FUNCTION IfcScalarTimesVector (Scalar : REAL; Vec : IfcVectorOrDirection) : IfcVector; LOCAL V : IfcDirection; Mag : REAL; Result : IfcVector; END_LOCAL; IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN RETURN (?) ; ELSE IF 'IFC4.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 | ('IFC4.IFCPOINT' IN TYPEOF(temp)))); END; 'PointCloud' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp)))); END; 'Curve' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp)))); END; 'Curve2D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp)) AND (temp\IfcCurve.Dim = 2))); END; 'Curve3D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp)) AND (temp\IfcCurve.Dim = 3))); END; 'Surface' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp)))); END; 'Surface2D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp)) AND (temp\IfcSurface.Dim = 2))); END; 'Surface3D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp)) AND (temp\IfcSurface.Dim = 3))); END; 'FillArea' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCANNOTATIONFILLAREA' IN TYPEOF(temp)))); END; 'Text' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCTEXTLITERAL' IN TYPEOF(temp)))); END; 'AdvancedSurface' : BEGIN Count := SIZEOF(QUERY(temp <* Items | 'IFC4.IFCBSPLINESURFACE' IN TYPEOF(temp))); END; 'Annotation2D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ( SIZEOF(TYPEOF(temp) * [ 'IFC4.IFCPOINT', 'IFC4.IFCCURVE', 'IFC4.IFCGEOMETRICCURVESET', 'IFC4.IFCANNOTATIONFILLAREA', 'IFC4.IFCTEXTLITERAL']) = 1) )); END; 'GeometricSet' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCGEOMETRICSET' IN TYPEOF(temp)) OR ('IFC4.IFCPOINT' IN TYPEOF(temp)) OR ('IFC4.IFCCURVE' IN TYPEOF(temp)) OR ('IFC4.IFCSURFACE' IN TYPEOF(temp)))); END; 'GeometricCurveSet' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCGEOMETRICCURVESET' IN TYPEOF(temp)) OR ('IFC4.IFCGEOMETRICSET' IN TYPEOF(temp)) OR ('IFC4.IFCPOINT' IN TYPEOF(temp)) OR ('IFC4.IFCCURVE' IN TYPEOF(temp)))); REPEAT i:=1 TO HIINDEX(Items); IF ('IFC4.IFCGEOMETRICSET' IN TYPEOF(Items[i])) THEN IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC4.IFCSURFACE' IN TYPEOF(temp))) > 0) THEN Count := Count - 1; END_IF; END_IF; END_REPEAT; END; 'Tessellation' : BEGIN Count := SIZEOF(QUERY(temp <* Items | 'IFC4.IFCTESSELLATEDITEM' IN TYPEOF(temp))); END; 'SurfaceOrSolidModel' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4.IFCTESSELATEDITEM', 'IFC4.IFCSHELLBASEDSURFACEMODEL', 'IFC4.IFCFACEBASEDSURFACEMODEL', 'IFC4.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1 )); END; 'SurfaceModel' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4.IFCTESSELLATEDITEM', 'IFC4.IFCSHELLBASEDSURFACEMODEL', 'IFC4.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1 )); END; 'SolidModel' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSOLIDMODEL' IN TYPEOF(temp)))); END; 'SweptSolid' : BEGIN Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([ 'IFC4.IFCEXTRUDEDAREASOLID', 'IFC4.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1 ) AND (SIZEOF([ 'IFC4.IFCEXTRUDEDAREASOLIDTAPERED', 'IFC4.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0 ) )); END; 'AdvancedSweptSolid' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4.IFCSWEPTAREASOLID', 'IFC4.IFCSWEPTDISKSOLID'] * TYPEOF(temp)) >= 1 )); END; 'CSG' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4.IFCBOOLEANRESULT', 'IFC4.IFCCSGPRIMITIVE3D', 'IFC4.IFCCSGSOLID'] * TYPEOF(temp)) >= 1 )); END; 'Clipping' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp)))); END; 'Brep' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCFACETEDBREP' IN TYPEOF(temp)))); END; 'AdvancedBrep' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp)))); END; 'BoundingBox' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCBOUNDINGBOX' IN TYPEOF(temp)))); IF (SIZEOF(Items) > 1) THEN Count := 0; END_IF; END; 'SectionedSpine' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSECTIONEDSPINE' IN TYPEOF(temp)))); END; 'LightSource' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCLIGHTSOURCE' IN TYPEOF(temp)))); END; 'MappedRepresentation' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCMAPPEDITEM' IN TYPEOF(temp)))); END; OTHERWISE : RETURN(?); END_CASE; RETURN (Count = SIZEOF(Items)); END_FUNCTION; FUNCTION IfcSurfaceWeightsPositive ( B: IfcRationalBSplineSurfaceWithKnots) : BOOLEAN; LOCAL Result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO B\IfcBSplineSurface.UUpper; REPEAT j := 0 TO B\IfcBSplineSurface.VUpper; IF (B.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 ('IFC4.IFCPARAMETERIZEDPROFILEDEF' IN TYPEOF(StartArea)) THEN IF ('IFC4.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN Result := (StartArea :=: EndArea\IfcDerivedProfileDef.ParentProfile); ELSE Result := (TYPEOF(StartArea) = TYPEOF(EndArea)); END_IF; ELSE IF ('IFC4.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 | ('IFC4.IFCVERTEX' IN TYPEOF(temp)))); END; 'Edge' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCEDGE' IN TYPEOF(temp)))); END; 'Path' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCPATH' IN TYPEOF(temp)))); END; 'Face' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCFACE' IN TYPEOF(temp)))); END; 'Shell' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCOPENSHELL' IN TYPEOF(temp)) OR ('IFC4.IFCCLOSEDSHELL' IN TYPEOF(temp)))); END; 'Undefined': RETURN(TRUE); OTHERWISE : RETURN(?); END_CASE; RETURN (Count = SIZEOF(Items)); END_FUNCTION; FUNCTION IfcUniquePropertyName (Properties : SET [1:?] OF IfcProperty) : LOGICAL; LOCAL Names : SET OF IfcIdentifier := []; END_LOCAL; REPEAT i:=1 TO HIINDEX(Properties); Names := Names + Properties[i].Name; END_REPEAT; RETURN (SIZEOF(Names) = SIZEOF(Properties)); END_FUNCTION; FUNCTION IfcUniquePropertyTemplateNames (Properties : SET [1:?] OF IfcPropertyTemplate) : 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 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 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN Mag1 := Arg1\IfcVector.Magnitude; Vec1 := Arg1\IfcVector.Orientation; ELSE Mag1 := 1.0; Vec1 := Arg1; END_IF; IF 'IFC4.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 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN Mag1 := Arg1\IfcVector.Magnitude; Vec1 := Arg1\IfcVector.Orientation; ELSE Mag1 := 1.0; Vec1 := Arg1; END_IF; IF 'IFC4.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;