Вы находитесь на странице: 1из 42

Fuzzy Math Essentials for Revit® Family Builders

Jason Grant – Payette


Kelly Cone – Beck
Phil Lazarus – Arup
David Baldacchino – Philo Wilke Partnership (Virtual Presentation)

AB327-4 This class will show you how to leverage your family building knowledge by moving beyond static families and
empowering you to create parametric marvels. Learn some of the essential math and formulas you need to know to help drive
geometry based on required relationships, evaluate and restrict user input to set ranges, use Boolean operations to control
visibility based on other parameter values, and discuss parameter naming strategies. We will also look at advanced formula
examples that calculate complex geometrical relationships to achieve seemingly impossible results.

ABOUT THE SPEAKERS:

Jason Grant - ContactJasonGrant@Gmail.com - http://jasongrant.squarespace.com


Jason is the BIM Specialist at Payette in Boston, MA. His experience includes over 14 years in the architecture field, and he
has utilized Revit® for the past six years. He completed 62 projects in Revit while at Colin Smith AutoCAD® Architecture; and
has been managing Revit implementation, training, standards, API, and content development at Payette for the past two
years. With his Revit experience (including health care, labs, commercial, mixed-use and residential), he understands the
challenges that both small and large projects, and firms, face while utilizing and implementing Revit. Jason is also Co-Founder
and Advisor to the Boston Revit Users Group with 380+ members, Co-Founder and Co-Leader of the BLUR Group (BIM
Leaders Utilizing Revit), author for AUGI® AEC EDGE and an avid blogger on BIM and AutoCAD Architecture at
http://jasongrant.squarespace.com.

Kelly Cone - KellyCone@BeckGroup.com - http://revitfutures.blogspot.com


Kelly Cone is the Innovations Director at the Beck Group, an integrated Development, Architecture, Construction, and
Technology company headquartered in Dallas, TX. Since receiving his master's degree in Architecture from the University of
Texas, Kelly has been focusing on the implementation of BIM across integrated disciplines. This covers a wide range of
software including Autodesk® Revit®, Navisworks®; Innovaya, Synchro Professional, and DProfiler™, our own in-house
macroBIM application. The implementation process includes the creation of customized design-build-oriented content and the
alignment of costing and scheduling assemblies to that content. Kelly plays an integral role in representing Beck's BIM
capabilities, attending and speaking at numerous conferences and teaching classes about BIM. He is also heavily involved in
the BIM community at large participating in the AUGI® Revit forums and through the Web site, www.bimexpert.com which he
co-founded.

Phil Lazarus - BIMTroubleMaker@Gmail.com - http://bimtroublemaker.blogspot.com


Phil Lazarus is a licensed architect who has been using 3D in the design of large projects for the duration of his career.
Involved primarily with stadia and convention facilities, he has never worked on a building less than 1 million square feet and
has used BIM to address the needs of architects, engineers and builders through all phases of design and construction. In
every organization he has joined, Phil has become responsible for training staff members in advanced CAD, 3D modeling and
BIM techniques. Holding a Masters of Business Administration, Phil is particularly interested in how technology can be used to
increase cost efficiency both in design practice and on the job site. Currently based in Singapore, he is the author of the blog
BIM TROUBLEMAKER which focuses on advanced family making and form finding techniques in Revit®.
AB327-4 Fuzzy Math Essentials for Revit Family Builders

A special thanks to the following:

David Baldacchino and Steven Campbell presented this session for Autodesk University 2008. They both had the
desire and passion to present this session again but were unable to join us in person. Their input and knowledge is
part of this presentation in every part. We thank you for your help and allowing us to take the reins of this session.

David Baldacchino - d.baldacchino@sbcglobal.net - http://do-u-revit.blogspot.com/


David has over 10 years of architectural experience working mostly on Educational Facility projects, and was the team leader
on the Revit pilot projects in the Houston office of his former employer. He holds a Masters of Architecture degree from Texas
A&M University and has been using Autodesk software professionally ever since. He recently joined PhiloWilke Partnership, a
Texas mid-sized firm specializing in Research Facility and Healthcare projects, and is currently leading the effort to build an
internal knowledge management system and improve the content and detail library in addition to project work. David enjoys
mentoring his peers and helping project teams to succeed in the use of Revit. In his free time he can be found posting articles
on his blog and contributing to AUGI as Tips & Tricks forum manager and Revit Community Chair.

Steven Campbell - steven.campbell@autodesk.com


Steven originally joined Revit® Technology Corporation in early 2001 as a content developer. In 2002, Autodesk bought Revit
and integrated it into their product line. After Autodesk acquired Revit, Steven split his role between content creation and QA,
during which he was responsible for product testing in relation to content and content development. In 2007, he was promoted
to Project Manager for all of Revit Content. He is also the technical lead to all content-related work. Additionally, he taught at
AU in 2005 and 2007, ADN in 2007 and 2008, and other Autodesk internal events. Steven graduated with a Bachelor of
Architecture from Roger Williams University in Bristol, Rhode Island in 1989. He has worked for a variety of architectural firms
in New England on small to mid-size commercial projects and high-end residential homes.

2
AB327-4 Fuzzy Math Essentials for Revit Family Builders

IN TRODUCTION
While many have learned the art of creating Revit Family Content, few have mastered leveraging the power of Revit
through formulas. This class will assume that one has an intermediate knowledge of Revit, understanding of the key
family building concepts and a desire to learn how to advance the strength of Revit Family Components through the
use of formulas. Formulas allow one to create a component that is immensely more flexible than simple parameters,
allow for work-arounds to the 0'-0" dimension, arrays less than 2, if statements, built-in intelligence and safeguards.
Through the experience of multiple individuals from five different companies, we will show examples of how formulas
can be put into practice.

Before we start with the specifics of different formulas and how they can be used practically, we will cover the
general formulas that are available to one in all verticals of Autodesk Revit.

NOTE: Due to the expressions used within the formulas, one should refrain from using any of the following
expressions within the names of parameters to avoid any confusion within the calculations. Parameter names are
case-sensitive and the formula will provide an error if one does not retype the parameter name exactly.

Mathematical Function Expression Description


Addition + Add lengths, numbers or parameters
Subtraction - Subtract lengths, numbers or parameters
Multiplication * Multiply lengths, numbers or parameters
Division / Divide lengths, numbers or parameters
Exponentiation x^y, x raised to the power of
y
Logarithm Log
Square Root sqrt(Value)
Sine Sin Used within triangle geometry calculations.
Cosine Cos Used within triangle geometry calculations.
Tangent Tan Used within triangle geometry calculations.
Arcsine Asin Inverse triangle geometry calculations
Arccosine Acos Inverse triangle geometry calculations
Arctangent Atan Inverse triangle geometry calculations
e raised to an x power Exp
Absolute Value Abs
Pi - 3.1415926535..... pi Figure the circumference or area of a circle
Supported Conditional
Expression Description
Operators
Equal To = Parameter is equal to length, number or text
Less Than < Parameter is less than length or number
Greater Than > Parameter is greater than length or number
AND And Both statements are True
OR Or One of the statements are True
NOT Not Statement is False
<= or >= Not supported in Revit Using this within a calculation will result in an error
If Statements Formula
if statements (simple) if(<condition>, <result-if-True>, <result-if-False>)
if statements (multiple) if(<condition>, <result-if-True>, if(<condition>, <result-if-True>, if(<condition>, <result-
if-True>, <result-if-False>)))
If statement (with If(<and, or, not>(<condition>, <condition>), <result-if-True>, <result-if-False>)
Boolean)

