Академический Документы
Профессиональный Документы
Культура Документы
Class Description
Revit software provides tools for using conceptual modeling and
computational logic in an advanced Building Information Modeling
environment. Can these tools be used in Structural Design? This
presentation will show how to play with Adaptive Components, patterns,
repeaters, math and Dynamo to create structures and components that
challenge the generic modeling capabilities of Revit. Complex concrete
forms, post-tension concrete reinforcement and trigonometry-driven steel
frameworks will be covered in a wonderful symbiosis of fantasy exercises
and real-world project problems. Lets succumb to the Dark Arts of Revit
About the Speaker
Hvard Vasshaug is a structural engineer, Revit power user and Digital
Design Manager at Dark, one of Norway's largest planning, architecture
and interior design practices. He has vast experience providing Revit
training, solutions and seminars for architects and engineers the past 8
years, and now uses this background to share knowledge of Revit
solutions at Dark and to whoever else that enjoys it.
Hvard is a regular presenter at Autodesk University and Revit Technology
Conferences around the world. He is an enthusiastic blogger and national
Revit forum administrator. Collaborating with Autodesk, he is a part of the
Autodesk BIM Open Source Project Steering Committee, a dedicated
Revit development contributor and a very proud Revit Gunslinger.
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Introduction
As I see it, there are two main reasons for learning conceptual modeling
and computational logic in structural design.
First, and most obvious, this way of operating allows us to design more
complex, organic and optimized structural shapes faster than with
traditional modeling tools. We can evaluate multiple structural options
with great ease, and build beautiful structures based on natural and
mathematical principles rather than clicking and dragging.
Second, and perhaps less obvious, visual programming in Revit through
Dynamo offers us a way of expanding the boundaries of what actually
can be accomplished in a BIM tool. We can access and edit Revit
projects and families at a completely different level of effectiveness and
availability than traditional hardcoded tools allow. We can establish
relationships between objects that Revit normally cant, and create
elements using external data normally reserved for the software code
knowledgeable. In short, we can create, and obtain deep understanding
of, our own design tools; a glimpse into the future.
In this class, and handout document, we will focus almost exclusively on
the first part, but in doing so also touch aspects of the second.
I am passionate about empowering young engineers and architects with
knowledge of exceptional digital design tools, and firmly believe this to be
the next generation for many of them.
Note
All information in this class handout is based on the following software
versions:
1. Conceptual Modeling; Revit 2015 Build 20140322_1515(x64)
2. Dynamo; Revit 2014 20131024_2115(x64) Update Release 2 and
Dynamo 0.6.3.7993
If any of my examples deviate from your experience, please run a check
on the versions you are using.
Page 2 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Table of Contents
Table of Contents .................................................................................................. 3
Conceptual Modeling .......................................................................................... 4
Modeling a Space Frame using Massing, Adaptive Components and
math..................................................................................................................... 4
Building a Grid System....................................................................................... 5
Dynamo ................................................................................................................ 18
Modeling a Space Frame using a graphical algorithm editor ................. 18
Building a Grid System..................................................................................... 18
Integration with Revit Elements ..................................................................... 25
Computational Frame Attractor Thickness .................................................. 44
Analytical Model and Structural Analysis..................................................... 50
Material for Further Research and Development .......................................... 57
Dynamic Relaxation ........................................................................................ 57
Working with Adaptive Components and Structural Framing ................. 58
Working with Load Data inside Dynamo ..................................................... 58
Page 3 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Conceptual Modeling
Page 4 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Please note that we can create a surface fast by using the tick mark
Make surface from closed loops when drawing the Model Rectangle.
Page 5 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We can then proceed with revealing the Divided Surface Node Points by
changing the Surface Representation to Nodes.
Page 6 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 7 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Next we add 4 Aligned Dimensions between Adaptive Point 1 and all the
other points. We want these Dimensions to always report the shortest
distance between these points, as opposed to the orthogonal distance,
and to obtain this we need to host the Dimensions on each corresponding
Reference Line by clicking Set Work Plane and selecting the Reference
Line before placing the Dimension.
When the Dimensions are in place and working, we add a Label to each
and use a custom Reporting Instance Length Parameter.
Page 8 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
To work out the vertical and diagonal frames we add hosted Reference
Points to the 4 nodal Reference Points. Using the same procedure as with
the Dimensions, we click Set Work Plane and select each Adaptive Points
horizontal work plane, before placing a Reference Point on the
corresponding Adaptive Point. This can be a bit tricky, but once we have
the 4 Reference Points in place, we can select them one at the time and
associate their respective Offset parameters with a new custom Length
Instance Parameter.
Page 9 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 10 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Reference Lines and sweeps using the Create Form tool (appears after
selection of valid geometric rig).
Page 11 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 12 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 13 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Finishing the space frame is now easy by using the Repeat command.
We select the Adaptive Component, and by pressing Repeat it fills out the
remaining quadrants of the Divided Surface. The rest is done by
Pythagoras.
Page 14 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We can change the Mass parameters or try moving the Reference Point
around. Updating repeated Adaptive Components can be a bit on the
slow side, and often it can help on performance to load a simple family
with only Model Lines and not solid geometry first.
We can also build out a top frame layer with glass ceiling if we want. This
can be done by either adding geometry to the Adaptive Component,
make a new Adaptive Component or using a custom Curtain Panel
pattern-based.
Page 15 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
And we can add a solid sphere to the underside of the Mass to visually
compare the placement of the straight bottom spherical layout to a real
sphere.
Page 16 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 17 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Dynamo
Page 18 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We now have a square grid system of 9 by 9 points. Note that these points
are Dynamo arbitrary geometry, and has nothing to do with Revit yet. Also
note that making a grid this way makes a list of lists, with each value of X
in each sublist. This will help us when working out a set of lines.
We can add another XYZ node, one more Number node and two
Number Slider nodes, to add a new point in our preview background
canvas. We can use this point as the attractor in our 3D grid.
Page 19 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 20 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
our 3D grid. The Formula nodes have a text field, and in this field write the
syntax a-(d/c). This will let us control the vertical offset with one Number
Slider and the amplitude (or scale) with the other.
Page 21 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 22 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We can add lines between the points in the grid now by adding a Lines
Through Points node.
Page 23 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
The Lines Through Points nodes generate linear line segments between
each point in a list. We can use continuous splines if we wish by using the
Hermite Spline nodes similarly.
Now we can change the different Number input values using the sliders,
and see our model update accordingly.
Page 24 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Surfaces
When talking about Revit, Dynamo and surfaces its important to
differentiate between modeling a Revit Surface with Dynamo and using a
Revit surface in Dynamo.
Creating a Revit Surface within Dynamo limits us to only work in the
Conceptual Modeling Environment, as thats the only place a Revit
Surface can be modeled and edited.
Using an already modeled surface with Dynamo on the other hand,
creates many possibilities. In fact, selecting Revit surfaces in Dynamo
includes every surface in Revit, not only Masses created in the CME. We
can use Walls, Floors and Roofs, anything that has a face really.
In the Revit project we used in the previous section, model (in-place) or
load a Mass surface.
We can pull this surface into our Dynamo definition by adding the Select
Face node, click Select Instance and click on the surface in Revit.
Page 25 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Now we can divide this face in a similar grid system like we used in the
previous section. In order to do so we have to generate a UV grid, and
convert it to XYZ points. We can do this by adding the Get Surface
Domain, UV Grid and Evaluate Surface nodes, in addition to a Number
node for U and V direction counts.
Page 26 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Using the line grids from the previous section, we can wire the surface XYZ
coordinate list into the Lines Through Points and Hermite Spline nodes, but
in order to make these work together we have to manually make sublists
of each gridline. We can do this by using a Partition List node together
with the Number Node that controls the U and V count. This way our
partition lists will always correspond to the number of surface divisions.
There is one slight detail we must not forget while doing this, and that is
the number of divisions (8 here) is 1 less that the number of points along
one gridline. Hence we must use a Formula node with the syntax a+1
between the Number node and the n input in the Partition List node. This
way the number of partitions will always be one more than the UV count.
PS We do not want to delete the XYZ Distance and Formula nodes used
previously, as they will come in handy later.
Page 27 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We can further develop this grid by finding the center points of each
panel and offsetting these normally to the surface. To do this we need
two nodes. First we need to use the Best Fit Plane node. This will find the
midpoint between a set of XYZs. Second we need a custom node called
LunchBox Quad Grid by Face by Nathan Miller. This will, with the help of a
little Python programming, get the quadrant points as lists of lists. We need
this to get the best fit plane per quadrant. These quad points can also be
obtained manually without the help of custom nodes and Python
programming, but that requires much more list manipulation, and we will
not cover that here.
Page 28 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We can visualize the center points easier by right clicking on the Select
Face node and disabling Preview. This will turn off the surface in the
background preview.
Finishing this section we can offset the center points by using the Normal
output from the Best Fit Plane node. This output is a list of XYZs that
represent the normalized vectors for the axis of the best fit plane. We can
use this vector by adding a Scale XYZ node, a Translate Transform node
and a Transform XYZ node.
Page 29 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Next we wire the Number Slider used as the vertical offset parameter for
the grid in the previous example as the n input in the Scale XYZ node, and
the rest as follows.
The Transform XYZ node now generates vectorized offset points for each
quadrant, and we can control the offset value using a single Number
Slider.
The last thing we need to do is combine the quad points with the
respective offset points into lists of 5 XYZ coordinates. We can do this by
using a Transpose List node on the LunchBox Quad Grid by Face node
and adding that list to the Transform XYZ output by using an Add to List
node.
Following that with another Transpose List node gives us a list of the XYZ
coordinates of all quads and their respective offset points.
Page 30 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
This provides a nice platform to start modeling Revit Elements, and first off
are Adaptive Components.
Adaptive Components
There are a couple of different Adaptive Component nodes in Dynamo,
but the most commonly used is the Adaptive Component by XYZs node.
This node requires a list of XYZ coordinates that define the location of the
Adaptive Points in the family. The number of XYZ coordinates must equal
the number of Adaptive Points.
Page 31 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 32 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Structural Framing
The Structural Framing node in Dynamo populates a Revit project
document with beams that we can use for analytical purposes. The node
requires three inputs; Structural Framing Type, Model Curves and an Up
Vector. The Select Structural Framing Type node in turn needs at least one
loaded Structural Framing family in the active project.
Page 33 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
The curves input require a flat list of Dynamo Model Curves. Normally Line
by Endpoints, Lines Through Points or Hermite Spline does the trick,
depending on what our beams look like (is it a spline or linear line?) and
what list data we have.
Page 34 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Last, we really only need one Structural Framing node for each different
Structural Framing Type and up vector. Combining all lists of model curves
with a List node, and making sure we flatten the resulting list, as the
Structural Framing node only works with a single list of curves, we acquire
the desired outcome; a complete set of Structural Framing elements in
Revit.
Page 35 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 36 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Now with the bottom space frame in place we can continue by adding a
top layer and a vertical grid. We already have all the points, but need
some list manipulation.
Starting with the vertical grid structure we need to combine each bottom
point with the corresponding top point. Each quadrant will have 4 beams
meeting at the center offset point. We can work out this by developing a
list where a corresponding offset point is added to each quadrant point.
Now we can add one center offset point (output of the Transform XYZ
node) to each point by repeating the center offset points equal to the
number of quad points. We do this by pulling out one of the sublists,
extracting its list length and repeating the center offset points by that
quantity. Alternatively we could just add a Number node with value 4, as
our grid is a quad grid, but in case we want to develop a different form
(diamond, staggered, etc.) later this may provide flexibility.
Adding a Get from List with index 0 will pull out the first sublist. Using a List
Length node on Element output will return the number of each quadrant
point, and we can use this number to repeat the center offset points (the
Transform XYZ output).
Page 37 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Now we have all the start and end points for our lines, and all that is left is
adding a Line by Endpoints node and using the transposed quad grid and
the repeated center offset points as input.
Page 38 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Adding these lines to the combined list of lines we can start adding a
vertical grid of Structural Framing elements to the Structural Framing node
in our definition.
Page 39 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
The Structural Framing node does not always update already modeled
Structural Framing correctly, and rather model new. Adding a new list of
lines to the generation of beams sometimes result in this unwanted
behavior. We can avoid this problem by either deleting the beams from
Revit, or deleting and replacing the Structural Framing node in Dynamo.
Either solution will result in new beams, and no duplicate elements.
Page 40 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Working out the top grid should be fairly simple now, connecting all the
quad center offset points. As mentioned previously, these points are
outputs from the Transform XYZ node deriving from the Best Fit Plane. This
list of points is flat, and like for the bottom grid we need to partition the list
with the number of grid lines. Since the number of center points equal the
number of quads (and U and V divisions) we can pull this number from the
defining Number parameter that generates our grid count.
Page 41 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Wiring the partitioned list into two Lines Through Points, one of them via a
Transpose List node that provides for the transversal direction, generates
the model curves we need.
Finishing by including these curves in the List node, our Space Frame is
complete.
Page 42 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 43 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 44 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We can get the center point from the UV Grid by using a Get from List
node with either a Number or Formula node. It doesnt really matter as the
division will always be 2 by 2, but by following the principle of flexibility we
continue with a Formula node and the syntax ((a+1)*(a+1))/2. This will
force all even number inputs to produce a center point.
Now we can continue to use the XYZ Distance and Formula node we
created in the first sections.
Page 45 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We delete the Number Sliders, Number and XYZ components, and wire
the XYZ Distance to our new center point and the Best Fit Plane origin.
The Number Slider that previously parameterized the XYZ Scale node can
now be wired out of the Scale XYZ n input, and just remain in the Formula
a input.
Finally, we change the formula to the syntax a+(d/c) where a is a
constant offset and c is amplitude, and wire the output to the n input of
the Scale XYZ node.
Page 46 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 47 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 48 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 49 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 50 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Its interesting to note that the Hosted Line Loads will update with the
Analytical Beams when we change certain parameters in Dynamo. Of
course adding new beams will require manually modeling new loads, but
most updates that either move or deletes load will update.
Page 51 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 52 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
We can also use Revit Extensions to get quick and easy Load data at
supports and different members.
Page 53 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
The Revit Extensions can also save reaction loads back to Revit as native
Revit Internal Point Loads at supports.
Page 54 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 55 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Many structural analysis programs can import analytical data from Revit,
but in case that for some reason fails, nothing can go wrong with
numerical Excel data.
Page 56 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Dynamic Relaxation
In the sample library of Dynamo there is an exercise called Dynamic
Relaxation. This definition creates a Particle System from any given points
and curves, in addition to a host of numerical data (including gravity),
and loops this data in a set of iterations that freezes in a position where
all members have ideal stress.
In our example, we should be able to apply this concept on our double-
curved surface, and generate a pressure-optimized space frame in
Dynamo, rather than the one we made from guessing and analyzing.
However, in the current versions of Dynamo these nodes does not work
properly, and either crashes or never returns from the loop.
When these nodes start working properly I see a lot of potential for great
use when working with structural optimization.
Page 57 of 58
Conceptual Modeling and Computational Logic
Hvard Vasshaug, Dark
Page 58 of 58