How To Use Dynamo For Reporting Coordinates

Imagine that you have several objects in Revit that you want to report or schedule the coordinates for. They could be piles, columns, survey marks. Whilst the out of the box Revit gives you the ability to report coordinates at point, of place an annotation tag to display, there is no way to schedule this information, which would save time later on.

The Revit Coordinate System

Before we look at how we can do this, first you need to understand the Revit coordinate systems. How many coordinate systems does Revit have? This is a question a lot of people get wrong, as many mistakenly believe that it has two. These obvious ones are the Project Coordinate System and the Survey Coordinate System, which are the triangle and circle markers that we can display in a Revit view.

In actual fact, Revit has three systems, as we also have the Internal Coordinate system. This is a fixed 0,0,0 point that the other 2 are referenced from. Although it is hidden and cannot be seen as a marker, we can use Dynamo to report this coordinate system. By default the is the first coordinate system that Dynamo reports.

In Dynamo we have several nodes that we can use to find the coordinates of an element. The first ones allow us to select the elements we want the coordinates of.

We can select all instances of a particular family in the entire project, of all elements of a particular category.

We can also select individual objects or a selection of objects using the select model elements/element choice.

Once we have done this we can then acquire the coordinates of the family using the Element.GetLocation node.

This will report the internal coordinates of the element or elements.

We can then choose whether we want to report the Project or Shared Coordinates. To do this we use the Geometry.Transform node, which takes the output from the Element.GetLocation and a few coordinate nodes.

We need a few more nodes to complete the coordinate system.

First, we need the node for either the Survey or Base point and the CoordinateSytem.by origin node - this simply sets which coordinate system we want to use. We also need the CoorsinateSystem.Identity node. This node specifies sets the xyz direction. The output of the Geometry.Transform is a point with the correct coordinates listed. If we create some shared parameters and set them up as Project parameters, we can use Dynamo to write the coordinates back to the family.

Because we created these as shared parameters we can create a schedule to report them.

The above schedule shows the locations of survey markers that I then used to geo-reference a point cloud in ReCap. Look out for my White paper on Georeferencing PointClouds in ReCap.