Pipe in GH cannot close

Hi folks a seemingly simple question here: I extract a hexagon pattern from Lunchbox, and trying to pipe them. Problem is the pipe ends are not closed…
I understand sweep 1 and pipe might not work too well for open shapes, the Hexagon Cell pattern however, I assume should be closed?


Seems to me like a job for MP (MultiPipe).


It’s worth pointing out @diff-arch exploded the hexagon cells (each hexagon is complete and overlaps its neighbours) and removed duplicates before piping/multipiping.

If you want hard edges just pipe the curves and solid union the result.

2021-10-20_GH_pipe_lunchbox_hexes.gh (12.8 KB)

You can also get a more filleted hard edge look by dialling in the EndOffset parameter of MP.


Yeah nice one! It’s a lot quicker to compute than any solid union / fillet opperation too.

But it’s worth noting that multipipe is a Rhino 7 ‘Sub-D’ feature for any Rhino 6 or earlier users.


As soon as the surface is curved, the solid union approach is going to be problematic, isn’t it?

@DanielPiker released the Fattener.gha addition in November 2018 so this should run in Rhino 6 too.

Skeleton fattener + mesh cage morph - Grasshopper - McNeel Forum


Yes - a curved surface complicates things. You can add round caps to the pipe ends before using a solid union - but that get’s crazy expensive to compute as there are a lot of coincidental surfaces…

A mesh approach is certainly a good option to explore depending on what output you require.

1 Like

yeah after tested a little more based on your comment this one, i find whether or not i got messy ends (intersection extruding out) seemss depend on if I removeDupCrvs. It confuses me honestly because when i baked the crv pattern, they are all closed crvs. So I am not sure what exactly cause the messy ends, just the overlapping…?

Please post your file with the input surface internalised.

Hi Martin, i just uploaded a .3dm and gh file. I just simply added a bit more on Paul’s script: baking crvs/geometry before CullDupCrv. The bake results are several closed hexagon crv, and internalised geometry.
pipe_lunchbox_hexes_followUp.gh (15.5 KB)
pipe_lunchbox_hexes_followUp.3dm (8.1 MB)

It’s the protected cluster that does a bad job! Not only that but it’s also slow as hell.

Screenshot 2021-10-21 at 19.13.58

You also need to flatten the segments after exploding the cells to determine all duplicates! Otherwise, you’re only looking for duplicates among the segments of individual cells, where there really aren’t any.

Simply use dupLn from Kangaroo 2. It’s available in Rhino 6 and it does a tremendous job! Don’t forget to flatten before.

ah indeed! :star_struck: I just tested, removeDupLines could do the job here! By its name, I thought this definition only works for line (with 2 ctrl pts), so doesn GH figured out for us already to cover the function for both lines and curves? :innocent:

Finding duplicate points and lines is rather easy. A point is a defined two- or higher-dimensional object that gets compared to another one, to see if their components (i.e. x, y, [z]) are equal. Lines are the same, but here you have to check two points, instead of one. A line is an “imaginary” connection between two points.
Curves tend to be more tricky! Oftentimes the curve is an interpolated object - which means that parts of it where guessed/derived by maths, because there is no definitive solution. It’s a play between resolution and tolerance that can theoretically be infinite in the practically finite domain of the computer.
There also are different algorithms to generate different curve types and all have different fingerprints.
Even if you have two curves that look the same, they could be different in some regard and thus not equal. It’s way trickier to establish an algorithm that produces good results here.

Thanks for sharing the principle behind it, it helps me remap the solutions back to the original question. So correct me if im wrong, basically my understanding are 1. the intersecting ends of pipes is due to overlapping of hexagon patterns; 2. cull dup CRV could only work on levels of approximation.

So far I collected three possible solutions:

  • Two are working on CullDupCrv (calculated within tolerance);

  • The other -Mesh under Fattener plugin, seems to skip cullDupCrv, instead just thicken the patten directly (like curve piping in rhino). I tested and there is no overlapping in the baked mesh.

    I have not really figure out though why overlapping curve pattern has anything to do with piping srf not closed (intersecting ends). Attached are scripts for all 3 options.
    Solutions for pipe srf internalisation_op1,2,3.gh (23.5 KB)

Yes, each hexagonal cell is composed of 6 linear edges or segments and 6 vertices. The cell itself is a polyline, an object composed of line segments. When the cell has 6 neighbouring cells, each of its edges overlaps with a neighbouring cell edge and each of its vertices has at least one duplicate neighbouring cell vertex.

It’s not necessary in this case, since the afore mentionned edges of a cell are line segments - line-like curves - that can be processed like lines.

Yes, that’s the way to go, like this:

I had a little fun with random node radii, but you can provide spheres with the same radii for uniform look.

Note how I remove all duplicate lines and points. The Fatten component needs a clean line network with interconnected nodes.
The spheres define a radius at each individual node and thus the thicknesses of the struts.

You can use wbCatmullClark from the Weaverbird plug-in to smooth the mesh.

fatten-me-baby.gh (12.7 KB)

1 Like

Thanks so much for this detailed explanation! :grinning_face_with_smiling_eyes:

A side question: I am a Maya user, is there any way for rhino 6 to add sub-division like the way Maya does? I guess it is one addition in rhino 7 WIP named sub-D. So what about rhino 6?

Thanks :blush:

As mentioned above, that’s essentially what wbCatmullClark from the Weaverbird plug-in does. And as long as you keep it in Grasshopper, you’ll be able to go from a rough, low-poly mesh to a smooth high-poly one and back, with a slider from 1 to 3, similar to Maya. It’s available in Rhino 6 and free.

Yeah I see this point about Weaverbird and it is quite handy and fast indeed. I was just curious whether there is any way working manually on part of surface. For instance, like multicut in maya, so that you could buildi upon one single surface. Also you can tighten creases almost intuitively…

But anyway, I guess this is just different types of modeling in these two very different programs. Cheers :grinning_face_with_smiling_eyes:

Creases were introduced in Rhino 7, but are currently not as handy as in Maya. You for instance can’t dial in the crease amount. SubD modelling also has features like inserting edge loops and similar that can be used to tighten up hard edges.
Something like the manual multi-cut can also be done by for instance drawing a curve and splitting the subd geometry, but again it’s less elegant than in Maya.