IfcTypeObject and NOTDEFINED web specification statement
I need some clarification of the following statement or, at least, some examples:
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.
IfcWall <-- IfcRelDefinesByType --> IfcWallType
These are valid scenarios:
- IfcWallType.PredefinedType = PARTITIONING, IfcWall.PredefinedType = NULL
- IfcWallType.PredefinedType = USERDEFINED, IfcWallType.ElementType = FOOBAR, IfcWall.PredefinedType = NULL
- IfcWallType.PredefinedType = NOTDEFINED, IfcWall.PredefinedType = PARTITIONING
- IfcWallType.PredefinedType = NULL, IfcWall.PredefinedType = NULL
These are invalid scenarios:
- IfcWallType.PredefinedType = PARTITIONING, IfcWall.PredefinedType = PARTITIONING
- IfcWallType.PredefinedType = USERDEFINED, IfcWallType.ElementType = FOOBAR, IfcWall.PredefinedType = PARTITIONING
- IfcWallType.PredefinedType = NULL, IfcWall.PredefinedType = PARTITIONING
A bit clearer. But I can imagine someone who is reading that specification section for the first time, he/she should wonder similarly. Your additional answer helps to understand it, although the logic behind it should be explicitly written in the specification paragraph, i.m.o.
Maybe a quoted example, as in many other specification sections? This is a quite common subject for end users while creating or enriching containers.
Isn't this already explained here sufficiently? https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/concepts/Object_Attributes/Object_Predefined_Type/content.html
I think we just need to harness the power of hypertext to really create a comprehensive easily browsable documentation. We're already able of course to list concept templates on the entity pages based on their applicability, but how can we somehow indicate that that particular template is relevant to the predefined type attribute (meaning we don't need to document the attribute in 1000 places). It's a bit unfortunate that the PredefinedType attribute is a weird case because it doesn't exist on the abstract level. Maybe we should have went for a global enumeration, and constrain it at the concrete level with where rules (or use attribute redeclaration in express).