Working with Slab Shape Floors in Revit can be a tedious process. There are two options for creating sloping Floors: use a Slope Arrow for a single slope across the entire Floor or convert the Floor to a Slab Shape and modify its points and edges. Unfortunately, there is no way to combine these two methods in the Revit UI.
Ideally, you would be able to start with a Floor, give it a single slope, and then convert it into a Slab Shape. But of course, this is possible with the Revit API and can even be done with Dynamo.
To demonstrate this process, I created a zigzag-shaped Floor with a Slope of -10%.
And I added Spot Elevations at all of the corners (so you can clearly see what is happening with the slope).
The Dynamo definition requires a couple of CSV nodes from Landform and the ever-useful Floor.SlabeShapeByPoints from Clockwork. It is fairly simple to set up, but it does require two runs to work. On the first run it will collect the points from the sloped floor, write the points to a text file, and reset the slope to zero. On the second run it will modify the floor with the points
It requires two runs for two reasons. First, the points must be written to the txt file and, for some reason, Floor.SlabShapeByPoints does not work on the first run. I’m sure there is a way that this could be configured to work without requiring two runs and the intermediary text file, but it would take a bit more programming knowledge than I currently possess.
If you haven’t worked much with text files, you can create them directly from the File Path node. Also, you can re-write the .txt file as many times as needed. And if you want more points (particularly on curved edges) use the Curve.StartMidPoint node instead of Curve.StartPoint.
After the first run, the Floor Slope resets to zero:
For the second run, switch the File Path connector to connect only to Points.FromCSV.
And the Floor after the second run:
As you can see, the Spot Elevations reacted somewhat strangely to the API modifying the points. But I was able to transfer them onto the Slab Shape by copying them before the first run and then pasting them after the second run.
And for any architects who might be interested, the same concept can also be applied to Roofs. It just requires a few modifications (including a Lunchbox node and a new Landform node).
This modified definition can also be used on Floors (if you don’t want to individually select the top Face).