Rename rooms by groups

3 min read

A common task that we are often asked to undertake is scheduling apartments for residential projects. In my opinion, the generally accepted method for modelling residential buildings is to use groups for each apartment layout.

Model group workflow

Model groups, which contain only the internal partitions, are placed into the main model, which includes all the party walls and structure. Depending on your preference, rooms can either be placed within the model group or outside of the model group. Since it is not necessary to schedule every single room within the apartment, the internal partition walls can be set to ‘non-room bounding’, and a single room is placed within the apartment.

The problem

The problem, therefore, arises in that there is no association between the model group and the room. Ideally, we want to keep these two in sync. For example, if I name the model group ‘1B-6.0’, I want the room’s occupancy parameter to update.

This dilemma is discussed in David Light’s post ‘Scheduling Apartments‘. Since Revit is unable to schedule groups, David proposes a solution whereby a hidden element within the group is tagged and scheduled. But the limitation with this method is that it is unable to extract the area of the room. To do this, we need to use a room schedule. To manually sync the room parameters to the apartment group parameters is a massively time-consuming process. However, luckily we can automate the process with Dynamo. 

Dynamo automation

The ‘Room.RenameByModelGroup‘ node, which is part of the Parametric Monkey Dynamo package, solves this problem. To use this node, first ensure that all rooms have the correct volume by adjusting the limit offsets. If a room overlaps into another above, the script will be unable to determine which room the model group belongs to. The ‘Room.AdjustUpperLimit‘ node can help to adjust the room heights if required.

The node then extracts all model groups and filters them by ‘String.StartsWith’. So for example, if you enter “1B” it will return model groups called, “1B’, “1B-1.0”, “1B XYZ”, etc. The script then collects all rooms and the insertion points of the model groups to determine which model group resides in which room. The room’s ‘Name’ parameter is updated as per the node input. And the room’s ‘Occupancy’ parameter is updated as per the model group’s name.

If the insertion point of the model group is outside of the room, the node will not rename any elements, and a warning will appear. You can use the ‘problematicElements’ output to find the offending model groups so that their insertion point can be updated. Once this is done, rerun the script and all model groups will be updated.


Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Add Revision to sheets

Add revisions to multiple sheets

A simple Dynamo workflow for adding or removing a revision to multiple sheets simultaneously in Revit 2022 or lower.

Create Internal Elevations with Dynamo

Create internal elevations

Generate elevation markers and corresponding internal elevation views using Dynamo based on rooms and their bounding wall’s orientation.

Sync Room Parameters

Sync room parameters

A Dynamo workflow to synchronise instance-based room parameters, such as apartment number, nested within a Revit model group.

Rhino Inside Revit for Dynamo users

Rhino.Inside Revit for Dynamo users

Learn some of the key differences between Dynamo and Rhino.Inside Revit and discover the benefits of migrating certain Dynamo workflows to Rhino.Inside Revit.


© 2023 Parametric Monkey
Parametric Monkey and the Parametric Monkey logo are trademarks of Parametric Monkey Pty Ltd.


Drop us a message and someone from our team will be in touch with you shortly.


Thank you for your interest. Someone from our team will be in touch soon.


To find out about upcoming public workshops or to organise a private workshop, please submit the following contact form and we’ll be in touch soon.