Compose the storey's whole placement chain into a world-frame plan frame, in
metres.
A storey with NO ObjectPlacement — it is OPTIONAL on IfcProduct, and real
files leave it out — gets the identity, which is the answer rather than a
guess: a product with no placement carries no transform, and the authoring
side materialises exactly that (an IfcLocalPlacement at the origin with no
PlacementRelTo) before it writes.
Returns null — refusing, never approximating — when:
the storey itself will not read, so there is nothing to say;
any link in the chain will not read (a missing RelativePlacement,
Location, or a dangling reference), so only part of the chain could be
composed and a partial chain moves the geometry by the wrong amount;
any link tips out of plan — an IfcAxis2Placement3D.Axis that is not
+Z — because a tilted chain has no planar inverse, and projecting it
yields a room that is turned rather than one that is obviously wrong;
the chain closes on itself, so composing every link of it reaches no
world frame to express the result in.
Compose the storey's whole placement chain into a world-frame plan frame, in metres.
A storey with NO
ObjectPlacement— it is OPTIONAL onIfcProduct, and real files leave it out — gets the identity, which is the answer rather than a guess: a product with no placement carries no transform, and the authoring side materialises exactly that (anIfcLocalPlacementat the origin with noPlacementRelTo) before it writes.Returns
null— refusing, never approximating — when:RelativePlacement,Location, or a dangling reference), so only part of the chain could be composed and a partial chain moves the geometry by the wrong amount;IfcAxis2Placement3D.Axisthat is not +Z — because a tilted chain has no planar inverse, and projecting it yields a room that is turned rather than one that is obviously wrong;