Methods for Modeling Complex Geometry


Let’s admit it: modeling complex geometry in Autodesk® Revit® has always been diffcult. This is because Revit has lacked modeling tools and commands that have been a staple in other 3D modeling programs such as 3ds Max. With the introduction of the new mass modeling tools in Revit 2010, this has changed somewhat. However, modeling complex geometry on “real” non-mass elements such as walls, floors, and beams is still difficult in Revit…until now. This article describes how to model complex roofs, walls, beams, and floors by using the “pick by face” command and by finding the intersections of their surfaces.   

Roof Surfaces

Creating by face

Let’s start with something simple, pick by face. This is the simplest way to create complex geometry because all you have to do is simply “pick” a surface and apply a roof or wall element to it as shown in Figures 1 and 2. 

Figures 1 and 2: Roof and wall by face.

Some of the most complex roofs and walls are created by the pick by face command. Let’s illustrate this by using an example of a complex roof surface. Let us consider the following in-place mass surface shown in Figure 3. This surface consists of four planar reference lines. The spline by points command was used to create the reference line and the surface was created by creating a form over those reference lines. This in-place mass surface will be used throughout this article.

Figure 3: Complex in-place mass surface.

Once the mass surface is created, simply activate the roof command by face and pick the mass surface. The resulting roof geometry is shown in Figure 4. 

Figure 4: Roof by face on complex roof surface geometry.

Note: Some complex roof surfaces, will not allow the roof to be placed on its face because the geometry is too complicated. In this case, use a wall by face instead of a roof and follow the same procedure described above.

Roof Surface Supports

Creating complex wall profiles by attachment

Next let’s build a wall to the underside of the roof surface. All you do is build a wall in its desired location, select it, click on the “attach top/base” and select the roof element. The resulting geometry is shown in Figure 5. This seems simple enough. However, this attachment method is limited to a roof surface and a vertical wall surface because a vertical wall will only attach to a roof element. What do you do if a wall element was used instead of a roof element as described in the previous section?  Use the edit wall profile command.

Figure 5: Placing a wall by attaching to roof.

Creating complex wall profiles by edit profile

We are able to get the same result as Figure 5 by using the edit wall profile command. The edit wall profile command allows you to define the “extents” of the wall including the bottoms, sides, and top. The command is shown in Figure 6.

Figure 6: The edit wall profile command.

The top of the profile of the wall will need to be defined. How is this done? How could the top of the wall be found? Create a wall and create an elevation view as shown in Figure7.
Next try “picking” the profile line using the “pick” line command. However, you cannot pick the bottom of the roof surface in the elevation view as shown in Figure 7.

Figure 7: Wall elevation showing the wall profile.

Not being able to pick this line in elevation is a big limitation in Revit. So, rather than wait for Revit developers to add this feature, I will use another solution. There is a very useful method that will allow you to “pick” that line at the bottom of the roof surface. It is so useful that we will show how it could be applied to other elements including beams. For now, let’s take a step back and examine what that line at the bottom of the roof surface really is.

The bottom of the roof surface/top of the wall is simply the intersection of the roof surface and the vertical wall surface. All we have to do then is find the intersection of those surfaces as shown in Figure 8.

Figure 8: The intersection line of the roof and wall surfaces.

NOTE: I don’t recommend using the spline command to find the top of the wall profile because it is only an “estimate” of the location of the bottom of the roof surface.

Picking the intersection of two surfaces

I am sorry to say that unlike 3ds Max, Revit has no simple command that allows you to “find” or “pick” the intersection of two surfaces. However, there is a phenomenon in Revit whereas if you “join” any two solids together, they result in a new entity, the edges of which are “pickable.” To illustrate this method, let’s create a sacrificial wall at the same location as the wall shown in Figure 9. Join the wall and the roof surface. Notice that the roof surface now has new edges where the wall profile line is located. Select the wall to which you want to apply the profile. Select edit profile. Select pick line and select the new edge of the bottom of the roof. The result is the same as shown in Figure 5. As mentioned above, this method I call “the intersection method” is powerful. Let’s now apply it to beam framing on the roof surface.

Figure 9: Picking the intersection of two surfaces.

