MEP design and Dynamo

Most of the work we see with Dynamo involves designing complex parametric geometry. But Dynamo can also help you automate your design and make more informed decisions, even on the most ordinary cubic building.

A lot of tasks of the MEP engineer involves retrieving information from the architectural model and can be automated using Dynamo.

The first task of the MEP engineer is to retrieve rooms from the architectural model and create MEP Spaces from it. The “Place Spaces Automatically” Revit function can be useful here, but it is far from enough in many cases. There isn’t any control on the created spaces, and properties from the room cannot be added to the newly created space.

To improve on this function, I start exploring space creation in Dynamo. There isn’t much support for Room and Space built in Dynamo. Some package can fill this gap (Lunchbox from Nathan Miller and Clockworks from Andreas Dieckmann) but does not offer a complete solution. Furthermore, we need support for linked files, since architectural rooms are most of time in linked files.

So I create my own Dynamo package, called DynamoMEP. This package contains a set of nodes for creating and working with Room and MEP Space.


I use these custom nodes to create an MEP Space from every Room in a linked architectural project.

I start by retrieving linked rooms using SteamNodes, a great package from Juline Benoit. Using Element.GetFromLinkedFile gives me a list of rooms in the linked file (The Get Document came from the Grimshaw package).


Using the Room.FromElement node, I convert these linked elements into Rooms. I can now get their location points, and create my MEP spaces based on these points.


Still using the DynamoMEP package, I can retrieve basic properties from these spaces, like their origin point, their associated level and their bounding elements.


My model has now a matching MEP Space for every room created in the linked model. Since we are using Dynamo, we can have a much more sophisticated workflow, and retrieve specific properties in the rooms to have them added to the newly created space.

DynamoMEP is still in this infancy, and need a lot of improvement, so don’t hesitate to report any bug or missing feature. You can add an issue on Github, or post a comment below. I hope to add new features as I develop MEP workflows in Dynamo.


22 thoughts on “MEP design and Dynamo

  1. The Space.BoundaryElements seems like the node I need but I can´t make it work. When I connect spaces with the node it fails. What kind of space does the node accept?

    My setup is: Categories > All Elements of Category > Space.BoundaryElements, but I get an error 🙁

    • Hello Christian,

      You first have to convert Elements into Spaces, to make Dynamo understand that it is working with MEPSpaces.
      The setup would be Categories > All Elements of Category > Space.FromElement > Space.BoundaryElements

  2. I found that using space by points works but it doesn’t associate the space with the level. I tried to get Space.ByPointAndLevel to work but no matter how I put the levels in, it tells me “The level does not exist in the given document”.

    • Hello Matthew,

      Can you send me a model along with your Dynamo definition so I can figure out why you get this error ?

      Thanks !

      • Hi Tom,
        I am sorry, but I wasn’t able to reproduce this issue on my side. If you have a model and the Dynamo definition, I would be glad to have a look at it.

        • Hi guys,

          Was anyone able to figure out why the “Space.BypointAndLevel” does not work?

          I’m trying to run the script and I got the message on the node stating that the level does not exist in the given model.

  3. The Grimshaw package doesn’t seem to exist any more…. Is it the same as

    Great blog by the way; love your ideas and simple solutions 🙂

  4. Hi Simon,
    How does Space.ByPoint decide which level to place the space? I’m placing many spaces using points 50mm above floor level, but many are beign associated with other levels…

    • Hi Tom,

      The Space.ByPoint is selecting the nearest level below the point. Could you send me your model and your definition, so I can have a look at it ?

      Thanks !

  5. Hi guys,

    Was anyone able to figure out why the “Space.BypointAndLevel” does not work?

    I’m trying to run the script and I got the message on the node stating that the level does not exist in the given model.

Leave a Reply

Your email address will not be published. Required fields are marked *