Trying to determine headroom clearance of a spiral Cast-In-Place Stair

Hi All,

I am trying to determine the distance from all stair treads to the nearest geometry vertically above a point on the tread surface itself. If the distance is less than a specific building regulated safe headroom clearance distance then I would like to colour code these measured distances red.

At the moment I am struggling to filter out coincident points such that I can use the Point.Project node

Apologies if the graph is difficult to interpret. Any assistance will be greatly appreciated.

I don’t recommend point projection for testing headroom, especially in a stair. You wind up having to do a LOT more samples then that to get it accurate (what about the light fixtures, fire suppression systems, etc which don’t necessarily fall directly at the point where you have a sample point?), and it takes a lot of extra geometry calculation, and requires repeating the process any time any of the elements in the stair are updates (even if the stairs stayed the same but the framing changes you have to redo the entire exercise from step 0)…

Instead I recommend you build a ‘clearance’ mass, and then you can use that mass to do interference checking as you usually would (a filtered element collector using a element.intersects filter, Revit’s interference checker, Navisworks, Construction cloud, etc.). Easiest way to do this is to use the topology of the treads to pull the leading edge of each step, loft all of those lines to get the base of the clearance geometry, which becomes the base of a solid (build by copying the surface up by the code required clearance plus a bit of extra headroom). Once you have that solid, you can create a family instance from it (FamilyInstance.ByGeometry from the springs package, or the FamilyType.ByGeometry node + a familyInstance.ByPoint node). Give it a shot and see where you get as it’s a great learning exercise.

1 Like

Great thanks Jacob for the response - highly appreciate it!

I guess pulling the leading edge of each stair is the starting point. I shall revisit changing the logic here and relay any progress.

1 Like

Hi Jacob,

I was wondering if there is a way to index/filter the points which represent the intersections of the stair tread perimeter curves such that I can create the surface which has a boundary similar to the screenshot which has a green markup on it.

Thanks in advance!

It’s been awhile since I’ve worked with stairs, but I have a vague recollection that the leading tread was always index 0. If that holds true you can use a List.GetItemAtIndex node to pull all the leading treads. Then get the vector between the first and second tread line, reverse it, and translate the first tread line by the vector. The landing may be a bit tough, but it’s manageable.

Another option is to utilize the stair’s walk line, as I believe that is 3D and always intersects with the leading edge of the tread. As such taking all the curves which makeup the stair treads and filter out any which don’t intersect them with the walkline will give you everything you need.

However both of these methods fail when you start to use multiple lines to define a riser, as you will likely only ‘hit’ one of the lines with the second method, and you’re only pulling one of the two lines with the first.

In that case it’s likely going to be a requirement to go into the riser geometry rather than the tread geometry, get the midpoint of each line, group the lines but he midpoint values, sort the groups by the midpoint values, and get the last group. I haven’t played with pulling riser geometry as it’s MUCH more complex, so if your stairs are ‘one line per tread’ stay clear of that.

As an alternative you could try tackling a Dynamo conversion of this Revit API post from a few years back: Solved: Re: Access the sketch lines in a Stairs by Sketch - Autodesk Community

There is added complexity in that every riser line would be returned in one go, meaning you have to filter/group the curves by the stair. Once you do though it’d be pretty easy to do a sequential offset distance for the number of risers and the rise height (both properties of the associated stair).