Selecting Interior Walls in a model then creating reference planes along the interior faces

Hi, I’m trying to select all the interior walls in a project to create reference planes along the interior face but I am running into some issues. I have been reading other posts on here and it seems a few others have mentioned a similar problem but it seemed they didn’t get any solutions either.

My goal is to have have a room with all of my interior walls having a reference line for furniture families to attach to, that way when i move a wall in any direction that furniture family attached also moves. This is going to be used for over 200 rooms so moving every wall and family in the same location will take a lot of time, im looking for a more efficient workflow than moving each wall and furniture family individually if a wall needs to adjust.

To sum this up the steps for my script are:

  1. grab all interior walls
  2. create reference plane along the interior face
  3. create a furniture family
  4. attach that furniture family to the nearest reference line

Please help!

I think it would be simpler to define your interior boundaries by the room geometry rather than the walls. Especially since your use case is specifically for interior walls of rooms. It would likely mean more reference planes (since a single wall could end up being a boundary for multiple rooms), but it saves you from issues when walls get broken up or replaced and you can still automate the maintenance with another Dynamo script.

You can either get the room geometry and filter that down to vertical surfaces or get the room boundary curves and extrude them into surfaces. Either way, that gives you exactly what you need per room and may even make it easier to identify the ref planes by name and orientation rather than wall.

2 Likes

That logic makes sense and so far that has worked but I’m running into issues with empty lists now. In the background view all the vertical surfaces are shown but the script is returning an empty list so I’m running into issues creating reference planes from there. Is the empty list due to it coming from a linked model or did i make a mistake somewhere in the script?

We can’t read that image. Make sure you’re taking screenshots with the Export as Image button in Dynamo. You need to be zoomed in enough that the node titles are visible - the export will include the full scope of the graph, not just what’s visible in window.


my bad! here it is again!

I think the issue with the references is because of list levels. You’re filtering lists so you’re getting lists in return. Using @L1 for Flatten probably isn’t what you want to do. You’re flattening the item level which isn’t a list to begin with, so all you’re doing is losing any structure you had and adding an arbitrary one on top. If you don’t care about the relationship of the surfaces back to the rooms, then just use Flatten with no list levels. That should fix the reference issue.

It also looks like you have some issues with the rooms from the start. It would probably be helpful to deal with those errors too.

Okay great! that made a huge difference, thank you! I’m not sure if I’m running into so many issues because im pulling information from a linked model but i cant seem to figure out why i cant take the surfaces from a flattened list and get the face reference. the pop up said to use ImportInstance.ByGeometry but when i tried that in between the two then i ran into more errors and null values.

Can you share that error as well? To be honest, I’m a little surprised that node exists. I wouldn’t imagine a face reference could be generated just from a geometry. Have you used it before? Are you sure it does what you want? It may also fail because rooms wouldn’t have actual face geometry anyway, just a volumetric representation. In your original post you mentioned creating reference planes. Did you abandon that process for some reason?

Again, it’s also probably good to clear out the other error(s) from your rooms list. It looks like Element.FromLinkedFile has input warnings but it’s also causing the downstream nodes to fail as well. Looking at the Room.Area node, you’re getting some rooms with 0 area. This means you have unplaced rooms. You’ll want to clear those out because they won’t have valid geometry.

EDIT: It looks like the node you’re using expects a Revit Surface, not just a geometry object. I think you need a different method.

i have never used the command before and was just trying different methods to create reference planes, also new to dynamo i typically use grasshopper so im adjusting to dynamo nodes and methods. i know i want reference planes on th


e interior walls but getting confused with how to get them. i attached the script here and i did try to filter through unplaced rooms but im still getting the error bubble. I’m not sure what my next steps should be.

also thank you so much for all your help already this convo has been extremely helpful!

What does it say? You have undefined inputs, so I’m sure that’s one error. It basically means the node uses variable names that match a class (which isn’t allowed). You just need to rename them, likely to lowercase or by using underscores or something. It looks like the filter took care of the other errors.

We need to use the right node then. A reference is not the same as a reference plane. The easiest to use is probably ReferencePlane.ByLine.

The error with Elements.Solids after i filter the unplaced rooms says “Warning: Element.get_Solids operation failed. Curve join produced more than one WIRE in PolyCurve” Not sure what that means.
also im searching for a way to explode the vertical surfaces into the lines used to create it. Im not sure what a good work flow for that would be but i tried the Surface.GetIsoline and get the error “Warning: Element.get_Solids operation failed. Curve join produced more than one WIRE in PolyCurve”

It probably means you have rooms with “holes” or a weird intersection of boundary objects.

Do you want the perimeter curve or the floorplan boundary? If you want the boundary curve, just use a different node. There are Room.[Type]Boundary nodes that give you the different boundary options as curve loops.

okay so should i use Geometry.Intersect to sort through that? for Room.(Type)Boundary would i use the filtered list of rooms as the input and ditch the idea of grabbing all the vertical surfaces in the model?

To sort through what?

Yes. If you want boundary curves, you can get them directly from the room. No need to go through the geometry. It should also help with internal curve loops (“holes”) by returning both, but you’ll still need to include some computational logic around which normal direction represents the internal/external face.

to sort through intersections or boundary elements that could be causing the holes or intersections, unless thats not important.
When i connect those nodes i get the error Warning: Internal error, please report: Dereferencing a non-pointer.

The holes would be for rooms that do in fact have internal boundaries, like a corridor loop or an architectural column in the middle of the room. They’re causing issues with the solid creation but they are correct.

Please show us an updated graph with node previews and warnings. It sounds like you still have a null in your list that needs to be cleaned up.


Im not sure how to show what the error message is when i print but the error with Room.Boundaries says Warning: Internal error, please report: Dereferencing a non-pointer

That error means you still have a null in your list somewhere.

okay so i decided to restart the script and try a new method. this seems to be working so far. i think my next step will be getting the furniture family to populate with a specific reference plane

1 Like