# Spiral Stair Geometry in Dynamo

**URL:** https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100
**Category:** Revit
**Tags:** python, geometry, dynamo
**Created:** [May 19, 2021, 7:09am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100 "2021-05-19T07:09:05Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![peerawit.ru](https://avatars.discourse-cdn.com/v4/letter/p/77aa72/32.png) [@peerawit.ru](https://forum.dynamobim.com/u/peerawit.ru)
#### Post date: [May 19, 2021, 7:09am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/1 "2021-05-19T07:09:05Z")

</div>

![spiralStair](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/2/b/2bb6ea1376f588c6e55ec73a2f10414a034c70b3.png)  
How to create spiral stair geometry from Revit element in dynamo?  
that above picture Dynamo can’t crate that.  
Thank a lot .

---

<div class="post-metadata">

### Author: ![Draxl\_Andreas](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/draxl_andreas/32/145744_2.png) [@Draxl\_Andreas](https://forum.dynamobim.com/u/Draxl_Andreas)
#### Post date: [May 19, 2021, 9:31am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/2 "2021-05-19T09:31:25Z")

</div>

Hello,

You mean that?  
(by the way close the workmode! than Dynamo will run perfectly)

 ![2021-05-19_11h31_03](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/a/6/a6bf757c835d60a855011c5a973f035864d7f2b0.png)

---

<div class="post-metadata">

### Author: ![peerawit.ru](https://avatars.discourse-cdn.com/v4/letter/p/77aa72/32.png) [@peerawit.ru](https://forum.dynamobim.com/u/peerawit.ru)
#### Post date: [May 19, 2021, 9:53am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/3 "2021-05-19T09:53:36Z")

</div>

Yes but stair created by cast in place type can’t get geometry. T T  
my purpose is get volume of concrete from that.

---

<div class="post-metadata">

### Author: ![Draxl\_Andreas](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/draxl_andreas/32/145744_2.png) [@Draxl\_Andreas](https://forum.dynamobim.com/u/Draxl_Andreas)
#### Post date: [May 19, 2021, 10:03am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/4 "2021-05-19T10:03:38Z")

</div>

True, it is even not in schedules. We model our stairs as GenericModel because of 3D/2D representation. It is in a simple way better.  
For taging we use 1mm stair, that is on Auxilery Workset.

 ![2021-05-19_15h48_53](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/2/b232dcf11b66d019015652cff21ea8af6b0fffad.png)

---

<div class="post-metadata">

### Author: ![peerawit.ru](https://avatars.discourse-cdn.com/v4/letter/p/77aa72/32.png) [@peerawit.ru](https://forum.dynamobim.com/u/peerawit.ru)
#### Post date: [May 20, 2021, 1:40am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/5 "2021-05-20T01:40:30Z")

</div>

It’s good choice. 😃 😃  
Thank for your recommend.

---

<div class="post-metadata">

### Author: ![MartinSpence](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/martinspence/32/25208_2.png) [@MartinSpence](https://forum.dynamobim.com/u/MartinSpence)
#### Post date: [May 20, 2021, 6:33am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/6 "2021-05-20T06:33:14Z")

</div>

Hi @peerawit.ru ,

You can acquire the Solids of the GeometryInstances that makes up the stair, and from there get the Volume. It does require API calls through Python though.

Here’s an example:

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/c/3/c3d7a495dc2d9eaa709388db41437ee0878b7819.png)

Python script:

```
import clr

#Import the Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

def convertfrominternal(val):
	return UnitUtils.ConvertFromInternalUnits(val, DisplayUnitType.DUT_CUBIC_METERS)

stair = UnwrapElement(IN[0])

opts = Options()
opts.ComputeReferences = True

geom = stair.get_Geometry(opts)

output = []

for i in geom:
	solids_lst = i.GetInstanceGeometry()
	temp = []
	for j in solids_lst:
		temp.append(j.Volume)
	output.append(sum(temp))

OUT = convertfrominternal(sum(output))

```

Mind that I’m converting this to cubic meters, as this OOTB, comes out in imperial units if not converted.

---

<div class="post-metadata">

### Author: ![peerawit.ru](https://avatars.discourse-cdn.com/v4/letter/p/77aa72/32.png) [@peerawit.ru](https://forum.dynamobim.com/u/peerawit.ru)
#### Post date: [May 20, 2021, 7:33am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/7 "2021-05-20T07:33:06Z")

</div>

