What does Solid Intersection expect as input?

Solid Intersection documentation says it function is to: “Perform a solid intersection on two Brep sets”

The parameters A, B are described as “First Brep set”, and “Second Brep set” in the (almost nonexistent) documentation.

My thinking is that the term “sets” means that A and B can be lists of closed Breps.

I am trying to make a waffle structure by intersecting a bunch of simple boxes at the moment. I have 8 waffle segments in X-direction , and 11 in Y-direction.

If I use List Item to present a single Brep to each of A, B, it works.

If I use ListItem to present 2 Brep in A and 2 in B, it fails.

So I thought, OK, I am wrong when the documentation says “sets” means I have to take the Solid Union of the X set and the Y set. Nope, that doesn’t work.

Then I thought OK, the documentation is wrong about being “sets”. But it will still do them presented one a time in A, B, so I tried CrossReference to do that

So, I am mystified…

You got a file?

Peobably you mean somthing like this.

1.gh (8.6 KB)

The definition where this came up is large, so I hoped that somebody could answer based on what Solid Intersection expects. I have now made a small version.

An expert user showed me how to do it correctly - you need to graft up one of the two arguments to Solid Intersection. But there is nothing in the documentation that says this, and it is contrary to the behavior of other components.

The example that Mahan posted is not quite what I am doing - that makes something that looks like a waffle, but I meant waffle as the term is used in constructing shapes from two orthogonal sets of plates.

solid intersection problem.gh (16.1 KB)

It’s a bit tricky, but the components are working all the same way.
Let me try to explain (i hope i don’t make a mess, it’s 03:18 and i’m sleepy)

Each solid is a “set” by itself, and can intersect/unite/difference with another solid like a set would do.
Then… the parameters tooltip call the list of solids “set” again, and that can make confusion. (a set of sets)

This is an example scenario, “A” contains 1 solid and “B” 4 solids: (pic1)

With solid difference you get: (pic 2)

What happened?
Every solid in A was iteratively “subtracted” with every solids in B. And we like it this way. :laughing:
(((A \setminus B0) \setminus B1) \setminus B2) \setminus B3

If it didn’t work exactly that way, we would have been forced to do something like this: (pic 3)

Which is a mess!! And if the B amount is variable we couldn’t even have a proper solution!

So, we don’t want a behavior like this (fake): (pic 4)

Where the solid in A is intersected with the first solid in B and stop. Then A with the second in B and stop. etc…

Because then we would have the solid difference work the same way (fake): (pic 5)

Where the solid in A is subtracted with the first solid in B and stop. Then A minus the second in B and stop. etc…

No, the component are working all with the same logic, and we like it as in picture 2.
Every (1 by 1) object in A is “combined” with all the objects in B.

So, lastly, this behavior is correct: (pic 6)

Because following the same logic of picture 2:
(((A \cap B0 ) \cap B1 ) \cap B2 ) \cap B3 is nothing!
…because the elements in B don’t intersect each other… they don’t share a common solid volume.

If you want a particular intersection with an object in A and an object in B you have to do the proper branching and item selecting.

I might have done a mess… feel free to correct, but i’m enough sure the concept is there…