propagate_voids_via_aggregates

Function propagate_voids_via_aggregates 

Source
pub fn propagate_voids_via_aggregates(
    void_index: &mut FxHashMap<u32, Vec<u32>>,
    aggregate_children: &FxHashMap<u32, Vec<u32>>,
)
Expand description

Propagate openings from hosts that aggregate parts to every aggregated descendant — any depth, any type (IfcWallElementedCase panels, IfcRoof → IfcSlab skylights, nested assemblies, …).

The IFC4 spec allows an opening on a host whose geometry is distributed across aggregated parts; without propagation the cut runs against an empty host mesh and produces a “silent no-op” while the parts cover what should be the window/door hole.

Single shared kernel for all three pipelines (server process_geometry, wasm buildPrePassOnce, wasm buildPrePassStreaming) so they cannot drift on which descendants receive the cut.

Propagation is an iterative worklist walk with a per-host visited set (AGENTS.md “Bounding walks over file-supplied references”: no recursion to overflow, and a cycle or fan-in in IfcRelAggregates is visited once per host). Existing void entries for a part are extended (deduplicated) so an authored direct void is never overwritten.