AB327-4 Fuzzy Math Essentials for Revit Family Builders

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 - [email protected] - 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 - [email protected] - 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 - [email protected] - 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®.

Transcript of AB327-4 Fuzzy Math Essentials for Revit Family Builders

Page 1: AB327-4 Fuzzy Math Essentials for Revit Family Builders

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 - [email protected] - 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 - [email protected] - 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 - [email protected] - 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®.

Page 2: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

2

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 - [email protected] - 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 - [email protected] 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.

Page 3: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

3

INTRODUCTION

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 Operators Expression Description

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 Boolean)

If(<and, or, not>(<condition>, <condition>), <result-if-True>, <result-if-False>)

Page 4: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

4

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.

Page 5: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

5

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

Page 6: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

6

PLANNING AND DOCUMENTING

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.

PARAMETER NAMING AND ORGANIZING

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.

Page 7: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

7

ROUNDING

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.

Page 8: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

8

BOOLEANS

AND, OR, NOT

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

Parameters, Yes/No controls and formulas.

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

User Controls Object A - Yes/No Checkbox Object B - Yes/No Checkbox Object C - Yes/No Checkbox Or Boolean Operators - Yes/No Checkbox And Boolean Operators - Yes/No Checkbox

Page 9: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

9

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)

Page 10: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

10

EVALUATING INPUT

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

Page 11: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

11

VISIBILITY 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

Page 12: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

12

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!

Page 13: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

13

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

Page 14: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

14

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.

Page 15: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

15

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

Page 16: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

16

ARRAYS

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.

Page 17: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

17

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.

Page 18: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

18

TRIANGLE 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. Pythagorean Theorem: a2 + b2 = c2 Law of Sines: a/sinA = b/sinB = c/sinC or =sinA/a = sinB/b = sinC/c Law of Cosines: a2 = b2 + c2 - 2bc cosA or b2 = a2 + c2 - 2ac cosB or c2 = a2 + b2 - 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

Page 19: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

19

Page 20: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

20

PRESENTATION EXAMPLE OF TRIANGLES

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

Page 21: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

21

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 When the centre of the circle is at the origin then the equation of the tangent line becomes x1x + y1y = r2, and its slope is.

Page 22: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

22

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.

Page 23: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

23

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…

Page 24: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

24

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!

Page 25: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

25

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!

Page 26: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

26

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.

Page 27: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

27

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

Page 28: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

28

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?

Page 29: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

29

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. If the ellipse is given by the implicit equation Ax2 + Bxy + Cy2 = 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 cases, satisfy the implicit equation

[13][14]

provided B2 − 4AC < 0.

Page 30: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

30

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.

Page 31: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

31

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:

Page 32: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

32

1st Ellipse Y Offset from Center – Determines the distance to the first fourth. Formula: (Surfboard Depth / 4) * 1 1st 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))) 1st 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))) 2nd Ellipse Y Offset from Center Determines the distance to the second fourth. Formula: (Surfboard Depth / 4) * 2 2nd Ellipse Major Axis Now, we can repeat the formulas from earlier, but we will use the 2nd Fourth Y Offset instead of the 1st Fourth Y Offset. Formula: sqrt(Surfboard Major Axis ^ 2 * (1 - (2nd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2))) 2nd Ellipse Minor Axis Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 - (2nd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2))) 3rd Ellipse Y Offset from Center Determines the distance to the third fourth. Formula: (Surfboard Depth / 4) * 3

3rd Ellipse Major Axis Formula: sqrt(Surfboard Major Axis ^ 2 * (1 - (3rd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2))) 3rd Ellipse Minor Axis Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 - (3rd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2))) 4th 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”. 4th Ellipse Major Axis Formula: sqrt(Surfboard Major Axis ^ 2 * (1 - (4th Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2))) 4th Ellipse Minor Axis Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 - (4th Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))

Page 33: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

33

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. Placed on the lower 3rd 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).

Page 34: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

34

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.

Repeat for the Minor Axis and Add Axis – both of these will be linked to the 3rd 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…

Page 35: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

35

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…

Page 36: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

36

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.

Page 37: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

37

TAKING IT ALL INTO 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.

Page 38: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

38

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

Page 39: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

39

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)

Page 40: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

40

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.

Page 41: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

41

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

Page 42: AB327-4 Fuzzy Math Essentials for Revit Family Builders

AB327-4 Fuzzy Math Essentials for Revit Family Builders

42

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…