NOTE: The sole purpose of modeling reference planes, reference lines, and reference points is to use them as “guides” to model other Revit elements such as gridlines, walls, etc. However, there is nothing preventing you from using Revit elements such as walls and slabs as guide entities. I call these elements sacrificial elements because they are to be used and discarded at a later time. In fact, using sacrificial walls and slabs as guide entities is sometimes the only way to model complex elements.

Creating complex beam geometry with the intersection method


The following method below describes how to place beams that curve in one direction using the standard structural beam > pick command and the intersection method.
Determine in what plane the curved beam will be located and place a vertical sacrificial wall whose face lines up with the plane of the curved beam. This vertical wall is used as a “guide entity” as described earlier and may be discarded later.

Join the vertical wall to the roof using the join command. Note that when the wall and the roof are joined, then the wall “cuts” out a portion of the roof as shown in Figure 9.
Repeat the above steps for all beam locations and the final roof surface should look similar to Figure 10.

Figure 10: Roof solid with all wall joins before beams are placed.

Before a beam is placed, the work plane has to be defined. Simply set the work plane to the face of the wall solid.
To place the beam, activate the beam > pick command and pick the intersection of the vertical wall and the roof surface as shown in Figure 9.
Repeat these steps until all the beams are placed. The final roof framing should look similar to Figure 11.

Figure 11: 3D view of final beam framing.

Note: Sometimes the roof surface is too complex and a structural beam family cannot be created when using the pick command. In these rare cases, use an in-place mass and create a beam cross section/profile.

A Cow? Are You Kidding?

Now that we have studied how to apply a roof and wall element by face and how to create wall geometry and beam geometry by the intersection method on a complex roof surface, it’s time to apply these new methods to something extremely complex. Let’s consider using the Revit Cow (Figure 12) as an example.

Figure 12: The Revit Cow mass family.

I built this cow out of surfaces in the mass family editor that consists of hundreds of reference lines and thousands of reference points. I chose this cow family to represent an extreme example of complex geometry. Hopefully, this is nothing that you would ever encounter in your projects. However, if you are able to apply the methods described above to something as complicated as the Revit Cow, then I am confident you will be able to apply these methods to any complex surface that anyone could throw at you in the future. Let’s get started.

Wall and Roof Surfaces

Creating by face

To apply the wall surface by face, select wall >wall by face> pick the cow mass surface. Note that when picking by face you are only able to pick mass surfaces or generic model faces. The results are shown in Figure 13. For clarity, only half the cow is shown in realistic view. Can you believe that is a wall? Note that the roof by face does not work on the Revit Cow mass family because the surfaces are too complex.

Figure 13: Wall by face applied on cow surface.

Complex Floor Elements


Next, let’s create a floor element inside the cow and use the newly applied wall by face as the boundary. The following steps illustrate how to do this.

Create a wide and thick sacrificial floor surface at the desired location of the floor and make that floor location the current work plane. In this case it will be about halfway up the cow’s body. Join the cow wall and floor. The result is shown in Figure 14.

Figure 14: Sacrificial floor element joined to wall.

With the floor active as the work plan, create a new floor and click on the “pick” line tool. Select the edge of the newly created joined wall. Complete the sketch so the floor boundary creates a closed loop. Click finish. The final product should look like Figure 15.

Figure 15: Floor element using Cow as boundary.

Creating complex beam geometry with the intersection method


Finally, let’s see how modeling complex beam geometry with the intersection method will look on the Revit Cow. Follow the steps given in the previous section and the following geometry will result as shown in Figure 16.

Figure 16: Structural beams applied to the Revit Cow.


Hopefully, after reading this article you are able to take away some tips on how to model complex roofs, walls, floors, and beams. Apply these methods to your projects at the office, especially the intersection method, and I am sure you will be ready to tackle any complicated geometry your clients can throw at you. Tell them to hit you with their best shot! Good luck.

Marcello Sgambelluri is the BIM Director at John A Martin & Associates Structural Engineers in Los Angeles, CA, USA. He has been using Autodesk products for over 15 years including AutoCAD, 3ds Max, and Revit Structure. He is a member of hte ASCE-SEI BIM committee and speaks at structural professional conferences across the country. Marcello teaches classes at Autodesk University that focus on free-form modeling in Revit and he beta tests the yearly releases of Revit Structure. He can be reached at 

Appears in these Categories