Revit Reinforcement – Keeping a check on Bar Marks

Since 2015 Revit has provided the Rebar Number which automatically assigns bar marks to all reinforcing within the project making use of the partitions to generate a suitable bar mark.


This is of course a very useful feature and does provide an efficient method of bar marking. However, if you have then issued the model and need to make further changes to the model then you probably do not want the Rebar Numbers (Bar Marks) to change and of course, being automated this can happen.

A safe way of working is to use Dynamo to automatically synchronise the Rebar Number to the Schedule Mark (this was the method of bar marking prior to Revit 2015). This will obviously only be run prior to the issue of the drawings/model to keep a record of the bar marks.

If the Rebar Number does not equal the Schedule mark then we can take ‘manual’ control to rectify the problems.

Here is my Dynamo Script below.


It is a very simple routine that selects all the Structural Rebar in the project, gets the Rebar Number and then sets the parameter Schedule Mark with this value.

The next stage is to check that the marks are in synchronisation. To check for this we can use another Dynamo script. For this example I will explain a few stages as we need to use some logical checks and filtering of lists.

The first stage is to create a new shared parameter for the check. This needs to be a Yes/No parameter as shown below.


Next we will add this parameter to the project so Revit understands which category this applies. Notice that the parameter will need to be an Instance and applied to the Structural Rebar Category (Feel free to add others such as fabric etc.)


You can now build the Dynamo Definition to check the Rebar number and schedule mark are in synchronisation. Start by selecting all the Structural Rebar elements as shown below.


The next step gets the Schedule Mark and the Rebar Number and then checks to see if these values are equal. The output is a Boolean (true or false). Notice that one of these values is returning a false value.


The true or false lists are then evaluated by the List>filterByBoolMask. The list input is from all the Structural Rebar Elements and the mask is the Boolean output from the == node. The list is then split into two, one list for false and another for true. Finally the parameter “BarMarkSync” is then set to true or false with the use of the Boolean node.


To test this you can manually set some of the Schedule Marks to different values and then set up a Revit schedule to show the out of sync marks with conditional formatting as shown below. Another method could be to use filters to show the out of sync bar marks on a model view.


I hope some of you will try this tutorial if you are currently using Revit to produce Reinforcement  models and schedules.



Revit Structure & Dynamo – Piled Wall Systems Tutorial

When creating Piled wall systems within Revit you either have to create a structural wall and then 2D detail this in plan to look like a piled wall system or more commonly place each male and female pile and at best, use the array or copy commands. Although this is not too complex for linear piling it can get quite time consuming when curves and turns are encountered within the path.

Link to video:

Piled wall systems with Revit and Dynamo

Dynamo does provide a very neat solution to this problem and could also be used for sheet piling as well as secant and contiguous systems. In this example I have created a chain of model lines which represents the path of the piling in plan. I then project these lines onto the surface which gives the correct Z levels. The path is then divided into segments and each coordinate pair is then extracted from this list. Finally an adaptive component is placed at each set of coordinates.

This tutorial starts with a quick look at the anatomy of an adaptive component. Adaptive components are very useful when you need to control the placement of elements along a path and have the element rotate to stay aligned. A good example of this is sheet piling.Revit Sheet Piling - Connected clasps

The Adaptive Sheet Pile is basically a standard foundation family that is nested into an adaptive component template. The below image shows the nested family and the adaptive points that control the placement of the pile.Adaptive Component

The first stage is to create a path for you piling layout, in this example I have done this with Model lines. Start Dynamo and then create a new workspace.
The first section of the dynamo graph will allow the user to create a selection of model lines. The Element Curves node will get all the curves/lines within the selections. The list is then flattened and the individual curves/lines are joined into a single poly curve. The last node reports on the total curve length.Sheet Piling with Dynamo - Select model elements

The next stage is to get a selection of your topography and then convert this into a poly surface. The node I have used below if the Python implementation which is much faster than the original conversion tool. (This is found in the Spring Nodes package).

You can then take the surface and the joined curve from the top example and then project this onto the poly surface (Your Topograpghy). Note that the Vector.ZAxis simply projects down the Z axis.Sheet Piling with Dynamo - Get topo

The graph should now look similar to the below image.

Sheet Piling with Dynamo - first part of graph

We now take the new poly curve and divide this into a series of points. In my case the sheet pile in 900mm from point to point. I want to have a start and end point for each pile so I am simply going to divide this by 2.

Sheet Piling with Dynamo - Code Blocks

I have now created a Code Block to divide the curve length into the half distance of my sheet pile.Sheet Piling with Dynamo - Create the Divisions

This will of course create a real number (65.4950), what we need is to round this value down to the nearest integer (65). The output of this is then used to divide the curve into the required number of points. The output of the Points node now contains all the coordinates.

Sheet Piling with Dynamo - create the division Points

These coordinates need to be split into pairs. The List.Chop will then create pairs but if there is a single coordinate left then the Adaptive Component will fail to be placed. The filter looks at the length of the sub lists and then only gets the lists that have more than one set of coordinates.Sheet Piling with Dynamo - Split into Pairs

This is more of a high level overview of the process and the Dynamo script but I will do a video showing and explaining each stage.


Revit Space Trusses using AutoCAD and Dynamo

Way back in 2011 I wrote an article on the use of AutoCAD and Revit Structure to create a space truss structure. This was using AutoCAD meshes to facet a smooth lofted surface and then involved picking each line and converting these into structural members. At the time this was a valid workflow but, five years on and with the introduction of Dynamo we now have much quicker, productive and robust method to create 3D trusses or space frames.

