Hi @Karam_Baki . Using your great package. The node in the title was the only one that simplified room curves to work with surface.patch that were failing (rarely happens but your nodes sorted it). I’m just not quite sure what the “safe angle” is. Do you have something that explains this? Just want to make sure my rooms are reasonably the same shape after as I’m clashing them.

Hey @vanman
As far as I remember, that node did some geometry healing for surfaces that have a very small angle value, try to minimize this value as much as possible.

However, there is a better solution that guarantees a consistent results for Rooms surfaces.

Go to Extra folder and search for Room.Rooms Outlines to Family By All Rooms of Active View
Room.Rooms Outlines to Family By Rooms Selection

Use that dyn graph and after Geometry.Transform you’ll get Room surfaces, feel free to do whatever you need with them.

It’s extremely fast and optimized, it doesn’t even re-create the surfaces, it just extracts them from existed Revit Rooms.

Hope it helps.

1 Like

That sounds awesome. Thanks Karam!

Is your method by extracting element faces? Have I been wasting my time getting room boundary curves with it failing to make surfaces sometimes :laughing: when element surfaces will always get it?

it looks like curves and then making a surface is faster processing to get the bottom surface. Just need to find an ok join tolerance for polycurve join

Well, yes and no

Calling, Element.Faces sometimes fails to get vertical surfaces of a Room element, and throws an error, therefore you will also loose the Bottom surface of a Room

So, my method tries to ONLY get the Bottom surface directly from the element, and ignore any failing surfaces of a Room along the way, thus always results of a healthy extraction… as generally speaking, Bottom Faces are Planar and easy to convert from Revit Face into Dynamo Surface

Many projects and tests proved that this method is nearly perfect… in fact I had 0% failures for the last 6 projects (2 of them are Mega twisted towers too)

1 Like

Have you also tried with the Room.Rooms Outlines to Family By Rooms Selection.dyn ? (Not with Element.Faces) ?

Yup thanks mate. I’m running it on some pretty big apartments though so want it quite fast. Ill send the script I made if your curious. Can see why I’m trying get every processing bit right down :sweat_smile: The curves method isnt as reliable but I got it working seemingly well for now testing across 5 apartments from my firm and others.

I can now understand why you said boundaries method is faster, I just checked the code again, it seems it attempt to get all the faces and ignores the failing ones, thus results in working ones and one of them is always the bottom, but in a lower speed.

Although I remember I optimized it in the past, but somehow I forgot to update this Python Script specifically.

It should detect which is the bottom lowest face (Which is the Bottom one), and this will save time trying to convert other faces

I’ll add this later to this Python Script, perhaps I’ll turn it into a node too

Thanks for the feedback

1 Like

Just heads up, I noticed that the resulted surfaces count is more than the input rooms.
That means some of the rooms have multiple bottom surfaces… which might cause issues if your script depends of proper listing.

You can solve this by managing the surfaces in flatten nodes after the Python Script.

In all cases too, after a week or two, try updating Synthesize, I’ll have that managed properly by then.

1 Like

thanks thats awesome. I noticed I get multiple surfaces sometimes too from my other script. Ended up just doing a surface union to combine them to the one room.