Extract georeferencing info from on-demand store (source buffer + entityIndex).
Bridges to the entity-based georef extractor by resolving entities lazily.
Memoized per store. When IfcMapConversion/IfcProjectedCRS claim no georeference
(e.g. IFC2x3 files that carry CRS in ePSet_MapConversion) the underlying
scan considers every IfcPropertySet to match by name. A conservative resident
byte filter skips ordinary names without decoding their property lists.
The viewer calls this on the load/render path (ViewportContainer's Cesium-availability check), which
re-runs on every streamed geometry batch, so without caching the cost is
O(batches x propertySets) and can turn a multi-second load into minutes.
Caching collapses it to a single scan per store. Safe because the result is a
pure function of the immutable source + entityIndex; georef edits are layered
on top later in getEffectiveGeoreference(), not here.
Extract georeferencing info from on-demand store (source buffer + entityIndex). Bridges to the entity-based georef extractor by resolving entities lazily.
Memoized per store. When IfcMapConversion/IfcProjectedCRS claim no georeference (e.g. IFC2x3 files that carry CRS in ePSet_MapConversion) the underlying scan considers every IfcPropertySet to match by name. A conservative resident byte filter skips ordinary names without decoding their property lists. The viewer calls this on the load/render path (ViewportContainer's Cesium-availability check), which re-runs on every streamed geometry batch, so without caching the cost is O(batches x propertySets) and can turn a multi-second load into minutes. Caching collapses it to a single scan per store. Safe because the result is a pure function of the immutable source + entityIndex; georef edits are layered on top later in getEffectiveGeoreference(), not here.