Find walls and floors (that aren't room bounding) in a room - Finish Schedule

We use non-room bounding floors and walls to model our finish floors and accent paints. Long term I’d like a script that would be able to build a room finish schedule (including ceiling and ceiling height) but I thought I’d start with getting the finish floors that are within the room. There are plenty of tutorials on making finish walls via dynamo, and some on finding objects in room. However I haven’t been able to modify them to find walls and floors that are within the room volume.

Any suggestions for how to do this or even where to start to get elements in a room volume would be a great help!

Clockwork package has node called Room.Boundaries that will get you started.

As Kulkul says…

(Apologies not at a PC)

Have a look at BiMorph… I think there are some very efficient nodes for intersections… obviously the graph will be very resource intensive. You might need to filter by room level to reduce the load.

Room Boundaries
Extrude curve as solid
Get categories (inside room)
All elements of category
Element location (assuming no multi level walls etc)
Does intersect (cross lacing) (might need a point at parameter 0.5 for location lines) You might be able to use Element intersects or similar instead of these nodes?
List contains
True
Filter boolean mask

Hopefully that’s useful,

Mark

Thanks - I think that helps get me on the right track. I played around with the room.boundaries node but unfortunately it doesn’t get me curves. I was able to use the default room boundary node to get curves, extract those points, and then create a close curve from the points to get a solid. The doesintersect node seems to work, although it appears to be getting a floor that touches the boundary instead of intersecting only - I’ll have to look into that more.

Is there anyway to turn a solid’s shape into a bounding box? There are a number of nodes that make use of bounding boxes, but they don’t work when i directly feed them the room.

1 Like

Hey, you can get an element bounding box (from a room), it would be faster than generating a solid.

Obvs, it’s not so useful if your rooms are funny shapes or not axis aligned…

Shoot - I knew it would pick a rectangle if I fed it the room directly, but I was hoping I could manually create non-rectangular rooms. Rooms always have funny shapes!

There are some things to avoid a room solid, for example you can get wall location curve and check whether it’s inside the room boundary as a polycurve… But the solids method works ok for me? I find it’s pretty robust if you create the solid by extruding the curve to solid, rather than patching it first.

What is your method for getting the closed curve to extrude? The Room.Boundaries node from Clockwork does give me curves, but it is one curve for each element in the boundary, not a closed curve i can extrude. When I used the default boundary nodes I took the list of lines, got their endpoints (Curve.EndPoint) and then used the PolyCurve.ByPoints node to get a closed curve. That doesn’t work on the curves from the Room.Boundaries curves, I suspect I’m getting the length of an entire wall, rather than just the room portion.

Apologies, look for a room finish boundary? then there’s a node for extrude to solid…

You’d initially suggested the Room.Boundaries node, but neither clockwork’s or archilabs gets me useable curves. Right now I am getting the individual curves from Room.FinishBoundary node, Using Curve.EndPoint to get the points, and then PolyCurve.ByPoints to get a closed curve, which I can then extrude. The way you explained it made it sound like there was a more direct way to get the closed curve room boundary.

That’s the most robust way, I believe, though no, it isn’t the most direct.