Wavy pattern lofting curves

Hey everyone,

I’m working on creating a wave pattern using Grasshopper. The script takes any surface (in this case, a simple cylinder) and applies a wave-like deformation to it. The idea is to generate the wave pattern by creating lines across the surface and then using the Loft component to form a continuous surface from those curves.

I feel like I’m close, but when I use the Loft, instead of a smooth continuous surface, I end up with broken stripes. I’m guessing it’s a data tree or curve alignment issue, but I can’t quite figure it out.

I’ve attached some screenshots and my Grasshopper file — I’d really appreciate any help or tips you can share to fix this and get a clean, seamless loft.


this is the principle, just a loft between a line and a line below, repeat and repeat

Thanks in advance!
just cylinder.3dm (3.1 MB)
wavy loft pattern .gh (11.9 KB)

wavy loft pattern Edited v0.gh (18.5 KB)

Quan Li, you’re truly a magician — thank you so much! :grinning_face:
I made a few tweaks to your file to better suit my surface, and it’s working beautifully.

I did notice a couple of things though:

Would you happen to know what might be causing this? I’d really appreciate any insights or suggestions you might have.

Thanks again for your incredible help — it means a lot!

wavy loft pattern Edited v1.gh (11.1 KB)
wavy pattern base surface.3dm (5.5 MB)

This part is very easy.

  1. right-click the Loft ‘Options’ input
  2. select ‘Loft options’
  3. select ‘Closed loft’

Thank you so much, Joseph!
I’ve been experimenting with the loft options and was able to get it to close — which is great progress!

However, I noticed that the final closed loft is slightly larger than the others, and it’s happening right at the same spot where the surface was previously open. I’m not quite sure why that’s happening.

Would you mind taking a look to see what might be going on? I’d really appreciate your help.

wavy pattern base surface.3dm (5.8 MB)

wavy loft pattern Edited v1.gh (12.5 KB)

Thanks again!

I don’t see the same result, don’t know why? But following a hunch, this looks like an off-by-one error. Note that the output of Repeat starts and ends with zero. A solution is to move Cull Last.


wavy loft pattern_2025Apr7a.gh (15.0 KB)

Sounds like you have a lot to learn.

P.S. This “solution” is wrong. As @Quan_Li says below, the ‘V Count’ slider must be ‘Even’.

Choose even.

1 Like

Thank you so much, Quan Li and Joseph, for your help — everything is working perfectly now!
I truly appreciate your time and guidance. Your support made all the difference!

Thank you all so much for the support — I really appreciate it!

I have a quick question. The script works perfectly when I use a simple surface as input, but when the geometry becomes more complex, it turns into a polysurface, which no longer works with the input as expected. Most of my models tend to be a bit more complex than single surfaces.

Do you happen to know of any methods or workflows that would allow me to use these more complex shapes as inputs? I was thinking of possibly slicing the geometry using radial and horizontal planes to generate points in space, which I could then feed into Grasshopper.

this is the model I want to use as input (green)

Any suggestions or ideas would be greatly appreciated!
wavy loft pattern Edited v1 works on surfaces.gh (14.6 KB)
wavy pattern base surface.3dm (7.6 MB)

I see three green shapes :question: Which one?

Your GH file refers to none of them. :frowning:

So I added a ‘Brep’ param set to the the shape on the right, then added DeBrep to get the brep faces (surfaces). There are three because of a seam on the sphere shape.

Obviously, a brep is not a surface.
And your method of lofting interpolated curves fails to account for holes.

:rofl:

Hi Joseph,

Thank you so much for your input and for taking the time to help — I really appreciate it.

Apologies for any confusion. All the green models are actually the same; I was just experimenting by converting them into different formats like Mesh, SubD, and using QuadRemesh to see if Grasshopper would accept them as input, but unfortunately, none of those worked.

Currently, when I needed to create ridges on a polysurface, I had to slice the target geometry with planes to extract curves, then sweep profiles along each curve individually. It worked, but it was very time-consuming — which is why I was hoping to streamline the process using Grasshopper.


The main challenge I’m facing is that I can’t directly input a model like this into the script, since any model with little complexity it is for Rhino a polysurface. If you have any suggestions or alternative approaches, I’d be very grateful.

Thanks again!