Dividing a spiral staircase glass balustrade in to equal lengths with gap in between

Hi Guys,

I am trying to build a staircase using only grasshopper.

Until now I was able to do this. But as you can see I have not achieved the gap in between the balustrades. What is the best way to do this?

Spiral Staircase (DG)gh.gh (47.9 KB)

One per step?

Can be two or three steps.


This got a little carried away, maybe there’s something simpler? And there is an off-by-one error at the bottom that I don’t yet know how to fix.

Spiral Staircase_2021_Jul11a.gh (63.0 KB)

P.S. Fixed off-by-one error with Shift List (yellow group)

Spiral Staircase_2021_Jul11b.gh (70.9 KB)

Three steps instead of two:

I just noticed that the inner balusters are offset in the wrong direction… :man_facepalming:

Fixed that:

Spiral Staircase_2021_Jul11c.gh (72.7 KB)

But noticed that the balustrade surface diverges from expected curvature at the top, caused by Extend Curve in your code. I’ll let you fix that.

1 Like

I have just used Rhino until now but I have just started using Grasshopper. So thank you so much for your help. I am currently trying to understand how the components work. I’ll get back to you via DM if I have any other doubts!

Please post any questions here in this thread instead of a private message. You’re welcome.

There is a slight misalignment (~1 cm?) between the balusters and the steps, caused by the ‘1’ value connected to the ‘Start’ input of Extend Curve (two of them). I think it’s best though that you understand and fix these issues.

This shows Extend Curve ‘Start’ inputs set to zero, ‘Gap’ slider set to 0.5, alignment fixed, though not the only way…

Nice little brackets holding the balusters, by the way.

Thanks for your kind comments Joseph. I was able to clean up the script a little more and make the bracket more aesthetic. But I haven’t yet been able to solve the extend curve issue which make my helix diverge from the original curvature. What’s the best way to approach this problem?

Spiral Staircase_(2021.07.12).gh (60.2 KB)

I don’t recognize the code anymore and the part that I wrote is broken. The balusters are not “solids”.


Spiral Staircase_2021_Jul12a2


That’s an extremely important detail! I’m not going to proofread your code to figure out what went wrong, sorry, I’ve probably done too much as it is. Pottery Barn Rule: you break it, you own it.

Sorry about that. I was trying to understand how it work and I missed a connection. I fixed it. Thanks for pointing it out!

Spiral Staircase_(2021.07.12).gh (63.2 KB)

1 Like

This image alone was the clue that something was wrong. Notice the reddish edge and yellow surface on the right baluster? That told me that the two weren’t joined properly into a single ‘Closed Brep’.

As to extending the spiral curves, I don’t have a ready answer and am not inclined to find one. There are many possibilities that might involve substantial changes to your code and it’s better for you to resolve details like this yourself. The slight gap misalignment I mentioned can be solved in other ways too when you really understand what the code is doing.

The results you have achieved so far are quite good so keep at it, don’t get stuck by fixating on the first idea that comes to mind (extending those curves).

Thank you very much! I’ll keep at it.

If you add 1 to the count inputs of the 3 Series components that generate your spiral, you can bypass the 2 Extend Curve components.

I left the Extend Curve components in place, but bypassed them. They can be deleted.

Spiral Staircase_(2021.07.12)_re.gh (68.1 KB)


1 Like

Good thinking but it results in one extra step, which could be culled since that top step is supposed to be the top floor, eh?

I was confused at first because your steps appeared to be slightly larger than my version ‘c’ (rotation ‘Step’ value of 17.14 degrees in yours, 16.36 in degrees mine) but traced that to different values for ‘number of divisions’ (21 in yours, 22 in mine). Easily “fixed” by using 21 (or 22) for both.

This raises a couple of practical issues though.

  1. In the real world, tread height of steps and number of steps is determined by the difference in height between the bottom floor and top floor, which is a fixed distance input. I see no place for that in this model?

  2. Likewise, the rotation step value is “negotiable” in the sense that one might want to specify the bottom and top step angles where the staircase starts and stops, then calculate a rotation step value that might not yield an integer number of steps in 360 degrees. You can see this by changing the ‘number of divisions’ slider from Integer to Real and using a value of 21.25 divisions per 360 degrees, for example.

Speaking of “the real world”, I have a question for @dudemamu9: What secures the top of these balusters in place? I love the brackets at the bottom but what keeps them from falling over? Also, what supports the steps? Details… :thinking:

1 Like

Hey Kevin,

Thanks for this solution. Will update my script based on this. :slightly_smiling_face:


Hey Joseph,

  1. Yes you are right. But I can solve this by adding a floor height and divide it by number of steps. I guess that’s why I did not concentrate on that aspect in the beginning.

  2. That’s on purpose because most the scripts only deal with 360 degrees but in real world I wanted the staircase to end at a different position than the start. You are right there needs to be another input somehow to calculate it automatically and probably input for the degree like you suggested.

The staircase I am trying to build is based on this image. There are additional brackets that connect the balusters together. And of course in real world there is a lift shaft in between to which these stairs are connected to. But I haven’t built that in to my script. Hope this makes sense.

Thank you for your comments and ideas!

1 Like