Wavy pattern as a vase

Hi Folks,

Does anyone know how one would create this pattern for use as a vase in grasshopper?

Perhaps like a sine wave pattern along a line and then it is somehow displaced according to some criteria and then it could be extruded in the vertical direction?

I think this very instructional video might be of interest:

in the video the author distributes different growth stages of the same original curve along Z axis, but to reproduce something similar to your image it would be sufficient to chose just one state, it looks like the profile is the same


I’ve made a number of vases by Lofting a series of vertically stacked 2D closed curves. None of my curves were as complex as the one in your photo.

There might be some obscure (at least to me) mathematical approach for generating a curve like you showed, but if I were going to try I’d make a large number of hand placed points on the XY plane and then connect them with a Nurbs or Interpolated curve.


Like @inno said the design there is just one curve.

Using differents steps of the simulation is also possible. I did this


Thanks to Inno for pointing out that very helpful tutorial. I’ve not used any Galapagos routines for anything real yet, and there are still a bunch of it’s functions I don’t understand, but I was able to take the sample file from the tutorial, simplify it a bit, and produce this:

which when exported as an STL file and input to PrusaSlicer yields this:

Using a basic print speed of 100 mm/sec this should print in about 30 hours.

There are a few key issues I don’t understand yet:

  1. To make the basic curve, why did he use PLine and not IntCrv or Nurbs? Both of these create smoother curves that seem to have a nicer overall shape. I used IntCrv for this example. Interestingly enough, when using either IntCrv or Nurbs, the Loft result is a surface. But when using PLine it is a Brep.
  2. “Growing” the curve segments seems like a strange way to get their endpoints offset from their original positions. Wouldn’t offsetting them by some random radial distance be simpler? I’ll try this before I start printing anything.
  3. I’ve found that the standard Vase Mode that slicers employ results in prints that are too thin and fragile, so I try to make walls no thinner than about 2.5 - 3 mm. But none of the thickening methods I normally use to do this would work with the basic Loft shape. So there must be something unusual about the Loft surface that is eluding me. I used a simple barrel shape for the inside of the vase - which I don’t like, but at least it yields a printable solution.
  4. Loading the basic Loft shape into PrusaSlicer (as if I were going to use Vase Mode) results in 4762 errors with the STL file. Rhino often produces STL files with errors, but I have always been able to either work around these by changing the basic geometry a bit, or by using the NetFabb software to fix them. However, this time NetFabb failed to fix the errors and instead returned a capped version of the Loft surface. So it seems that there really is something odd about the Loft itself.

the Polyline is rebuilt to Degree 3 before being inserted in the curve-list loop that is going to be arranged along the Z azis for lofting

interpolating the points could have also worked well, it’s just a matter of personal taste :slight_smile:
one thing for sure, interpolate -for such a randomish arrangment of points belonging to the same curve- would create a more slalom-like, curved but more angular effect

it also depends strongly on the final look you want the curve to have
this kind of growth process generally ensures that the curve does not self-intersect because of the colliding spheres created on the vertexes
but you can literally have dozens of variables to control how -and why- the growth happens
[in particular, the thing that the initial curve is already divided into the final total amount of lines at step zero of the process, already forces it into an “infinite but narrow range” of final outcomes, if compared to total freedom of ruling the growth as you like]

Ah yes - I see what you mean about how the circle non-interference method helps ensure the final curve does not self-intersect. That short piece of video makes it pretty clear how this works. Thanks for pointing it out.

Oh frabjous day calloo callay!

Thanks to the links inno provided I was able to solve my problem of making a nicely curved bowl shape with sides and a bottom of a given thickness:

The screenshot is made from a practice 2D curve, but the end result is a closed Brep, so I know it will export and print with no errors. I need to work on the curve’s shape to make it a bit more wiggly - but not too wiggly. And my GH file is a mess at the moment, but I know how to clean that up.

The barrel shape comes from a GraphMapper/Parabola component, and I’m thinking of trying some other curve types like Sine or Bezier. This one is going to keep me busy for a while!



…but if I were going to try I’d make a large number of hand placed points on the XY plane and then connect them with a Nurbs or Interpolated curve.

Thanks for the general interest in this topic.
That was my first thought to have a sufficient number of hand picked points and generate a curve. It would be nice to have it parameter based to vary the design.

Hi Birk,

How is the modelling going? Are you able to provide some steps as to how I may reproduce the target picture? Any info would be greatly appreciated!


Thanks for your interest in my design efforts. I’ve learned a lot about how this method works and how it applies to my design goals of 3D printing. As one might expect, it’s more complicated than it seems. I’ll try to explain several discoveries I made:

Here is a link to my first printed part using this method: WiggleBowl1

The description tells about an unexpected (at least by me) consequence of this geometry: it is so curvy that the resulting STL mesh is so complex my slicer (PrusaSlicer) warned that it may have trouble producing the required GCode. I had never seen this warning message before, so I let it simplify the STL file using it’s default parameters. This sliced and printed fine and looks OK, but the outside surface showed definite faceting that I knew wasn’t really there.

My second attempt produced this:

It is more of a vase shape because I wanted something that could be used for flowers or peacock feathers (that’s another story). I did not post this one online because the STL file size (334 MB) is larger than Thingiverse accepts, but I printed it anyway. For this one I did not accept PrusaSlicer’s offer to simplify the STL file. PrusaSlicer sliced it just fine and it printed in 16.25 hrs and did not have the surface faceting of the first print.

If you are interested, here’s the link to the STL file: WigglyBowl2

Overall I’d say this design method isn’t well suited to the kind of 3D printing I do because it produces such large STL files. It might be better to use it for smaller objects, but I tend to do larger ones.

About the actual design methodology:

The key to this method is the use of non-overlapping circles that surround the endpoints of lines connecting the points of a divided circle. Kangaroo uses some sort of iterative process to adjust these points based on some user supplied input parameters. Prior to this I had never used any part of Kangaroo, so I knew nothing about how it works or what it does. Nevertheless I was able to simplify the GH script inno pointed out a sufficient amount to enable me to get a decent (pretty) control curve.

Once I had one curve it was a fairly simple matter to use a standard technique I developed long ago to stack up a bunch of these curves scaled to different values, Loft them to get a nice looking outside surface, and then add 3D thickness and a solid bottom to make a printable vase shape.

wigglybowl.gh (43.1 KB)

The top left area is where the magic happens. I call it magic because I don’t really understand what the StepSolver component does, or how it does whatever that is. But that’s OK for me because I’m only interested in the end result.

The bottom part of the GH file makes the solid shape of the drinking glass I used that fits inside the print. To use WigglyVase2 for plants requires watering them, and 3D prints are not water tight, so the plants would be planted inside the glass.

I reckon this is more info than you bargained for - but feel free to ask any questions. And I hope I haven’t insulted the people who actually use Kangaroo for real work. I get that it’s way beyond my needs.

1 Like