IFC 4.3.2.20240128 (IFC4X3_ADD2) under development

4.1.3.2 Object Predefined Type

Many object occurrences have an attribute named PredefinedType being a specific enumeration. Such predefined type essentially provides another level of "classification by inheritance" to further differentiate objects without the need for additional sub types. Predefined types are not just informational; various rules apply such as applicable property sets, part composition, and distribution ports. Such predefined types are added by selecting the correct enumerator for the attribute PredefinedType. If a custom value is needed, the attribute ObjectType has to be used to define such custom type, whereas the PredefinedType is set to USERDEFINED.

The main attributes to be provided for an Object Occurrence Predefined Type are:

  • PredefinedType: holds the entity specific enumeration of predefined types to further classify the entity
  • ObjectType: allows for a custom value, if no applicable enumerator can be found

If the object is typed by an IfcTypeObject, then the PredefinedType at the IfcObject occurrence shall only be used if the PredefinedType at IfcTypeObject is set to NOTDEFINED.

Note that the PredefinedType attribute itself is defined at the leaf classes of the inheritance hierarchy with a specific enumeration attribute for that given leaf class.

The following diagram shows the generic classes and relationships used when applying this concept. In addition, concepts may have particular importance to common or standardised industry practices and scenarios. For these specific usage scenarios, the table below shows a recommended list of general usage patterns that users may adopt.

G IfcObject IfcObject 1. GlobalId [1:1] 2. OwnerHistory [0:1] 3. Name [0:1] 4. Description [0:1]      HasAssignments [0:?]      Nests [0:1]      IsNestedBy [0:?]      HasContext [0:1]      IsDecomposedBy [0:?]      Decomposes [0:1]      HasAssociations [0:?] UserDefinedType 5. ObjectType [0:1]      IsDeclaredBy [0:1]      Declares [0:?]      IsTypedBy [0:1]      IsDefinedBy [0:?] ... PredefinedType PredefinedType IfcLabel IfcLabel IfcObject:ObjectType1->IfcLabel:IfcLabel0 IfcRelDefinesByType IfcRelDefinesByType 1. GlobalId [1:1] 2. OwnerHistory [0:1] 3. Name [0:1] 4. Description [0:1] 5. RelatedObjects [1:?] 6. RelatingType [1:1] IfcObject:IsTypedBy1->IfcRelDefinesByType:RelatedObjects0 IfcTypeObject IfcTypeObject 1. GlobalId [1:1] 2. OwnerHistory [0:1] 3. Name [0:1] 4. Description [0:1]      HasAssignments [0:?]      Nests [0:1]      IsNestedBy [0:?]      HasContext [0:1]      IsDecomposedBy [0:?]      Decomposes [0:1]      HasAssociations [0:?] 5. ApplicableOccurrence [0:1] 6. HasPropertySets [1:?]      Types [0:1] ... TypeUserdefinedType ElementType TypePredefinedType PredefinedType IfcRelDefinesByType:RelatingType1->IfcTypeObject:IfcTypeObject0
Figure 4.1.3.2.A

General Usage

ApplicableEntity
IfcObject
Table 4.1.3.2.B

Edit on Github


Is this page difficult to understand? Let us know!