New RIR Modelling Components

A few years ago, this feature request was posted about improving the use of adaptive families through Rhino.Inside.Revit. The examples mentioned bridges, tunnels, trenches, railings, and other geometry where multiple adaptive points and profiles can make the family setup quite tedious.
(Element Geometry Reference - Adaptive Families Features Request - #4 by M.Tarabishy)

This is something we have also been exploring for quite sometime inside Rhino.Inside®.Revit Community, particularly for axis based structures.

The main challenge is not necessarily creating the geometry in Rhino or Grasshopper. The challenge is how we bring that geometry into Revit while keeping the workflow as native and editable as possible.

The Existing Approaches

One common approach is to create all the required profiles in Rhino, generate the lofted geometry in Grasshopper, and then create a FreeForm element in Revit.

This works quite well for transferring complex geometry. However, once the geometry becomes more complex, there is limited control over the resulting form inside Revit. Most of the geometric logic has already been resolved outside Revit.

Another approach is to use adaptive families. In this case, we can create the required profiles, adaptive points, and forms inside the Revit family environment. This gives us a much more native Revit result, but it also introduces several additional steps.

The adaptive family has to be created and configured, the profiles have to be generated, the form has to be created inside the family, and finally the family has to be loaded back into the project.

I wanted to see if this complete process could instead be generated directly from Grasshopper using native Rhino.Inside.Revit components.

1. Creating the Adaptive Profile

The first component is New Adaptive Family.

The idea is quite simple. You provide a 2D profile drawn in Rhino, specify the location of the adaptive point, and provide a name for the family.

For example, in the tunnel workflow shown here, the tunnel cross section is simply drawn as curves in Rhino. The component converts this into a native Revit adaptive profile family without requiring the user to manually create and configure the family.


2. Creating the Axis and Placement Locations

The next part is defining the axis.

We could already transfer a Rhino curve into Revit using Add DirectShape (Curve).

However, for this type of workflow, simply creating a curve is not enough. We also need information about where profiles should be positioned along that curve.

For this reason, I extended the idea with Add Curve (Solid) and Add Location.

With Add Curve (Solid), the axis can have its own name and Revit subcategory. The subcategory can also be used to control the line weight, line color, and line pattern of the axis inside Revit.

More importantly, locations can be assigned along the curve.

For example, we can define PL1, PL2, PL3, and PL4 at specific positions along the tunnel axis. These locations are stored with the curve and can later be used when generating the actual family geometry.

This gives us a Revit axis that contains more than just the curve geometry. It also carries the location information required for the following steps.


3. Creating the Solid Family

Once we have the axis, locations, and adaptive profile, these inputs can be combined using New Component Family (Solid).

The component receives the curve, the required locations, a family name, and the adaptive family type created previously. A material can also be provided if required.

It then creates a new Revit family and generates the solid using the adaptive profile along the selected locations.

The important part is that the resulting geometry is created inside the Revit family environment. Once the family has been generated, it is automatically loaded back into the active Revit project.

The resulting family can then be placed using the native Add Component (Adaptive) component.

So instead of creating the complete lofted geometry in Rhino and transferring the final result into Revit, Grasshopper is being used to define the axis, locations, profile, and family setup, while the actual family geometry is generated in Revit.


4. Creating Multiple Sections Along the Same Axis

The location information also makes it possible to divide the structure into multiple independent sections.

For example, if the axis contains four locations, the location data can be reorganized into consecutive pairs:

PL1 to PL2
PL2 to PL3
PL3 to PL4

Each pair can then be given a separate family name, such as:

MainTunnel-S01
MainTunnel-S02
MainTunnel-S03

The same New Component Family (Solid) component can process these inputs and create multiple Revit families along the same axis.

This could be particularly useful for long infrastructure elements where creating one continuous family is not desirable and the model needs to be divided into manageable sections.


Current Limitation

There is currently one important limitation to this workflow.

At the moment, New Component Family (Solid) supports only a constant cross section along the curve. Transitions between different profiles or variable cross sections are not yet supported.

If you are interested in these components, feel free to send me a DM.