Inconsistent results from solid difference

Hi! I have got this pretty simple definition where I try to make joints of vertical elements with a horizontal one so they can all be laser cut and put together. The trouble is that although the definition works fine creating the joints on the vertical elements it doesn’t seem to work with all joints on the horizontal element. Within the grasshopper file I also tried doing the intersections one by one by listing each vertical element at a time and strangely enough it then works in all instances. I have being trying to figure this out for quite a while now with no luck, I hope someone can help me out! Thanks in advance!

(upload://8MUQRmZip0qPKU7R83uGcA30jEc.JPG)intersections.gh (786.2 KB)

I have a C# that does that … but I guess that it could be useless to you (In the images below: your breps are reworked: only BrepFaces are used - shown before thickened both sides at once [there’s no native component that does that]).

So the only thing that I can do is provide some general quidelines:

  1. Your vertical breps appear ro be a kind of sandwich (so to speak). They slow down considerably any solid opp given the fact that Rhino is a surface modeller. There’s a Method to merge coPlanar faces … but Rhino can’t merge the curvy sides.
  2. You don’t need solids for that type of stuff: just BrepFaces that boost the whole proccess by a factor of 100+ (the results below are done in real-time [max 50 milliseconds with an i7] and without // proccesing).
  3. ALWAYS mastermind some policy that solves portions of the whole (see below where you can choose how many vertical and connector items to play with).
  4. Solid operations are prone to document tolerarnce. 99.9999% of novice failures with regard solid stuff are related with wrong/incorrect tolerances (or bad handling of a non rectilinear geometry object).

BTW:

1.Create your BrepFaces. Take care for a circular arrangement (if not sort the centers and do a sync sort on the Faces).
2.Make a union box and get one vertical edge.
3. Deploy planes in pairs (their distance: connectorThickness) using that edge. Decide how many pairs you want to use,
4. Decide how many vertical BrepFaces you want to use.
5. Section breps with pairs of planes (sections yield a curve: check their orientation as well: all the start points “at the same side” etc etc).
6. For each curve, define 3 planes: Origins at start, mid, end, XDir the tangents at start,mid,end and YDir the Plane.WorldXY.ZAxis Define 6 points as follows: Get the start,mid, end and +/- the vector (plane.ZAxis * brepThickness/2.0) . Sample them into 4 point Lists (top/bottom interior/exterior).
7. Make polylines from them (the yellow profiles as above) and then do the solid horizontal connectors. Notice that up to this point no solid difference/intersection opps are used for making the connectors (meaning almost real-time stuff). Some policy is required in case of a non closed ring (but that’s rather easy to master).
8. At phase 6 create as well mini solids that could serve for the vertical member mortises (that takes time, mind > see 4).