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
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.