3
AB327-4 Fuzzy Math Essentials for Revit Family Builders

One will find throughout this presentation that "If" statements are used as much, if not more, than other mathematical
equations. Some "If" statements are implied as seen in the Boolean examples whereas some will include 'If" in the
formula. In general, these formulas can create a return value of real numbers with multiple decimals, integers,
lengths, areas, volumes, angles, yes/no boxes and text. Examples of these "If" statements are shown below:

SIMPLE "IF" STATEMENTS

IF(Parameter A, 1, 2)
This number or integer parameter looks at yes/no (Parameter A). Therefore, IF Parameter A is YES, then number
1 would be inserted for this parameter and if Parameter A is NO it would insert number 2.
IF(Parameter A, "X", "")
This text parameter looks at yes/no (Parameter A). Therefore, IF Parameter A is YES, then text X would be
inserted for this parameter and if Parameter A is NO it would insert no text in this field.
IF(Parameter A, 1'-0", 2'-0")
This length (dimension) parameter looks at yes/no (Parameter A). Therefore, IF Parameter A is YES, then the
dimension would be 1'-0" for this parameter and if Parameter A is NO it the dimension would be 2'-0" in this field.
IF(Dimension A = 1'-0", 1, 2)
This number parameter looks at length parameter (Dimension A). Therefore, IF Dimension A equals 1'-0", then
number 1 would be inserted for this parameter and if Dimension A does not equal 1'-0" it would insert number 2.
In lieu of equals, < less than or > greater than could be substituted to alter the results. Similar to the examples
above, if this were a text parameter one could get a result of a text result if the text is in quotes and it could also
respond with a dimension if this were a dimension parameter.
IF(Text A = "Long", 10'-0", 1'-0")
This dimension parameter looks at text parameter (Text A). Therefore, IF Text A field has Long written in it then
the dimension would be 10'-0" and if it has different text or no text then the dimension would be 1'-0". In lieu of a
dimension parameter, this equation could return another text response, integer or a number response.

Simple "If" Statement with logical AND


IF(AND(Parameter A, Parameter B), 1, 2)
This number parameter looks at both of the yes/no parameters for (Parameter A) and (Parameter B). Therefore if
both Parameter A and Parameter B are YES, then number 1 would be inserted but if either Parameter is NO then
number 2 would be inserted.

Simple "If" Statement with logical OR


IF(OR(Parameter A, Parameter B), 1, 2)
This number parameter looks at both of the yes/no parameters for (Parameter A) and (Parameter B). Therefore if
Parameter A or Parameter B are YES or both are YES, then number 1 would be inserted but only if both
Parameter A and Parameter B are NO then number 2 would be inserted.

Simple "If" Statement with NOT


IF(NOT(Parameter A), 1, 2)
This number parameter looks at (Parameter A). Therefore if Parameter A is NOT YES, then number 1 would be
inserted but if Parameter A is YES then number 2 would be inserted.

4
AB327-4 Fuzzy Math Essentials for Revit Family Builders

KEY POINTS OF FORMULAS 
 Simplify User Controls
Formulas can be used to reduce the number of parameter variables that a user needs to adjust.
 Dependant Parameters
If one parameter is dependant of another then one change to either one will adjust the other parameter.
 Multiple Dependencies
If a parameter is dependent on multiple parameters, then the result is a grayed out result which can only
be altered by adjusting one of the dependent parameters.
 Converting Units
Sometimes it is required to alter the units of a parameter in order to utilize it in specific formulas. For
example, to switch a Length parameter to a number one would use (LENGTH * 12) / 1'
 
KEY TOPICS OF THIS SESSION 
 Planning and Documenting one's work

 Parameter Naming

 Rounding Numbers - UP and DOWN

 Rounding Dimensions - UP and DOWN

 Boolean Operators - AND, OR, NOT; Evaluating YES/NO parameters to drive other YES/NO
parameters. Immeasurably valuable to assist in visibility controls.

 Evaluating the user's input before driving geometry dimensions.

 Visibility control of Solids based on other parameter values.

 Visibility control of Voids based on other parameter values.

 Arrays: Linear and Polar

 Triangle Geometry: Pythagorean Theorem, Similar Triangles, Trigonometric Functions

 Circles

 Ellipses

 Massing

 Schedules

5
AB327-4 Fuzzy Math Essentials for Revit Family Builders

PLANN ING AND DOCUMEN TIN G


PLANNING
Pre-planning a family component can be useful for not only the one creating the component but for those who will
use the component. Some of the benefits to planning a complex component is that one can fully see and think
through all of the required parameters, be able to better organize the parameters within the component and that one
can share how the component will work with users before a single piece is built. User feedback can help the builder
with feedback and suggestions before one has invested a great deal of time.

This example shows the planning of a "super" casework family. This was shared with the power users of the firm to
get feedback on the options available in the "User Parameters". The user parameters are those which are shown in
the properties. The "Hidden Parameters" are those nested within the component and thus does not "muddy" up or
confuse the user with unnecessary parameters. A PDF version of this image is included in the dataset.

DOCUMENTING
By creating a plan, one has also accomplished documenting the work needed to create the component. This can be
used for future understanding of the component when changes or additions are required.

P ARA METER NA MING AN D ORGA N IZ IN G


It is important to stay consistent with the naming and organizing of Parameters. If each family that one creates is
different, then not only could a user be confused in how to control a component but the creator could also easily get
confused. There is no right way to name or organize the parameters but the key is staying consistent.

For example:
• One may create all calculation parameters with CALC at the end of the parameter and place all calculation
parameters in construction.
• Someone else may just name them without a identifier but place all calculation parameters in constraints.
• Either way is fine as long as one is consistent and users can understand what they need to change.

6
AB327-4 Fuzzy Math Essentials for Revit Family Builders

ROUN DIN G
NUMBERS
Rounding Numbers is actually quite easy. One would have their main input number parameter, then have
another parameter that references the input number and either adds 0.49 to round the number up or subtract 0.49
to round the number down. For example:

Input Number = 6.77 (Either as a result from another formula or user entered value)
To round the number up
Rounded Number = Input Number + 0.49 (This must be an integer parameter to work correctly)
To round the number down
Rounded Number = Input Number - 0.49 (This must be an integer parameter to work correctly)

This can then be added to a more complex formula utilizing an "if" statement if one wanted to switch between
Rounding Up and Rounding Down with a yes/no parameter.

Rounding Checkbox = (User would check to round up and leave unchecked to round down)
To round number either up or down
Rounded Number = Input Number + if(Rounding Checkbox, 0.49, -0.49)
Note: The Rounded Number parameter must be an integer parameter to work correctly

DIMENSIONS

Rounding Dimensions takes a few more steps then its numbers counterpart. There are a few ways that I have
seen some doing this, but I find this process to be very efficient.

Main Dim = (Dimension that one desires to be rounded)


Rounding Value = (Rounding Value: Positive Number for Up and Negative for Down)
Num of Rounding Value = (Integer Parameter with Formula)
Dim Rounded = (Final Rounded value of the Main Dim)

To determine the Number of Rounding Value one must utilize the formula shown above. The main dimension is
converted to a number, added to the rounding value which is converted to a number, divided by two and then the
value is divided by the rounding value, which once again is converted to a number. Since the Num of Rounding
Value is an integer, straight dimensions (length parameters) will create an error.

To conclude the rounding, one must then take the Num of Rounding Value and multiply the Rounding Value. This
will result in a rounded up dimension if the Rounding Value is positive and a rounded down dimension if the
Rounding Value is negative.

7
AB327-4 Fuzzy Math Essentials for Revit Family Builders

B OOLEA NS

AND, OR, NOT

Revit object that is altered by and, or, not Boolean logic operators.

Parameters, Yes/No controls and formulas.

User Controls
In this example there are checkbox (user) controls for Object A,
Object B, Object C, Or Boolean Operators and if Or Boolean Object A - Yes/No Checkbox
Operators is not checked then AND Boolean Operators is "by Object B - Yes/No Checkbox
default" checked. Depending on the options a user selects, Object C - Yes/No Checkbox
different parts of the object display. Or Boolean Operators - Yes/No Checkbox
And Boolean Operators - Yes/No Checkbox

8
AB327-4 Fuzzy Math Essentials for Revit Family Builders

AND - Object A Selected AND - Objects A+B Selected AND - Objects A, B + C Selected

AND Operators
CALC VIS Object A and(not(Object B), not(Object C), Object A)
CALC VIS Object B and(not(Object A), not(Object C), Object B)
CALC VIS Object C and(not(Object A), not(Object B), Object C)
CALC VIS Object AB and(and(Object A, Object B), not(Object C))
CALC VIS Object BC and(and(Object B, Object C), not(Object A))
CALC VIS Object AC and(and(Object A, Object C), not(Object B))
VIS Result ABC and(Object A, Object B, Object C)

OR - Object A Selected OR - Objects A+B Selected OR - Objects A, B + C Selected

OR Operators
VIS Result A
if(OR Boolean Operators, or(CALC VIS Object A, CALC VIS Object AB, CALC VIS Object AC, VIS Result ABC),
CALC VIS Object A)
VIS Result B
if(OR Boolean Operators, or(CALC VIS Object B, CALC VIS Object AB, CALC VIS Object BC, VIS Result ABC),
CALC VIS Object B)
VIS Result C
if(OR Boolean Operators, or(CALC VIS Object C, CALC VIS Object AC, CALC VIS Object BC, VIS Result ABC),
CALC VIS Object C)
VIS Result AB
if(OR Boolean Operators, or(CALC VIS Object AB, VIS Result ABC), CALC VIS Object AB)
VIS Result AC
if(OR Boolean Operators, or(CALC VIS Object AC, VIS Result ABC), CALC VIS Object AC)
VIS Result BC
if(OR Boolean Operators, or(CALC VIS Object BC, VIS Result ABC), CALC VIS Object BC)

9
AB327-4 Fuzzy Math Essentials for Revit Family Builders

EVA LUATING IN PUT


For one to be able to have flexible input for users, there needs to be one parameter for user input and another
parameter that drives the geometry which utilizes and evaluates the user's input.

USER NUMBER CONTROL


In many cases, one will want the user to be able to enter a result of zero for a number or integer parameter either for
scheduling purposes or for a user to better understand the family without the need for instructions or explanation.
Arrays are a prime example where one may want a result of 0 or 1 but as one would discover, this creates an error
in the family. If one has a cabinet that has an option for shelves within it, there may be zero shelves and there may
be 3. To work around this one would need to use a few formulas:

The parameters are:


Array Control (Integer), Number of Shelves (Integer), Shelf 1 (Yes/No), Shelf 2 Plus (Yes/No)
The formulas are:
Number of Shelves = "Whatever the user needs and enters"
Array Control = if(Number of Shelves < 2, 2, Number of Shelves)
Shelf 1 = Number of Shelves = 1
Shelf 2 Plus = Number of Shelves > 1

The user enters the Number of Shelves and the Array Control parameter evaluates it the Number of Shelves is less
than 2. If it is less than 2 then it will keep the array at 2. If it is 2 or more then it uses the user entered Number of
Shelves. Shelf 1 will turn on the visibility of a single shelf if the Number of Shelves equals 1. Shelf 2 Plus turns on
the visibility of the array if the Number of Shelves is 2 or more. A very similar process can be used to control the
max value of a user entered value.

USER DIMENSION CONTROL


There are cases where the dimension needs to be controlled for either a minimum value or a maximum value or
both a minimum and maximum.

To control a minimum dimension one would use:


Length Control = if(Length < 2', 2', Length)
If the user inputted length is less than 2 feet, then the control will keep 2 feet and if it is more than 2 feet then it will
use the inputted user entered length.
To control a maximum dimension one would use:
Length Control = if(Length > 10', 10', Length)
If the user inputted length is more than 10 feet, then the control will keep 10 feet and if it is less than 10 feet then it
will use the inputted user entered length.
To control a minimum and maximum dimension one would use:
Length Control = if(Length < 2', 2', if(Length > 10', 10', Length)
If the user inputted length is less than 2 feet, then the control will keep 2 feet and if it is more than 10 feet then it will
keep 10 feet as the maximum and if it is between 2 and 10 feet then dimension will use the inputted user entered
length.

SYSTEM REPORTING PARAMETERS


Reporting Parameters can now be used to essentially "report" on a dimension and not receive an "over constrained"
error. For instance, on a door one would have door height and frame head height. To report on the floor to top of
frame dimension one could utilize a reporting parameter which would return the height. This can be used instead of
creating a calculation parameter that adds each dimension string to get the combined length. NOTE: Reporting
Parameters can only be used within a formula if it dimensions a host object. Therefore, one can utilize, for example,
the width of a wall to drive other geometry. It can also be a way of having one less formula within a family if it
dimensions reference planes or other geometry, just keep in mind that these uses of a reporting parameter cannot
be used within a formula. You can find more info posted here on reporting parameters: Link

10
AB327-4 Fuzzy Math Essentials for Revit Family Builders

V ISIB ILITY CONTROL


CONDITIONAL VISIBILITY BASICS

Before we look at Conditional Visibility, let’s confirm we have a grasp on the basic concept of visibility in family
building.

If you select any object in the family editing environment, on the properties panel you will see a parameter called
VISIBILITY with a check box next to it. This parameter controls whether the object is VISIBLE (On) or INVISIBLE
(Off). If turned off, the object’s display will change and the form will not show when the family is hosted.

Next to the VISIBILITY


parameter on the properties
panel is a little grey box which
allows us to link this parameter
to other functions in our family.
We are only allowed to link to
“YES/NO” parameters.

Thus, visibility is a binary function to be controlled, It’s a YES/NO or TRUE/FALSE question. As such, we can
program our family a GREATER THAN/LESS THAN EQUATION, based upon other parameters, to control this
switch.

We can also use Boolean Operations, based upon the status of other YES/NO parameters in our family.

Gary is Tallest Gary is NOT Tallest

11
AB327-4 Fuzzy Math Essentials for Revit Family Builders

SIMPLE CONDITIONAL VISIBILITY

Here is an example of these concepts in action. The first example examines controlling the number of rows in a
tiered seating family.

First I made a family to represent each individual


seating tread. Within this family are instance-based
INTEGER Parameters for row ID number, as well as
the desired number of rows in the entire assembly.
Visibility of the extruded form is controlled by a
formula comparing these two parameters.

Once nested in a host family, the necessary parameters are linked. Then controlling the number of rows is very
easy:

Please note, Revit does not understand “Greater Than or Equal To” so it is important to include “+/-1” in your
desired number of objects formula! Plan carefully!

12
AB327-4 Fuzzy Math Essentials for Revit Family Builders

BOOLEAN EQUATIONS AND CONDITIONAL VISIBILITY

Looking again at the prior example,


the next level of detail involved with
developing a seating section could
include inserting a step. The height of
the step would vary, along with the
vertical distance between rows.
Programming the step height to
change is a straight-forward affair, but
what about when we need to choose
between one step, two steps and no
steps? That’s where Boolean
operations become useful.

I have now nested 2 families into my basic extrusion and linked their visibility to parameters called “Step Single” &
“Step Double”. The overall visibility is controlled by looking at the height difference between rows, whether the row
exists, and whether or not an aisle is desired in this section.

And now cycling through various steepness settings for the assembly, we can see the step configuration change:

Riser Height = 0.5m Riser Height = 0.25m Riser Height = 0.125m

13
AB327-4 Fuzzy Math Essentials for Revit Family Builders

This is a list of all


possible
combinations of
Boolean operations
using 3 parameters.

VISIBILITY OF VOIDS

Controlling the visibility of voids presents a different challenge. Void forms do not have an inherent VISIBILTY
parameter, so what can we do to turn them on or off? The easiest method is to simply move them away from the
form they intend to cut.

By way of example, let’s look at a potential door family and we want the option to cut a vision hole.

14
AB327-4 Fuzzy Math Essentials for Revit Family Builders

The “Door” form is hosted on the primary vertical reference plane. An additional reference plane has been drawn
and its position relative to the “Door” is controlled by the parameter ‘Void_Offset”. Once a cutting relationship is
established, the void can move into or away from the mass as specified.

The operating equation in this exercise is the IF/THEN Statement where:


VALUE = IF(FORMULA, RESULT IF YES, RESULT IF NO)

And the ‘Formula’ refers to the YES/NO parameter called ‘Vision’.

LIMITERS AND ERROR AVOIDANCE


The earlier covered logic related to rounding numbers can
be helpful in setting up limiters to avoid the “Line is Too
Short” error message.

In the case of the tiered seating exercise, if a riser height


equals zero or less, Revit throws up the error. By using
an IF/THEN statement to control the Riser Height
indirectly, this error can be avoided as shown.

This 1mm surface is


imperceptible and
good enough to
maintain the integrity
of the family

15
AB327-4 Fuzzy Math Essentials for Revit Family Builders

A RRA YS
INTRODUCTION TO LINEAR ARRAYS
The array tool is quite powerful, especially when used in the Family Editor. We can control the number of arrayed
elements and their visibility through logical formulas, resulting in very useful dynamic families. Let’s take a look at an
example using the Detail Component line based family template where we will build a flexible plywood section
component family that is perfect for detailing work.

In the planning stages it was determined that we needed plywood of varying thicknesses. This meant that the
arrayed elements needed to resize accordingly. The family was expected to work at any length, so we needed to
take care of a chronic array problem when the calculated number of arrayed elements was less than 2, causing the
family to break.

NESTING
When creating a parametric array, Revit
creates grouped instances of the arrayed
elements. This causes a problem when
trying to resize elements within those
groups, such as detail lines for example.
To solve this issue, it is considered best
practice to create a separate parametric
family for the component to be arrayed and
then nest that into the line based family,
where you’ll apply the relevant constraints
and array it as required.

THE CHRONIC PROBLEM


Revit wants to have at least 2 elements in
an array. However that usually is not how
things work in real life and we might need
just one element. We can get around this
problem as follows:
1. Write the array formula to force the
calculated value to 2 or greater by
using an “If” statement;
2. Add a calculated visibility parameter
that turns off the arrayed elements
when you want less than 2 elements;
3. Add a singular element in your family,
constrain it as desired (usually with EQ
constraints) and add a calculated
visibility parameter that turns on this
element only when needed.

Above you can see that the Array integer is forced to a value of 2 if Length is less than or equal to 6”. Note that to
express this in Revit, you have to use the expression not(Length > 0’ 6”), which achieves the same result. The
reason for using 6” as the threshold is due to Array evaluating to 1 when Length is 5”, which causes the family to
fail. A good rule of thumb is to set your threshold to 1.5 x the required spacing. Note also in the above example that
with a Length of 7”, the single (non-arrayed) element will be turned off and the arrayed elements (controlled by
VIZ_multiple) will be visible.

16
AB327-4 Fuzzy Math Essentials for Revit Family Builders

PUTTING IT ALL TOGETHER

Here you can see how the first and


last members of the array have
been constrained to a fixed distance
of 1 ½”. The highlighted middle
element will only be visible for short
family instances, at which point the
array is forced to 2 elements and
element visibility is turned off.

Most users get stuck once they


create the array and don’t know how
to proceed in adding the necessary
parameters. But it’s a simple task
once you get the click sequence
down!

1. Select one of the arrayed elements.


2. Hover above any of the arrayed elements until the array “skeleton” is displayed. Click on it.
3. Pick the applicable label or create a new parameter.

A neat little trick to help your users identify which


parameter to uncheck when needing to control visibility
on either side of a family, is to include some type of
identifier using invisible lines.

17
AB327-4 Fuzzy Math Essentials for Revit Family Builders

TRIA NG LE GEOMETRY
Triangle geometry is found in numerous families even when least expected. When creating a parametric and
complex component, one will usually come across an area where if triangle geometry is used, the component will
operate more reliably. Below are just a few examples:

TRIGONOMETRY - SOLVING TRIANGLES

Defining a triangle's 3 sides and 3 angles can provide flexibility within component creation. To define the parts of a
triangle, one will need to understand the various Laws of Triangles.
2 2 2
Pythagorean Theorem: a + b = c

Law of Sines: a/sinA = b/sinB = c/sinC or =sinA/a = sinB/b = sinC/c


2 2 2 2 2 2
Law of Cosines: a = b + c - 2bc cosA or b = a + c - 2ac cosB
2 2 2
or c = a + b - 2ab cosC

Law of Tangents: (a-b) / (a+b) = (tan(1/2(A-B))) / (tan(1/2(A+B)))

Law of 180 Degrees: A + B + C = 180 Degrees

Sine or ArcSine - Cosine or ArcCosine - Tangent or ArcTangent


Sine, Cosine and Tangent are the typical trigonometric functions and ArcSine, ArcCosine and ArcTangent are the
inverse of these typical trigonometric functions. Examples are:
x = sin y or y = arcsin x, x = cos y or y = arccos x, x = tan y or y = arctan x

18
AB327-4 Fuzzy Math Essentials for Revit Family Builders

19
AB327-4 Fuzzy Math Essentials for Revit Family Builders

PRESENTATION EXAMPLE OF TRIANGLES

In the recorded session this example will be explained and the component is in the uploaded dataset.

20
AB327-4 Fuzzy Math Essentials for Revit Family Builders

CIRCLES
From Wikipedia, the free encyclopedia

Circle illustration showing a radius, a diameter, the centre and the circumference, other parts…

FORMULAS
Length of circumference
Further information: Pi The ratio of a circle's circumference to its diameter is π (pi), a constant that takes the same
value (approximately 3.141592654) for all circles. Thus the length of the circumference (c) is related to the radius (r)
by or equivalently to the diameter (d) by

Area enclosed
Area of the circle = π × area of the shaded square. Equivalently, the area is π multiplied
by the radius squared:

Cartesian coordinates
Circle of radius r = 1, centre (a, b) = (1.2, -0.5)
In an x-y Cartesian coordinate system, the circle with centre (a, b) and radius r is
the set of all points (x, y) such that

If the circle is centered at the origin (0, 0), then the equation simplifies to

The equation can be written in parametric form using the trigonometric functions
sine and cosine as

Tangent lines
2
When the centre of the circle is at the origin then the equation of the tangent line becomes x1x + y1y = r ,
and its slope is.

21
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Chords

Chords were used extensively in the early development of trigonometry. The first
known trigonometric table, compiled by Hipparchus, tabulated the value of the Chord
function for every 7.5 degrees.
The chord function is defined geometrically as in the picture to the left. The chord of
an angle is the length of the chord between two points on a unit circle separated by that
angle. By taking one of the points to be zero, it can easily be related to the modern
sine function:

Sagitta
The sagitta (also known as the versine) is a line segment drawn perpendicular to a chord, between the midpoint of
that chord and the arc of the circle.
Given the length y of a chord, and the length x of the sagitta, the Pythagorean theorem can be
used to calculate the radius of the unique circle which will fit around the two lines:

EXAMPLE: PLAN FOOTPRINT MODEL LINES


• Generic Model Families can be imported into Masses and used to create geometry. Complex masses may
require hundreds of constraints, so as with any family, nesting can greatly reduce the complexity of the
constraints in the Massing family.
• Typically use face based for ease of placement in the massing editor.
• Create model lines, keep them visible, and constrain and flex them to your heart’s content.

The example we’ll use is of the building footprint for a project recently completed. This shape was highly parametric
by necessity. The property lines were in flux, the building FAR requirements changed multiple times, and the client’s
desire to be as close to FAR as possible was a major driving factor. So, we built the building mass over several days
to allow the kind of flexibility needing throughout the whole project…

This is the “footprint” we wanted, although there is tons of


flexibility in the shape. You might ask, why not re-draw it
every time? Well, below is an image of the curtain systems
applied to the faces of the mass we end up with… If we had
to re-draw the shape we would have to re-make the faces
which means all the custom curtain panels and mullions
would be lost every time we had a façade change. We had
over 100 façade shape changes on this project – you do the
math.

So, with this as the goal…

Some terminology… The parameters


starting with NT are for the “North
Tower” which is the shorter tower that is
plan left. ST is for South Tower which is
taller and plan right.

22
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Here are the constraints in this family…

Lots of calculations, I know… We’ll focus on the overall stuff first to keep things simpler.

So, “Ellipse” really means “Center of the Ellipse” in this case,


which also happens to be the origin or 0,0 for the family. You
don’t see an ellipse in the mode lines, but it will get cut out
later. For now, it is this intersection:

That’s the Center…

23
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Since both the back corners of the building are filleted, the “Ellipse to ST/NT Core Edge” parameters refer to the
distance from the Center to the edge of the line BEFORE the fillet starts.
Ellipse to North/South Edge is the distance to the farthest point north or south, and is determined by taking the
Ellipse to Core Edge value and adding the N/S Core Fillet Radius values.
Ellipse to Back is the distance from the Center to the back edge.

Now let’s look at the ST stuff…

Here’s what these reference in the plan:

Those parameters determine the placement of all these lines, but they aren’t enough on their own.

The South West corner is cake though. A simple Fillet


Arc on two 90 degree lines…
You just use the ST Core Site Fillet Radius parameter
and apply it to all three dimension strings. Done. This
now flexes like a champ.

HINT: With circles, turn on the Center Mark Visible


toggle to make them much easier to constrain!

The Front or East side of the tower is much more


complicated since we’re trying to create a fillet arc
between a line and a parametric arc. Yuck!

24
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Why is it so complicated?
Well, since depending on the
location and radius of the
main arc, this fillet arc needs
to start and stop at different
points. We have to manually
calculate this because Revit
won’t actually keep a fillet arc
properly constrained to
another arc like it should! –
Factory, this needs some
work…

Instead, we need to
calculate the following
parameters ourselves
using a couple of tricks.
The first one is that the
center of a fillet arc of a
given radius is always at
the intersection of the
offset versions by the
same distance of the
objects to be filleted.
What does that mean?:

So, we’ll use these


dimensions to figure a lot
of this out. Second, we’re
going to exploit the
definition of a chord as
defined in the Circle stuff above:

So, to simplify C=2*sin(A/2) Unfortunately, since this is a parametric form and both the length of the chord AND the
angle are “unknown”, we
need some more help.
Here we’ll turn to the
versine/sagitta definition
for this. A perpendicular
bisector is always the
radius of a circle. The
Sagitta is the part of the
perpendicular bisector
that is past the chord, and
the Apothem is the part
on the other side of the
chord. So, the Radius =
Apothem + Sagitta. Now,
we’ve got enough to use
basic trigonometry to
solve for the circular
angle!

25
AB327-4 Fuzzy Math Essentials for Revit Family Builders

SOH CAH TOA tells us that Cos(O)=A/H We need “O”. So, O = acos(A/H). For us, the Hypotenuse is the Radius,
and the Adjacent side is the Apothem. We can calculate the Apothem from the overall dimensions of the project! So
the parameters:

ST Distance to Chord
This is our Apothem. We can calculate it from the center of the
circle with addition and subtraction. Formula: Ellipse to ST
Core Edge + ST Core Side Fillet Radius
ST Front Side Fillet Radius – ST Main Arc Center from Ellipse
ST Intersect Radius
This is the radius. We can calculate it using the Main Arc
radius and the fillet arc radius. Formula: ST Main Arc Radius
ST Front Side Fillet Radius
ST Half Chord Angle
We don’t need the whole chord angle, just the half above the perpendicular bisector. Formula: acos(ST Distance to
Chord / ST Intersect Radius)
ST Front Side Fillet Angle
Equal to the Half Chord Angle.
ST Main Arc Angle to Center
This is the inverse of the Half Chord Angle. Formula: 90° - ST Half Chord Angle
ST Fillet Arc end from Face
The last thing we need is to locate the center of the fillet radius along the Y axis, as this sets the end of the straight
section of façade on the right (South) side. This can also be obtained with trig. Formula: ST Main Arc Radius
(ST Intersect Radius * sin(ST Half Chord Angle))

NORTH SIDE SAYS WAZZUP…


The north side makes the south look easy because instead of having a consistent variable (the 90 degree side) we
have the side of the shape as a variable angle as well.
Parameters:

These are similar to the ST, but there are a few more. There is
the NT Side Angle which defines the plan angle of the side of
the tower. Also unlike the ST, the Front Side and Core Side
Fillet radii are set to be equal. This is needed to keep the math
simple. You could solve this with these being different, but I’m
not that much of a geek. To make this work we’re going to use
a polar origin concept – in other words, the same rules that
applied on the ST will be applied to the NT, but based off the
rotation point of the NT side so that everything plays nice…

NT Core Side Fillet Angle


Since the side changes angle, so does the fillet arcs extents.
Formula: 180° - NT Side Angle - Zero Degrees

NT Distance to Chord
This is different due to the changing angle of the chord dividing
the circle. We need to define this using CAH solving for the
adjacent side. This introduces two new parameters for the
angle and the hypotenuse of a theoretical triangle per the
image.

26
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Formula: (NT Arc Center to Core Fillet Center * cos(NT Chord Distance Angle))

NT Arc Center to Core Fillet Center


Solved by using Pythagorean
Theorem and overall
dimensions. Formula:
sqrt((Ellipse to NT Core Edge -
NT Main Arc Center from
Ellipse) ^ 2 + (NT Main Arc
Radius - NT Main Arc Face
past Ellipse - Ellipse to Back +
NT Core Side Fillet Radius) ^ 2)

NT Chord Distance Angle


Solved by using Triangle Angle
Theory. Formula: NT Side
Angle - NT Angle Arc Center to
Core Side Fillet Center

NT Angle Arc Center to Core


Side Fillet Center
Solved by using the tangent relationship and overall dimensions. Formula: atan((Ellipse to NT Core Edge - NT Main
Arc Center from Ellipse) / (NT Main Arc Radius - NT Main Arc Face past Ellipse - Ellipse to Back + NT Core Side
Fillet Radius))

NT Intersect Radius
Formula: NT Main Arc Radius - NT Front Side Fillet Radius

NT Half Chord Angle


Since we have normalized for the Chord Angle, we can now use the same formula as the ST. Formula: acos(NT
Distance to Chord / NT Intersect Radius)

NT Front Side Fillet Angle


Equal to NT Half Chord Angle

NT Main Arc Angle to Center


Here we have to normalize to the angle again. So, we need to add the inverse angle of the side angle to the NT Half
Chord angle before subtracting it from 90 degrees. Formula: 90° - (90° - NT Side Angle + NT Half Chord Angle)

NT Side Vertical Length


We still need to tell the side where to stop, and since it is angled we’ll do that with two parameters. The vertical
length is the length of the adjacent side of the triangle made between the north edge of the building and the angled
side. To get it we can take the vertical component of the triangle with a hypotenuse between the main arc center and
the front fillet arc center and then subtracting the vertical distance from the Core side center to the main arc center.
Formula: (NT Intersect Radius * cos(NT Main Arc Angle to Center)) - (NT Main Arc Radius - NT Main Arc Face past
Ellipse - Ellipse to Back) - (NT Core Side Fillet Radius)

NT Side Length
To get the actual side length, we use CAH again. Formula: NT Side Vertical Length / cos(90° - NT Side Angle)
isosceles

27
AB327-4 Fuzzy Math Essentials for Revit Family Builders

It’s not over till the


client sings…
Late in SDs, the
property line
changes, and to
squeeze out every
bit of available
space the straight
part of the NT side
became curved.
This made things
fun…

So, we have two more parameters.

NT Side Curve Angle


Since this angle is an isosceles triangle with the different side at 75 degrees, the other side has to be 75 degrees
too. Since a triangle’s angles always add to 180 degrees, we know what to do. Formula: 180° - NT Side Angle * 2

NT Side Curve Radius


Since this is an isosceles triangle, both sides are the radius of a circle, and that makes the NT Side Length a Chord.
We already know we can bisect a chord to get two right triangles, so we can use SOH solving for H to get the radius
required to have the lines close. Don’t forget to add the fillet radius though since we’re calculating from the
intersecting arcs! Formula: (0.5 * NT Side Length) / (sin(0.5 * NT Side Curve Angle)) + NT Front Side Fillet Radius

• Placing the lines…


We’ll get into this in the demonstration, but I’ll tell you that one key to making this work when you draw it is
to define successive reference lines as the workplane and then draw the next line on that workplane. This
keeps you from having to calculate the start and end point of every line, just the ones where they seamed
together.

• Flex it.
Once you’ve got this drawn, you can create form from it and flex it until your head or the family explodes!
Combine this with a bunch of other line based nested families and you can get this monster mass… see the
footprint is the same?

28
AB327-4 Fuzzy Math Essentials for Revit Family Builders

ELLIPSES
From Wikipedia, the free encyclopedia

An ellipse obtained as the intersection of a cone with a plane.

FORMULAS

Eccentricity
The eccentricity of the ellipse is

The distance from the center to either focus is ae, or simply

Directrix

Each focus F of the ellipse is associated with a line parallel to the


minor axis called a directrix. Refer to the illustration on the right. The
distance from any point P on the ellipse to the focus F is a constant
fraction of that point's perpendicular distance to the directrix
resulting in the equality, e=PF/PD. The ratio of these two distances
is the eccentricity of the ellipse.
Besides the well known ratio e=f/a, it is also true that e=a/d.

Area
The area enclosed by an ellipse is πab, where (as before) a and b are one-half of the ellipse's major and minor axes
respectively.
2 2
If the ellipse is given by the implicit equation Ax + Bxy + Cy = 1, then the area is

Circumference
The circumference C of an ellipse is: where the function E is the complete elliptic integral of the
second kind.

General ellipse
In analytic geometry, the ellipse is defined as the set of points (X,Y) of the Cartesian plane that, in non-degenerate
[13][14]
cases, satisfy the implicit equation
2
provided B − 4AC < 0.

29
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Canonical form
By a proper choice of coordinate system, the ellipse can be described by the canonical implicit equation

Any ellipse can be obtained by rotation and translation of a canonical ellipse with the proper semi-
diameters. Translation of an ellipse centered at (Xc,Yc) is expressed as

In trigonometry
An ellipse in general position can be expressed parametrically as the path of a point (X(t),Y(t)), where

as the parameter t varies from 0 to 2π. Here (Xc,Yc) is the center of the ellipse, and φ is the angle between the X-
axis and the major axis of the ellipse.

Parametric form in canonical position

Parametric equation for the ellipse (red) in canonical position. The eccentric
anomaly t is the angle of the blue line with the X-axis.
For an ellipse in canonical position (center at origin, major axis along the X-
axis), the equation simplifies to

Note that the parameter t (called the eccentric anomaly in astronomy)


is not the angle of (X(t),Y(t)) with the X-axis.

EXAMPLE: DISTENDED ELLIPSE MODEL LINES


• Generic Model Families can be imported into Masses and used to create geometry. Complex masses may
require hundreds of constraints, so as with any family, nesting can greatly reduce the complexity of the
constraints in the Massing family.
• Typically use face based for ease of placement in the massing editor.

Create model lines, keep them visible, and constrain and flex them to your heart’s content.

This completed example is of two ellipses, which have identical major axes but different minor axes. This is called a
distended ellipse. Once these constraints are defined, you can flex to any size and not have to worry about
interactions between the 3D geometry and the 2D lines causing a break in the family.

30
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Placing into the massing environment:


• You can place these on reference planes, levels, or faces as needed
• You can constrain them by whatever reference planes you create in the Generic Model family
• Parameters can be linked to parameters in the Massing family just like any other nested family
Constraints in the example “surfboard” family:

Orb Ellipse Major & Minor Axis parameters relate to a


void in the whole building mass, something we might vary
at the project level.
“Scale Factor” is a result of this particular massing
family sitting in the void created by the revolved ellipse
defined by those two parameters. Since it doesn’t sit at the mid-point necessarily it might need to be smaller or larger
by a consistent percentage, so this sets that percentage which we would also control at the project level.

Surfboard Rim Depth


We want to have a vertical band around the edge of the
final form, and this sets the height of that band.
Surfboard Minor Axis
This is a value determined by the percentage of the Orb
Ellipse Axis parameters above. Formula: Orb Ellipse
Minor Axis * Surfboard Ellipse Scale Factor
Surfboard Depth
This defines the vertical axis of this ellipsoid.
Surfboard Major Axis
This is a value determined by the percentage of the Orb
Ellipse Axis parameters above. Formula: Orb Ellipse
Major Axis * Surfboard Ellipse Scale Factor

(Geek Factor Five Warning)


Since Revit could not (cannot?) make this shape on its
own at the time we were working on this project, we had
to “fudge” it with the approximations below. We decided
to divide the ellipse into fourths, and loft the resultant
lines:

31
AB327-4 Fuzzy Math Essentials for Revit Family Builders

st
1 Ellipse Y Offset from Center – Determines the distance to the first fourth. Formula: (Surfboard Depth / 4) * 1
st
1 Ellipse Major Axis – This is attempting to calculate the X direction displacement along the ellipse profile based
on the Y direction displacement. There is a formula for that (and an app). Per our ellipse formulas, the equation to
the right defines the relationship of points along an ellipse to the major and minor axes, both of which we have
defined! But I am terrible at solving formulas and I need this solved for X.

Thank you wolfram alpha:


So, relating that to our parameters, the
formula: sqrt(Surfboard Major Axis ^ 2 * (1 -
(1st Ellipse Y Offset from Center ^ 2) /
(Surfboard Depth ^ 2)))
st
1 Ellipse Minor Axis
Similarly, we need the “other” direction
calculated. This is a 3D form not a 2D one.
The same formula works fine with different
parameters mapped to y, a, and b
respectively. Formula: sqrt(Surfboard Minor
Axis ^ 2 * (1 - (1st Ellipse Y Offset from
Center ^ 2) / (Surfboard Depth ^ 2)))
nd
2 Ellipse Y Offset from Center
Determines the distance to the second
fourth. Formula: (Surfboard Depth / 4) * 2
nd
2 Ellipse Major Axis
Now, we can repeat the formulas from
nd
earlier, but we will use the 2 Fourth Y
st
Offset instead of the 1 Fourth Y Offset.
Formula: sqrt(Surfboard Major Axis ^ 2 * (1 -
(2nd Ellipse Y Offset from Center ^ 2) /
(Surfboard Depth ^ 2)))
nd
2 Ellipse Minor Axis
Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 -
(2nd Ellipse Y Offset from Center ^ 2) /
(Surfboard Depth ^ 2)))
rd
3 Ellipse Y Offset from Center
Determines the distance to the third fourth.
Formula: (Surfboard Depth / 4) * 3
rd
3 Ellipse Major Axis
Formula: sqrt(Surfboard Major Axis ^ 2 * (1 - (3rd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))
rd
3 Ellipse Minor Axis
Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 - (3rd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))
th
4 Ellipse Y Offset from Center
Determines the distance to the edge, however since forms can’t be lofted to points we have to get infinitesimally
close but not quite to the edge – this is the approximation I’m talking about. Formula: (Surfboard Depth / 4) * 4 -
.1mm Note, we won’t actually use the .1mm reduction when creating the form, it is so the last profile doesn’t break
from being 0” by 0”.
th
4 Ellipse Major Axis
Formula: sqrt(Surfboard Major Axis ^ 2 * (1 - (4th Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))
th
4 Ellipse Minor Axis
Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 - (4th Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))

32
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Once these are set up, we need to create reference planes and dimensional constraints to use these…

On these reference planes we can place the components defined earlier and then link them to the appropriate
parameters. Set your workplane for one of the reference planes first. Then, click the component button and select
the generic model line family you loaded in.

rd
Placed on the lower 3
fourth reference plane.
Now you need to constrain
it to the origin using the
existing reference planes
in the template.

Aligned one way, don’t forget to lock it. And the other (lock it).

33
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Select the generic model family and in the properties palette you should see the parameters from the family. Click
the little button on the right to link to a parameter in the massing family.

rd
Repeat for the Minor Axis and Add Axis – both of these will be linked to the 3 Ellipse Minor Axis in my case.

The end result should be your ellipse on one plane. Now, make a bunch more on the others.

Once completed, you form in “wireframe” should be complete and flexible.

This image shows the series of elliptical model lines placed on reference planes and constrained. This is the
surfboard. Changing the height parameter in the host causes these to move…

34
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Here, changing the height from


1000mm to 3000mm resulted in
more of a football than a
surfboard.

Creating Forms from nested


GM Families
Just like creating forms from
model lines in the massing
environment, you pick the
families or the lines in the families
in the desired order and click
“Create Form”. In this case, it
doesn’t matter if you start at the
bottom or top…

Families selected from base to


top, ready to create form…

Once created, the form is like


any other in the massing
environment.

Form completed.

It can continue to flex as the


model lines in the generic model
families move…

Flexed back to a vertical axis of


1000mm…

35
AB327-4 Fuzzy Math Essentials for Revit Family Builders

You can also still cut the voids


and join additional solids to it…

Void removing top half and


solid joined to it so that it has
a flat rim above the midpoint
of the ellipse.
From here, any of the
techniques mentioned
above can be used with this
mass to hide or manipulate
the geometry. This mass
can also be nested into
another mass and then
controlled there.

Our little surfboard in


its home on the
building mass.

36
AB327-4 Fuzzy Math Essentials for Revit Family Builders

TAK ING IT A LL IN TO MASSING


So, why all the trouble? Why make some crazy parametric mass? Here’s why. You can flex it into hundreds of
iterations and get feedback from Revit whether that is energy analysis or calculating building area for FAR
requirements. We did the latter on this project for months… As the size of the property changed, we had to
constantly tweak the building envelope to fall within FAR limitations. As I said earlier, this project had over 100
envelope changes, many of them in the last month of DDs. If we had to re-create the skin from scratch each time we
would have gone broke.

Here we have 18 different variations using the same mass, with slightly different parameter values. Many of these
versions meet the FAR requirement, so we were simultaneously judging both the building area requirements AND
aesthetics of the massing. The schedules show the area sums and area by level for each version of the mass. We
did over 200 versions in three days of charrette time before selecting a final scheme.

37
AB327-4 Fuzzy Math Essentials for Revit Family Builders

OCCUPANCY SCHEDULES 
 IBC 2006 has some intense occupancy requirements based on the type. Using conditional statements you
can create a series of occupancy schedules based on any code requirements and driven by room or area
schedules.
 Key Schedules are needed to fill out a bunch of values consistently and accurately without a lot of error
prone user input.

Occupancy Key

Exiting Requirements

38
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Plumbing Requirements

These are in the example files, so don’t worry about reading them…

Room Schedules are what we’re using, even though technically many of these requirements are based off the entire
floor area or even building use as a whole. We’ve found that using a room by room requirement usually increases
(inflates) the numbers above the level or building requirements, and we can always back-check with the total area
information in these schedules. We typically provide exiting and plumbing at better than code requirement levels so
this isn’t a problem for us.

Exiting Widths

Based on the key values and whether the room is sprinklered or not, we can use a calculated value to define the
stair and horizontal exiting requirements very easily!

Calculated Occupancy - if(Area Per Occupant = 0 SF, Seating Occupancy, ((Area / Area Per Occupant) + 0.49))
Stair - if(Sprinklered, Calculated Occupancy * Stair Exit Width Per Occupant Sprinklered, Calculated Occupancy *
Stair Exit Width Per Occupant Unsprinklered)
Horizontal - if(Sprinklered, Calculated Occupancy * Horizontal Exit Width Per Occupant Sprinklered, Calculated
Occupancy * Horizontal Exit Width Per Occupant Unsprinklered)

39
AB327-4 Fuzzy Math Essentials for Revit Family Builders

Plumbing Fixtures

This one is a little more complicated, with some nested conditional statements and some hard coded values.

Calculated Occupancy
if(Area Per Occupant = 0 SF, Seating Occupancy, ((Area / Area Per Occupant) + 0.49))
Male Water Closets
if(Male Water Closet Requirement 1 > 0, (if(Water Closet 1st Requirement Limit > 0, (if((Calculated Occupancy * 0.5)
> Water Closet 1st Requirement Limit, (((Calculated Occupancy * 0.5 - Water Closet 1st Requirement Limit) / Male
Water Closet Requirement 2) + (Water Closet 1st Requirement Limit / Male Water Closet Requirement 1)),
(Calculated Occupancy * 0.5) / Male Water Closet Requirement 1)), (Calculated Occupancy * 0.5) / Male Water
Closet Requirement 1)), Calculated Occupancy * 1)
Female Water Closets
if(Female Water Closet Requirement 1 > 0, (if(Water Closet 1st Requirement Limit > 0, (if((Calculated Occupancy *
0.5) > Water Closet 1st Requirement Limit, (((Calculated Occupancy * 0.5 - Water Closet 1st Requirement Limit) /
Female Water Closet Requirement 2) + (Water Closet 1st Requirement Limit / Female Water Closet Requirement
1)), (Calculated Occupancy * 0.5) / Female Water Closet Requirement 1)), (Calculated Occupancy * 0.5) / Female
Water Closet Requirement 1)), Calculated Occupancy * 1)
Male Lavatories
if(Male Lavatory Requirement > 0, (Calculated Occupancy * 0.5) / Male Lavatory Requirement, Calculated
Occupancy * 1)
Female Lavatories
if(Female Lavatory Requirement > 0, (Calculated Occupancy * 0.5) / Female Lavatory Requirement, Calculated
Occupancy * 1)
Drinking Fountains
if(Drinking Fountain Requirement > 0, Calculated Occupancy / Drinking Fountain Requirement, 0)

All this is in the sample file to look at.

40
AB327-4 Fuzzy Math Essentials for Revit Family Builders

RESOURCES
BLOGS

http://jasongrant.squarespace.com/ - Jason Grant

http://bimtroublemaker.blogspot.com/ - Philip Lazarus

http://revitfutures.blogspot.com/ - Kelly Cone

http://do-u-revit.blogspot.com/ - David Baldacchino

USER GROUPS

AUGI - Autodesk User Group International - Revit Forum

REVIT HELP

Press F1 within the Program

41
AB327-4 Fuzzy Math Essentials for Revit Family Builders

WEBSITES

Wikipedia – www.wikipedia.com

Basically, anything you ever wanted


to know about mathematical formulas
for geometry is on Wikipedia…

Mathworld - mathworld.wolfram.com/

Mathworld is a similar resource, based on the Mathematical


Software collection and user input. Also, free and explanatory.
This has some additional advanced definitions that Wikipedia
sometimes lacks.

Wolfram Alpha - www.wolframalpha.com/

Type in your base formula and


tell it what to solve for and you
don’t even have to do the
algebra. It does it all for you and
shows steps. If only I had this
back in the day for Differential
Equations…

42