Pipe strips

Since the thickened curve meshes are all quads, with all even valence vertices, they can be sorted by direction and turned into strips


Very nice.
It could also be useful to make flat quads by moving one edge each 2 edges like here



Cool! I built a similar workflow through Kangaroo as well, as an exercise in mesh modelling and topology for students last November:

@laurent_delrieu, nice work, I developed a pleating strategy for strips too some time ago (Alexithymia on Instagram: "Follow up to previous post: strips are recognised and “crested”, preserving topology information. Third image shows strip flow curves as well.") but I never connected it directly with quad planarity. Can you please explain what geometric principle ensures planarity in your pleated example? Just moving alternate edges shouldn’t be enough… or am I missing something?



I think what Laurent is showing and Marc’s work ensures planarity through a geometric construction creasing each strip into a ridge.
I’m guessing by intersecting rotated planes through either side of the input strip to find a line for the crease that is coplanar with both. Is that along the right lines @laurent_delrieu ?
It’s a nice technique because as well as guaranteeing planarity so the strips are developable, the pleating improves the structural rigidity.

It would also be possible to make the strips developable while keeping the surface smooth, by optimising the vertex positions. I’ve shown this before for strips which are aligned with the pipe directions, but I think it could also be done with diagonal strips like this - if the mesh was altered by connecting adjacent diagonals, so that the faces still followed the curvature directions.
So instead of this (which would be impossible to planarize)

you’d have this:


@ale2x72 @DanielPiker , Daniel yes it is as you described for sure it is useful to augment the rigidity and ease the fabrication by lowering the number of folding lines.
I have developped a function to make the crease. So you specify an angle and an offset angle, the algorithm begin at the beginning of one strip. and try to go the end without being sure to end with the same angle as the the beginning. So at the moments it lacks optimization. If one day I want to use it I will have to make some optimization.


I interpreted your screenshots and made some planarization tests with Kangaroo by altering the mesh topology (connecting adjacent diagonals).

original mesh, “planarized”

altered mesh, planarized

altered mesh, planarized, other stripping direction

I’ll try some laser cutting in the next days!
Thanks everyone for the nice inspiration!


Hey Daniel,
how did you obtain the thickened curve meshes, did you use your own Fattener tool (which is nothing short of awesome btw)?

Yes, the meshes were generated with the Fattener tool (which from the next WIP version has been renamed as MultiPipe)

1 Like

Awesome! Sorry for asking yet another question: Does that mean that MultiPipe will be included in the next R7 WIP or are you talking about the next WIP of MultiPipe?

The rhino command is already in the current R7 WIP (currently called SubDThickenCurves), but from the next R7 WIP it will be renamed as MultiPipe.
An updated version of the Grasshopper component version of this will also go into the Grasshopper included in the R7 WIP at some point soon, though I’m not sure if this will make it in time to be in the next WIP release.


Maybe these images of me are from a similar process (?).
–I was not looking to planarize but to create rows of different materials / colors–.
But I was trying to:
1 / apply Pattern or Trips, – to rows of Quad faces in Kangaroo–.
2 / It looks great, but …
I still don’t know how you selected and grouped in your example?
–Selecting faces, and then face rings … surely.–1


Hi @claudiofeldman

For the strip division I was using the stripper component, which automatically separates the mesh into strips one quad wide, in either the warp or weft direction (and if you want to switch between these, insert a MeshTurn component before the stripper).

stripperdemo.gh (14.0 KB)

However, a key property the mesh needs to have for this to be possible is all even valence vertices, which the outputs of the Fattener component do. Note that above the branching points are all surrounded by either 6 or 8 quads.
A mesh made from something like a union of boxes typically won’t have this property because there will be some valence 3 and 5 vertices at the corners, meaning there is no consistent warp/weft direction possible:

It’s a similar issue to what was shown there (though in that case, I think not having a consistent direction actually makes it more interesting)


Thank you!
Thanks, I try to learn it.

1 Like

Ah… Thank’s Daniel Piker :thinking:

Multipipe so much useful Sud-D feature!

Hello @DanielPiker @ale2x72
Sorry to revive an old topic, but I would like to ask if I am understanding things here correctly.

The relationship between even valence meshes and warp/weft directions is clear, but is your example above simply diagonalized? Or is there a different process involved in sorting by direction to arrive at the developable twisting? My simple trial …

I’m interested in this part, in particular. Is it safe to assume that with the right mesh, the warp/weft directions will ensure developability, but not planarity? If so, is this also true for the diagonal sample in your first post? With some of my own testing attached, I see that some strips are unrolling within tolerance, and others do not. How might I go about trying to adjusting the mesh to connect adjacent diagonals? A likely incorrect trial …

StripperDemo_DPnbedit.gh (31.7 KB)

1 Like

Hi @Nick_Bruscia

Here’s a way to get the diagonal strips

diagstrips.gh (15.2 KB)

For the diagonal ones they do need to be triangulated (and the above def makes sure the triangulations follow the right directions) to be unrollable.


Ah, I see - I was on the right track with the diagonal strips at least (aside from the kinda clunky way to remove the triangles), but now see that the final triangulation step makes a difference in the unrolls. Thanks!

1 Like