Model Revit Ceiling Grids for Navisworks Coordination using Dynamo

I am looking for the fastest and easiest solution for modeling ceiling grids in Revit. The problem is that since they are a surface pattern they don’t really export to Navisworks. I want to come up with a solution using Dynamo that is automated to help visualize them during MEP coordination.

As far as I can tell on other posts, the ceiling grid location is not accessible in dynamo either. I have tried a number of ways to get around this, but have run into a snag with each of them. I figured I would post how far along I am on each option to see if anyone can help improve upon them.

Here is a screen capture of the Dynamo version and packages I have installed.

Option 1
Requires that you first export the ceiling grids and exploded them in cad from a reflected ceiling plan. Re-import them as model lines into Revit and explode them on the level below the ceilings. I then import the ceilings and model line geometry into Dynamo. Since the ceiling heights vary, I am trying to project the line’s curves to the ceilings above. The problem is that I can only get the first line in the list to project up. Any thoughts on how to get the rest to do the same? Afterwards, I would like to add a sweep to each line in the new location and re-import to Revit.

Option 2
This option starts off like option one but rather than projecting the line’s curves I extract the points first and try to project them up to the ceilings above. The problem is that if I project to the whole ceiling geometry some points show up at the top of the ceiling while others at the bottom. When I try to project to just the bottom plane of the ceiling I still only get some of the points to show up. After I get all the points to the bottom of the ceiling in one plane, my intention is to use adaptive components similar to this example here to model the grids.

Option 2 with all geometry

Option 2 with bottom plane

Option 3
This option doesn’t require the use of model lines, but recreates the ceilings as mass families, then creates a curtain systems by face on the bottom face with empty panels and mullions for the T grids. You still have to line up the grids manually, which can be a choir for large projects. The bonus is that all the curtain system footprints and heights match the original ceilings. To line up the grids manually hit tab in Revit while hovering over one grid until it selects all the other parallel grids in the curtain system, then move them all at once. Do the same thing to the perpendicular grids in that curtain system. You have to do this for each ceiling. To help with this, I override the ceiling patterns to another color to see which grids don’t line up.

Revit model before without 3D modeled grids

Revit model after with 3D modeled grids

Option three is as far along as I can push it. Option one or two could use the most help. Sorry to make such a large post. I am sure many on the construction side will find a final solution useful during coordination in Navisworks. Any thoughts?


Hi @CBailey ,

Exporting to cad and reimporting sounds like a lot of trouble to me… That being said, in your 1st option, you can make your projection on the surface work by switching the lacing of the surface.projectinputonto node to longest :

Now if it were me doing it, I would try to figure out the logic of that ceiling grid: where does it strat? what is the pattern? how does it adjust to the limits of the ceiling etc. and I would try to create a script that generates it to save me the trouble of export import…

Hi Mostafa,

I agree that exporting cad is not my favorite, but I think that it will be faster than having to manually align the grids like in option 3. The lacing worked for the one ceiling. Any thought on why it didn’t for the other? Sorry, this is my first real time using Dynamo and I am not a programmer.

Thank you for the help!

@CBailey My bad I didnt realize you were feeding 2 surfaces to the projection node.
Here is a solution expressed in both nodes and designscript :slight_smile: :slight_smile:

@Mostafa_El_Ayoubi Thanks again for taking the time to help. I don’t quite follow what is going on though. Is the code block doing the same thing as the Surface.ProjectInputOnto node? Maybe I need to see the whole workflow to understand how you are first creating the lists before joining them. Would this still work with say more than a 100 ceilings?

yes the codeblock does exactly the same thing as the nodes. Forget about it if it’s confusing.
Here’s a screenshot with more precisions :slight_smile:

And yes it would work with 100 ceilings

1 Like


That worked great! :slight_smile: Below is my workflow so far to share with others.

How to use Dynamo, to instantly model the ceiling grids for use in Navisworks during coordination!

  1. From Revit export an RCP view per level with just the ceilings visible.
  2. Open and explode it in CAD.
  3. Re-“import” the CAD back onto the same level in Revit as model lines, then explode the imported CAD in Revit.
  4. Run the Dynamo script to project the line work up to the bottom of the ceilings at their varying heights and voila! It then places adaptive components for each of the ceiling grids automatically.

Note: you will need your adaptive component already loaded in the project, and I find it best to manually run vs having Dynamo run automatically.

I am about to test this on a large half billion dollar hospital project I have been working on, and will post any updates.


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.