Two Cylinders + Loft, how to get them into a solid Brep?

New Newbie Question.

In my “self-learning-grasshopper” project, I bumped into this question and cannot find the answer. Main process is: getting from curves to surfaces and then into breps.

For the case I made a simple example of two cylinders partly overlapping. And a loft in between to close the “gap”. In te previews it looks great, but as soon I try to make a brep (for the next step of my project). I run into this issue:

  • I tried Brep Join. No luck it gives me 3 breps.
  • Solid Union , give invalid brep
  • I also tried without closing the caps (so only using the surfaces) to get these together first, but I have no idea how to get two cylinders + a loft into one surface.

There must be some heavy “in between” steps, because I see the result of these processes in other projects (on internet), but cannot find a good tutorial/video on how it is done.
So I am in need of some good directions.

Regards, Eef

CylindersAndLoft.gh (26.6 KB)

PS: This example was made by baking three 3 objects out off the project. The loft was build by finding the intersection of the two cylinder (Brep |Brep)
Using the endpoints I made a subcurve around one cylindre
Found the tangent point on the other, made two line and pull them against the cylinder surface.

I sort of guessed at what your want:


This is 2 closed Breps - I’m not sure if that will work for you , or if you ineed a siingle one.

This solution would have been a bit simpler with the original data for the cylinders, but you should be able to get the general idea. Also, being far from the origin always requires a bit more effort.
Cyl-Cone.gh (34.2 KB)

1 Like

Thank you, Birk,

For your fast answer. As I understand your procedure is to:

  • turn all three into breps first (by capsing the cylinders) and by turning the loft into a cone. And then SolidDiff it.

For the endresult anything would be OK, what I can turn into a good STEP file.
But for learning… I would surely know how it should be done.

What original data do you need for the other solution? I can isolate it from my project.
It would take a bit of time to weave out of the grasshopper canvas.

Your are close - but not quite correct. The trick is to cap the cylinders, and then, for the horizontal one, put a cone on the intersecting end and extend the height of the cone to a point that gives the desired connection shape.

This makes the cone poke out of the other side of the vertical cylinder, so it’s necessary to SDiff the 2 and then pick the part of the cone that you want.

I guessed at the height of the cone, making it look like it was the same as your Loft surface, but this was just a guess. I used the horizontal cylinder’s end surface as the base of the cone because the radius of the cylinder was not directly available. But now that I think about it, knowing that radius would not have changed the method I used since it is the end face of the cylinder that forms the base of the cone.

I think Rhino can export Step files ok - but I’ve turned off everything except STL, Obj, and 3MF.

@Birk_Binnard said: “This solution would have been a bit simpler with the original data for the cylinders,”
I made a quick version of the curves, what I used to make the cylinders + loft.
In the gh file is the best I can make of it, but maybe there are much better ways to integrate this loft directly into the resulating brep.


cylinders + loft CURVES.gh (8.8 KB)

I redid all the geometry from scratch, so my dimensions will not be exactly correct, but they are easy to tweak.


My previous file failed to account for the X displacement of the horizontal cylinder - but this one accounts for that.
cyl-extrude-bb1.gh (21.2 KB)

1 Like

Thank you, Birk.

When I select the 2 x (Breps + Caps) you made + (Part of Cone ) I am able to “Solid Union” them into one Closed Brep.

To refine the cone, I will (as you did) use the top Circle and find the centre of the cone using a line, tangent to both cylinders. This to make it an “automatic” result of the placement + sizes of these cylinders.

Using the ideas I have received from @Birk_Binnard I was able to find a comfortable solution I am happy to share.

  • Main conclusion I ended with is: This is best done by creating 2 or more breps and join, differentate etc. them.

I not only tried the “cone” as joint, but also a “cylinder” and them came to the idea to use two connected spheres. Just create a sphere, fitting to each cylinder and then join them.
Searching on the forum I found that there was no option to just join two spheres. (at least I could not find one).

So I create a cluster to do just this job.
Input: Two spheres, sizes may differ, placement may differ (if they overlap, grasshopper needs more time, but no errors).
Output: One closed brep, consisting of the two spheres, tangentially connecting them.


Cluster inside attached gh file
Tangential Joint Spheres CLUSTER.gh (14.2 KB)

Next I used it to solve the question I started with.

The shape of the joint precisely follows the changing of the cylinders, when moving or resizing.


cyl-extrude-JOINT SPHERES.gh (21.3 KB)

NB: I can proceed, but still am interested if there would also be a solution possible, by going from curves, to surfaces and then in the end join these in one time into one brep.

Regards, Eef