About the Speaker

Real Projects, Real Maths
William Lopez Campo – HOK
AB4726
Through examples, this class will present a series of projects where the design intent was
captured through parametric formulas, or where complex calculations were key to the decisions in the
design process. The class will present a practical approach to family creation, parameter handling, and
data extraction through schedules in Autodesk® Revit® Architecture for specific design requirements.
Learning Objectives
At the end of this class, you will be able to:

Use formulas to drive complex geometry in families

Format the schedules for specific purposes, in particular, where the values inform early design
decisions

Schedule shared parameters and calculated values, and drive the design through the schedules

Use nested families and control different types of parameters
About the Speaker
William Lopez Campo holds an architectural degree from University of Buenos Aires, Argentina, where
he has been a professor of structural calculation, and construction practice and management. Since
2007, he has worked in the London office of HOK as project coordinator, developing and implementing
solutions in Autodesk® Revit® and AutoCAD® Architecture, including interoperability with other
packages. In 2009, he participated in the Design Slams at the Autodesk BIM Conference in Berlin, and
at Autodesk University. He is a beta tester for various Autodesk products.
Email: [email protected]
Twitter: @UnderNDA
Insert Class Title as per Title Page
The class will provide a general introduction to the areas of maths that are likely to be used in
the Design disciplines, and show a series of examples where Families in Autodesk® Revit®
are controlled using such Mathematical concepts. The intention of the Lecture is to provide the
audience with a suitable theoretical background, so this handout will describe a more detailed
approach and background (but not a tutorial-style step-by-step sequence), with the attached
dataset from the class as a suitable example and an invitation to reverse-engineer the methods
used. I’ve personally participated in the creation of the attached families so I’m happy to
discuss specific queries or unknowns.
All the topics developed in the following pages will go back to the 5 examples shown in the
class and in the dataset, and will be referred to:
Example 1 – Tripod on freeform building (originally built in RAC2008)
Example 2 – Canopy in spiral arrangement (originally built in RAC2011)
Example 3 – Bridge structure (originally built in RAC2009)
Example 4 – Building mass formed by “independent” floors (originally built in RAC2008)
Example 5 – Building mass formed by nested units(originally built in RAC2012)
Notice these families were built for real projects, with real constraints and serving specific
design aspirations, and were extracted literally from their project environment into this class
material (Example 3 was developed for a Design Slam exercise)
1. Use formulas to drive complex geometry in families
The Area of maths where Designers have most obviously developed advanced skills is
Geometry. Not only proportions and measurements play an important role, but also the
approach to complex form-finding and abstract representation of those forms.
The use of mathematical formulas allows to explicitly address the relationship between various
variables and to record the design intent of the form-finding into simple(r) parameters. A basic
2
Insert Class Title as per Title Page
example is to establish the proportions of a figure, so when one dimension is established the
relative side changes accordingly.
More complex examples (as shown in the class) can calculate the resulting angle of an element
(Family 1) or the size and shape of a component based on an overall shape (Families 2, 3, 4).
It is crucial to plan ahead the variables and the relationships that will derive from them. Based
on the Design Intent it is possible to pre-assemble shapes based on well-known Analytical
Geometry formulas and simple equations. In these examples some variables are graphically
controlled through Grips and through Sliders. It is important to understand how the families will
behave at Project level (as opposed to the Family Editor) and realize that most of the errors
where a Type cannot be generated have origin in a Geometric constraint (like a negative
distance or a line/arc deformed to a point).
Example 1:
The geometry in this family is driven by the overall dimensions of “Separation” and “Depth” of
the arms.
The objective of the family and the way it was assembled is trying to help the positioning of the
tripod on a fairly irregular shape (as they are intended to tie the irregular “sails” to the edge of
the slab). The use of Grips helps to drive the different elements to their final position while the
intermediate geometric components flex and deform in independent planes. The rigid elements
in the anchor points are nested families, and the geometry is driven by reference lines.
Reference lines provide the best flexibility when it comes to angular variations, as opposed to
Reference Planes that are best applied to more static variations (and are a must to obtain
Grips).
3
Insert Class Title as per Title Page
Most of the Geometry calculations relate to trigonometric relationships to establish the angle of
the arms and the offset of the anchor components:
all this based on the basic trigonometric relationships:
𝑡𝑎𝑛 (𝐴𝑛𝑔𝑙𝑒) =
𝑆𝑒𝑝𝑎𝑟𝑎𝑡𝑖𝑜𝑛
𝐷𝑒𝑝𝑡ℎ
𝑠𝑖𝑛 (𝐴𝑛𝑔𝑙𝑒) =
𝑆𝑒𝑝𝑎𝑟𝑎𝑡𝑖𝑜𝑛
𝐿𝑒𝑛𝑔𝑡ℎ
𝑆𝑒𝑝𝑎𝑟𝑎𝑡𝑖𝑜𝑛
)
𝐷𝑒𝑝𝑡ℎ
therefore 𝐴𝑛𝑔𝑙𝑒 = 𝑎𝑡𝑎𝑛 (
therefore 𝐿𝑒𝑛𝑔𝑡ℎ =
𝑆𝑒𝑝𝑎𝑟𝑎𝑡𝑖𝑜𝑛
sin(𝐴𝑛𝑔𝑙𝑒)
applied to the different combinations of “Separation” and “Depth” for each arm, and deducting
constant lengths for offsets in the construction.
Example 2:
The Geometric approach to this family is based on two principles: On one side, by creating a
series of linear elements it is possible to control the values of the key parameters (Offset,
Length and Angle) through handy “sliders”. A recent add-on for Vasari incorporated this concept
for any parameter, but considering that this project needed a level of fine-tuning of each
instance at project level this approach, that arguably adds unnecessary complication to the
family parameter handling, was deemed useful.
4
Insert Class Title as per Title Page
Notice the Slider_ parameters are labelling the dimension to a small Reference Plane, so at
project level they appear as grips to be able to modify the values interactively, while a linear
conversion will translate the values inherited by these parameters (in this case in the range 0 to
500 m) to the equivalent range and unit for the desired parameter (in this case Angle: 0 to -420º,
Length 30 to 90 m, Offset: -0.5 to 0.5).
On the other side the Angle parameter identifies the location of the family along a spiral (defined
by the function P = a Angle4 - b Angle2 + c , where a, b, c are constants) with a deviation from
the centre of the spiral driven by Offset and a length derived by the Angle (the closer to the
centre of the spiral the shorter by default) and the variable Length. Lastly, there is an individual
control of the position and height of the 4 corners of the canopy, to allow twisting and turning
surfaces. It’s important to highlight how formula-driven values can be mixed with more “manual”
5
Insert Class Title as per Title Page
parameters that will alter the geometry directly, when the design requirements call for such
flexibility or uniqueness.
The way this family is intended to work is by having several instances in the same location, and
the variations in the parameter values generate the changes in the geometry position and
shape. The same technique is used in the sub-component of Examples 3 and 4, but with a
slightly different approach, that is one value acting as “independent variable” to drive the other
parameters.
Example 3:
The approach to control geometry in this family is to draw a cube that will twist and bend freely
along the insertion point (see Structural Framing “Family 3 Subcomponent 1”). The position and
changes are driven by the instance parameter “X”, while the other dimensions of the cube are
driven by generic polynomial functions. The continuity of the shape is generated by defining the
dimensions of the “upper end” of the basic cube using the same polynomial function but
replacing “X+1” as the variable, so it will match the start of the following instance (where
X=X+1).
Remember this family was conceived to allow quick iteration and change, so the formulas are
based on expressions that will give symmetrical values in the range X = 0 to 50, as this is the
number of individual cubes in the single family. The parameters that will drive the variations,
6
Insert Class Title as per Title Page
V01 to V05, are all set to Number unit type (also to ease changes on the live exhibition) and so
the formulas incorporate a “* 1 mm” in several locations.
With the development of Adaptive Components, Reporting Parameters, points by Intersection
and Divided Surfaces this method become somehow obsolete, but the mathematical principles
behind it are still relevant and worth keeping in mind when planning a complex geometry family.
Example 4, in a similar way, creates the geometry as a blend between two planar shapes, that
are driven by 5 variables. Each level is defined by the size at “Current Level” and “Current Level
+ 1”.
2. Format the schedules for specific purposes, in particular, where the
values inform early design decisions
Schedules are the obvious field where the “Quantity” related maths operations are expressed.
As all components in Revit are stored in a Database, the Schedules are a window (as all other
Views actually) where specific data comes across.
Probably the most common use for scheduling is to create a report of a specific element in the
project. Most categories in Revit can be scheduled, to provide information about the model.
Common uses of Schedules during early Design stages are Area reporting, Massing and Mass
Floors, Rooms, Doors, Windows. Material take-offs and construction components reporting
requires modelling in a particular way (to avoid repetition or misleading data), so should be dealt
with certain caution.
An important use for the scheduling function is to export data to other formats. Revit will export
schedules to Text files, using tabulation to separate fields and using semicolons (“”) as Text
Qualifier. The daring ones can use ODBC or an external tool to establish a link to an external
database/content management program. In my experience a simple text file export is enough to
retrieve the specific information in a spreadsheet and be able to perform further calculations,
although importing the information to Revit will require one of the mentioned methods.
If this is the case, I would recommend changing the Field Format of the numeric fields to
override the Project Settings and remove the unit, to allow programs like Excel to recognize the
field as Numeric and make it possible to perform calculations.
7
Insert Class Title as per Title Page
Phasing and Phase Filtering in the Schedules works in a similar way it does in other views,
hiding or including elements that were created in previous phases, temporary elements or
elements new to the Phase. Notice that as Rooms are not Phase-persistent Phase Filter will not
be available for Room Schedules. Notice also that the Phase and Phase Filter settings are
accessible via the Properties panel and not the Schedule dialogue box.
3. Schedule shared parameters and calculated values, and drive the design
through the schedules
Schedules are a powerful tool in Revit, and they definitely make a big impact on the meaning of
Information in BIM. Anyone who has had to update manually a room datasheet, or a list of
Doors or Windows will agree that the peace of mind that gives the direct connection between
schedules and the background database is priceless. Schedules can also be used to achieve
specific goals that are closely related to some aspects I describe in the class as purely
Mathematical:
To query the model
The Quantity operations, counting objects in the model, measuring individual items and
retrieving totals, is a clear mathematical application in Design. A lot of these mathematical
operations can take place behind the scenes, and the resulting Schedule is the output. It is
important to understand the purpose of the schedule, I have sometimes used a schedule to help
group specific components and apply a transformation to all of them. Using Fields,
Grouping/Sorting and Filters properly is one of the secrets to master the mathematical approach
to design.
Here are a few techniques to use where you query the model through a Schedule:
8
Insert Class Title as per Title Page
Use the Fields from the Category, but also identify if they come from a linked model. Using “Link
Names” wisely can help filtering specific components of the project.
With “Itemize Every Instance” toggle you can work out patterns of your components (fields that
appear blank in the schedule have various values through the grouped instances), and you can
use this tip to change all instances to a common value. A similar result or to change a value
throughout a series of instances, you can use “Highlight in Model”, that will take you to a view
where at least one of the selected instances is visible but all of them, regardless of being visible
in that view, will be selected. This allows to modify values globally in the Properties tab.
“Calculate Totals” is also an important variable to play with. In the family of Example 5, the
Gross Area of the building can be generated by adding the areas of the individual apartments,
by grouping the families by Building ID (this parameter will be pushed from the root family to the
nested components). Setting this value to Calculate Totals is a must. But the value for Length
and Width of the apartments, despite being present in all instances, would be irrelevant if
considered an aggregated total.
To modify the model in an analytical interface
As mentioned in the first point, the families in the Example 4 are a series of families with a fixed
insertion point and a set of internal rules that will drive the position of the geometry, based on
the variation of a parameter. This is the type of example where you can use the schedule to
actually input the data to each instance: instead of selecting each element on a plan or section,
you just fill in the values on the schedule.
Notice that not all Categories are schedulable, and that instances from linked models will not be
editable.
4. Use nested families and control different types of parameters
When it comes to Parameter handling, you can play with parameters at Instance level (and in
particular the Reporting Parameters), at Type level, but the use of nested families opens the
spectrum to passing values from a family to its nested components, with a few variations and
subtleties.
Example 2
Since Revit 2010 there has been a huge change in the way the Massing families behave.
Despite a possible argument supporting the basic topological shapes at core of the
Architectural development, some techniques derived from the advanced geometry
management are definitely valuable. At least it’s important to understand how to control the
position of points based on intersections, how to drive curves through points and generate
surfaces from these lines, and finally the Panelization of these surfaces.
9
Insert Class Title as per Title Page
Look at the way the columns under the canopy are defined based on a surface that is divided
and a custom Panel by Pattern that defines the geometry of the column. This technique allows
to control the separation of the columns as a parameter of the instance, that is passed on to
the definition of the divided surface.
Examples 3 and 4:
The main breakthrough in the behaviour of these families is that individual elements connect to
form a continuous “overall” shape that follows a pre-established shape. To achieve this the
calculation of the dimensions that define each component are calculated on an overall function,
and then applied to each element. The two examples deal with this in slightly different ways,
and the reason for it lies in the Design intent behind them:
Family 3 (the bridge) defines the rules for each row of elements in one go, and the change is
applied to all together. Remember this was created for a speed challenge (I had 20 minutes to
open a blank file, load one family, type the formulas and get the resulting twisting shapes.
The Baku Flame Towers (Example 4) were 3 towers similar in shape but with few variations. At
the time of the work on this family, we were exploring the small variations in the shape, so we
wanted to control each curve separately. More so, the definition based on individual floors
allowed for the shape to be altered half-way through.
When a nested family is not shared it is possible to alter its type parameters at the host family.
This is particularly useful to control profiles for sweeps or blends (notice Family 3). Shared
Families drop this functionality, as the Type Parameters will be editable at Project level (it’s
worth experimenting with Instance and Type parameters on Shared and not-shared families to
understand the difference). I’s easy to generalize “All families to be Not-Shared and all
Parameters to be Shared and By Instance”, which will give most control to each independent
element, but at the same time will impact on performance and will cap some interesting
juggling on the behaviour of the family. My advice is to plan ahead the level of control and
change of each parameter and each level of family nesting.
Example 5:
This is a great example of family nesting, as the key component, the “Apartment”, is nested into
the “Bar” to enable combinations that are then nested to the “Floor Plate” (FP) that is finally
nested into the Building family.
Each family is defined by a Type of building (with 3 different combinations of Floor Plates
defining 3 Tiers and their offset) and individually by the number of floors of each Tier.
At Project level the Building is assigned an ID, that is passed to its component Floor Plates.
There are 15 floors, but by defining a “NULL” family, there is an interesting Conditional
Statement that ties together the Number of floors, the level being evaluated and the assigned
10
Insert Class Title as per Title Page
typology for each Tier (the functionality of Conditional Formatting for nested families is new to
Revit 2012)
At each level of nesting the data generated is passed on to its nested components (like the
lower Floor Plate will be “On Ground” for its “Gross Area” to be passed on to “Footprint”
It is important to use Shared Parameters in this case, as the constant change of family types
will make them lose their associativity otherwise.
Conclusion:
Maths are generally treated as a dark science, and in re-reading this handout I realize that a lot
of what I wrote will make little sense to most users. I’d encourage the reader to concentrate on
specific challenges (“how do I make my family behave in a specific way?”), and look for
examples in the attached families to find techniques that may help.
There are also specific classes of mathematical formulas or patterns to use (during AU2010 I
attended a fantastic class by Jason Grant, “Fuzzy Math Essentials for Revit Family Builders”,
that I strongly recommend).
Also, scratch your head until you really understand WHY Revit would give a “Family cannot be
created” error (and if you are entering this woods you will see one of those on each tree). It’s
generally possible to understand that an intermediate value has no geometric meaning, that a
line cannot be drawn, that two lines become parallel and we need the intersection… all things
that you expect Revit to deal with, but if you were asked to do, the ruler and the pencil could
not do either…
Do write if you succeed in the maths implementation (I’m always glad to know what other
maths-oriented peers are doing) and do write if you get stuck and are seeking some help (I’m
always up for a challenge!).
William Lopez Campo (@UnderNDA)
11