Professional Documents
Culture Documents
Class Description
The visual programming interface of Dynamo is enabling structural
engineers with the tools to build optimized structures with minimal energy,
and subsequently make their own design tools. Based on the Revit
Platform, we can use our creativity to develop optimized structural
systems using computational logic in an advanced building information
modeling environment. This presentation will teach participants how to
create and iterate computational space frames with native Revit Framing
elements and Adaptive Components, and how these can be used in
structural analysis.
About the Speaker
Hvard Vasshaug is a structural Engineer (M.Sc.), architect and BIM
Manager at Dark Architects; one of Norway's fastest growing architectural
studios. He has vast experience providing Revit training, solutions, and
seminars for architects and engineers over the past 9 years, and now uses
this background to share knowledge of digital building design solutions.
He regularly speaks about technical workflows, digital innovation and
human development at various national and international conferences
and seminars, and receive wide acclaim for his talks and classes. He writes
about BIM and visual scripting solutions on vasshaug.net, and administers
the national Norwegian Revit forum.
Hvard has a passion for making technology work in human minds and on
computers and have three means to do so: Building project
development, technology research, and knowledge sharing. When he
can do all that, he is a very happy camper.
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Introduction
Dynamo is a visual programming interface that connects computational
design to building information modeling (BIM). With Dynamo, users can
create scripts that build, changes and moves building information in
whatever way the user wants. It is free and open source.
Computational design with BIM through Dynamo creates some interesting
opportunities for the building design industry.
First, Dynamo allows us to design organic and optimized buildings and
structures faster than with traditional modeling tools, using computational
methods. This is because we can create, associate and analyze multiple
building parameters, and have them revise our designs automatically. We
can iterate and evaluate multiple building design options with ease, and
build structures based on natural and mathematical principles.
Second, visual programming in BIM offers us a way of expanding the
boundaries of what actually can be accomplished in a BIM tool. We can
access and edit building parameters more effectively than traditional
hard coded tools allow. We can establish relationships between building
element parameters, and modify these using almost any external data.
We can move any information about a building or its surroundings through
our BIM effortlessly, something that is normally reserved for those who are
software savvy.
This opens the first door to a vision of building designers taking ownership
of, and designing, their own design tools. Ever since the Personal
Computer became mainstream, almost all building designers have been
subject to what software developers have created for them. This is an
opportunity for the building design industry to start getting actively
involved in how its software works. We can create, and obtain a deep
understanding of, our own design tools.
When I was introduced to the building industry as a young engineer more
than a decade ago, my design tasks included drawing, copying and
offsetting lines, while trying to make sense of complex 2D blueprints. It was
not only mind numbing, but also time consuming and inefficient. I now
Page 2 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Note
All information in this class handout is based on the following software
versions: Revit 2015 Build: 20140905_0730(x64) Update Release 4 and
Dynamo 0.7.2.2114.
If any of my examples deviate from your experience, please run a check
on the versions you are using.
Page 3 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Table of Contents
Table of Contents .................................................................................................... 4
Dynamo .................................................................................................................... 5
Modeling a Space Frame .................................................................................. 5
Building a Computational Attractor Grid ....................................................... 5
Integration with Revit Elements ....................................................................... 13
Analytical Model and Structural Analysis ...................................................... 37
Material for Further Research and Development ........................................... 43
Optimized form finding ..................................................................................... 43
Working with Adaptive Components and Structural Framing .................. 44
Working with Load Data inside Dynamo ...................................................... 44
Page 4 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Dynamo
Page 5 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 6 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Change the input value to 10 and 12, and visually confirm that our grid
changes accordingly. (Ctrl+G or press Geom to navigate the preview
background.) Change back to 8.
Page 7 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
yet. Also note that making a grid this way makes a list of lists of points, with
each value of X in each sublist. This will help us when working out a set of
lines.
Page 8 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 9 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 10 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 11 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
We can add lines between the points in the grid now by adding a
PolyCurve.ByPoints node.
Page 12 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
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.
Page 13 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
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.
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 points in space.
Page 14 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
First delete the two first Double Sliders and Point.ByCoordinates we used.
Second, add one UV.ByCoordinates node, a UV.U, a UV.V and a
Surface.PointAtParameter node. Wire them like below, and remember to
change Lacing on the Surface.PointAtParameter node to Cross Product.
Using the line grids from the previous section, we can wire the surface
point coordinate list into the PolyCurve.ByPoints nodes.
Now can be a good time to hide the surface from the background
preview. Right click on the Select Face node and deselect Preview.
Page 15 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
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 Plane.ByBestFitThroughPoints node.
This will find the midpoint between a set of XYZ coordinates. 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, polygons and faces of each panel as lists of lists. We
need this to get the origins and normals per quad, in addition to the
corner points. 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.
Note: Nate uses a different understanding of UV than the
Surface.PointAtParameter node does. The LunchBox node counts the
number of divisions, not points. Hence we need to subtract a value of 1
from the initial input. Do this by adding another line in the second Code
Block with the following syntax
n-1;
Then wire accordingly.
Page 16 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Finishing this section we can offset the center points by using the Origins
and Normals output from the Plane.ByBestFitThroughPoints node. This
output is a list of points that represent the normalized vectors for the axis of
the best fit plane. Segment this output be producing a Code Block with
the syntax
pt.Origin;
pt.Normal.AsPoint();
Page 17 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
This produces a unitized set of point vectors. We can notice that not all
normals point in the same direction. We can work around this by adding a
test, and since our surface is more or less horizontal (more so than vertical
at least), our test can be z>0.
Use the Code Block from the previous example (the one we are not using
any longer), and change its syntax to
pt.Z;
pt.Z>0;
Insert the Geometry.Scale output, and our resulting list is a set of booleans
that indicate if a normal points up or down.
Page 18 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
-1;
a Geometry.Scale node, and a Formula node with syntax
if(z>0,a,b)
Wire like below, and observe that we now only have positive normals. And
There Was Much Rejoicing.
Next we wire the Code Block formula used as in the previous example as
the amount input in the Geometry.Scale node, and the rest as follows.
Page 19 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Our definition is now scaling each panel points normal offset distance to
the product of each panels distance to a point in the center of our base
surface. Incredibly simple.
Next we transform the vector points to actual Dynamo vectors by adding
a Point.AsVector node, wired to the last scale output.
Page 20 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 21 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
This produces a flat list of point coordinates. In order to use this effectively
with curve creation lets manually divide the list for each set of line
segments.
Add a List.Chop node. Wire it to the last transformed geometry. The
number of points in each needed sublist equals the number of each u
and v divisions, minus one. Hence, pan to the left and pull out a wire from
the n-1 output of our second Code Block.
Page 22 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Wire this output to the amount input of our new List.Chop node.
Page 23 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
In order to connect the top and bottom grids to get the transversal frame
layout, we add a List.Transpose and Flatten to the LunchBox Quad Grid by
Face Panel Pts output. This will order each 0-, 1-, 2- and 3-point of each
panel nicely aligned with each top grid point.
Next we duplicate the top grid points 4 times (equal the number of panel
points) by introducing a List.Cycle node, connected with the
Geometry.Transform output and a Code Block with output 4.
Page 24 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Last in this section on creating Dynamo points and lines from list
manipulation and math, we can combine 4 quad points with its
corresponding top grid point.
Page 25 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
List.Transpose from the added list will produce a list of lists of 5 points for
each panel.
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 AdaptiveComponent.ByPoints node.
This node requires a list of point coordinates that define the location of the
Page 26 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Adaptive Points in the family. The number of points must equal the number
of Adaptive Points.
We need to keep in mind the number sequence of the Dynamo points
when building our Adaptive Component. Dynamo always counts from 0,
while Adaptive Components start at 1; hence 0 correspond to 1, 1 to 2,
and so on.
Page 27 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
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 5 inputs; curve, level, upVector, structuralType and
structuralFamilySymbol. structuralFamilySymbol is the equivalent with Revit
Page 28 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Family Type, and need at least one loaded Structural Framing family in the
active project.
Add the StructuralFraming.ByCurveLevelUpVectorAndType, Levels,
Vector.ZAxis, StructuralType.Beam and Structural Framing Types nodes,
and wire like below.
Page 29 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Then add another List.Create and a Flatten node to combine all curves
with the transversal lines.
Page 30 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
We should now have a flat list of 392 curves and lines, and wiring these
without hesitation to the
StructuralFraming.ByCurveLevelUpVectorAndType node, we only need to
save, Run and grab coffee.
Page 31 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Returning from the coffee machine, our eyes should now gaze with
satisfaction upon our desired outcome; a complete set of Structural
Framing elements in Revit.
And There Was Much Rejoicing.
Page 32 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 33 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 34 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 35 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 36 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 37 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
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.
Boundary Conditions can also be added quick and easy.
Page 38 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 39 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
We can also use Revit Extensions to get quick and easy Load data at
supports and different members.
Page 40 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
The Revit Extensions can also save reaction loads back to Revit as native
Revit Internal Point Loads at supports.
Page 41 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 42 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
When these nodes are brought back, and start working properly, I see a
lot of potential for great use when working with structural optimization.
Page 43 of 44
Computational Logic in Structural Design
Hvard Vasshaug, Dark Architects
Page 44 of 44