From a996de8716538936785334f4260d8d88a2eabaee Mon Sep 17 00:00:00 2001 From: buildingsmart Date: Wed, 20 Mar 2013 17:49:17 -0400 Subject: [PATCH] replace IFC2x4_RC3 draft with IFC4 final --- data/{ifc2x4/IFC2X4_RC3.exp => ifc4/IFC4.exp} | 1806 +++++++++-------- 1 file changed, 905 insertions(+), 901 deletions(-) rename data/{ifc2x4/IFC2X4_RC3.exp => ifc4/IFC4.exp} (86%) diff --git a/data/ifc2x4/IFC2X4_RC3.exp b/data/ifc4/IFC4.exp similarity index 86% rename from data/ifc2x4/IFC2X4_RC3.exp rename to data/ifc4/IFC4.exp index 92f81213..8b6cadc1 100644 --- a/data/ifc2x4/IFC2X4_RC3.exp +++ b/data/ifc4/IFC4.exp @@ -1,4 +1,36 @@ -SCHEMA IFC2X4_RC3; +(* +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; @@ -12,6 +44,9 @@ END_TYPE; TYPE IfcAngularVelocityMeasure = REAL; END_TYPE; +TYPE IfcAreaDensityMeasure = REAL; +END_TYPE; + TYPE IfcAreaMeasure = REAL; END_TYPE; @@ -291,6 +326,9 @@ END_TYPE; TYPE IfcPressureMeasure = REAL; END_TYPE; +TYPE IfcPropertySetDefinitionSet = SET [1:?] OF IfcPropertySetDefinition; +END_TYPE; + TYPE IfcRadioActivityMeasure = REAL; END_TYPE; @@ -321,9 +359,15 @@ 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; @@ -645,6 +689,9 @@ END_TYPE; TYPE IfcBuildingSystemTypeEnum = ENUMERATION OF (FENESTRATION + ,FOUNDATION + ,LOADBEARING + ,OUTERSHELL ,SHADING ,TRANSPORT ,USERDEFINED @@ -728,6 +775,7 @@ END_TYPE; TYPE IfcColumnTypeEnum = ENUMERATION OF (COLUMN + ,PILASTER ,USERDEFINED ,NOTDEFINED); END_TYPE; @@ -937,6 +985,7 @@ END_TYPE; TYPE IfcDerivedUnitEnum = ENUMERATION OF (ANGULARVELOCITYUNIT + ,AREADENSITYUNIT ,COMPOUNDPLANEANGLEUNIT ,DYNAMICVISCOSITYUNIT ,HEATFLUXDENSITYUNIT @@ -978,10 +1027,12 @@ TYPE IfcDerivedUnitEnum = ENUMERATION OF ,ROTATIONALMASSUNIT ,SECTIONAREAINTEGRALUNIT ,SECTIONMODULUSUNIT + ,SOUNDPOWERLEVELUNIT ,SOUNDPOWERUNIT + ,SOUNDPRESSURELEVELUNIT ,SOUNDPRESSUREUNIT ,TEMPERATUREGRADIENTUNIT - ,TEMPERATURERATEOFCHANGE + ,TEMPERATURERATEOFCHANGEUNIT ,THERMALEXPANSIONCOEFFICIENTUNIT ,WARPINGCONSTANTUNIT ,WARPINGMOMENTUNIT @@ -1014,15 +1065,27 @@ TYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF ,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 @@ -1031,6 +1094,7 @@ TYPE IfcDistributionSystemEnum = ENUMERATION OF ,ELECTROACOUSTIC ,EXHAUST ,FIREPROTECTION + ,FUEL ,GAS ,HAZARDOUS ,HEATING @@ -1038,6 +1102,7 @@ TYPE IfcDistributionSystemEnum = ENUMERATION OF ,LIGHTNINGPROTECTION ,MUNICIPALSOLIDWASTE ,OIL + ,OPERATIONAL ,POWERGENERATION ,RAINWATER ,REFRIGERATION @@ -1051,6 +1116,7 @@ TYPE IfcDistributionSystemEnum = ENUMERATION OF ,VENT ,VENTILATION ,WASTEWATER + ,WATERSUPPLY ,USERDEFINED ,NOTDEFINED); END_TYPE; @@ -1419,7 +1485,8 @@ TYPE IfcFurnitureTypeEnum = ENUMERATION OF END_TYPE; TYPE IfcGeographicElementTypeEnum = ENUMERATION OF - (USERDEFINED + (TERRAIN + ,USERDEFINED ,NOTDEFINED); END_TYPE; @@ -1672,7 +1739,11 @@ TYPE IfcObjectiveEnum = ENUMERATION OF (CODECOMPLIANCE ,CODEWAIVER ,DESIGNINTENT + ,EXTERNAL ,HEALTHANDSAFETY + ,MERGECONFLICT + ,MODELVIEW + ,PARAMETER ,REQUIREMENT ,SPECIFICATION ,TRIGGERCONDITION @@ -1952,17 +2023,6 @@ TYPE IfcReinforcingMeshTypeEnum = ENUMERATION OF ,NOTDEFINED); END_TYPE; -TYPE IfcResourceConsumptionEnum = ENUMERATION OF - (CONSUMED - ,PARTIALLYCONSUMED - ,NOTCONSUMED - ,OCCUPIED - ,PARTIALLYOCCUPIED - ,NOTOCCUPIED - ,USERDEFINED - ,NOTDEFINED); -END_TYPE; - TYPE IfcRoleEnum = ENUMERATION OF (SUPPLIER ,MANUFACTURER @@ -2176,6 +2236,7 @@ TYPE IfcSpatialZoneTypeEnum = ENUMERATION OF ,OCCUPANCY ,SECURITY ,THERMAL + ,TRANSPORT ,VENTILATION ,USERDEFINED ,NOTDEFINED); @@ -2516,12 +2577,15 @@ TYPE IfcVoidingFeatureTypeEnum = ENUMERATION OF END_TYPE; TYPE IfcWallTypeEnum = ENUMERATION OF - (STANDARD - ,POLYGONAL - ,SHEAR - ,ELEMENTEDWALL + (MOVABLE + ,PARAPET + ,PARTITIONING ,PLUMBINGWALL - ,MOVABLE + ,SHEAR + ,SOLIDWALL + ,STANDARD + ,POLYGONAL + ,ELEMENTEDWALL ,USERDEFINED ,NOTDEFINED); END_TYPE; @@ -2643,8 +2707,8 @@ END_TYPE; TYPE IfcAppliedValueSelect = SELECT (IfcMeasureWithUnit - ,IfcMonetaryMeasure - ,IfcRatioMeasure); + ,IfcReference + ,IfcValue); END_TYPE; TYPE IfcAxis2Placement = SELECT @@ -2664,10 +2728,6 @@ TYPE IfcBooleanOperand = SELECT ,IfcSolidModel); END_TYPE; -TYPE IfcCharacterStyleSelect = SELECT - (IfcTextStyleForDefinedFont); -END_TYPE; - TYPE IfcClassificationReferenceSelect = SELECT (IfcClassification ,IfcClassificationReference); @@ -2718,11 +2778,6 @@ TYPE IfcCurveStyleFontSelect = SELECT ,IfcPreDefinedCurveFont); END_TYPE; -TYPE IfcDefinedSymbolSelect = SELECT - (IfcExternallyDefinedSymbol - ,IfcPreDefinedSymbol); -END_TYPE; - TYPE IfcDefinitionSelect = SELECT (IfcObjectDefinition ,IfcPropertyDefinition); @@ -2732,6 +2787,7 @@ TYPE IfcDerivedMeasureValue = SELECT (IfcAbsorbedDoseMeasure ,IfcAccelerationMeasure ,IfcAngularVelocityMeasure + ,IfcAreaDensityMeasure ,IfcCompoundPlaneAngleMeasure ,IfcCurvatureMeasure ,IfcDoseEquivalentMeasure @@ -2782,7 +2838,9 @@ TYPE IfcDerivedMeasureValue = SELECT ,IfcSectionModulusMeasure ,IfcSectionalAreaIntegralMeasure ,IfcShearModulusMeasure + ,IfcSoundPowerLevelMeasure ,IfcSoundPowerMeasure + ,IfcSoundPressureLevelMeasure ,IfcSoundPressureMeasure ,IfcSpecificHeatCapacityMeasure ,IfcTemperatureGradientMeasure @@ -2804,10 +2862,6 @@ TYPE IfcDocumentSelect = SELECT ,IfcDocumentReference); END_TYPE; -TYPE IfcFillAreaStyleTileShapeSelect = SELECT - (IfcFillAreaStyleTileSymbolWithStyle); -END_TYPE; - TYPE IfcFillStyleSelect = SELECT (IfcColour ,IfcExternallyDefinedHatchStyle @@ -2827,8 +2881,8 @@ TYPE IfcGridPlacementDirectionSelect = SELECT END_TYPE; TYPE IfcHatchLineDistanceSelect = SELECT - (IfcOneDirectionRepeatFactor - ,IfcPositiveLengthMeasure); + (IfcPositiveLengthMeasure + ,IfcVector); END_TYPE; TYPE IfcLayeredItem = SELECT @@ -2879,8 +2933,9 @@ TYPE IfcMeasureValue = SELECT END_TYPE; TYPE IfcMetricValueSelect = SELECT - (IfcCostValue + (IfcAppliedValue ,IfcMeasureWithUnit + ,IfcReference ,IfcTable ,IfcTimeSeries ,IfcValue); @@ -2923,7 +2978,6 @@ TYPE IfcPresentationStyleSelect = SELECT ,IfcFillAreaStyle ,IfcNullStyle ,IfcSurfaceStyle - ,IfcSymbolStyle ,IfcTextStyle); END_TYPE; @@ -2932,11 +2986,21 @@ TYPE IfcProcessSelect = SELECT ,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 @@ -3034,20 +3098,11 @@ TYPE IfcSurfaceStyleElementSelect = SELECT ,IfcSurfaceStyleWithTextures); END_TYPE; -TYPE IfcSymbolStyleSelect = SELECT - (IfcColour); -END_TYPE; - TYPE IfcTextFontSelect = SELECT (IfcExternallyDefinedTextFont ,IfcPreDefinedTextFont); END_TYPE; -TYPE IfcTextStyleSelect = SELECT - (IfcTextStyleTextModel - ,IfcTextStyleWithBoxCharacteristics); -END_TYPE; - TYPE IfcTimeOrRatioSelect = SELECT (IfcDuration ,IfcRatioMeasure); @@ -3120,8 +3175,8 @@ ENTITY IfcActuator CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCACTUATORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCACTUATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcActuatorType @@ -3155,7 +3210,7 @@ ENTITY IfcAdvancedBrep SUBTYPE OF (IfcManifoldSolidBrep); WHERE HasAdvancedFaces : SIZEOF(QUERY(Afs <* SELF\IfcManifoldSolidBrep.Outer.CfsFaces | - (NOT ('IFC2X4_RC3.IFCADVANCEDFACE' IN TYPEOF(Afs))) + (NOT ('IFC4.IFCADVANCEDFACE' IN TYPEOF(Afs))) )) = 0; END_ENTITY; @@ -3163,37 +3218,37 @@ ENTITY IfcAdvancedBrepWithVoids SUBTYPE OF (IfcAdvancedBrep); Voids : SET [1:?] OF IfcClosedShell; WHERE - WR1 : SIZEOF (QUERY (Vsh <* Voids | - SIZEOF (QUERY (Afs <* Vsh.CfsFaces | - (NOT ('IFC2X4_RC3.IFCADVANCEDFACE' IN TYPEOF(Afs))) - )) = 0 - )) = 0; + 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 ( - ['IFC2X4_RC3.IFCELEMENTARYSURFACE', - 'IFC2X4_RC3.IFCSWEPTSURFACE', - 'IFC2X4_RC3.IFCBSPLINESURFACE'] * + ['IFC4.IFCELEMENTARYSURFACE', + 'IFC4.IFCSWEPTSURFACE', + 'IFC4.IFCBSPLINESURFACE'] * TYPEOF(SELF\IfcFaceSurface.FaceSurface)) = 1; RequiresEdgeCurve : SIZEOF(QUERY (ElpFbnds <* QUERY (Bnds <* SELF\IfcFace.Bounds | - 'IFC2X4_RC3.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | + 'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | - NOT('IFC2X4_RC3.IFCEDGECURVE' IN + NOT('IFC4.IFCEDGECURVE' IN TYPEOF(Oe\IfcOrientedEdge.EdgeElement) ))) = 0 ))) = 0; ApplicableEdgeCurves : SIZEOF(QUERY (ElpFbnds <* QUERY (Bnds <* SELF\IfcFace.Bounds | - 'IFC2X4_RC3.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | + 'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) | NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\IfcEdgeLoop.EdgeList | - NOT (SIZEOF (['IFC2X4_RC3.IFCLINE', - 'IFC2X4_RC3.IFCCONIC', - 'IFC2X4_RC3.IFCPOLYLINE', - 'IFC2X4_RC3.IFCBSPLINECURVE'] * + NOT (SIZEOF (['IFC4.IFCLINE', + 'IFC4.IFCCONIC', + 'IFC4.IFCPOLYLINE', + 'IFC4.IFCBSPLINECURVE'] * TYPEOF(Oe\IfcOrientedEdge.EdgeElement\IfcEdgeCurve.EdgeGeometry)) = 1 ) )) = 0 ))) = 0; @@ -3206,8 +3261,8 @@ ENTITY IfcAirTerminal CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCAIRTERMINALTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCAIRTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcAirTerminalBox @@ -3217,8 +3272,8 @@ ENTITY IfcAirTerminalBox CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCAIRTERMINALBOXTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCAIRTERMINALBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcAirTerminalBoxType @@ -3244,8 +3299,8 @@ ENTITY IfcAirToAirHeatRecovery CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcAirToAirHeatRecoveryType @@ -3263,8 +3318,8 @@ ENTITY IfcAlarm CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCALARMTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCALARMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcAlarmType @@ -3298,7 +3353,7 @@ ENTITY IfcApplication; END_ENTITY; ENTITY IfcAppliedValue - ABSTRACT SUPERTYPE OF (ONEOF + SUPERTYPE OF (ONEOF (IfcCostValue)); Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; @@ -3306,24 +3361,12 @@ ENTITY IfcAppliedValue 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; - ValueOfComponents : SET [0:?] OF IfcAppliedValueRelationship FOR ComponentOfTotal; - IsComponentIn : SET [0:?] OF IfcAppliedValueRelationship FOR Components; - WHERE - WR1 : EXISTS (AppliedValue) OR - EXISTS (ValueOfComponents); -END_ENTITY; - -ENTITY IfcAppliedValueRelationship - SUBTYPE OF (IfcResourceLevelRelationship); - ComponentOfTotal : IfcAppliedValue; - Components : LIST [1:?] OF IfcAppliedValue; - ArithmeticOperator : IfcArithmeticOperatorEnum; - WHERE - ValidBinaryOperator : (SIZEOF(Components) = 2) OR - ((ArithmeticOperator <> IfcArithmeticOperatorEnum.SUBTRACT) AND - (ArithmeticOperator <> IfcArithmeticOperatorEnum.DIVIDE)); END_ENTITY; ENTITY IfcApproval; @@ -3359,8 +3402,8 @@ ENTITY IfcArbitraryClosedProfileDef OuterCurve : IfcCurve; WHERE WR1 : OuterCurve.Dim = 2; - WR2 : NOT('IFC2X4_RC3.IFCLINE' IN TYPEOF(OuterCurve)); - WR3 : NOT('IFC2X4_RC3.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve)); + WR2 : NOT('IFC4.IFCLINE' IN TYPEOF(OuterCurve)); + WR3 : NOT('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve)); END_ENTITY; ENTITY IfcArbitraryOpenProfileDef @@ -3369,7 +3412,7 @@ ENTITY IfcArbitraryOpenProfileDef SUBTYPE OF (IfcProfileDef); Curve : IfcBoundedCurve; WHERE - WR11 : ('IFC2X4_RC3.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR + WR11 : ('IFC4.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR (SELF\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE); WR12 : Curve.Dim = 2; END_ENTITY; @@ -3380,7 +3423,7 @@ ENTITY IfcArbitraryProfileDefWithVoids WHERE WR1 : SELF\IfcProfileDef.ProfileType = AREA; WR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0; - WR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC2X4_RC3.IFCLINE' IN TYPEOF(temp))) = 0; + WR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC4.IFCLINE' IN TYPEOF(temp))) = 0; END_ENTITY; ENTITY IfcAsset @@ -3426,8 +3469,8 @@ ENTITY IfcAudioVisualAppliance CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcAudioVisualApplianceType @@ -3444,8 +3487,8 @@ ENTITY IfcAxis1Placement DERIVE Z : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0])); WHERE - WR1 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); - WR2 : SELF\IfcPlacement.Location.Dim = 3; + AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); + LocationIs3D : SELF\IfcPlacement.Location.Dim = 3; END_ENTITY; ENTITY IfcAxis2Placement2D @@ -3454,8 +3497,8 @@ ENTITY IfcAxis2Placement2D DERIVE P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection); WHERE - WR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2); - WR2 : SELF\IfcPlacement.Location.Dim = 2; + RefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2); + LocationIs2D : SELF\IfcPlacement.Location.Dim = 2; END_ENTITY; ENTITY IfcAxis2Placement3D @@ -3465,11 +3508,11 @@ ENTITY IfcAxis2Placement3D DERIVE P : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection); WHERE - WR1 : SELF\IfcPlacement.Location.Dim = 3; - WR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3); - WR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3); - WR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0); - WR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection))); + 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 @@ -3485,9 +3528,9 @@ ENTITY IfcBSplineCurve UpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1); ControlPoints : ARRAY [0:UpperIndexOnControlPoints] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints); WHERE - WR41 : SIZEOF(QUERY(Temp <* ControlPointsList | - Temp.Dim <> ControlPointsList[1].Dim)) - = 0; + SameDim : SIZEOF(QUERY(Temp <* ControlPointsList | + Temp.Dim <> ControlPointsList[1].Dim)) + = 0; END_ENTITY; ENTITY IfcBSplineCurveWithKnots @@ -3555,16 +3598,16 @@ ENTITY IfcBeam CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCBEAMTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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, 'IFC2X4_RC3.IFCRELASSOCIATES.RELATEDOBJECTS') | - ('IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND - ('IFC2X4_RC3.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; @@ -3599,8 +3642,8 @@ ENTITY IfcBoiler CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCBOILERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCBOILERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcBoilerType @@ -3614,9 +3657,11 @@ END_ENTITY; ENTITY IfcBooleanClippingResult SUBTYPE OF (IfcBooleanResult); WHERE - WR1 : ('IFC2X4_RC3.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC2X4_RC3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand)); - WR2 : ('IFC2X4_RC3.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand)); - WR3 : Operator = DIFFERENCE; + 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 @@ -3629,7 +3674,7 @@ ENTITY IfcBooleanResult DERIVE Dim : IfcDimensionCount := FirstOperand.Dim; WHERE - WR1 : FirstOperand.Dim = SecondOperand.Dim; + SameDim : FirstOperand.Dim = SecondOperand.Dim; END_ENTITY; ENTITY IfcBoundaryCondition @@ -3713,8 +3758,6 @@ END_ENTITY; ENTITY IfcBoxedHalfSpace SUBTYPE OF (IfcHalfSpaceSolid); Enclosure : IfcBoundingBox; - WHERE - WR1 : NOT ('IFC2X4_RC3.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface)); END_ENTITY; ENTITY IfcBuilding @@ -3752,7 +3795,7 @@ ENTITY IfcBuildingElement HasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement; WHERE MaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\IfcObjectDefinition.HasAssociations | - 'IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) + 'IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) <= 1; END_ENTITY; @@ -3763,8 +3806,8 @@ ENTITY IfcBuildingElementPart CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcBuildingElementPartType @@ -3783,13 +3826,16 @@ ENTITY IfcBuildingElementProxy CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCBUILDINGELEMENTPROXYTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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 @@ -3835,8 +3881,8 @@ ENTITY IfcBurner CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCBURNERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCBURNERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcBurnerType @@ -3868,8 +3914,8 @@ ENTITY IfcCableCarrierFitting CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCABLECARRIERFITTINGTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCABLECARRIERFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCableCarrierFittingType @@ -3887,8 +3933,8 @@ ENTITY IfcCableCarrierSegment CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCABLECARRIERSEGMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCABLECARRIERSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCableCarrierSegmentType @@ -3906,8 +3952,8 @@ ENTITY IfcCableFitting CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCABLEFITTINGTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCABLEFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCableFittingType @@ -3925,8 +3971,8 @@ ENTITY IfcCableSegment CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCABLESEGMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCABLESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCableSegmentType @@ -3943,11 +3989,17 @@ ENTITY IfcCartesianPoint DERIVE Dim : IfcDimensionCount := HIINDEX(Coordinates); WHERE - WR1 : HIINDEX(Coordinates) >= 2; + 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; @@ -3964,7 +4016,7 @@ ENTITY IfcCartesianTransformationOperator Scl : REAL := NVL(Scale, 1.0); Dim : IfcDimensionCount := LocalOrigin.Dim; WHERE - WR1 : Scl > 0.0; + ScaleGreaterZero : Scl > 0.0; END_ENTITY; ENTITY IfcCartesianTransformationOperator2D @@ -3975,11 +4027,11 @@ ENTITY IfcCartesianTransformationOperator2D U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\IfcCartesianTransformationOperator.Axis1, SELF\IfcCartesianTransformationOperator.Axis2,?); WHERE - WR1 : SELF\IfcCartesianTransformationOperator.Dim = 2; - WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR - (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2); - WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR - (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 2); + 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 @@ -3988,7 +4040,7 @@ ENTITY IfcCartesianTransformationOperator2DnonUniform DERIVE Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); WHERE - WR1 : Scl2 > 0.0; + Scale2GreaterZero : Scl2 > 0.0; END_ENTITY; ENTITY IfcCartesianTransformationOperator3D @@ -4000,12 +4052,12 @@ ENTITY IfcCartesianTransformationOperator3D U : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\IfcCartesianTransformationOperator.Axis1, SELF\IfcCartesianTransformationOperator.Axis2,Axis3); WHERE - WR1 : SELF\IfcCartesianTransformationOperator.Dim = 3; - WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR - (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3); - WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR - (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3); - WR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3); + 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 @@ -4016,8 +4068,8 @@ ENTITY IfcCartesianTransformationOperator3DnonUniform Scl2 : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl); Scl3 : REAL := NVL(Scale3, SELF\IfcCartesianTransformationOperator.Scl); WHERE - WR1 : Scl2 > 0.0; - WR2 : Scl3 > 0.0; + Scale2GreaterZero : Scl2 > 0.0; + Scale3GreaterZero : Scl3 > 0.0; END_ENTITY; ENTITY IfcCenterLineProfileDef @@ -4032,8 +4084,8 @@ ENTITY IfcChiller CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCHILLERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCHILLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcChillerType @@ -4051,8 +4103,8 @@ ENTITY IfcChimney CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCHIMNEYTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCHIMNEYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcChimneyType @@ -4082,6 +4134,14 @@ ENTITY IfcCircleProfileDef 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; @@ -4100,6 +4160,7 @@ 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; @@ -4116,8 +4177,8 @@ ENTITY IfcCoil CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCOILTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCOILTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCoilType @@ -4156,16 +4217,16 @@ ENTITY IfcColumn CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCOLUMNTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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, 'IFC2X4_RC3.IFCRELASSOCIATES.RELATEDOBJECTS') | - ('IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND - ('IFC2X4_RC3.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; @@ -4184,8 +4245,8 @@ ENTITY IfcCommunicationsAppliance CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCommunicationsApplianceType @@ -4225,8 +4286,8 @@ ENTITY IfcCompositeCurve NSegments : INTEGER := SIZEOF(Segments); ClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous; WHERE - WR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0)); - WR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0; + 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 @@ -4251,7 +4312,7 @@ ENTITY IfcCompositeCurveSegment INVERSE UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments; WHERE - WR1 : ('IFC2X4_RC3.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve)); + ParentIsBoundedCurve : ('IFC4.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve)); END_ENTITY; ENTITY IfcCompositeProfileDef @@ -4260,7 +4321,7 @@ ENTITY IfcCompositeProfileDef Label : OPTIONAL IfcLabel; WHERE InvariantProfileType : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0; - NoRecursion : SIZEOF(QUERY(temp <* Profiles | 'IFC2X4_RC3.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0; + NoRecursion : SIZEOF(QUERY(temp <* Profiles | 'IFC4.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0; END_ENTITY; ENTITY IfcCompressor @@ -4270,8 +4331,8 @@ ENTITY IfcCompressor CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCOMPRESSORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCOMPRESSORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCompressorType @@ -4289,8 +4350,8 @@ ENTITY IfcCondenser CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCONDENSERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCONDENSERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCondenserType @@ -4437,13 +4498,9 @@ ENTITY IfcConstructionResource ,IfcLaborResource ,IfcSubContractResource)) SUBTYPE OF (IfcResource); - ResourceConsumption : OPTIONAL IfcResourceConsumptionEnum; - BaseQuantityConsumed : OPTIONAL IfcMeasureWithUnit; - BaseQuantityProduced : OPTIONAL IfcMeasureWithUnit; - CostRatesConsumed : OPTIONAL LIST [1:?] OF IfcCostValue; - QuantityProduced : OPTIONAL IfcPhysicalQuantity; - ResourceTime : OPTIONAL IfcResourceTime; - ResourceCost : OPTIONAL IfcResourceCost; + Usage : OPTIONAL IfcResourceTime; + BaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue; + BaseQuantity : OPTIONAL IfcPhysicalQuantity; END_ENTITY; ENTITY IfcConstructionResourceType @@ -4455,11 +4512,8 @@ ENTITY IfcConstructionResourceType ,IfcLaborResourceType ,IfcSubContractResourceType)) SUBTYPE OF (IfcTypeResource); - ResourceConsumption : OPTIONAL IfcResourceConsumptionEnum; - BaseQuantityConsumed : OPTIONAL IfcMeasureWithUnit; - BaseQuantityProduced : OPTIONAL IfcMeasureWithUnit; - CostRatesConsumed : OPTIONAL LIST [1:?] OF IfcCostValue; - QuantityProduced : OPTIONAL IfcPhysicalQuantity; + BaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue; + BaseQuantity : OPTIONAL IfcPhysicalQuantity; END_ENTITY; ENTITY IfcContext @@ -4507,8 +4561,8 @@ ENTITY IfcController CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCONTROLLERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCONTROLLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcControllerType @@ -4541,8 +4595,8 @@ ENTITY IfcCooledBeam CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCOOLEDBEAMTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCOOLEDBEAMTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCooledBeamType @@ -4560,8 +4614,8 @@ ENTITY IfcCoolingTower CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCOOLINGTOWERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCOOLINGTOWERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCoolingTowerType @@ -4605,8 +4659,6 @@ END_ENTITY; ENTITY IfcCostValue SUBTYPE OF (IfcAppliedValue); - CostType : IfcLabel; - Condition : OPTIONAL IfcText; END_ENTITY; ENTITY IfcCovering @@ -4619,8 +4671,8 @@ ENTITY IfcCovering CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCOVERINGTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCOVERINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCoveringType @@ -4682,8 +4734,8 @@ ENTITY IfcCurtainWall CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCCURTAINWALLTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCCURTAINWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcCurtainWallType @@ -4726,11 +4778,13 @@ ENTITY IfcCurveStyle CurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect; CurveWidth : OPTIONAL IfcSizeSelect; CurveColour : OPTIONAL IfcColour; + ModelOrDraughting : OPTIONAL BOOLEAN; WHERE - WR11 : (NOT(EXISTS(CurveWidth))) OR - ('IFC2X4_RC3.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR - (('IFC2X4_RC3.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND - (CurveWidth = 'by layer')); + 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 @@ -4751,7 +4805,7 @@ ENTITY IfcCurveStyleFontPattern VisibleSegmentLength : IfcLengthMeasure; InvisibleSegmentLength : IfcPositiveLengthMeasure; WHERE - WR01 : VisibleSegmentLength >= 0.; + VisibleLengthGreaterEqualZero : VisibleSegmentLength >= 0.; END_ENTITY; ENTITY IfcCylindricalSurface @@ -4766,8 +4820,8 @@ ENTITY IfcDamper CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCDAMPERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCDAMPERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDamperType @@ -4778,12 +4832,6 @@ ENTITY IfcDamperType ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; -ENTITY IfcDefinedSymbol - SUBTYPE OF (IfcGeometricRepresentationItem); - Definition : IfcDefinedSymbolSelect; - Target : IfcCartesianTransformationOperator2D; -END_ENTITY; - ENTITY IfcDerivedProfileDef SUPERTYPE OF (ONEOF (IfcMirroredProfileDef)) @@ -4832,11 +4880,6 @@ ENTITY IfcDirection MagnitudeGreaterZero : SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0; END_ENTITY; -ENTITY IfcDirectionList - SUBTYPE OF (IfcGeometricRepresentationItem); - DirectionList : LIST [1:?] OF LIST [3:3] OF IfcParameterValue; -END_ENTITY; - ENTITY IfcDiscreteAccessory SUBTYPE OF (IfcElementComponent); PredefinedType : OPTIONAL IfcDiscreteAccessoryTypeEnum; @@ -4844,8 +4887,8 @@ ENTITY IfcDiscreteAccessory CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDiscreteAccessoryType @@ -4863,8 +4906,8 @@ ENTITY IfcDistributionChamberElement CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCDISTRIBUTIONCHAMBERELEMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCDISTRIBUTIONCHAMBERELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDistributionChamberElementType @@ -4954,7 +4997,8 @@ END_ENTITY; ENTITY IfcDistributionPort SUBTYPE OF (IfcPort); FlowDirection : OPTIONAL IfcFlowDirectionEnum; - PredefinedType : OPTIONAL IfcDistributionSystemEnum; + PredefinedType : OPTIONAL IfcDistributionPortTypeEnum; + SystemType : OPTIONAL IfcDistributionSystemEnum; END_ENTITY; ENTITY IfcDistributionSystem @@ -4965,19 +5009,12 @@ ENTITY IfcDistributionSystem PredefinedType : OPTIONAL IfcDistributionSystemEnum; END_ENTITY; -ENTITY IfcDocumentElectronicFormat; - FileExtension : OPTIONAL IfcLabel; - MimeContentType : OPTIONAL IfcLabel; - MimeSubtype : OPTIONAL IfcLabel; - WHERE - WR1 : EXISTS(FileExtension) OR EXISTS(MimeContentType); -END_ENTITY; - ENTITY IfcDocumentInformation SUBTYPE OF (IfcExternalInformation); - DocumentId : IfcIdentifier; + Identification : IfcIdentifier; Name : IfcLabel; Description : OPTIONAL IfcText; + Location : OPTIONAL IfcURIReference; Purpose : OPTIONAL IfcText; IntendedUse : OPTIONAL IfcText; Scope : OPTIONAL IfcText; @@ -4986,12 +5023,11 @@ ENTITY IfcDocumentInformation Editors : OPTIONAL SET [1:?] OF IfcActorSelect; CreationTime : OPTIONAL IfcDateTime; LastRevisionTime : OPTIONAL IfcDateTime; - ElectronicFormat : OPTIONAL IfcDocumentElectronicFormat; + ElectronicFormat : OPTIONAL IfcIdentifier; ValidFrom : OPTIONAL IfcDate; ValidUntil : OPTIONAL IfcDate; Confidentiality : OPTIONAL IfcDocumentConfidentialityEnum; Status : OPTIONAL IfcDocumentStatusEnum; - Location : OPTIONAL IfcURIReference; INVERSE DocumentInfoForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument; HasDocumentReferences : SET [0:?] OF IfcDocumentReference FOR ReferencedDocument; @@ -5024,19 +5060,19 @@ ENTITY IfcDoor OverallWidth : OPTIONAL IfcPositiveLengthMeasure; PredefinedType : OPTIONAL IfcDoorTypeEnum; OperationType : OPTIONAL IfcDoorTypeOperationEnum; + UserDefinedOperationType : OPTIONAL IfcLabel; WHERE - CorrectStyleAssigned : NOT(EXISTS(IsTypedBy)) - OR ('IFC2X4_RC3.IFCDOORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)) - OR ('IFC2X4_RC3.IFCDOORSTYLE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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 IfcPositiveLengthMeasure; + LiningThickness : OPTIONAL IfcNonNegativeLengthMeasure; ThresholdDepth : OPTIONAL IfcPositiveLengthMeasure; - ThresholdThickness : OPTIONAL IfcPositiveLengthMeasure; - TransomThickness : OPTIONAL IfcPositiveLengthMeasure; + ThresholdThickness : OPTIONAL IfcNonNegativeLengthMeasure; + TransomThickness : OPTIONAL IfcNonNegativeLengthMeasure; TransomOffset : OPTIONAL IfcLengthMeasure; LiningOffset : OPTIONAL IfcLengthMeasure; ThresholdOffset : OPTIONAL IfcLengthMeasure; @@ -5055,9 +5091,9 @@ ENTITY IfcDoorLiningProperties WR35 : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) AND ( - ('IFC2X4_RC3.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR - ('IFC2X4_RC3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) ); END_ENTITY; @@ -5072,9 +5108,9 @@ ENTITY IfcDoorPanelProperties ApplicableToType : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) AND ( - ('IFC2X4_RC3.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR - ('IFC2X4_RC3.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCDOORSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) ); END_ENTITY; @@ -5095,31 +5131,29 @@ ENTITY IfcDoorType 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 - WR31 : SELF\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow', - 'magenta','cyan','white','by layer']; + PreDefinedColourNames : SELF\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow', + 'magenta','cyan','white','by layer']; END_ENTITY; ENTITY IfcDraughtingPreDefinedCurveFont SUBTYPE OF (IfcPreDefinedCurveFont); WHERE - WR31 : SELF\IfcPredefinedItem.Name IN - ['continuous', - 'chain', - 'chain double dash', - 'dashed', - 'dotted', - 'by layer']; -END_ENTITY; - -ENTITY IfcDraughtingPreDefinedTextFont - SUBTYPE OF (IfcPreDefinedTextFont); - WHERE - WR31 : SELF\IfcPreDefinedItem.Name IN ['ISO 3098-1 font A','ISO 3098-1 font B']; + PreDefinedCurveFontNames : SELF\IfcPredefinedItem.Name IN + ['continuous', + 'chain', + 'chain double dash', + 'dashed', + 'dotted', + 'by layer']; END_ENTITY; ENTITY IfcDuctFitting @@ -5129,8 +5163,8 @@ ENTITY IfcDuctFitting CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCDUCTFITTINGTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCDUCTFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDuctFittingType @@ -5148,8 +5182,8 @@ ENTITY IfcDuctSegment CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCDUCTSEGMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCDUCTSEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDuctSegmentType @@ -5167,8 +5201,8 @@ ENTITY IfcDuctSilencer CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCDUCTSILENCERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcDuctSilencerType @@ -5201,8 +5235,8 @@ ENTITY IfcEdgeLoop DERIVE Ne : INTEGER := SIZEOF(EdgeList); WHERE - WR1 : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd); - WR2 : IfcLoopHeadToTail(SELF); + IsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd); + IsContinuous : IfcLoopHeadToTail(SELF); END_ENTITY; ENTITY IfcElectricAppliance @@ -5212,8 +5246,8 @@ ENTITY IfcElectricAppliance CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCELECTRICAPPLIANCETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCELECTRICAPPLIANCETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricApplianceType @@ -5231,8 +5265,8 @@ ENTITY IfcElectricDistributionBoard CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCELECTRICDISTRIBUTIONBOARDTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCELECTRICDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricDistributionBoardType @@ -5250,8 +5284,8 @@ ENTITY IfcElectricFlowStorageDevice CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricFlowStorageDeviceType @@ -5269,8 +5303,8 @@ ENTITY IfcElectricGenerator CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCELECTRICGENERATORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCELECTRICGENERATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricGeneratorType @@ -5288,8 +5322,8 @@ ENTITY IfcElectricMotor CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCELECTRICMOTORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCELECTRICMOTORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricMotorType @@ -5307,8 +5341,8 @@ ENTITY IfcElectricTimeControl CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElectricTimeControlType @@ -5322,6 +5356,7 @@ END_ENTITY; ENTITY IfcElement ABSTRACT SUPERTYPE OF (ONEOF (IfcBuildingElement + ,IfcCivilElement ,IfcDistributionElement ,IfcElementAssembly ,IfcElementComponent @@ -5339,7 +5374,7 @@ ENTITY IfcElement 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 RelatingElement; + HasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement; IsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements; ProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement; ConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement; @@ -5354,8 +5389,8 @@ ENTITY IfcElementAssembly CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcElementAssemblyType @@ -5399,6 +5434,7 @@ END_ENTITY; ENTITY IfcElementType ABSTRACT SUPERTYPE OF (ONEOF (IfcBuildingElementType + ,IfcCivilElementType ,IfcDistributionElementType ,IfcElementAssemblyType ,IfcElementComponentType @@ -5486,8 +5522,8 @@ ENTITY IfcEngine CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCENGINETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCENGINETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcEngineType @@ -5505,8 +5541,8 @@ ENTITY IfcEvaporativeCooler CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcEvaporativeCoolerType @@ -5524,8 +5560,8 @@ ENTITY IfcEvaporator CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCEVAPORATORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCEVAPORATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcEvaporatorType @@ -5588,7 +5624,6 @@ ENTITY IfcExternalReference ,IfcDocumentReference ,IfcExternallyDefinedHatchStyle ,IfcExternallyDefinedSurfaceStyle - ,IfcExternallyDefinedSymbol ,IfcExternallyDefinedTextFont ,IfcLibraryReference)); Location : OPTIONAL IfcURIReference; @@ -5627,10 +5662,6 @@ ENTITY IfcExternallyDefinedSurfaceStyle SUBTYPE OF (IfcExternalReference); END_ENTITY; -ENTITY IfcExternallyDefinedSymbol - SUBTYPE OF (IfcExternalReference); -END_ENTITY; - ENTITY IfcExternallyDefinedTextFont SUBTYPE OF (IfcExternalReference); END_ENTITY; @@ -5657,8 +5688,10 @@ ENTITY IfcFace (IfcFaceSurface)) SUBTYPE OF (IfcTopologicalRepresentationItem); Bounds : SET [1:?] OF IfcFaceBound; + INVERSE + HasTextureMaps : SET [0:?] OF IfcTextureMap FOR MappedTo; WHERE - WR1 : SIZEOF(QUERY(temp <* Bounds | 'IFC2X4_RC3.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1; + HasOuterBound : SIZEOF(QUERY(temp <* Bounds | 'IFC4.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1; END_ENTITY; ENTITY IfcFaceBasedSurfaceModel @@ -5716,8 +5749,8 @@ ENTITY IfcFan CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFANTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFANTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFanType @@ -5735,8 +5768,8 @@ ENTITY IfcFastener CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFastenerType @@ -5769,7 +5802,7 @@ ENTITY IfcFeatureElementSubtraction ,IfcVoidingFeature)) SUBTYPE OF (IfcFeatureElement); INVERSE - VoidsElements : IfcRelVoidsElement FOR RelatedOpening; + VoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement; WHERE HasNoSubtraction : SIZEOF(SELF\IfcElement.HasOpenings) = 0; IsNotFilling : SIZEOF(SELF\IfcElement.FillsVoids) = 0; @@ -5778,16 +5811,17 @@ END_ENTITY; ENTITY IfcFillAreaStyle SUBTYPE OF (IfcPresentationStyle); FillStyles : SET [1:?] OF IfcFillStyleSelect; + ModelorDraughting : OPTIONAL BOOLEAN; WHERE - WR11 : SIZEOF(QUERY(Style <* SELF.FillStyles | - 'IFC2X4_RC3.IFCCOLOUR' IN - TYPEOF(Style) - )) <= 1; - WR12 : SIZEOF(QUERY(Style <* SELF.FillStyles | - 'IFC2X4_RC3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN - TYPEOF(Style) - )) <= 1; - WR13 : IfcCorrectFillAreaStyle(SELF.FillStyles); + 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 @@ -5798,25 +5832,14 @@ ENTITY IfcFillAreaStyleHatching PatternStart : OPTIONAL IfcCartesianPoint; HatchLineAngle : IfcPlaneAngleMeasure; WHERE - WR21 : NOT( - 'IFC2X4_RC3.IFCTWODIRECTIONREPEATFACTOR' - IN TYPEOF(StartOfNextHatchLine) - ); - WR22 : NOT(EXISTS(PatternStart)) - OR (PatternStart.Dim = 2); - WR23 : NOT(EXISTS(PointOfReferenceHatchLine)) - OR (PointOfReferenceHatchLine.Dim = 2); -END_ENTITY; - -ENTITY IfcFillAreaStyleTileSymbolWithStyle - SUBTYPE OF (IfcGeometricRepresentationItem); - Symbol : IfcStyledItem; + PatternStart2D : NOT(EXISTS(PatternStart)) OR (PatternStart.Dim = 2); + RefHatchLine2D : NOT(EXISTS(PointOfReferenceHatchLine)) OR (PointOfReferenceHatchLine.Dim = 2); END_ENTITY; ENTITY IfcFillAreaStyleTiles SUBTYPE OF (IfcGeometricRepresentationItem); - TilingPattern : IfcOneDirectionRepeatFactor; - Tiles : SET [1:?] OF IfcFillAreaStyleTileShapeSelect; + TilingPattern : LIST [2:2] OF IfcVector; + Tiles : SET [1:?] OF IfcStyledItem; TilingScale : IfcPositiveRatioMeasure; END_ENTITY; @@ -5827,8 +5850,8 @@ ENTITY IfcFilter CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFILTERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFILTERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFilterType @@ -5846,8 +5869,8 @@ ENTITY IfcFireSuppressionTerminal CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFireSuppressionTerminalType @@ -5860,10 +5883,13 @@ END_ENTITY; ENTITY IfcFixedReferenceSweptAreaSolid SUBTYPE OF (IfcSweptAreaSolid); - Directrix : OPTIONAL IfcCurve; + 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 @@ -5919,8 +5945,8 @@ ENTITY IfcFlowInstrument CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFLOWINSTRUMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFLOWINSTRUMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFlowInstrumentType @@ -5938,8 +5964,8 @@ ENTITY IfcFlowMeter CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFLOWMETERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFLOWMETERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFlowMeterType @@ -6057,8 +6083,8 @@ ENTITY IfcFooting CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFOOTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFOOTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFootingType @@ -6090,8 +6116,8 @@ ENTITY IfcFurniture CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCFURNITURETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCFURNITURETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcFurnitureType @@ -6110,8 +6136,8 @@ ENTITY IfcGeographicElement CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCGEOGRAPHICELEMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCGEOGRAPHICELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcGeographicElementType @@ -6125,8 +6151,8 @@ END_ENTITY; ENTITY IfcGeometricCurveSet SUBTYPE OF (IfcGeometricSet); WHERE - WR1 : SIZEOF(QUERY(Temp <* SELF\IfcGeometricSet.Elements | - 'IFC2X4_RC3.IFCSURFACE' IN TYPEOF(Temp))) = 0; + NoSurfaces : SIZEOF(QUERY(Temp <* SELF\IfcGeometricSet.Elements | + 'IFC4.IFCSURFACE' IN TYPEOF(Temp))) = 0; END_ENTITY; ENTITY IfcGeometricRepresentationContext @@ -6153,17 +6179,13 @@ ENTITY IfcGeometricRepresentationItem ,IfcCompositeCurveSegment ,IfcCsgPrimitive3D ,IfcCurve - ,IfcDefinedSymbol ,IfcDirection - ,IfcDirectionList ,IfcFaceBasedSurfaceModel ,IfcFillAreaStyleHatching - ,IfcFillAreaStyleTileSymbolWithStyle ,IfcFillAreaStyleTiles ,IfcGeometricSet ,IfcHalfSpaceSolid ,IfcLightSource - ,IfcOneDirectionRepeatFactor ,IfcPlacement ,IfcPlanarExtent ,IfcPoint @@ -6186,10 +6208,10 @@ ENTITY IfcGeometricRepresentationSubContext DERIVE SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem; SELF\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension; - SELF\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth, SELF\IfcGeometricRepresentationContext.WorldCoordinateSystem.P[2]); + 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('IFC2X4_RC3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext)); + WR31 : NOT('IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext)); WR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR ((TargetView = IfcGeometricProjectionEnum.USERDEFINED) AND EXISTS(UserDefinedTargetView)); @@ -6203,9 +6225,9 @@ ENTITY IfcGeometricSet DERIVE Dim : IfcDimensionCount := Elements[1].Dim; WHERE - WR21 : SIZEOF(QUERY(Temp <* Elements | - Temp.Dim <> Elements[1].Dim)) - = 0; + ConsistentDim : SIZEOF(QUERY(Temp <* Elements | + Temp.Dim <> Elements[1].Dim)) + = 0; END_ENTITY; ENTITY IfcGrid @@ -6270,8 +6292,8 @@ ENTITY IfcHeatExchanger CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCHEATEXCHANGERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCHEATEXCHANGERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcHeatExchangerType @@ -6289,8 +6311,8 @@ ENTITY IfcHumidifier CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCHUMIDIFIERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcHumidifierType @@ -6328,7 +6350,7 @@ ENTITY IfcIndexedColourMap MappedTo : IfcTessellatedFaceSet; Overrides : OPTIONAL IfcSurfaceStyleShading; Colours : IfcColourRgbList; - ColourIndex : OPTIONAL LIST [1:?] OF INTEGER; + ColourIndex : LIST [1:?] OF INTEGER; END_ENTITY; ENTITY IfcIndexedTextureMap @@ -6351,8 +6373,8 @@ ENTITY IfcInterceptor CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCINTERCEPTORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCINTERCEPTORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcInterceptorType @@ -6390,8 +6412,8 @@ ENTITY IfcJunctionBox CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCJUNCTIONBOXTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCJUNCTIONBOXTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcJunctionBoxType @@ -6444,8 +6466,8 @@ ENTITY IfcLamp CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCLAMPTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCLAMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcLampType @@ -6491,8 +6513,8 @@ ENTITY IfcLightFixture CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCLIGHTFIXTURETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCLIGHTFIXTURETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcLightFixtureType @@ -6661,7 +6683,7 @@ ENTITY IfcMaterialDefinitionRepresentation RepresentedMaterial : IfcMaterial; WHERE OnlyStyledRepresentations : SIZEOF(QUERY(temp <* Representations | - (NOT('IFC2X4_RC3.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp))) + (NOT('IFC4.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp))) )) = 0; END_ENTITY; @@ -6777,13 +6799,15 @@ 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 : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCMECHANICALFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCMECHANICALFASTENERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcMechanicalFastenerType @@ -6803,8 +6827,8 @@ ENTITY IfcMedicalDevice CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCMEDICALDEVICETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCMEDICALDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcMedicalDeviceType @@ -6824,16 +6848,16 @@ ENTITY IfcMember CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCMEMBERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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, 'IFC2X4_RC3.IFCRELASSOCIATES.RELATEDOBJECTS') | - ('IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND - ('IFC2X4_RC3.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + HasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; @@ -6850,6 +6874,7 @@ ENTITY IfcMetric Benchmark : IfcBenchmarkEnum; ValueSource : OPTIONAL IfcLabel; DataValue : IfcMetricValueSelect; + ReferencePath : OPTIONAL IfcReference; END_ENTITY; ENTITY IfcMirroredProfileDef @@ -6882,8 +6907,8 @@ ENTITY IfcMotorConnection CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCMOTORCONNECTIONTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCMOTORCONNECTIONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcMotorConnectionType @@ -6943,7 +6968,7 @@ ENTITY IfcObjectPlacement (IfcGridPlacement ,IfcLocalPlacement)); INVERSE - PlacesObject : SET [1:?] OF IfcProduct FOR ObjectPlacement; + PlacesObject : SET [0:?] OF IfcProduct FOR ObjectPlacement; ReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo; END_ENTITY; @@ -6972,7 +6997,7 @@ ENTITY IfcOffsetCurve2D Distance : IfcLengthMeasure; SelfIntersect : LOGICAL; WHERE - WR1 : BasisCurve.Dim = 2; + DimIs2D : BasisCurve.Dim = 2; END_ENTITY; ENTITY IfcOffsetCurve3D @@ -6982,14 +7007,7 @@ ENTITY IfcOffsetCurve3D SelfIntersect : LOGICAL; RefDirection : IfcDirection; WHERE - WR1 : BasisCurve.Dim = 3; -END_ENTITY; - -ENTITY IfcOneDirectionRepeatFactor - SUPERTYPE OF (ONEOF - (IfcTwoDirectionRepeatFactor)) - SUBTYPE OF (IfcGeometricRepresentationItem); - RepeatFactor : IfcVector; + DimIs2D : BasisCurve.Dim = 3; END_ENTITY; ENTITY IfcOpenShell @@ -7037,7 +7055,7 @@ ENTITY IfcOrientedEdge SELF\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart); WHERE - WR1 : NOT('IFC2X4_RC3.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement)); + EdgeElementNotOriented : NOT('IFC4.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement)); END_ENTITY; ENTITY IfcOuterBoundaryCurve @@ -7051,8 +7069,8 @@ ENTITY IfcOutlet CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCOUTLETTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCOUTLETTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcOutletType @@ -7075,7 +7093,7 @@ ENTITY IfcOwnerHistory; WHERE CorrectChangeAction : (EXISTS(LastModifiedDate)) OR (NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR - (NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND (ChangeAction = IfcChangeActionEnum.NOTDEFINED)); + (NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE))); END_ENTITY; ENTITY IfcParameterizedProfileDef @@ -7099,7 +7117,7 @@ ENTITY IfcPath SUBTYPE OF (IfcTopologicalRepresentationItem); EdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge; WHERE - WR1 : IfcPathHeadToTail(SELF); + IsContinuous : IfcPathHeadToTail(SELF); END_ENTITY; ENTITY IfcPcurve @@ -7107,7 +7125,7 @@ ENTITY IfcPcurve BasisSurface : IfcSurface; ReferenceCurve : IfcCurve; WHERE - Is2Dimensional : ReferenceCurve.Dim = 2; + DimIs2D : ReferenceCurve.Dim = 2; END_ENTITY; ENTITY IfcPerformanceHistory @@ -7145,6 +7163,7 @@ ENTITY IfcPerson; 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; @@ -7195,8 +7214,8 @@ ENTITY IfcPile CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCPILETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCPILETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcPileType @@ -7214,8 +7233,8 @@ ENTITY IfcPipeFitting CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCPIPEFITTINGTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCPIPEFITTINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcPipeFittingType @@ -7233,8 +7252,8 @@ ENTITY IfcPipeSegment CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCPIPESEGMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCPIPESEGMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcPipeSegmentType @@ -7299,16 +7318,16 @@ ENTITY IfcPlate CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCPLATETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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, 'IFC2X4_RC3.IFCRELASSOCIATES.RELATEDOBJECTS') | - ('IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND - ('IFC2X4_RC3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; @@ -7349,7 +7368,7 @@ ENTITY IfcPolyLoop SUBTYPE OF (IfcLoop); Polygon : LIST [3:?] OF UNIQUE IfcCartesianPoint; WHERE - WR21 : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0; + AllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0; END_ENTITY; ENTITY IfcPolygonalBoundedHalfSpace @@ -7357,18 +7376,18 @@ ENTITY IfcPolygonalBoundedHalfSpace Position : IfcAxis2Placement3D; PolygonalBoundary : IfcBoundedCurve; WHERE - WR41 : PolygonalBoundary.Dim = 2; - WR42 : SIZEOF(TYPEOF(PolygonalBoundary) * [ - 'IFC2X4_RC3.IFCPOLYLINE', - 'IFC2X4_RC3.IFCCOMPOSITECURVE'] - ) = 1; + 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 - WR41 : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0; + SameDim : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0; END_ENTITY; ENTITY IfcPort @@ -7376,7 +7395,7 @@ ENTITY IfcPort (IfcDistributionPort)) SUBTYPE OF (IfcProduct); INVERSE - ContainedIn : IfcRelConnectsPortToElement FOR RelatingPort; + 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; @@ -7416,7 +7435,6 @@ ENTITY IfcPreDefinedItem ABSTRACT SUPERTYPE OF (ONEOF (IfcPreDefinedColour ,IfcPreDefinedCurveFont - ,IfcPreDefinedSymbol ,IfcPreDefinedTextFont)) SUBTYPE OF (IfcPresentationItem); Name : IfcLabel; @@ -7441,14 +7459,9 @@ ENTITY IfcPreDefinedPropertySet SUBTYPE OF (IfcPropertySetDefinition); END_ENTITY; -ENTITY IfcPreDefinedSymbol - SUBTYPE OF (IfcPreDefinedItem); -END_ENTITY; - ENTITY IfcPreDefinedTextFont ABSTRACT SUPERTYPE OF (ONEOF - (IfcDraughtingPreDefinedTextFont - ,IfcTextStyleFontModel)) + (IfcTextStyleFontModel)) SUBTYPE OF (IfcPreDefinedItem); END_ENTITY; @@ -7468,7 +7481,6 @@ ENTITY IfcPresentationItem ,IfcSurfaceTexture ,IfcTextStyleForDefinedFont ,IfcTextStyleTextModel - ,IfcTextStyleWithBoxCharacteristics ,IfcTextureCoordinate ,IfcTextureVertex ,IfcTextureVertexList)); @@ -7484,9 +7496,9 @@ ENTITY IfcPresentationLayerAssignment WHERE ApplicableItems : SIZEOF(QUERY(temp <* AssignedItems | ( SIZEOF(TYPEOF(temp) * [ - 'IFC2X4_RC3.IFCSHAPEREPRESENTATION', - 'IFC2X4_RC3.IFCGEOMETRICREPRESENTATIONITEM', - 'IFC2X4_RC3.IFCMAPPEDITEM']) = 1) + 'IFC4.IFCSHAPEREPRESENTATION', + 'IFC4.IFCGEOMETRICREPRESENTATIONITEM', + 'IFC4.IFCMAPPEDITEM']) = 1) )) = SIZEOF(AssignedItems); END_ENTITY; @@ -7499,8 +7511,8 @@ ENTITY IfcPresentationLayerWithStyle WHERE ApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | ( SIZEOF(TYPEOF(temp) * [ - 'IFC2X4_RC3.IFCGEOMETRICREPRESENTATIONITEM', - 'IFC2X4_RC3.IFCMAPPEDITEM']) = 1) + 'IFC4.IFCGEOMETRICREPRESENTATIONITEM', + 'IFC4.IFCMAPPEDITEM']) = 1) )) = SIZEOF(AssignedItems); END_ENTITY; @@ -7509,7 +7521,6 @@ ENTITY IfcPresentationStyle (IfcCurveStyle ,IfcFillAreaStyle ,IfcSurfaceStyle - ,IfcSymbolStyle ,IfcTextStyle)); Name : OPTIONAL IfcLabel; END_ENTITY; @@ -7564,10 +7575,10 @@ ENTITY IfcProduct INVERSE ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct; WHERE - WR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement)) - OR (EXISTS(Representation) AND - (NOT('IFC2X4_RC3.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation)))) - OR (NOT(EXISTS(Representation))); + 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 @@ -7577,7 +7588,7 @@ ENTITY IfcProductDefinitionShape HasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape; WHERE OnlyShapeModel : SIZEOF(QUERY(temp <* Representations | - (NOT('IFC2X4_RC3.IFCSHAPEMODEL' IN TYPEOF(temp))) + (NOT('IFC4.IFCSHAPEMODEL' IN TYPEOF(temp))) )) = 0; END_ENTITY; @@ -7615,7 +7626,7 @@ ENTITY IfcProject HasName : EXISTS(SELF\IfcRoot.Name); CorrectContext : NOT(EXISTS(SELF\IfcContext.RepresentationContexts)) OR (SIZEOF(QUERY(Temp <* SELF\IfcContext.RepresentationContexts | - 'IFC2X4_RC3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp) + 'IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp) )) = 0); NoDecomposition : SIZEOF(SELF\IfcObjectDefinition.Decomposes) = 0; HasOwnerHistory : EXISTS(SELF\IfcRoot.OwnerHistory); @@ -7826,8 +7837,8 @@ ENTITY IfcProtectiveDevice CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCPROTECTIVEDEVICETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCPROTECTIVEDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcProtectiveDeviceTrippingUnit @@ -7837,8 +7848,8 @@ ENTITY IfcProtectiveDeviceTrippingUnit CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCPROTECTIVEDEVICETRIPPINGUNITTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCPROTECTIVEDEVICETRIPPINGUNITTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcProtectiveDeviceTrippingUnitType @@ -7872,8 +7883,8 @@ ENTITY IfcPump CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCPUMPTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCPUMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcPumpType @@ -7955,8 +7966,8 @@ ENTITY IfcRailing CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCRAILINGTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCRAILINGTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRailingType @@ -7988,8 +7999,8 @@ ENTITY IfcRamp CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCRAMPTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCRAMPTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRampFlight @@ -7999,8 +8010,8 @@ ENTITY IfcRampFlight CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCRAMPFLIGHTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCRAMPFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRampFlightType @@ -8025,8 +8036,8 @@ ENTITY IfcRationalBSplineCurveWithKnots DERIVE Weights : ARRAY [0:UpperIndexOnControlPoints] OF REAL := IfcListToArray(WeightsData,0,SELF\IfcBSplineCurve.UpperIndexOnControlPoints); WHERE - WR1 : SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineCurve.ControlPointsList); - WR2 : IfcCurveWeightsPositive(SELF); + SameNumOfWeightsAndPoints : SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineCurve.ControlPointsList); + WeightsGreaterZero : IfcCurveWeightsPositive(SELF); END_ENTITY; ENTITY IfcRationalBSplineSurfaceWithKnots @@ -8083,13 +8094,13 @@ ENTITY IfcRectangularTrimmedSurface Usense : BOOLEAN; Vsense : BOOLEAN; WHERE - WR1 : U1 <> U2; - WR2 : V1 <> V2; - WR3 : (('IFC2X4_RC3.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND - (NOT ('IFC2X4_RC3.IFCPLANE' IN TYPEOF(BasisSurface)))) OR - ('IFC2X4_RC3.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR - (Usense = (U2 > U1)); - WR4 : Vsense = (V2 > V1); + 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; @@ -8103,6 +8114,14 @@ ENTITY IfcRecurrencePattern; 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; @@ -8136,8 +8155,8 @@ ENTITY IfcReinforcingBar CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCREINFORCINGBARTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCREINFORCINGBARTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcReinforcingBarType @@ -8189,8 +8208,8 @@ ENTITY IfcReinforcingMesh CorrectPredefinedType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCREINFORCINGMESHTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCREINFORCINGMESHTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcReinforcingMeshType @@ -8329,17 +8348,17 @@ ENTITY IfcRelAssociatesMaterial RelatingMaterial : IfcMaterialSelect; WHERE NoVoidElement : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | - ('IFC2X4_RC3.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR - ('IFC2X4_RC3.IFCVIRTUALELEMENT' IN TYPEOF(temp)) + ('IFC4.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR + ('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(temp)) )) = 0; AllowedElements : SIZEOF(QUERY(temp <* SELF\IfcRelAssociates.RelatedObjects | ( SIZEOF(TYPEOF(temp) * [ - 'IFC2X4_RC3.IFCELEMENT', - 'IFC2X4_RC3.IFCELEMENTTYPE', - 'IFC2X4_RC3.IFCWINDOWSTYLE', - 'IFC2X4_RC3.IFCDOORSTYLE', - 'IFC2X4_RC3.IFCSTRUCTURALMEMBER', - 'IFC2X4_RC3.IFCPORT']) = 0) + 'IFC4.IFCELEMENT', + 'IFC4.IFCELEMENTTYPE', + 'IFC4.IFCWINDOWSTYLE', + 'IFC4.IFCDOORSTYLE', + 'IFC4.IFCSTRUCTURALMEMBER', + 'IFC4.IFCPORT']) = 0) )) = 0; END_ENTITY; @@ -8398,10 +8417,6 @@ ENTITY IfcRelConnectsPortToElement SUBTYPE OF (IfcRelConnects); RelatingPort : IfcPort; RelatedElement : IfcDistributionElement; - WHERE - ApplicableElement : ('IFC2X4_RC3.IFCELEMENT' IN TYPEOF(RelatedElement)) - OR - ('IFC2X4_RC3.IFCELEMENTTYPE' IN TYPEOF(RelatedElement)); END_ENTITY; ENTITY IfcRelConnectsPorts @@ -8445,14 +8460,14 @@ END_ENTITY; ENTITY IfcRelContainedInSpatialStructure SUBTYPE OF (IfcRelConnects); RelatedElements : SET [1:?] OF IfcProduct; - RelatingStructure : IfcSpatialStructureElement; + RelatingStructure : IfcSpatialElement; WHERE - WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X4_RC3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0; + WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0; END_ENTITY; ENTITY IfcRelCoversBldgElements SUBTYPE OF (IfcRelConnects); - RelatingBuildingElement : IfcBuildingElement; + RelatingBuildingElement : IfcElement; RelatedCoverings : SET [1:?] OF IfcCovering; END_ENTITY; @@ -8496,8 +8511,8 @@ END_ENTITY; ENTITY IfcRelDefinesByProperties SUBTYPE OF (IfcRelDefines); - RelatedObjects : SET [1:?] OF IfcObjectDefinition; - RelatingPropertyDefinition : IfcPropertySetDefinition; + RelatedObjects : SET [1:1] OF IfcObjectDefinition; + RelatingPropertyDefinition : IfcPropertySetDefinitionSelect; END_ENTITY; ENTITY IfcRelDefinesByTemplate @@ -8554,7 +8569,7 @@ ENTITY IfcRelReferencedInSpatialStructure RelatedElements : SET [1:?] OF IfcProduct; RelatingStructure : IfcSpatialElement; WHERE - WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X4_RC3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0; + WR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0; END_ENTITY; ENTITY IfcRelSequence @@ -8586,11 +8601,11 @@ ENTITY IfcRelSpaceBoundary InternalOrExternalBoundary : IfcInternalOrExternalEnum; WHERE CorrectPhysOrVirt : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) - AND (NOT('IFC2X4_RC3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) + AND (NOT('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) OR ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) - AND (('IFC2X4_RC3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) - OR ('IFC2X4_RC3.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) + AND (('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) + OR ('IFC4.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) OR (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined); END_ENTITY; @@ -8613,8 +8628,8 @@ END_ENTITY; ENTITY IfcRelVoidsElement SUBTYPE OF (IfcRelDecomposes); - RelatingElement : IfcElement; - RelatedOpening : IfcFeatureElementSubtraction; + RelatingBuildingElement : IfcElement; + RelatedOpeningElement : IfcFeatureElementSubtraction; END_ENTITY; ENTITY IfcRelationship @@ -8673,9 +8688,10 @@ ENTITY IfcRepresentationMap; MappingOrigin : IfcAxis2Placement; MappedRepresentation : IfcRepresentation; INVERSE + HasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape; MapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource; WHERE - ApplicableMappedRepr : 'IFC2X4_RC3.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation); + ApplicableMappedRepr : 'IFC4.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation); END_ENTITY; ENTITY IfcResource @@ -8700,23 +8716,9 @@ ENTITY IfcResourceConstraintRelationship RelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect; END_ENTITY; -ENTITY IfcResourceCost; - Name : OPTIONAL IfcLabel; - DataOrigin : OPTIONAL IfcDataOriginEnum; - UserDefinedDataOrigin : OPTIONAL IfcLabel; - StatusDate : OPTIONAL IfcDateTime; - ScheduleCost : OPTIONAL IfcMonetaryMeasure; - ActualCost : OPTIONAL IfcMonetaryMeasure; - RemainingCost : OPTIONAL IfcMonetaryMeasure; - PlannedValue : OPTIONAL IfcMonetaryMeasure; - EarnedValue : OPTIONAL IfcMonetaryMeasure; - ActualValue : OPTIONAL IfcMonetaryMeasure; -END_ENTITY; - ENTITY IfcResourceLevelRelationship ABSTRACT SUPERTYPE OF (ONEOF - (IfcAppliedValueRelationship - ,IfcApprovalRelationship + (IfcApprovalRelationship ,IfcCurrencyRelationship ,IfcDocumentInformationRelationship ,IfcExternalReferenceRelationship @@ -8802,8 +8804,8 @@ ENTITY IfcRoof CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCROOFTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCROOFTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcRoofType @@ -8850,8 +8852,8 @@ ENTITY IfcSanitaryTerminal CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSANITARYTERMINALTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSANITARYTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSanitaryTerminalType @@ -8899,9 +8901,9 @@ ENTITY IfcSectionedSpine DERIVE Dim : IfcDimensionCount := 3; WHERE - WR1 : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions); - WR2 : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0; - WR3 : SpineCurve.Dim = 3; + CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions); + ConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0; + SpineCurveDim : SpineCurve.Dim = 3; END_ENTITY; ENTITY IfcSensor @@ -8911,8 +8913,8 @@ ENTITY IfcSensor CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSENSORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSENSORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSensorType @@ -8930,13 +8932,16 @@ ENTITY IfcShadingDevice CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSHADINGDEVICETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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; @@ -8944,7 +8949,7 @@ ENTITY IfcShapeAspect; Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; ProductDefinitional : LOGICAL; - PartOfProductDefinitionShape : OPTIONAL IfcProductDefinitionShape; + PartOfProductDefinitionShape : OPTIONAL IfcProductRepresentationSelect; END_ENTITY; ENTITY IfcShapeModel @@ -8963,14 +8968,14 @@ END_ENTITY; ENTITY IfcShapeRepresentation SUBTYPE OF (IfcShapeModel); WHERE - WR21 : 'IFC2X4_RC3.IFCGEOMETRICREPRESENTATIONCONTEXT' + WR21 : 'IFC4.IFCGEOMETRICREPRESENTATIONCONTEXT' IN TYPEOF(SELF\IfcRepresentation.ContextOfItems); WR22 : SIZEOF(QUERY(temp <* Items | - ('IFC2X4_RC3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) + ('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) AND (NOT(SIZEOF( - ['IFC2X4_RC3.IFCVERTEXPOINT', - 'IFC2X4_RC3.IFCEDGECURVE', - 'IFC2X4_RC3.IFCFACESURFACE'] * TYPEOF(temp)) = 1)) + ['IFC4.IFCVERTEXPOINT', + 'IFC4.IFCEDGECURVE', + 'IFC4.IFCFACESURFACE'] * TYPEOF(temp)) = 1)) )) = 0; WR23 : EXISTS(SELF\IfcRepresentation.RepresentationType); WR24 : IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); @@ -9025,8 +9030,8 @@ ENTITY IfcSlab CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSLABTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSLABTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSlabElementedCase @@ -9038,9 +9043,9 @@ END_ENTITY; ENTITY IfcSlabStandardCase SUBTYPE OF (IfcSlab); WHERE - HasMaterialLayerSetusage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X4_RC3.IFCRELASSOCIATES.RELATEDOBJECTS') | - ('IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND - ('IFC2X4_RC3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + HasMaterialLayerSetusage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; @@ -9066,8 +9071,8 @@ ENTITY IfcSolarDevice CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSOLARDEVICETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSOLARDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSolarDeviceType @@ -9100,8 +9105,8 @@ ENTITY IfcSpace CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSPACETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSPACETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSpaceHeater @@ -9111,8 +9116,8 @@ ENTITY IfcSpaceHeater CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSPACEHEATERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSPACEHEATERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSpaceHeaterType @@ -9140,6 +9145,7 @@ ENTITY IfcSpatialElement 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; @@ -9160,15 +9166,13 @@ ENTITY IfcSpatialStructureElement ,IfcSpace)) SUBTYPE OF (IfcSpatialElement); CompositionType : OPTIONAL IfcElementCompositionEnum; - INVERSE - ContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure; WHERE WR41 : (HIINDEX(SELF\IfcObjectDefinition.Decomposes) = 1) AND - ('IFC2X4_RC3.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1])) + ('IFC4.IFCRELAGGREGATES' IN TYPEOF(SELF\IfcObjectDefinition.Decomposes[1])) AND - (('IFC2X4_RC3.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR - ('IFC2X4_RC3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) + (('IFC4.IFCPROJECT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR + ('IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\IfcObjectDefinition.Decomposes[1].RelatingObject)) ); END_ENTITY; @@ -9185,8 +9189,8 @@ ENTITY IfcSpatialZone CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSPATIALZONETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSPATIALZONETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSpatialZoneType @@ -9210,8 +9214,8 @@ ENTITY IfcStackTerminal CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSTACKTERMINALTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSTACKTERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcStackTerminalType @@ -9243,8 +9247,8 @@ ENTITY IfcStair CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSTAIRTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSTAIRTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcStairFlight @@ -9258,8 +9262,8 @@ ENTITY IfcStairFlight CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSTAIRFLIGHTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSTAIRFLIGHTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcStairFlightType @@ -9380,7 +9384,7 @@ END_ENTITY; ENTITY IfcStructuralLinearAction SUBTYPE OF (IfcStructuralCurveAction); WHERE - SuitableLoadType : SIZEOF(['IFC2X4_RC3.IFCSTRUCTURALLOADLINEARFORCE', 'IFC2X4_RC3.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; + SuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADLINEARFORCE', 'IFC4.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; ConstPredefinedType : SELF\IfcStructuralCurveAction.PredefinedType = IfcStructuralCurveActivityTypeEnum.CONST; END_ENTITY; @@ -9513,14 +9517,14 @@ END_ENTITY; ENTITY IfcStructuralPlanarAction SUBTYPE OF (IfcStructuralSurfaceAction); WHERE - SuitableLoadType : SIZEOF(['IFC2X4_RC3.IFCSTRUCTURALLOADPLANARFORCE', 'IFC2X4_RC3.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; + 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(['IFC2X4_RC3.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC2X4_RC3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; + SuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; END_ENTITY; ENTITY IfcStructuralPointConnection @@ -9531,7 +9535,7 @@ END_ENTITY; ENTITY IfcStructuralPointReaction SUBTYPE OF (IfcStructuralReaction); WHERE - SuitableLoadType : SIZEOF(['IFC2X4_RC3.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC2X4_RC3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; + SuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\IfcStructuralActivity.AppliedLoad)) = 1; END_ENTITY; ENTITY IfcStructuralReaction @@ -9603,14 +9607,14 @@ ENTITY IfcStyledItem Styles : SET [1:?] OF IfcStyleAssignmentSelect; Name : OPTIONAL IfcLabel; WHERE - ApplicableItem : NOT('IFC2X4_RC3.IFCSTYLEDITEM' IN TYPEOF(Item)); + ApplicableItem : NOT('IFC4.IFCSTYLEDITEM' IN TYPEOF(Item)); END_ENTITY; ENTITY IfcStyledRepresentation SUBTYPE OF (IfcStyleModel); WHERE OnlyStyledItems : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | - (NOT('IFC2X4_RC3.IFCSTYLEDITEM' IN TYPEOF(temp))) + (NOT('IFC4.IFCSTYLEDITEM' IN TYPEOF(temp))) )) = 0; END_ENTITY; @@ -9652,6 +9656,9 @@ ENTITY IfcSurfaceCurveSweptAreaSolid 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 @@ -9668,7 +9675,7 @@ ENTITY IfcSurfaceOfLinearExtrusion DERIVE ExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth); WHERE - WR41 : Depth > 0.; + DepthGreaterZero : Depth > 0.; END_ENTITY; ENTITY IfcSurfaceOfRevolution @@ -9704,26 +9711,26 @@ ENTITY IfcSurfaceStyle Side : IfcSurfaceSide; Styles : SET [1:5] OF IfcSurfaceStyleElementSelect; WHERE - WR11 : SIZEOF(QUERY(Style <* SELF.Styles | - 'IFC2X4_RC3.IFCSURFACESTYLESHADING' IN - TYPEOF(Style) - )) <= 1; - WR12 : SIZEOF(QUERY(Style <* SELF.Styles | - 'IFC2X4_RC3.IFCSURFACESTYLELIGHTING' IN - TYPEOF(Style) - )) <= 1; - WR13 : SIZEOF(QUERY(Style <* SELF.Styles | - 'IFC2X4_RC3.IFCSURFACESTYLEREFRACTION' IN - TYPEOF(Style) - )) <= 1; - WR14 : SIZEOF(QUERY(Style <* SELF.Styles | - 'IFC2X4_RC3.IFCSURFACESTYLEWITHTEXTURES' IN - TYPEOF(Style) - )) <= 1; - WR15 : SIZEOF(QUERY(Style <* SELF.Styles | - 'IFC2X4_RC3.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN - TYPEOF(Style) - )) <= 1; + 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 @@ -9788,9 +9795,9 @@ ENTITY IfcSweptAreaSolid ,IfcSurfaceCurveSweptAreaSolid)) SUBTYPE OF (IfcSolidModel); SweptArea : IfcProfileDef; - Position : IfcAxis2Placement3D; + Position : OPTIONAL IfcAxis2Placement3D; WHERE - WR22 : SweptArea.ProfileType = IfcProfileTypeEnum.Area; + SweptAreaType : SweptArea.ProfileType = IfcProfileTypeEnum.Area; END_ENTITY; ENTITY IfcSweptDiskSolid @@ -9803,10 +9810,10 @@ ENTITY IfcSweptDiskSolid StartParam : OPTIONAL IfcParameterValue; EndParam : OPTIONAL IfcParameterValue; WHERE - WR31 : Directrix.Dim = 3; - WR32 : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius); - WR33 : (EXISTS(StartParam) AND EXISTS(EndParam)) OR - (SIZEOF(['IFC2X4_RC3.IFCCONIC', 'IFC2X4_RC3.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1); + 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 @@ -9814,7 +9821,7 @@ ENTITY IfcSweptDiskSolidPolygonal FilletRadius : OPTIONAL IfcPositiveLengthMeasure; WHERE CorrectRadii : NOT(EXISTS(FilletRadius)) OR (FilletRadius >= SELF\IfcSweptDiskSolid.Radius); - DirectrixIsPolyline : 'IFC2X4_RC3.IFCPOLYLINE' IN TYPEOF(SELF\IfcSweptDiskSolid.Directrix); + DirectrixIsPolyline : 'IFC4.IFCPOLYLINE' IN TYPEOF(SELF\IfcSweptDiskSolid.Directrix); END_ENTITY; ENTITY IfcSweptSurface @@ -9823,10 +9830,9 @@ ENTITY IfcSweptSurface ,IfcSurfaceOfRevolution)) SUBTYPE OF (IfcSurface); SweptCurve : IfcProfileDef; - Position : IfcAxis2Placement3D; + Position : OPTIONAL IfcAxis2Placement3D; WHERE - WR1 : NOT('IFC2X4_RC3.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptCurve)); - WR2 : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve; + SweptCurveType : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve; END_ENTITY; ENTITY IfcSwitchingDevice @@ -9836,8 +9842,8 @@ ENTITY IfcSwitchingDevice CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSWITCHINGDEVICETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSWITCHINGDEVICETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSwitchingDeviceType @@ -9848,11 +9854,6 @@ ENTITY IfcSwitchingDeviceType ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; -ENTITY IfcSymbolStyle - SUBTYPE OF (IfcPresentationStyle); - StyleOfSymbol : IfcSymbolStyleSelect; -END_ENTITY; - ENTITY IfcSystem SUPERTYPE OF (ONEOF (IfcBuildingSystem @@ -9871,8 +9872,8 @@ ENTITY IfcSystemFurnitureElement CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCSYSTEMFURNITUREELEMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCSYSTEMFURNITUREELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcSystemFurnitureElementType @@ -9900,8 +9901,8 @@ ENTITY IfcTShapeProfileDef END_ENTITY; ENTITY IfcTable; - Name : STRING; - Rows : LIST [1:?] OF IfcTableRow; + Name : OPTIONAL IfcLabel; + Rows : OPTIONAL LIST [1:?] OF IfcTableRow; Columns : OPTIONAL LIST [1:?] OF IfcTableColumn; DERIVE NumberOfCellsInRow : INTEGER := HIINDEX(Rows[1].RowCells); @@ -9917,10 +9918,11 @@ ENTITY IfcTableColumn; Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; Unit : OPTIONAL IfcUnit; + ReferencePath : OPTIONAL IfcReference; END_ENTITY; ENTITY IfcTableRow; - RowCells : LIST [1:?] OF IfcValue; + RowCells : OPTIONAL LIST [1:?] OF IfcValue; IsHeading : OPTIONAL BOOLEAN; INVERSE OfTable : IfcTable FOR Rows; @@ -9933,8 +9935,8 @@ ENTITY IfcTank CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCTANKTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCTANKTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcTankType @@ -10004,8 +10006,8 @@ ENTITY IfcTelecomAddress MessagingIDs : OPTIONAL LIST [1:?] OF IfcURIReference; WHERE MinimumDataProvided : EXISTS (TelephoneNumbers) OR - EXISTS (PagerNumber) OR EXISTS (FacsimileNumbers) OR + EXISTS (PagerNumber) OR EXISTS (ElectronicMailAddresses) OR EXISTS (WWWHomePageURL) OR EXISTS (MessagingIDs); @@ -10025,8 +10027,8 @@ ENTITY IfcTendon CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCTENDONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCTENDONTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcTendonAnchor @@ -10036,8 +10038,8 @@ ENTITY IfcTendonAnchor CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCTENDONANCHORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCTENDONANCHORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcTendonAnchorType @@ -10063,8 +10065,8 @@ ENTITY IfcTessellatedFaceSet ABSTRACT SUPERTYPE OF (ONEOF (IfcTriangulatedFaceSet)) SUBTYPE OF (IfcTessellatedItem); - Coordinates : IfcCartesianPointList; - Normals : OPTIONAL IfcDirectionList; + Coordinates : IfcCartesianPointList3D; + Normals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue; Closed : OPTIONAL BOOLEAN; INVERSE HasColours : SET [0:1] OF IfcIndexedColourMap FOR MappedTo; @@ -10091,26 +10093,27 @@ ENTITY IfcTextLiteralWithExtent Extent : IfcPlanarExtent; BoxAlignment : IfcBoxAlignment; WHERE - WR31 : NOT('IFC2X4_RC3.IFCPLANARBOX' IN TYPEOF(Extent)); + WR31 : NOT('IFC4.IFCPLANARBOX' IN TYPEOF(Extent)); END_ENTITY; ENTITY IfcTextStyle SUBTYPE OF (IfcPresentationStyle); - TextCharacterAppearance : OPTIONAL IfcCharacterStyleSelect; - TextStyle : OPTIONAL IfcTextStyleSelect; + TextCharacterAppearance : OPTIONAL IfcTextStyleForDefinedFont; + TextStyle : OPTIONAL IfcTextStyleTextModel; TextFontStyle : IfcTextFontSelect; + ModelOrDraughting : OPTIONAL BOOLEAN; END_ENTITY; ENTITY IfcTextStyleFontModel SUBTYPE OF (IfcPreDefinedTextFont); - FontFamily : OPTIONAL LIST [1:?] OF IfcTextFontName; + FontFamily : LIST [1:?] OF IfcTextFontName; FontStyle : OPTIONAL IfcFontStyle; FontVariant : OPTIONAL IfcFontVariant; FontWeight : OPTIONAL IfcFontWeight; FontSize : IfcSizeSelect; WHERE - WR31 : ('IFC2X4_RC3.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND - (SELF.FontSize > 0.); + MeasureOfFontSize : ('IFC4.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND + (SELF.FontSize > 0.); END_ENTITY; ENTITY IfcTextStyleForDefinedFont @@ -10130,15 +10133,6 @@ ENTITY IfcTextStyleTextModel LineHeight : OPTIONAL IfcSizeSelect; END_ENTITY; -ENTITY IfcTextStyleWithBoxCharacteristics - SUBTYPE OF (IfcPresentationItem); - BoxHeight : OPTIONAL IfcPositiveLengthMeasure; - BoxWidth : OPTIONAL IfcPositiveLengthMeasure; - BoxSlantAngle : OPTIONAL IfcPlaneAngleMeasure; - BoxRotateAngle : OPTIONAL IfcPlaneAngleMeasure; - CharacterSpacing : OPTIONAL IfcSizeSelect; -END_ENTITY; - ENTITY IfcTextureCoordinate ABSTRACT SUPERTYPE OF (ONEOF (IfcIndexedTextureMap @@ -10211,7 +10205,7 @@ ENTITY IfcTopologyRepresentation SUBTYPE OF (IfcShapeModel); WHERE WR21 : SIZEOF(QUERY(temp <* SELF\IfcRepresentation.Items | - NOT('IFC2X4_RC3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) + NOT('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp)) )) = 0; WR22 : EXISTS(SELF\IfcRepresentation.RepresentationType); WR23 : IfcTopologyRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items); @@ -10224,8 +10218,8 @@ ENTITY IfcTransformer CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCTRANFORMERTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCTRANFORMERTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcTransformerType @@ -10243,8 +10237,8 @@ ENTITY IfcTransportElement CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcTransportElementType @@ -10279,9 +10273,9 @@ ENTITY IfcTrimmedCurve SenseAgreement : BOOLEAN; MasterRepresentation : IfcTrimmingPreference; WHERE - WR41 : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2])); - WR42 : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2])); - WR43 : NOT('IFC2X4_RC3.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve)); + Trim1ValuesConsistent : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2])); + Trim2ValuesConsistent : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2])); + NoTrimOfBoundedCurves : NOT('IFC4.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve)); END_ENTITY; ENTITY IfcTubeBundle @@ -10291,8 +10285,8 @@ ENTITY IfcTubeBundle CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCTUBEBUNDLETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCTUBEBUNDLETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcTubeBundleType @@ -10303,11 +10297,6 @@ ENTITY IfcTubeBundleType ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcElementType.ElementType)); END_ENTITY; -ENTITY IfcTwoDirectionRepeatFactor - SUBTYPE OF (IfcOneDirectionRepeatFactor); - SecondRepeatFactor : IfcVector; -END_ENTITY; - ENTITY IfcTypeObject SUPERTYPE OF (ONEOF (IfcTypeProcess @@ -10349,7 +10338,7 @@ ENTITY IfcTypeProduct WHERE ApplicableOccurrence : NOT(EXISTS(SELF\IfcTypeObject.Types[1])) OR (SIZEOF(QUERY(temp <* SELF\IfcTypeObject.Types[1].RelatedObjects | - NOT('IFC2X4_RC3.IFCPRODUCT' IN TYPEOF(temp))) + NOT('IFC4.IFCPRODUCT' IN TYPEOF(temp))) ) = 0); END_ENTITY; @@ -10391,8 +10380,8 @@ ENTITY IfcUnitaryControlElement CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR ((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCUNITARYCONTROLELEMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCUNITARYCONTROLELEMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcUnitaryControlElementType @@ -10410,8 +10399,8 @@ ENTITY IfcUnitaryEquipment CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCUNITARYEQUIPMENTTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCUNITARYEQUIPMENTTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcUnitaryEquipmentType @@ -10429,8 +10418,8 @@ ENTITY IfcValve CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCVALVETYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCVALVETYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcValveType @@ -10448,7 +10437,7 @@ ENTITY IfcVector DERIVE Dim : IfcDimensionCount := Orientation.Dim; WHERE - WR1 : Magnitude >= 0.0; + MagGreaterOrEqualZero : Magnitude >= 0.0; END_ENTITY; ENTITY IfcVertex @@ -10474,8 +10463,8 @@ ENTITY IfcVibrationIsolator CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCVIBRATIONISOLATORTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCVIBRATIONISOLATORTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcVibrationIsolatorType @@ -10512,8 +10501,8 @@ ENTITY IfcWall CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCWALLTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCWALLTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcWallElementedCase @@ -10525,9 +10514,9 @@ END_ENTITY; ENTITY IfcWallStandardCase SUBTYPE OF (IfcWall); WHERE - HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X4_RC3.IFCRELASSOCIATES.RELATEDOBJECTS') | - ('IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND - ('IFC2X4_RC3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) + HasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') | + ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND + ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial)) )) = 1; END_ENTITY; @@ -10546,8 +10535,8 @@ ENTITY IfcWasteTerminal CorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR ((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\IfcObject.ObjectType)); - CorrectTypeAssigned : NOT(EXISTS(IsTypedBy)) OR - ('IFC2X4_RC3.IFCWASTETERMINALTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)); + CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR + ('IFC4.IFCWASTETERMINALTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType)); END_ENTITY; ENTITY IfcWasteTerminalType @@ -10566,18 +10555,18 @@ ENTITY IfcWindow OverallWidth : OPTIONAL IfcPositiveLengthMeasure; PredefinedType : OPTIONAL IfcWindowTypeEnum; PartitioningType : OPTIONAL IfcWindowTypePartitioningEnum; + UserDefinedPartitioningType : OPTIONAL IfcLabel; WHERE - CorrectStyleAssigned : NOT(EXISTS(IsTypedBy)) - OR ('IFC2X4_RC3.IFCWINDOWTYPE' IN TYPEOF(IsTypedBy[1].RelatingType)) - OR ('IFC2X4_RC3.IFCWINDOWSTYLE' IN TYPEOF(IsTypedBy[1].RelatingType)); + 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 IfcPositiveLengthMeasure; - TransomThickness : OPTIONAL IfcPositiveLengthMeasure; - MullionThickness : OPTIONAL IfcPositiveLengthMeasure; + LiningThickness : OPTIONAL IfcNonNegativeLengthMeasure; + TransomThickness : OPTIONAL IfcNonNegativeLengthMeasure; + MullionThickness : OPTIONAL IfcNonNegativeLengthMeasure; FirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure; SecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure; FirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure; @@ -10593,9 +10582,9 @@ ENTITY IfcWindowLiningProperties WR34 : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) AND ( - ('IFC2X4_RC3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR - ('IFC2X4_RC3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) ); END_ENTITY; @@ -10610,9 +10599,9 @@ ENTITY IfcWindowPanelProperties ApplicableToType : (EXISTS(SELF\IfcPropertySetDefinition.DefinesType[1])) AND ( - ('IFC2X4_RC3.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) OR - ('IFC2X4_RC3.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) + ('IFC4.IFCWINDOWSTYLE' IN TYPEOF(SELF\IfcPropertySetDefinition.DefinesType[1])) ); END_ENTITY; @@ -10633,6 +10622,10 @@ ENTITY IfcWindowType 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 @@ -10700,9 +10693,9 @@ ENTITY IfcZone WHERE WR1 : (SIZEOF(SELF\IfcGroup.IsGroupedBy) = 0) OR (SIZEOF (QUERY (temp <* SELF\IfcGroup.IsGroupedBy[1].RelatedObjects | - NOT(('IFC2X4_RC3.IFCZONE' IN TYPEOF(temp)) OR - ('IFC2X4_RC3.IFCSPACE' IN TYPEOF(temp)) OR - ('IFC2X4_RC3.IFCSPATIALZONE' IN TYPEOF(temp)) + NOT(('IFC4.IFCZONE' IN TYPEOF(temp)) OR + ('IFC4.IFCSPACE' IN TYPEOF(temp)) OR + ('IFC4.IFCSPATIALZONE' IN TYPEOF(temp)) ))) = 0); END_ENTITY; @@ -10829,6 +10822,20 @@ FUNCTION IfcConstraintsParamBSpline 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; @@ -10888,7 +10895,6 @@ FUNCTION IfcCorrectDimensions THEN RETURN(TRUE); ELSE RETURN(FALSE); END_IF; - ABSORBEDDOSEUNIT : IF Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0)) THEN RETURN(TRUE); @@ -10900,7 +10906,7 @@ FUNCTION IfcCorrectDimensions ELSE RETURN(FALSE); END_IF; ELECTRICCAPACITANCEUNIT : IF - Dim = (IfcDimensionalExponents (-2, 1, 4, 1, 0, 0, 0)) + Dim = (IfcDimensionalExponents (-2, -1, 4, 2, 0, 0, 0)) THEN RETURN(TRUE); ELSE RETURN(FALSE); END_IF; @@ -10998,19 +11004,19 @@ FUNCTION IfcCorrectFillAreaStyle External := SIZEOF(QUERY(Style <* Styles | - 'IFC2X4_RC3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN + 'IFC4.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN TYPEOF(Style))); Hatching := SIZEOF(QUERY(Style <* Styles | - 'IFC2X4_RC3.IFCFILLAREASTYLEHATCHING' IN + 'IFC4.IFCFILLAREASTYLEHATCHING' IN TYPEOF(Style))); Tiles := SIZEOF(QUERY(Style <* Styles | - 'IFC2X4_RC3.IFCFILLAREASTYLETILES' IN + 'IFC4.IFCFILLAREASTYLETILES' IN TYPEOF(Style))); Colour := SIZEOF(QUERY(Style <* Styles | - 'IFC2X4_RC3.IFCCOLOUR' IN + 'IFC4.IFCCOLOUR' IN TYPEOF(Style))); @@ -11041,14 +11047,14 @@ FUNCTION IfcCorrectLocalPlacement : LOGICAL; IF (EXISTS(RelPlacement)) THEN - IF ('IFC2X4_RC3.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN + IF ('IFC4.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN RETURN(?); END_IF; - IF ('IFC2X4_RC3.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN - IF ('IFC2X4_RC3.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN + IF ('IFC4.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN + IF ('IFC4.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN RETURN(TRUE); END_IF; - IF ('IFC2X4_RC3.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN + IF ('IFC4.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN IF (RelPlacement\IfcLocalPlacement.RelativePlacement.Dim = 3) THEN RETURN(TRUE); ELSE @@ -11078,37 +11084,37 @@ FUNCTION IfcCorrectObjectAssignment IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE); IfcObjectTypeEnum.PRODUCT : BEGIN - Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X4_RC3.IFCPRODUCT' IN TYPEOF(temp)))); + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPRODUCT' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.PROCESS : BEGIN - Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X4_RC3.IFCPROCESS' IN TYPEOF(temp)))); + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPROCESS' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.CONTROL : BEGIN - Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X4_RC3.IFCCONTROL' IN TYPEOF(temp)))); + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCCONTROL' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.RESOURCE : BEGIN - Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X4_RC3.IFCRESOURCE' IN TYPEOF(temp)))); + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCRESOURCE' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.ACTOR : BEGIN - Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X4_RC3.IFCACTOR' IN TYPEOF(temp)))); + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCACTOR' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.GROUP : BEGIN - Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X4_RC3.IFCGROUP' IN TYPEOF(temp)))); + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCGROUP' IN TYPEOF(temp)))); RETURN(Count = 0); END; IfcObjectTypeEnum.PROJECT : BEGIN - Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X4_RC3.IFCPROJECT' IN TYPEOF(temp)))); + Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPROJECT' IN TYPEOF(temp)))); RETURN(Count = 0); END; OTHERWISE : RETURN(?); @@ -11127,15 +11133,15 @@ FUNCTION IfcCorrectUnitAssignment DerivedUnitNames : SET OF IfcDerivedUnitEnum := []; END_LOCAL; - NamedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC2X4_RC3.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED))); - DerivedUnitNumber := SIZEOF(QUERY(temp <* Units | ('IFC2X4_RC3.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED))); - MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units | 'IFC2X4_RC3.IFCMONETARYUNIT' IN TYPEOF(temp))); + 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 (('IFC2X4_RC3.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN + 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 (('IFC2X4_RC3.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN + 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; @@ -11180,31 +11186,31 @@ FUNCTION IfcCurveDim (Curve : IfcCurve) : IfcDimensionCount; - IF ('IFC2X4_RC3.IFCLINE' IN TYPEOF(Curve)) + IF ('IFC4.IFCLINE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcLine.Pnt.Dim); END_IF; - IF ('IFC2X4_RC3.IFCCONIC' IN TYPEOF(Curve)) + IF ('IFC4.IFCCONIC' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcConic.Position.Dim); END_IF; - IF ('IFC2X4_RC3.IFCPOLYLINE' IN TYPEOF(Curve)) + IF ('IFC4.IFCPOLYLINE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcPolyline.Points[1].Dim); END_IF; - IF ('IFC2X4_RC3.IFCTRIMMEDCURVE' IN TYPEOF(Curve)) + IF ('IFC4.IFCTRIMMEDCURVE' IN TYPEOF(Curve)) THEN RETURN(IfcCurveDim(Curve\IfcTrimmedCurve.BasisCurve)); END_IF; - IF ('IFC2X4_RC3.IFCCOMPOSITECURVE' IN TYPEOF(Curve)) + IF ('IFC4.IFCCOMPOSITECURVE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcCompositeCurve.Segments[1].Dim); END_IF; - IF ('IFC2X4_RC3.IFCBSPLINECURVE' IN TYPEOF(Curve)) + IF ('IFC4.IFCBSPLINECURVE' IN TYPEOF(Curve)) THEN RETURN(Curve\IfcBSplineCurve.ControlPointsList[1].Dim); END_IF; - IF ('IFC2X4_RC3.IFCOFFSETCURVE2D' IN TYPEOF(Curve)) + IF ('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(Curve)) THEN RETURN(2); END_IF; - IF ('IFC2X4_RC3.IFCOFFSETCURVE3D' IN TYPEOF(Curve)) + IF ('IFC4.IFCOFFSETCURVE3D' IN TYPEOF(Curve)) THEN RETURN(3); END_IF; - IF ('IFC2X4_RC3.IFCPCURVE' IN TYPEOF(Curve)) + IF ('IFC4.IFCPCURVE' IN TYPEOF(Curve)) THEN RETURN(3); END_IF; RETURN (?); @@ -11301,7 +11307,7 @@ FUNCTION IfcDimensionsForSiUnit VOLT : RETURN (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0)); FARAD : RETURN (IfcDimensionalExponents - (-2, -1, 4, 1, 0, 0, 0)); + (-2, -1, 4, 2, 0, 0, 0)); OHM : RETURN (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0)); SIEMENS : RETURN (IfcDimensionalExponents @@ -11405,10 +11411,10 @@ FUNCTION IfcGetBasisSurface END_LOCAL; Surfs := []; - IF 'IFC2X4_RC3.IFCPCURVE' IN TYPEOF (C) THEN + IF 'IFC4.IFCPCURVE' IN TYPEOF (C) THEN Surfs := [C\IfcPCurve.BasisSurface]; ELSE - IF 'IFC2X4_RC3.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN + IF 'IFC4.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN @@ -11505,42 +11511,6 @@ FUNCTION IfcMlsTotalThickness RETURN (Max); END_FUNCTION; -FUNCTION IfcNoOfLayers - (Element : IfcElement ) - : INTEGER; - - LOCAL - Association : BAG OF IfcRelAssociates := []; - MaterialAssociation : SET OF IfcRelAssociatesMaterial := []; - END_LOCAL; - - Association := USEDIN(Element, 'IFC2X4_RC3.IFCRELASSOCIATES.RELATEDOBJECTS'); - - IF SIZEOF (Association) > 0 THEN - REPEAT i := 1 TO HIINDEX(Association); - IF ('IFC2X4_RC3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(Association[i])) THEN - MaterialAssociation := MaterialAssociation + Association[i]; - END_IF; - END_REPEAT; - END_IF; - - IF (SIZEOF(MaterialAssociation) <> 1) THEN - RETURN (?); - ELSE - IF 'IFC2X4_RC3.IFCMATERIAL' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN - RETURN (1); - END_IF; - IF 'IFC2X4_RC3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN - RETURN (SIZEOF(MaterialAssociation[1].RelatingMaterial.ForLayerSet.MaterialLayers)); - END_IF; - IF 'IFC2X4_RC3.IFCMATERIALLIST' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN - RETURN (?); - END_IF; - END_IF; - - RETURN (?); -END_FUNCTION; - FUNCTION IfcNormalise (Arg : IfcVectorOrDirection) : IfcVectorOrDirection; @@ -11559,7 +11529,7 @@ FUNCTION IfcNormalise IF NOT EXISTS (Arg) THEN RETURN (?); ELSE - IF 'IFC2X4_RC3.IFCVECTOR' IN TYPEOF(Arg) THEN + IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg) THEN BEGIN Ndim := Arg\IfcVector.Dim; V.DirectionRatios := Arg\IfcVector.Orientation.DirectionRatios; @@ -11587,7 +11557,7 @@ FUNCTION IfcNormalise REPEAT i := 1 TO Ndim; V.DirectionRatios[i] := V.DirectionRatios[i]/Mag; END_REPEAT; - IF 'IFC2X4_RC3.IFCVECTOR' IN TYPEOF(arg) THEN + IF 'IFC4.IFCVECTOR' IN TYPEOF(arg) THEN Vec.Orientation := V; Result := Vec; ELSE @@ -11729,7 +11699,7 @@ FUNCTION IfcScalarTimesVector IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN RETURN (?) ; ELSE - IF 'IFC2X4_RC3.IFCVECTOR' IN TYPEOF (Vec) THEN + IF 'IFC4.IFCVECTOR' IN TYPEOF (Vec) THEN V := Vec\IfcVector.Orientation; Mag := Scalar * Vec\IfcVector.Magnitude; ELSE @@ -11772,174 +11742,208 @@ END_FUNCTION; FUNCTION IfcShapeRepresentationTypes (RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL; - - LOCAL - Count : INTEGER := 0; - END_LOCAL; - - CASE RepType OF - 'Curve2D' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCCURVE' IN TYPEOF(temp)) - AND (temp\IfcCurve.Dim = 2))); - END; - - 'Curve3D' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCCURVE' IN TYPEOF(temp)) - AND (temp\IfcCurve.Dim = 3))); - END; - - 'Surface2D' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCSURFACE' IN TYPEOF(temp)) - AND (temp\IfcSurface.Dim = 2))); - END; - - 'Surface3D' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCSURFACE' IN TYPEOF(temp)) - AND (temp\IfcSurface.Dim = 3))); - END; - - 'AdvancedSurface' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | 'IFC2X4_RC3.IFCBSPLINESURFACE' IN TYPEOF(temp))); - END; - - 'Annotation2D' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ( - SIZEOF(TYPEOF(temp) * [ - 'IFC2X4_RC3.IFCPOINT', - 'IFC2X4_RC3.IFCCURVE', - 'IFC2X4_RC3.IFCGEOMETRICCURVESET', - 'IFC2X4_RC3.IFCANNOTATIONFILLAREA', - 'IFC2X4_RC3.IFCDEFINEDSYMBOL', - 'IFC2X4_RC3.IFCTEXTLITERAL', - 'IFCPRESENTATIONDIMENSIONINGRESOURCE.IFCDRAUGHTINGCALLOUT']) = 1) - )); - END; - - 'GeometricSet' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCGEOMETRICSET' IN TYPEOF(temp)) - OR ('IFC2X4_RC3.IFCPOINT' IN TYPEOF(temp)) - OR ('IFC2X4_RC3.IFCCURVE' IN TYPEOF(temp)) - OR ('IFC2X4_RC3.IFCSURFACE' IN TYPEOF(temp)))); - END; - - 'GeometricCurveSet' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCGEOMETRICCURVESET' IN TYPEOF(temp)) - OR ('IFC2X4_RC3.IFCGEOMETRICSET' IN TYPEOF(temp)) - OR ('IFC2X4_RC3.IFCPOINT' IN TYPEOF(temp)) - OR ('IFC2X4_RC3.IFCCURVE' IN TYPEOF(temp)))); - REPEAT i:=1 TO HIINDEX(Items); - IF ('IFC2X4_RC3.IFCGEOMETRICSET' IN TYPEOF(Items[i])) + + 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 - IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC2X4_RC3.IFCSURFACE' IN TYPEOF(temp))) > 0) - THEN - Count := Count - 1; - END_IF; + Count := Count - 1; END_IF; - END_REPEAT; - END; - - 'Tesselation' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | 'IFC2X4_RC3.IFCTESSELATEDITEM' IN TYPEOF(temp))); - END; - - 'SurfaceModel' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ - 'IFC2X4_RC3.IFCSHELLBASEDSURFACEMODEL', - 'IFC2X4_RC3.IFCFACEBASEDSURFACEMODEL', - 'IFC2X4_RC3.IFCFACETEDBREP', - 'IFC2X4_RC3.IFCFACETEDBREPWITHVOIDS'] * TYPEOF(temp)) >= 1 - )); - END; - - 'SolidModel' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCSOLIDMODEL' IN TYPEOF(temp)))); - END; - - 'SweptSolid' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([ - 'IFC2X4_RC3.IFCEXTRUDEDAREASOLID', - 'IFC2X4_RC3.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1 - ) AND (SIZEOF([ - 'IFC2X4_RC3.IFCEXTRUDEDAREASOLIDTAPERED', - 'IFC2X4_RC3.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0 - ) - )); - END; - - 'AdvancedSweptSolid' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ - 'IFC2X4_RC3.IFCSURFACECURVESWEPTAREASOLID', - 'IFC2X4_RC3.IFCFIXEDREFERENCESWEPTAREASOLID', - 'IFC2X4_RC3.IFCEXTRUDEDAREASOLIDTAPERED', - 'IFC2X4_RC3.IFCREVOLVEDAREASOLIDTAPERED', - 'IFC2X4_RC3.IFCSWEPTDISKSOLID'] * TYPEOF(temp)) >= 1 - )); - END; - - 'CSG' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ - 'IFC2X4_RC3.IFCBOOLEANRESULT', - 'IFC2X4_RC3.IFCCSGPRIMITIVE3D', - 'IFC2X4_RC3.IFCCSGSOLID'] * TYPEOF(temp)) >= 1 - )); - END; - - 'Clipping' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp)))); - END; - - 'Brep' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCFACETEDBREP' IN TYPEOF(temp)))); - END; - - 'AdvancedBrep' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCADVANCEDBREP' IN TYPEOF(temp)))); - END; - - 'BoundingBox' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCBOUNDINGBOX' IN TYPEOF(temp)))); - IF (SIZEOF(Items) > 1) - THEN - Count := 0; - END_IF; - END; - - 'SectionedSpine' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCSECTIONEDSPINE' IN TYPEOF(temp)))); - END; - - 'LightSource' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCLIGHTSOURCE' IN TYPEOF(temp)))); - END; - - 'MappedRepresentation' : - BEGIN - Count := SIZEOF(QUERY(temp <* Items | ('IFC2X4_RC3.IFCMAPPEDITEM' IN TYPEOF(temp)))); - END; - - OTHERWISE : RETURN(?); - END_CASE; - RETURN (Count = SIZEOF(Items)); + 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 @@ -11969,14 +11973,14 @@ FUNCTION IfcTaperedSweptAreaProfiles Result : LOGICAL := FALSE; END_LOCAL; - IF ('IFC2X4_RC3.IFCPARAMETERIZEDPROFILEDEF' IN TYPEOF(StartArea)) THEN - IF ('IFC2X4_RC3.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN + 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 ('IFC2X4_RC3.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN + IF ('IFC4.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN Result := (StartArea :=: EndArea\IfcDerivedProfileDef.ParentProfile); ELSE Result := FALSE; @@ -11998,28 +12002,28 @@ FUNCTION IfcTopologyRepresentationTypes 'Vertex' : BEGIN Count := SIZEOF(QUERY(temp <* Items | - ('IFC2X4_RC3.IFCVERTEX' IN TYPEOF(temp)))); + ('IFC4.IFCVERTEX' IN TYPEOF(temp)))); END; 'Edge' : BEGIN Count := SIZEOF(QUERY(temp <* Items | - ('IFC2X4_RC3.IFCEDGE' IN TYPEOF(temp)))); + ('IFC4.IFCEDGE' IN TYPEOF(temp)))); END; 'Path' : BEGIN Count := SIZEOF(QUERY(temp <* Items | - ('IFC2X4_RC3.IFCPATH' IN TYPEOF(temp)))); + ('IFC4.IFCPATH' IN TYPEOF(temp)))); END; 'Face' : BEGIN Count := SIZEOF(QUERY(temp <* Items | - ('IFC2X4_RC3.IFCFACE' IN TYPEOF(temp)))); + ('IFC4.IFCFACE' IN TYPEOF(temp)))); END; 'Shell' : BEGIN Count := SIZEOF(QUERY(temp <* Items | - ('IFC2X4_RC3.IFCOPENSHELL' IN TYPEOF(temp)) - OR ('IFC2X4_RC3.IFCCLOSEDSHELL' IN TYPEOF(temp)))); + ('IFC4.IFCOPENSHELL' IN TYPEOF(temp)) + OR ('IFC4.IFCCLOSEDSHELL' IN TYPEOF(temp)))); END; 'Undefined': RETURN(TRUE); OTHERWISE : RETURN(?); @@ -12083,14 +12087,14 @@ FUNCTION IfcVectorDifference RETURN (?) ; ELSE BEGIN - IF 'IFC2X4_RC3.IFCVECTOR' IN TYPEOF(Arg1) THEN + IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN Mag1 := Arg1\IfcVector.Magnitude; Vec1 := Arg1\IfcVector.Orientation; ELSE Mag1 := 1.0; Vec1 := Arg1; END_IF; - IF 'IFC2X4_RC3.IFCVECTOR' IN TYPEOF(Arg2) THEN + IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg2) THEN Mag2 := Arg2\IfcVector.Magnitude; Vec2 := Arg2\IfcVector.Orientation; ELSE @@ -12132,14 +12136,14 @@ FUNCTION IfcVectorSum RETURN (?) ; ELSE BEGIN - IF 'IFC2X4_RC3.IFCVECTOR' IN TYPEOF(Arg1) THEN + IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN Mag1 := Arg1\IfcVector.Magnitude; Vec1 := Arg1\IfcVector.Orientation; ELSE Mag1 := 1.0; Vec1 := Arg1; END_IF; - IF 'IFC2X4_RC3.IFCVECTOR' IN TYPEOF(Arg2) THEN + IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg2) THEN Mag2 := Arg2\IfcVector.Magnitude; Vec2 := Arg2\IfcVector.Orientation; ELSE