Elements in Space with Ceilings

Has anyone else received this error when using Archilabs “elements in space” with ceilings?

I don’t know if Ceilings can be “in” spaces since they’re normally room bounding. Does your space go above the ceiling?
It could also be because ceilings are system families.

I don’t have time to test right now but could it be a generic ceiling. They do not have geometry they are just a plane. Food for thought.

have a good weekend.

If you look at the Python code within the Elements in Spaces node, you’ll see this line: inSpace = family.Space[phase] which is querying the space property of the family element. Ceilings do not have this property, I’m pretty sure thats why this node will not work with ceilings


Exactly right. This is why I renamed my nodes FamilyInstance.Room and FamilyInstance.Space.

You can use another method. Space.IsPointInside (remember your ceiling should be within the volume of your space)

1 Like

Or if your model has volumetric calculations enabled you can use the room.boundaries node. :wink:

1 Like

So, @john_pierson, your solution works…but not with linked files. Is there a way to do the same thing but read the ceiling from a linked revit model?

UPDATE: I actually got it to work through the “get elements from link” node. It doesn’t work on links just by itself. Sorry, it’s dynamo amateur hour over here lol

UPDATE 2: After a few more tests, it doesn’t seem to pick up that the centroid of the linked ceiling is in my space. I have added the bounding box nodes to spaces in order to visually verify that the ceilings and spaces DO intersect. It seems as though that they meet each other, but don’t actually intersect.

Link to the dynamo file: https://drive.google.com/file/d/1COrdv2ZjvTQlNThBuW8JLk2b-q876WMO/view?usp=sharing

If the ceiling is bounding that will often be the case.

Can you find the centroid of the ceiling (a point) and drop it by 1/2 of its elevation and test that point?

Possibly. I’m not sure how to subtract from a specific point or coordinate.

@robertsb2010 if you can get the centroid point of the ceilings like @JacobSmall said, you can use Geometry.Translate to create a lower point to run through the Space.IsPointInside node.

(The Point.Z nodes in the image above are only included here to show the change in Z value from using Geometry.Translate)

Edit: In retrospect, you may be able to find similar results by using Geometry.Translate on the points you generate from the Solid.Centroid node in your above screenshot)


Thanks @awilliams!!! That worked! Now, to organize my lists so that I can match diffuser and ceiling heights! Haha.

So I know which ceiling is in which space, how high they are, and how high the diffusers are, but how do I say that the diffusers need to equal a certain spaces ceiling height? I guess the problem would be list organization.

Were you ever able to get this working?

Actually, a colleague of mine was just finishing this up yesterday. More in depth script than the original question needed, but yes it’s finished.