Room Boundaries

After some experimenting with the available room tools I’ve got a question.

What is the easiest way to make sure a room boundary is closed, simplified and can be used for other geometrical operations? Generating floors, for example .
It seems that it always are some inconsistencies in curves extracted from room boundaries, and I guess this is because of how Revit deals with room boundaries.

(One option I’ve tried was to create an element.solid from the room curves and find intersection with a plane generated from the room location point, but it involved some surface generation which tends to slow things down quite a bit. I’ve also tried converting to PC and then extracting curves again to see if sorting order was the problem, but to no avail.)

jostein do you have samples for inconsistencies, up to now i always succeded when creating floors from room boundaries.

Something like below.

slett meg 2

I went over an example in my AU 2014 class on getting room boundaries and placing floors using dynamo,

It was intended as a beginner Dynamo course but it may help you.

The example starts 54 min into the full recorded class and you could watch it here

The handout goes into more detail so you may want to reference it as well.


Ok, I guess i’ve got to rephrase myself. I’m not actually wondering how to create floors by rooms. I’ve got that far. However, some of the room boundaries are unusable and return null values. As you can see in the picture above I got weird room boundaries and I’m wondering why Revit/Dynamo does that?

I believe it is because your rooms have something room bounding in the center like a column. This results in a double loop that we cannot currently pass into a floor by outline node.

If Dynamo is able to create a solid from those rooms nonetheless (try that by using Element.Geometry), the easiest way would be to find the bottom surface and extract its perimeter curves (look for a surface where a point at parameter 0.5 has the same Z value as your level).

Indeed every time you start exploding hundreds of solids or intersecting them to generate surfaces, you will experience some slowdowns.

How about the following werk flow: gather the room boundaries with “LunchBox Room Element Collector”( very fast) , run those through a “PolyCurve.ByJoinedCurves”, most of them will succeed but a few complex boundaries may fail. That’s ok, we can filter the problematic rooms out with “Object.IsNull” and “List.FilterByBoolMask” Finally we intersect/explode only the few problematic ones.

That should be plenty fast even for a project with a few thousand rooms.

Dimitar, i absolutely agree,

If you have internal elements which are room bounding and you run the polyCurve.ByJoined curves you’ll get multiple polycurves. There shouldn’t be any nulls. You just need to sort these curves by length to get the outline, then get first element.

1 Like