If I create a regular
IfcProduct subclass, I can nominate position using
ObjectPlacement allows an
IfcAxis2Placement3D which allows a
Location, and through the
RefDirection, it allows to specify a “rotation” as well. I do not see any ability to specify scale.
IfcProductRepresentation allows a list of
IfcRepresentation (one per context). One option is to directly place an
IfcShapeRepresentation. This does not give me any placement / transformation capabilities, but does allow me to share the shape representation with other products.
Alternatively, I can place an
IfcRepresentationMap using an
IfcRepresentationMap allows another
IfcAxis2Placement3D, where I can specify location and rotation. The
IfcMappedItem allows me to place an
IfcCartesianTransformationOperator3D. This again allows me to specify location, rotation (this time by specifying all axis), and scale. However, scale is a single
IfcReal, so I cannot scale along an axis.
This leads to a few questions:
- Most 3D geometric systems I’ve used have a local axis, and a global axis. In IFC, as shown above, there seems to be a global axis (e.g. through the world axis), and a local axis through ObjectPlacement. However, there also seems to be additional axes through the
IfcRepresentationMapand indirectly through the
IfcMappedItem. I wonder if the number of axes can be reduced?
- How come scale can only be defined at the
IfcMappedItemlevel, and not at the
- How come scale is only defined as a single value, and not as a per-axis value? How, then, would you handle “mirroring” transformations across a particular axis? Being able to mirror a shared representation would be very useful and efficient.
- In the
IfcAxis2Placement3D, a location is specified first, followed by 2 axes. The third axis is derived. However, in the
IfcCartesianTransformationOperator3D, the 2 axes (though not the same 2 as the
IfcAxis2Placement3D) are specified first, followed by the location and scale. And only after that the third axis is specified, whereas it could be derived. Why is there this inconsistency in attribute order and axis derivation?
Using IfcRepresentationMap is the way to share one representation (often of type IfcShapeRepresentation) by many products., yet it is clearly possible to simply reference the same
IfcShapeRepresentationwithout needing to create a representation map, thus achieving the ability to share the representation. Admittedly, you do lose the ability to perform a cartesian transformation, but that can be applied using the
ObjectPlacementassuming the transformation is the same for all representations and you don’t need to apply a scale. I only see real benefits of using this method if you have many small shape representations put together to build up a larger representation. In reality, I don’t see vendors really offering this ability.