Room centre location

One of the difficulties of documenting in Revit is the inability to place rooms exactly in the centre of the room. Ideally Revit would automatically snap to the centroid when in the process of placing a room, instead of just aligning to adjacent elements. Since the reference cross hairs of the room are turned off by default, initially the position of the room may seem irrelevant. However, when attempting to ‘tag all not tagged’, Revit will place tags centred to the room’s location. This means that drawings can appear messy and illegible. To solve this problem, BVN has developed two custom Dynamo nodes, both of which are available via the BVN Dynamo Package.


The ‘Room.CentreLocation’ node moves all rooms within the project to the centroid of the room. If you have an odd shaped room and the centroid is going to fall outside of the room boundary, the node will keep the room in its current position. Under the hood, the script uses the LunchBox Room Element Collector to collect all rooms within the project. The outlines of the rooms are then generated using polycurves. If there are internal room bounding elements which create multiple outlines, the script will take the one with the longest length. Typically, this will be the outermost outline but this is not fail safe. The centroid of the polycurve is then calculated and a containment test performed to test whether the new location (centroid) is contained within the room. If true, the rooms are moved to their new location with the rest remaining as-is. The script is based on the node developed by Modelical.


Inside the ‘Room.CentreLocation’ custom node

Revit_RepositionRoom2_1600x750Repositioned rooms and room tags


Once all the room have been repositioned it is possible to move any existing room tags to the new room location point. While it is possible to use the ‘tag all not tagged’ command within Revit, you may have some rooms that either don’t need tags or which require a different tag family. By using Dynamo and referencing the tags already placed in the project, users have greater control over the outcome.

The ‘RoomTag.MoveToRoomLocation’ node is based on the script by Modelical. However, the benefit of using the BVN package of Modelical’s is that the BVN node will automatically select all the room tags in the project. The problem with having to manually select which tags to update is as follows. Firstly, using the ‘Select model elements’ node in Dynamo you need to draw a window to reference Revit elements. It is not possible to have a pre-selection or use Ctrl to select multiple elements. The alternative therefore is to visually isolate the room tags for easy selection. However, it is not possible to isolate solely the room tag category. In order for room tags to be visible, rooms must also be visible. Therefore, having the script automatically collect the room tags in preferable. Note that the script will search for any tags that contain the term ‘Room Tag’ in the family name. If you name your families something different, you’ll need to modify the node as necessary.

Dynamo_CentreRoomTags_1600x500Inside the ‘RoomTag.MoveToRoomLocation’ custom node



4 Comments on “Room centre location

  1. Any way this could be adapted to instead of shifting the room to its centroid, it could be leverage to report the placed center of room to obtain the length x width of its extents to that placed center location?

    • Hi Rob. Do you mean it reporting the rooms overall dimensions like 6x4m? This can be done by using a bounding box of the room. Or do you mean the width relative to the (uncentred) room location? This is possible too but how do you determine the width from the length? What scenario are you thinking of applying this to?

      • I’m thinking the way a slab direction tag works. This would allow you to grab length x width based on an uncentered non rectangular space easier.

        • I can look into it. Would it be better for the node to reference a detailed component, such as a setting out point, rather than the room?

Leave a Reply