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