Model Revit Ceiling Grids for Navisworks Coordination using Dynamo

Sounds great :slight_smile:
can you please mark the post as solved?

So after testing this on a large project I had a few issues come up.

  1. The adaptive components should probably be sweeps created in Dynamo instead, since they can’t follow any curved lines around the ceiling perimeters.

  2. Element.Faces for ceilings fails for some reason. Not sure what is causing this. It says “trim_with_edge_loops requires all curves to touch surface”.

hi @CBailey ,

I have one question and one suggestion,

  • Instead of Element.Faces try Element.Geometry then Explode to get the faces. It should do the same thing but it’s worth trying…
  • I’m not sure what the adtaptive components do , do they represent whole ceilings or each ceiling pannel?


I couldn’t get the exploded faces to work for me, but I did find the ceiling that was causing the error. It has a very complex profile. I might try to edit the sketch in Revit to try to fix it. When I delete it, all the other ceilings work great.

As for the adaptive components, I am not modeling the ceiling panels, only the grid extrusions as shown in the screen capture. Right now, they create an extrusion from point A to B. I will see if I can extract the midpoint of the lines in Dynamo, and add a third adaptive point to the Revit component to see if I can get them to bend around curved lines. If that doesn’t work, then I will try making sweeps directly in Dynamo along the lines instead of using adaptive components.

@CBailey yes that type of ceiling is indeed special :smile:

I’m still not understanding something about the adaptive compnents though… What you are trying to do is to create, with the adaptive components, families that have the same shape as the initial ceiling… is that correct?

If that is the case why not use direct shape to create objects from the geometry of the initial ceilings? or Dimitar Venkovs amazing FamilyInstance.ByGeometry (spring nodes package) ?

The adaptive components are sub elements not modeled in Revit.

The geometry for ceilings in Revit is limited. It is basically a profile that is extruded up with a surface pattern on the bottom to represent individual ceiling panels and metal grids that hold them up. The surface pattern represents the metal grids but contains no 3D geometry. (image 1) When pulled into Navisworks the grids don’t show up in a shaded view (image 2) and are incorrect in a rendered view (image 3). When modeled with geometry, they can be used to run clash detection with a Mechanical and Electrical models in Navisworks. Making sure that the MEP models are accurately place within the ceiling grids and built that way in the field.

I will post my three point adaptive test in a minute.

I got the adaptive components to bend!!!

Here is my three point adaptive component test. It works well on minor bends. I think that if I add one more point, it should handle sharper turns. After I test that, I will post the Dynamo nodes if that works.

@Mostafa_El_Ayoubi Thanks again for your help!

Conclusion…? The four adaptive points worked better, but I think that they are excessive to have all the extra points for the straight grids in the center. They really only require two points. Here is my screen capture for four adaptive points. I think that the final version of this I will filter out the center lines vs the perimeter lines and use the required number of adaptive points as needed. That way I can use an L shaped profile around the perimeter and the T shaped grids in the center. The exploded CAD already comes as two separate line types so that shouldn’t be difficult.

I’m off for a weeks vacay!

Okay I finally got it haha …
Then you could try something like this that basically extrudes a profile along all your curves so you never have to worry about them being weirdly shaped :

It would also be possible to do that with different profiles if you can destinguish perimeter curves from grid.

Enjoy your holiday !

That worked great for following curved lines. Here are the points I used for my profile. I had to use decimal feet to get the scale the correct size because my project is in feet and inches.

I think a combination of adaptive components for all the straight lines in the center of the grid work best. It goes faster and doesn’t create a new family for each grid line, making the file size balloon on large projects. The perimeter lines could still be created using sweeps if needed. I still need to find the best solution to filter the lines. Possibly selecting all curved lines and giving them a parameter value in Revit? Curved lines have a “Center Mark Visible” parameter available while straight lines don’t.

So the above solutions were not built to use the Revit model surface pattern directly were they? I’ve wanted to do this but haven’t got around to it yet.

1 Like

That would be awesome if you could get it to work that way! Right now, the solution is to project exploded model lines exported from a RCP back up to the bottom surface of the ceilings. A few previous forum posts I saw, seemed to think that the location of the surface patterns was inaccessible due to the Revit API or some other reason. Not sure if that is the case since I am so new to Dynamo.

@Luke_Johnson do you have time now? hehe :slight_smile:

Unfortunately not yet :slight_smile:

I’m nearly at the beginning stages of this exact challenge. My expertise is Rhino/Grasshopper which is similar in logic, so if I come to a solution I will definitely share! Thank you for sharing your progress so far!

So complicated. Why not model your gridded ceilings as Sloped Glazing if you want them to be more realistic?



If I wanted to model the panels, how would I go about this? I am doing a similar thing but with suspended floors for Navisworks - my curves are coming from a CAD file which the sub contractor has set out (they don’t use revit but the contractor requires a BIM model), and I am finding the points by intersecting all the grid line curves (using bi morph CAD nodes). I am struggling with applying my four point adaptive component to the grid. Then the next problem is around the edges of the floor - how do I apply the 3 point adaptive components where the panels are cut?

I get that I need to structure my lists in the right way so the adaptive component by points can function, but don’t where to start with finding the correct list structure?

Thanks! great workflow by the way.


I stumbled upon this post after spending a lot of time trying to automate the process of placing sloped glazing at all of the 2x2 ceiling locations, for the same reason as OP: to model the grid in Navisworks.

My first attempts were to create a file that would only have my sloped glazing (sloped glazing is in the roof family), and I would get the locations of the ceilings from an imported Revit architectural file. For some reason, this didn’t work because Dynamo won’t seem to create a roof based on a profile from an imported object.

Now, I just create the sloped glazing inside the architectural file.

My method differs from OP’s in that I find the 2x2 ceilings, extract their solids, find the centroid, create an xy plane at the centroid, and create a profile from the intersection of the plane and the solid.

I’m having the same issues as OP with complex ceilings, and trying to line up with the pattern on the ceiling. Is there a way, using Revit API (C#) to extract the pattern in order to align to it? If so, I may explore creating an AddIn to do this function.

This is what my sloped glazing looks like in Revit:

and in Navisworks:

Edit: The screnshots of the Dynamo aren’t very clear. Here is the file: Ceiling Placement Test.dyn (25.1 KB)


I don’t know the API answer.

Perhaps a DXF export, then reading back in the Line positions from the DXF would get it done. A 2-point Line-based Family could be placed where every DXF line was.