> [@MartinSpence](#):
>
> ```auto
> import clr
> 
> #Import the Revit API
> clr.AddReference('RevitAPI')
> import Autodesk
> from Autodesk.Revit.DB import *
> 
> def convertfrominternal(val):
> return UnitUtils.ConvertFromInternalUnits(val, DisplayUnitType.DUT_CUBIC_METERS)
> 
> stair = UnwrapElement(IN[0])
> 
> opts = Options()
> opts.ComputeReferences = True
> 
> geom = stair.get_Geometry(opts)
> 
> output = []
> 
> for i in geom:
> solids_lst = i.GetInstanceGeometry()
> temp = []
> for j in solids_lst:
> temp.append(j.Volume)
> output.append(sum(temp))
> 
> OUT = convertfrominternal(sum(output))
> 
> ```

Can i convert Revit.DB.GeometryInstance to Solid in Dynamo?  
I want to find separate face area from solid for defindes something.  
thank a lot.

---

<div class="post-metadata">

### Author: ![MartinSpence](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/martinspence/32/25208_2.png) [@MartinSpence](https://forum.dynamobim.com/u/MartinSpence)
#### Post date: [May 20, 2021, 7:51am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/8 "2021-05-20T07:51:49Z")

</div>

Something like this maybe?

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/6/b/6b73bd2489c3c2a138c2c0c5e9d4212b8901ae10.png)

Python Script:

```
import clr

clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

#Import the Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

#Import ToDSType(bool) extensions method
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)

def convertfrominternal(val):
	return UnitUtils.ConvertFromInternalUnits(val, DisplayUnitType.DUT_CUBIC_METERS)

stair = UnwrapElement(IN[0])

opts = Options()
opts.ComputeReferences = True

geom = stair.get_Geometry(opts)

output = []

for i in geom:
	#output.append(i.GetInstanceGeometry())
	solids_lst = i.GetInstanceGeometry()
	temp = []
	for j in solids_lst:
		faces = j.Faces
		for f in faces:
			if f.Area > 0:
				edgeLoops = f.EdgeLoops
				temp2 = []
				for edges in edgeLoops:
					for e in edges:
						temp2.append(e.AsCurve().ToProtoType())
					temp.append(temp2)
		output.append(temp)

OUT = output

```

Edit: We can’t turn the Revit API solids into Dynamo solids using the ProtoType() method. It will fail the same way as the Element.Geometry node. I don’t have a better answer, then to recreate the geometry from Edges extracted from the Revit API Solids. Maybe someone with more knowledge about this could supply a better answer 🙂

---

<div class="post-metadata">

### Author: ![peerawit.ru](https://avatars.discourse-cdn.com/v4/letter/p/77aa72/32.png) [@peerawit.ru](https://forum.dynamobim.com/u/peerawit.ru)
#### Post date: [May 20, 2021, 9:13am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/9 "2021-05-20T09:13:48Z")

</div>

![Capture](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/c/4/c4ffc4a66ace084491e452f603dcf79fba588059.png)

That all i want.  
finally i can create solid from spiral stair  
Thank a lot .

---

<div class="post-metadata">

### Author: ![MartinSpence](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/martinspence/32/25208_2.png) [@MartinSpence](https://forum.dynamobim.com/u/MartinSpence)
#### Post date: [May 20, 2021, 9:52am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/10 "2021-05-20T09:52:14Z")

</div>

Lovely 🙂

No probs 👌

---

<div class="post-metadata">

### Author: ![manholoz](https://avatars.discourse-cdn.com/v4/letter/m/5daacb/32.png) [@manholoz](https://forum.dynamobim.com/u/manholoz)
#### Post date: [September 22, 2026, 6:50pm UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/11 "2026-09-22T18:50:04Z")

</div>

For dynamo in year 2026, the script as-is was not running as intended, probably due to currently dynamo preferring pythonnet3. Or something else, I am not that proficient in dynamo.

However, changing line 9 to:

> ```
> return UnitUtils.ConvertFromInternalUnits(val, UnitTypeId.CubicMeters)
> 
> ```

made the python run as intended.

---

<div class="post-metadata">

### Author: ![Brendan\_Cassidy](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/brendan_cassidy/32/7685_2.png) [@Brendan\_Cassidy](https://forum.dynamobim.com/u/Brendan_Cassidy)
#### Post date: [September 23, 2026, 9:03am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/12 "2026-09-23T09:03:46Z")

</div>

What you have highlighted is technically a issue in relation to Units api that changed around revit 2021, which then the previous version was removed from the later versions of revit. Why you have to place in UnitTypeId instead of DisplayUnitType.

---

<div class="post-metadata">

### Author: ![jacob.small](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/jacob.small/32/161030_2.png) [@jacob.small](https://forum.dynamobim.com/u/jacob.small)
#### Post date: [September 23, 2026, 9:54am UTC](https://forum.dynamobim.com/t/spiral-stair-geometry-in-dynamo/64100/13 "2026-09-23T09:54:34Z")

</div>

The old office hour which might be relevant to spiral stairs, though not technical “stairs” in the traditional Revit sense: [https://youtu.be/VMG30VNpyYg?list=PLdlF7MirPEC2yNFTGymESd3t7Xosfk9c2&t=2047](https://youtu.be/VMG30VNpyYg?list=PLdlF7MirPEC2yNFTGymESd3t7Xosfk9c2&t=2047)
