algorithmic modeling for Rhino


I’m trying to work up a grasshopper definition that takes a curve, offsets it a user-defined dimension, then generates a ‘zip’ or ‘teeth’ through the centre of the two curves.  I’ve tried a few variations, but each seems to lack the sophistication to generate a ‘zip’ that retains its general shape over the whole curve.


Basically I’m trying to understand the process behind this:


Here is an image of the latest definition. 



1.      I draw a curve in Rhino, and then define it in grasshopper.  I also define the point as the beginning of the curve.

2.      I offset the curve to a specified depth, based on structural member

3.      I generate a line from the point at a tangent to the curve, then rotate it a

defined angle.

4.      I find the intersection between the rotated line and the offset curve.  Then generate a tangential line from this new point

5.     Line is rotated at the same angle as before.

6.      Process repeated.


The idea is to then generate a circle of defined diameter at each of the intersection points, then find the intersection of the circles with the curves, which are then joined up with straight lines to create the ‘zip’.  This would mean a lot of copy-pasting and list management that I’m not really capable of with my limited grasshopper experience.


I had tried generating points at intervals along the curve and then eventually generating lines from one line to another with a shifted listed to form the tooth angle, but it wouldn’t retain its shape over the entirety of the curve.


Does anyone have any advice for how to tighten up this definition?  I imagine that I will need to delve into scripting to address the recursive nature of the process. 


I fear that I’m going about this in entirely the wrong way...

Of course the next step is to flatten out the curve for CNC manufacture.

Any help would be greatly appreciated! The potential for using grasshopper in design is amazing, and I would love to gain a deeper understanding of it!

Views: 7683

Reply to This

Replies to This Discussion

This may not be the sort of solution you're looking for, but it at least may give you a new approach to this. I divide the curves into many points, then weave my way across the two sets to create a single polyline that represents all the teeth.


David Rutten
Poprad, Slovakia
Thankyou David! This has helped a lot. I modified your definition to give me some control over the 'tooth' size, and I think I will now divide the two offset curves individually so that I can keep the 'tooth' size completely uniform across the whole curve.

I'm finally getting my head around list management and weaving thanks to your example definition!

After this, the next step will be to get both sides of the teeth flattened out for cnc milling. I'm sure I'll have more questions once I get to that stage!
I'm having an incredibly hard time figuring out how to convert the curved object into a linear one for export to cnc. I need to retain the dimensions and angles of the 'teeth', but the closest I've gotten is using the Rhino 'flow along curve' command, which normalizes the angles, making the resulting curve useless for re-building into the 'arch' form.

This is really doing my head in!!
You can't really retain angles and dimensions on a curves base spline, you know that right? If you'd use the same angles and dimensions you always end up with a straight compound.

If you're really going to CNC this, you might as well use different teeth everywhere as the Machine needs to do them one by one anyway.

David Rutten
Poprad, Slovakia
You're right, I overlooked that fact.

The teeth need to retain their dimension when the curve is flattened out. So I need to separate each side of the 'zip' and retain their individual teeth dimensions. Doing this with 'flow along curve' just makes two exactly opposite shapes, but it is obvious to look at the generated shape that each side of the zip has different tooth dimensions. Those are what need to be retained then generated along a linear curve.

Does this sound more logical?

Getting closer, I think.
You could make it so that one of the two teeth-strips has identical shaped teeth, and since teeth don't bend if would apply to both the flat and the bend strip. However, the other strip must now accomodate for the curving nature of the result, so it has to have different teeth (both angles and dimensions) everywhere.

The logic here is simply that the variation in teeth shape defines the curvature of the result, so there's no getting away from the fact that the teeth will have to be different if the curvature is different.

David Rutten
Poprad, Slovakia
What I ended up doing was turning each tooth into its own surface/shape, then manually using the rhino flow along curve command on each side, but making sure that the 'rigid' and 'preserve structure' toggles were enabled. This gets me the teeth 'strips' I need, but forgoes a level of automation. (i've also manually put these strips together again, which builds the initial curve). Is there any grasshopper native counterpart to the 'flow' command?
Hi Tristan and David (THANK YOU for everything you made in the Rhino era!),
I found this topic just now and it's just perfect for me because I'm looking exactly for the same type of cutting technique. The Zip Shape (developed by Design2Production team) is an evolution of an ancient method used by woodworkers that's based on bending capabilities of thin layers of wood. They used to make parallel cuts on the inside of the shape they wanted to bend in order to remove the compressed fibers. The external face remains intact and the internal cuts (they become closed triangles after bending) are filled with glue.
The big advantage is that you only use one panel and the cuts are made only depending on the curvature level you want to reach.
On the other hand you can leave only one face to be seen.

That said I made my definition in Grasshopper two month ago using the same process shown by David, but dividing the curve by lenght in order to have a better control in the smaller radii.

The big problem I'm facing now is evident when you actually do the cnc job and try to assemble the Zipshape.

We must assume that wood (or any other material) can only be bent on the linear segments with the smallest thickness, so the actual shape can't be an offset of the initial curve.

hello everybody,

I am absolutely surprised that I am not the only one who is trying to figure out how Zipshape works. I have been doing this for three years…

In March this year I got invited to hold a three-day workshop with the Digital Crafting Network, initiated by CITA, the Centre for Information Technology and Architecture at the Royal Academy of Fine Arts in Copenhagen. Participants investigated variations of the Zipshape-principle by building parametric models with Grasshopper—this was actually the moment I started to develop Zipshape in Grasshopper, and it got me a huge step further.

However, the challenges do not only lie in the parametric model, but rather in the material itself: Wood is not very keen on cold bending. Right now we are investigating a composite of cork, wood particles, and latex…

Have a look at the teaching+research section on our website, there is a lot of documentation.


Zürich, Switzerland
Hi all,

I was recently developing something similar with a different approach. I took the center line to offset, and then divide up the center line, Then draw lines that are alternating (<90deg and >90deg) from the tangent of the middle curve to the two sides.

Then I find the intersecting points to draw the teeth.

The flattening process is more complicated, I took each tooth and orient it on to a straight line.

If anyone is still interested I could start a new post to discuss.

I was also investigating on a 3D bending prototype, which is done on a laser cutting machine. Perhaps I'll start a new post for that...

would you mind sharing the definition?
Sure ryles,

I'll try to start a new thread in a few days with the definition uploaded, I need some time to make them organized.







  • Add Photos
  • View All

© 2019   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service