Revit Strcuture Roof Geometry

In this tutorial I will just outline the main toolsets and processes used to create the above space truss. You will need the following software before you can attempt the tutorial:

  • Autodesk Revit 2016
  • Autodesk AutoCAD
  • Autodesk Dynamo 9.1
  • Lunchbox Package for Dynamo

The geometry is first created in AutoCAD as a polyline curve as shown below. The front curves are mirrored and then copied to the rear 50 meters back.

AutoCAD Roof Profile

You can then create some arcs on the side of the roof structure and then create a lofted surface. Your AutoCAD model will then look similar to the below image.

AutoCAD Geometry.jpg

The real fun then begins in Revit and Dynamo. Here is what the finished graph looks like! As you can see there won’t be scope to create a full, click by click tutorial on this but I will produce a video tutorial if there is enough demand!

Dynamo Graph

The first step is to start a new Revit Structure project and start Dynamo. You then need to import the AutoCAD wireframe. I used the centre of the roof structure as the origin and inserted this Origin to Origin.

You then need to select this geometry in dynamo and then generate dynamo faces from the AutoCAD surface. The dynamo surfaces are then passed into the LunchBox Space Truss node. This creates all the line work and the faceting strategy for the top and bottom chords as well as the braces. Notice that you can also set the truss depth. I have chosen to utilise sliders for all these operations.

Dynamo Graph - Selecting the AutoCAD geometry

Once the centre lines are generated then you can start to assign structural members. This is done with the following. I have used a level to associate the members and then a structural framing type node to select different CHS members for each structural system.

Dynamo Graph - Adding Structural Framing to the curves

The next step is to add some information into the members. I have set the Z justification to centre and also set some type comments so I can filter specific systems within Revit. Of course you could also number the members using dynamo as well!

Dynamo Graph - Setting the instance parameters for the structural framing.jpg

You will then have a space truss. You can of course then edit the structure within AutoCAD and then the new members will generate.

All in all a much quicker and more productive workflow!


Modelling Piling from Microsoft Excel using Revit & Dynamo

Happy New Year to everyone and straight back into the deep end with more Dynamo! Way back in 2013 I reviewed the Excel Model generation tool that allowed the creation of Revit elements based on a spreadsheet. This allowed the modelling of various objects but was limited to generation of only geometry and did not allow the user to add data to the objects.

Link to YouTube Video: YouTube Tutorial

Revit Piling from Dynamo and Excel

I used this tool to create a Revit piling layout derived from AutoCAD geometry. See Post Below.

I have since used Dynamo to achieve a better method for the setting out of piling as well as setting the Pile number and even loading.

In this post I will step you through the Dynamo node so that you can create a similar routine. Let’s start with the raw Excel data. In my example I have the Pile Number, the Easting and Northing Coordinates, the Level, Depth (Length of Pile) and the Pile Diameter.Excel - Piling Data

The following image below shows how to select the Excel file and then pass the filename and sheet name into the Excel.ReadFromFile node. Note that I have used a Code Block for the Excel Sheet Name but you can of course use the string node instead.Dynamo - Get Excel Data

The next stage is to remove the unwanted headers from the Excel data. The List.DropItems node is removing the first list. Note that list is a ‘nested’ list so will remove the [0] index as shown below.

Dynamo - Remove Headers from Excel

Next the transpose node is used to sort the data into the correct columns. The current data is stored as rows. The List.Transpose node converts rows to columns as shown below.Dynamo - Transpose the List

The next task is to get all the required data into separate lists so that we can later ‘feed’ this into the nodes to create the piles and also add data to each Revit Element. Dynamo has a node called List.GetItemAtIndex which gets the relevant data. In the below example I am getting the data from index 1 which is the Eastings Coordinates. Index 0 is the first column which is the Pile Number.Dynamo - Get Item At Index

This then leads me onto the next problem. By default the piles will be modelled from the origin (0,0,0) and Revit has a geometry limit of 20 miles which will clearly be broken by the large numbers (This project is around 200 miles from the OS base). In the below image you can see the ‘effect’ of geometry modelled a long way from the origin. This is referred to as graphical degradation and will affect the visual and also the accuracy of snaps etc.

Revit - degradation of Graphics

In the Project I have set the Project Base Point of a known Pile coordinateSet Project Base Point

I have then subtracted these values from the Eastings and Northings to give me coordinates relative to my project base point. In the below example I have the known Easting and Northing setting out point set. I then pass this value into a code block (marked with red boxes). The Code block is taking two variables and then subtracting the set out from the real coordinate. The nodes with the blue frames are the original coordinates.Dynamo - Transpose the Coordinates

The next step is to then model each pile based on a pre-defined Foundation Family. In this example I have created a round pile with an instance parameter to control the Diameter and another to control the depth. I have named this family ‘Concrete Pile’. The FamilyTypes node will list all loaded Families in your current Revit project. We then use the FamilyInstance.By.Coordinates node to generate each family from the two code blocks that generate the X and Y position and the third which is the ‘raw’ Z levels.Dynamo - Create the Piling

It is now time to make use of the ‘metadata’ such as the Pile Number and the Diameter by utilising the Element.SetParameterByName node. This needs the elements from our FamilyInstance.By.Coordinates node and also a string for the Parameter Name. Again I have used a Code Block for this example. In the image below I am using the instance parameter ‘Mark’ to read the Pile number and then add this into each Pile. This is then repeated for the Pile diameter and if required, the loading.

Dynamo - Setting the Pile Number

So anther interesting use for Dynamo in a structural project. I will produce a video tutorial to accompany these notes in the next day or so.