This is still part of the bigger part.
Almost there however, I still encounter some new challenges. .
My current status;
There is a list A, with surface.
There is a list B, with surfaces (openings) with the same branch name as in list A.
So for instance;
surfaces in List A branch {0;0} have to get openings, which are present in list B branch {0;0}
surfaces in List A branch {0;1} have to get openings, which are present in list B branch {0;1}
etc.
I though the region difference would do the trick now. unfortunately this is not the case. ( I think because there are also empty branches {2;0} this is correct, but also if I delete {2;0} it is now working…).
This is a sneaky difficult problem from a logic point of view.
There are a number of problems with the organization of the original panels that make the logic to cull through this much more complex then it needs to be. To simplify the problem:
Remove all duplicate geometry. I Baked out the original objects an used SelDup to remove them.
Joining the main wall panels really helps simplify the logic. At the end of this you could explod back into the separate wall panels if you need.
The Clash component was used to determine the clash pairs and in series with a List Cull component it identifies the surfaces that have no intersection. Those surfaces that have no intersection, get merged back into the list at the end.
The attached files are for Rhino 7 WIP. Running Rhino 6 collision many to many probably could work here too. But, since Clash was mentioned, I thought I would give it a try.
Interesting to note a couple logic challenges here. The Clash component really is only used here to determine the objects that have no clash in them.
And because one joined panel object has two cutouts, all cutters are run against all the wall panels. Unlike previous Clash examples that isolate each pair to boolean.