Select bottom Face of Floor automatically? Find bottom Surface from Floor Element?

By selecting the floor element, I need dynamo to automatically select the bottom surface of that floor. I am hoping to reduce user error, by having the Only Input be the floor element.

Background info: I am creating a script that automatically aligns all of the beams on a level to the bottom of a sloped floor. I also created a script that automatically aligns all of the columns that terminate at that level with the bottom of sloped floor. Even the level of the beams is found from that floor.

I am almost done with the script! But I cannot figure out how to automatically select the bottom surface of the floor element.

I found a script from a different post and I copied it. Honestly I’m new to Revit and don’t really understand how this script works. The script I copied was actually supposed to find the top surface. So I think something is wrong, because it is actually finding the bottom surface.

I tried to plug the output into my script (that aligns the top of beam to the bottom of floor) in the same place that I had had a Select Face node.

But I get the following error:

Surface.ProjectOnto expects argument types

Autodesk.Designscript.Geometry.Surface,
Autodesk.Designscript.Geometry.Geometry,
Autodesk.Designscript.Geometry.Vector

But was called with

Function ,
Autodesk.Designscript.Geometry.Line
Autodesk.Designscript.Geometry.Vector

Is there an easier way to automatically select the bottom face of the floor when the user selects the floor element as the only input?

Hi @rungerer,

Use the Compound Surfaces References node from the Genius Loci package.
I think Rhythm package has also a node.

Hi @rungerer ,

Assuming we are talking about a floor with 6 faces (like a cuboid) you could extract those faces as surfaces and extract each normal vector. Using these normal vector you can easily determine which one is the bottom one: the only one which has a downwards facing vector.