Geometry Gym IFC components don’t conform to typical Grasshopper conventions.
IFC has a primary hierarchy for the elements within (spatial breakdown), and an element has a mandatory host to be contained in a spatial element, or to decompose a parent element.
But years ago we decided to make the host element a mandatory input to a component, rather than require all the elements to be wired into a host. This is also because there is a secondary placement hierarchy where the product placement should be relative to it’s host. Rather than force users to comply with this, it’s easier to mask this (and other complexity) back of house.
Other reasons there are orphaned chains of components without a single root collector component, is that some users want to edit an existing ifc data set. Wiring all these changes into a single root component isn’t ideal.
So our work around at present is to force a staged solution. We have an event watcher and multiple steps to solving occurs, and the file stream is forced to delay until all other ggIFC components have solved.
If shape diver is looking for components with upstream data expiry, it might be never forcing our file stream component to recompute if it is orphaned.
I have considered a number of times a more typical approach, but have never really come up with an acceptable solution (ie in a bottom up approach, how do you warn a user an element isn’t wired into an appropriate host when you can’t detect that at compute time). And do you force any editing component to somehow be wired into a root component. We don’t treat the IFC objects as immutable and part of this is because of the multiple tiers of relationships (ie a material that is common to many elements).
I’m more than happy to discuss this. The streaming did work in SD when we looked at this but it was some time ago and perhaps there was subsequent changes that have stopped streaming to work.