Audrey Yan - Module 8.2


RingGage3D (3 units):

Love is in the air! Well, I’m not getting married, but for whatever reason, just about everyone I know is this year.


To kick us off, I’ll show an image of the tool at work. This would be my personal choice of ring design that I would develop using this tool:


There are a number of other designs that can be created, however, and I will highlight some of them in the demo video below.


Use the RingGage3D tool to engage intimately with your special piece of jewelry. Evaluate, refine, and execute your dream design using a simple, user-friendly set of inputs.

1) Launch the Grasshopper script to find a bright red box labeled Control Panel on the far left of the script. This is the only thing you need to interact with!

2) Choose your inputs based on your preferences, or just play around to discover what options you might prefer! The possible choices you have are listed below.

  • Choose your ring size — US sizes 3 to 13 are offered
  • Choose your ring profile — classic, court, flat, double comfort, or our custom ‘embedded’ style, which allows you to add additional diamonds to your ring band
  • For auxiliary gems, feel free to turn them off if you want the embedded profile but without a ring of gems
  • If you do want additional gems, choose how many you want! You can have up to 60
  • Choose your preferred metal — gold, silver or rose gold
  • Use any of the sliders to contiguously vary any of the following parameters:
    • Your band height (this is it’s ‘outward’ thickness)
    • Your band thickness
    • Your band evenness (this adjusts how tapered the base of the ring will be!)
    • Your diamond size
  • Choose your diamond shape! We offer hexagonal, octagonal, or nonagonal options
  • Finally, choose how many prongs you’d like to hold your diamond (we recommend either 4 or 6, but you do you!)

3) Admire your custom piece of jewelry! Use your best judgement and play around to refine your design and see what you like best!

Demo video

Video linked below:

Rhino Workflow

I have really missed Grasshopper these last few weeks, so I decided to go back to Grasshopper for the final module. Unfortunately it took some getting used to, and Grasshopper also doesn’t have the same generative design capabilities as Dynamo (you really only see an optimal solution rather than an array of possible solutions, and the data analysis is way behind), so I decided to go with a design tool for the final project. I was thinking about doing a structural analysis tool, but unfortunately I’ve left my structural engineering days behind me 😃 So here is the workflow for the RingGage3D!

Again starting with a useless snapshot of my entire script:


Let’s dig in.

As I specified in my pitch, here are my inputs of choice. This control panel is unfortunately what the user will have to interact with when using this design tool — I originally wanted to publish all these nodes to a remote control panel, however, I realized that the value lists I created to make some of the inputs more understandable for the user prevent this from being possible. Grasshopper has not yet developed a way to publish value lists (the drop down menus) to a remote panel, which sucks.


The first step in this script is converting the user’s specified ring size to a ring diameter. This is done with a formula that I did some research for (i.e. the ring diameter shown in Rhino is the correct diameter in millimeters), the base circle is created, and is then moved so that its bottom sits at the origin.


Next, I used the base wireframe circle to generate five different ring profile options. I also did some industry research for this, and ultimately decided to offer four traditional profiles (the flat, double comfort, court, classic) and a fifth, which I called the embedded, which has a sunken center arc that allows additional diamonds to be embedded in the band.

First, here are the four profiles I offered:



This was the script to generate them (sidenote: any of the asterisks * next to a formula input or output means I wrote and embedded a formula in the function to scale the answer so that I could manipulate it better. The formulae in Grasshopper are strangely invisible compared to Dynamo’s codeblocks…):

The flat and double comfort were generated simply using the same rectangular profiles but with different corner fillet radii. The court was generated using an elliptical cross section, and then the classic was generated by exploding the rectangle, generating an upwards arc at half height, and filleting the edges to smooth them out.


The embedded band variety was a little more complicated. In theory, it was just the same creation process as for the classic, but with a downwards arc rather than an upwards arc. However, because the auxiliary diamonds had a minimum size, if the band became too short or too narrow, the diamonds wouldn’t fit. So I constrained the conditions for the profile generation using a min function and a constant.

This profile is therefore a little bit less customizable than the others, but the script will automatically stop the user from being able to generate an impossible ring. Only the ‘embedded’ profile is allowed to have auxiliary diamonds — if any of the other profiles are chosen, the auxiliary diamonds will automatically disappear — I did this through some mathematical manipulation and another stream function.

These profiles were generated both at the top and bottom of the ring wireframe curve (since the ring tapers at the bottom), and then were swept along the wireframe circle curve:


Having this done, I moved onto the diamond creation process. I first positioned the diamond at the ring’s midpoint:


Then, the basic geometry set up was done. I used a single polygon for the top face of the geometry, and then rotated it by an angle determined mathematically by the number of sides in the polygon. I then scaled and displaced this rotated geometry, and used a couple of different shifted series to create the outline of the diamond. Once I had the outline, I just started extruding lines towards appropriate points and ultimately ended up with a diamond-like brep.


The auxiliary diamonds on the embedded profile were generated by just taking the diamond geometry I just produced, scaling it down, and spreading it out in a polar array. I had to do some manipulation to scale and move the array, since the polar array function Grasshopper offers seems a bit finicky:


Once I had the main diamond done, I could create the prongs that held it up by just measuring the radius around the thickest part of the diamond, creating a polygon with the same radius at the same location, and determining the number of polygon segments by user input. Once I had the polygon created, I rotated it to make it more aesthetically pleasing, connected its vertices to the point below the diamond on the band using a series of catenaries, and then just used a standard pipe to fill out the whole 3D geometry.


That was the whole basic geometry! The only thing left was to color in the elements. I created three different metal options — gold, silver, and rose gold — using the Grasshopper materials node. There was some trial and error with the color mixing here.


These were again held back by a stream gate that allowed the user to themselves choose their metal of choice. All the metal components (band and prongs) were rendered using the color that came out of this stream filter.

Finally, the diamonds were also all gathered and colored with the same luminous blue-white color I made up.


And that’s it!