SOFiSTiK Rhino Grasshopper
SOFiSTiK Rhino Grasshopper
FOREWORD
The goal of this document is to provide a clean and easy way of starting graphical
programming to structural engineers. Rhino Grasshopper is a powerful tool to create
any kind of geometry for structural analysis in SOFiSTiK. This includes parametriza-
tion, load application, cross section generation and much more.
This document will help you to understand the software and to streamline your work-
flow.
3 examples are included in this document. They will provide you a basic overview of
the capabilities of Rhino Grasshopper and the possibilities it gives you by using it
with SOFiSTiK
To follow the shown workflows in this document you need this software:
- SOFiSTiK Structural Desktop (via SOFiSTiK Application Manager)
- SOFiSTiK Rhinoceros Interface (via SOFiSTiK Application Manager)
- Rhinoceros (it includes Grasshopper)
Copyright
This script is copyrighted. No part may be duplicated or rewritten in any way without the written permission of
SOFiSTiK AG. SOFiSTiK reserves the right to revise or update this publication at any time.
SOFiSTiK assures that the script was created to the best of its knowledge and beliefs but does not guarantee that
the script is error-free. The user remains responsible for his own application.
Trademark:
SOFiSTiK is a registered trademark of SOFiSTiK AG.
Grasshopper is a registered trademark of Robert McNeel & Associates
Table of Contents
Table of Contents
1 General ................................................................................................ 1
1.1 SOFiSTiK ...................................................................................... 1
1.2 Rhinoceros ® ................................................................................ 3
1 General
1.1 SOFiSTiK
SOFiSTiK is Europe’s leading manufacturer of construction software for analysis,
design, and detailing. Over 2,000 customers worldwide use the company’s solutions
to build large and complex infrastructure and buildings or implement special pro-
jects.
1
General
2
General
1.2 Rhinoceros ®
Rhinoceros (also called Rhino, or Rhino3D) is a 3D computer-aided design (CAD)
software developed by Robert McNeel & Associates. Rhinoceros geometry is based
on the NURBS mathematical model, which focuses on producing mathematically
precise curves and freeform surfaces (in contrary to polygon mesh-based applica-
tions). Rhinoceros is developed for Microsoft Windows and MAC OS. Grasshopper
is a visual scripting language for Rhino.
Rhinoceros software requires a license from Robert McNeel & Associates.
We will not take a closer look at Rhino in this document, as we will use it simply as
a visual preview tool. There are added on SOFiSTiK functionalities available for
Rhino, but the focus of this script is on the visual programming tool “Grasshopper”.
1.2.1 Grasshopper
Grasshopper is a graphical algorithm editor for Rhino’s 3D modeling tools. It is in-
cluded in the Rhino installation since Rhino.
When you start Grasshopper in Rhino, it starts up in a separate window. Grasshop-
per includes a variety of functionalities to create your geometry via visual scripting.
This Grasshopper script then creates or utilizes data in Rhino in real time. SOFiSTiK
functionalities allow you to link the created data directly to SOFiSTiK for the analysis
process.
Rhino
Grasshopper
3
Basic Grasshopper Functionality
2.1.1 Template
The Rhino template used in this document is “Large Objects – Meters”. You can
select it when you start a new project in Rhino (not in Grasshopper!).
4
Basic Grasshopper Functionality
2.1.2 Bifocals
The best and fasts way to learn what you are handling in Grasshopper is to visualize,
as well as read repeatedly the functions that you are using. To have the advantages
of both worlds (icons+names) we recommend using the free Bifocals add-on for
Grasshopper.
You can download it here:
[Link]
Once installed you can activate this add-on by clicking on these glasses and placing
them in your project.
All your Icons now have little speech windows on top, that show their name.
2.1.3 Display and View Settings
If you want to work with the same representation shown in this article, you have to
select the following settings:
• Draw Icons & Draw Fancy Wires in “Display”
5
Basic Grasshopper Functionality
Single data inputs are displayed as a full line between the operators:
If you double click on this line, a relay is created, that can be used to clean up your
project representation. It allows you to connect multiple inputs to a single output
operator without creating long lines:
2.2.1 Geometry
Geometry allows you to input geometries from Rhino to Grasshopper. (from existing
Rhino projects, or geometry that you drew in Rhino) Meaning, you can freely draw
lines in Rhino and then use those lines in your Grasshopper coding.
To do so, you have to place a function like “Curve” in your Grasshopper project.
With a right click you can select the “set one Curve” option to select an existing
curve from Rhino to use it in Grasshopper.
6
Basic Grasshopper Functionality
2.2.2 Primitive
The next input form is Primitive. It allows you to convert data into a specific form,
or manually input data via right click on the function.
2.2.3 Input
The most versatile methods to create data for your Grasshopper projects are found
in Input.
Input contains a wide variety to create/ import data. For this document you will re-
quire Panels, Number Sliders, Boolean Toggles and Value Lists.
• Panel
With a double click you can write you want to in it. If the information is easily
assignable to a format (Text, Integers, Numbers,..) then the program will do so.
Otherwise you can force the program to assign a format to it (see Primitive). It can
not only be used for input, but also to display the output of an operation:
7
Basic Grasshopper Functionality
• Number Slider
Number sliders can be used as a numerical input. You can adjust step intervals and
minimum/maximum values in its right click menu.
• Boolean Toggle
A value list allows you to create a list of automated inputs. You can personalize
value lists with a double click on them:
2.2.4 Mathematics
You will find all the operators to do complex mathematical operations in this tab.
8
Basic Grasshopper Functionality
2.3 Sets
Lists and especially trees really enable complex geometries in Grasshopper.
2.3.1 Lists
Lists are exactly what you expect, a list of information. One information after an-
other.
There are lots of ways to create lists (like the Range command), as well as to ma-
nipulate lists in the “List” and “Sequence” tabs. They all depend on the numbering
scheme in Grasshopper. The index numbering starts at 0 and increases in incre-
ments of 1 (red). Then the assigned value of the list to this index is shown (blue)
An indication, that you are working with a list can also be found in the wire style of
the connection (double line):
9
Basic Grasshopper Functionality
2.3.2 Trees
A tree is a list of lists. Meaning a tree contains multiple lists.
You can use the tree-command “Entwine” to create a tree containing both lists. Note,
that every list still has its own indexes, as well as a tree index on top:
Tree-commands allow you to create trees, manipulate them and even create lists
based on tree information. Tree information is indicated by a dashed double line.
The tree-command “Flatten Tree” was used to transform the tree into a list:
10
Basic Grasshopper Functionality
You can find operators to create and disassemble points in the Point-tab. There are
also functions to create point-based operations like vectors, that can also be used
to give directions to loads.
You can find lot of ways to create and manipulate lines in Curve. You will find the
first couple of operators in the Primitive and Spline tabs most useful to create even
very complex geometries.
Surfaces can be created based on lots of different data input. They range from points
and lines to trees and extrusions. There are also many transformations and interac-
tions available in Surfaces. The most practical operators can be found in Freeform.
2.4.4 Intersect
A special notice for the Intersect-tab, as it allows you to analyze intersections be-
tween your geometries. You can find these intersection operators in “Shape”.
11
Rhino Interface – SOFiSTiK Workflow
3.1 Overview
This chapter gives you a rough overview of SOFiSTiK functionality for Grasshopper.
(Version 0.0.95 for Rhino 7 and SOFiSTiK FEA 2022)
Most SOFiSTiK components are based on their respective modules in the SOFiS-
TiK-World. These modules are implemented directly in Grasshopper, you can rec-
ognize them by their yellow sticker-style. All SOFiSTiK functions must be con-
nected to a module, before you can use them in your SOFiSTiK Analysis.
Here a short summary of the modules and what you can connect to them:
• AQUA
Standard, Materials and Cross Sections. The functionalities in “[Link]” give you
a multitude of options to input your Cross Section, as well as adjusting them. You
can also input material and code information as a TEDDY-ASCII text.
• SOFiMSHC
This module generates the finite element mesh. You can connect all structural in-
formation like points, lines and areas to it. This includes axis-based geometry, as
well as couplings, springs and boundary conditions.
12
Rhino Interface – SOFiSTiK Workflow
• SOFiLOAD
Load application. This module takes the information from your load definition and
applies it to the meshed system. The input can be loads, as well as load attributes.
• TENDON
Prestress. It lets you define the prestressing system, pre- and posttensioning
attributes, as well as geometry definition, based on an axis geometry.
If you need additional information for the individual operators, you can get it from
SOFiSTiK´s online documentation. Right click the operator in Grasshopper, “Help”
and click on “Further Information” to access it directly:
13
Rhino Interface – SOFiSTiK Workflow
3.1.1 General
Here a short overview of the operators in the “General”-tab, as not all of them are
used for the same workflows. These functions are used for input/output, settings as
well as calculation.
• Global Settings
Let’s you adjust colors, densities and scales for the analytical representation.
• SOFiSTiK Project
One way to link Grasshopper to your SOFiSTiK Project. You can manually initiate
the export, stream to a .dat-file that can be read by SOFiSTiK and set it to silent
calculation (manual, but without opening an additional calculation window). The but-
tons below are useful shortcuts to e.g. open the current file folder, the database
visualization,…
• Advanced Solving Engine
Allows you to do define and initiate a linear analysis, based on existing loadcases
in your system. The required input is a list with loadcase-numbers.
• Read Spreadsheet
Read data from a spreadsheet and use it directly in Grasshopper. This will be always
up to date (as soon as you save changes in your spreadsheet).
• Text File
Another way to link Grasshopper to your SOFiSTiK Project. Text File creates .dat
files for every SOFiSTiK-Module you assign to it.
14
Rhino Interface – SOFiSTiK Workflow
3.2 Examples
Make sure to visualize the information you want to see in Rhino. Right click the
operator, that you want Rhino to show, in Grasshopper and turn its preview on and
off.
Useful Trick: Double left clock in an empty space in Grasshopper to access the text
input. Insert the name of a function to quick access it.
15
Rhino Interface – SOFiSTiK Workflow
• Creating Lists
The first three input lines are now used to create 5 en-
tries in a list for X and Y coordinates to later create
points.
• Section Geometry
The X and Z lists can now be input to a construction point (see 2.4.1). Then a pol-
yline (see 2.4.2) is created, based on the point information.
16
Rhino Interface – SOFiSTiK Workflow
The “Tree Branch” operator lets you select and split up the point tree to select only
the points on top for your longitudinal connections.
• Stiffeners
The operations used in Stiffeners firstly select alternating points. Secondly, these
points are used to create alternating lines fitting the rest of the geometry. All of this
is based on Grasshopper list manipulation.
This is a complex operation to parametrize. But you can control it via “Position Stiff-
ener” in your input.
17
Rhino Interface – SOFiSTiK Workflow
Another method to set Standard, Material & Cross Sections is to not define them in
Grasshopper, but later in the SOFiSTiK Analysis (SSD). You would still reference
materials and cross sections by their numbers in Grasshopper, but you define them
in SSD. The information comes together once you export the system from Grass-
hopper.
• Structural Elements
In this example we only have structural point and line elements. SOFiSTiK provides
operators for grasshopper to define them. The input you provide what the structural
element will do.
The geometry of the steel hall is solely defined by structural lines. You can input
which Grasshopper lines shall be considered via “Crv”. You can assign beam infor-
mation to the structural line by inputting it via “Section”. In this case this is simply
done by a numerical input “1”, as Section “1“ is already defined in AQUA. As this is
a steel hall, we want a couple of these beams to not transfer a momentum. This can
be assigned via “Hinge Start” and “Hinge End”.
18
Rhino Interface – SOFiSTiK Workflow
The structural points in this project are used to create support conditions. Simply
select the relevant points and set a fixation degree.
Once you finished your structural elements, make sure to connect it to the SO-
FiMSHC-module. Connected elements will be meshed and finite elements are gen-
erated for your analysis.
The loadcase then still needs some more attributes for the analysis. You can add
them via “LoadCase Attributes”. This allows you to assign a type to your loadcase.
19
Rhino Interface – SOFiSTiK Workflow
“Facd” lets you automatically calculate the selfweight of a structure and assign it to
a loadcase. By setting Facd to 1 the selfweight for every structural element is calcu-
lated and will be available in loadcase 1. There is no need to additionally apply this
loadcase as a load to the structure.
To initiate a linear analysis based on your loadcases, you can simply create a list of
your loadcases and connect them to the ASE-module.
20
Rhino Interface – SOFiSTiK Workflow
Now you can simply click the calculate button and see the magic happen. SOFiS-
TiK´s calculation opens up, the modules are calculated and the results are written
in the SOFiSTiK Database. You can visualize the content of your database via “Sys-
tem”:
21
Rhino Interface – SOFiSTiK Workflow
22
Rhino Interface – SOFiSTiK Workflow
You can use mathematical operations (see 2.2.4) to describe this formula in Grass-
hopper:
Grasshopper needs a range of input values to determine the boundaries within the
geometry will be created. In this example the preset of x&y is set to 5. This is what
is happening up to “Series”. If you connect a panel to the output of Series, you can
see that a list of input values is created (range -5 to 5, step interval =1):
You can now either use the distinct mathematical operators to describe your for-
mula:
23
Rhino Interface – SOFiSTiK Workflow
The result is the same. You can visualize it by previewing the construction points
that the output connects to:
The second formula in the project creates an ellipse that will be used as an outer
boundary for the hyperbolic paraboloid:
𝑥² 𝑦²
+ <1
𝑎² 𝑏²
24
Rhino Interface – SOFiSTiK Workflow
You can create clusters to compress complex operations into a single operation.
Double click onto a cluster to open it and visualize the hidden functions. You can
leave via right click in the top left box:
This cluster is used to create a mesh of lines, based on the before created points.
Network surface then creates a surface from these lines. Afterwards Project is used
to image the ellipse onto that surface geometry. Patch is a handy command that
creates a surface in between the boundary of a closed line.
25
Rhino Interface – SOFiSTiK Workflow
A thickness and material is applied to the structural area. The only information that
was added to the structural line is a support fixation, which means that it only carries
support information. The finite element meshing in SOFiMSHC can also be
adjusted. In this case with a max mesh density of 0,1m.
• Loads
Area loads are used in this example. They are applied directly onto an area you
select. This time lists are used to input the Loadcase Attributes. Another difference
to the Steel Hall example is that a “Title” was added to the loadcases that will be
shown in the analysis later.
26
Rhino Interface – SOFiSTiK Workflow
Sidenote: You can access your current file folder by clicking this icon:
This .dat file can then be imported to SOFiSTiK Structural Desktop and be used for
your analysis. A single line of code is necessary to do so (a .sofistik-file with this
input is attached to this example).
Right click and calculate this task to import your up-to-date geometry from Rhino.
27
Rhino Interface – SOFiSTiK Workflow
• Axis Geometry
You can decide how much information you want to add to your Axis. It all comes
together in “Axis Definition”. Horizontal and vertical alignment can be added via Crv.
Sec allows you to add cross section information. Var lets you add variables along
your axis, based on stationing information. Placements are points along your axis,
where you want specific things to happen (in this example supports). Lastly, with Id
you can assign a name to your Axis.
28
Rhino Interface – SOFiSTiK Workflow
Crv
In this project we chose to create the curve, that will define our Axis geometry, via
PlanViewSegment and ElevationViewPoint. PlanViewAxis then converts the input
data into a curve geometry. This way you can create your axis-curve in a profes-
sional, verifiable way.
Sec
SOFiSTiK gives you multiple options to input your cross-section information. The
method used in this project is to import it from a .json file. This simply requires the
file path and name to import it.
29
Rhino Interface – SOFiSTiK Workflow
View Section… creates a preview of the section at the origin point (0,0,0).
Shows the point names when selected.
Plc
Placements are points of interest, that are displayed as reference planes along the
axis. In this case Supports (S at Types). You can assign names, as well as rotate
these reference planes, based on the reference of the axis.
Id
Id simply assigns a four-character name to the axis as an identifier.
30
Rhino Interface – SOFiSTiK Workflow
• Superstructure
At this point the axis carries all the information. There is no volume geometry gen-
erated yet.
“Interpolate Solid” reads the information from the axis and generate the model.
• Substructure
Up to “View Section” the workflow is identical to the cross section assigned to the
superstructure. With one little difference, the reference plane of the substructure
was rotated (Pln of View Section).
With the midpoint of the cross section (“Area”) as a reference a structural line with
a length of 10 is created. The structural line already contains the cross-section in-
formation, as the Id of the section (2) is accessed.
31
Rhino Interface – SOFiSTiK Workflow
A structural point is generated at the end of this structural line and is defined as a
fixed support (Fixation = F)
Lastly, to assign the substructure to their respective supports, you can use “Trans-
form” in combination with “Placement Transform”. As only the transformed structural
lines are connected to the SOFiMSHC-module, only they will be considered for the
structural model (not the original representation at the origin).
32
Rhino Interface – SOFiSTiK Workflow
All these SOFiSTiK operations are based on information coming from the axis.
“Interpolate Curve” extracts a curve from the cross-section information along the
axis. “OO” is the index of the origin point of the cross-section. You can select any
point of the cross section to generate a curve this way (e.g. “D3”). The curve is
automatically split at placements. Assign the curve to “Structural Line” to make it
analytical.
33
Rhino Interface – SOFiSTiK Workflow
• Tendons
Tendons follow the same logic of following the axis with an offset, as the cross sec-
tion.
The geometry definition can be summed up to vertical and horizontal offset defini-
tion, based on the stationing of the axis.
34
Rhino Interface – SOFiSTiK Workflow
The attributes of the tendon must be differentiated between pre- and post-tension-
ing. A construction stage input for stressing and grouting were applied. Additionally,
the number of tendons, stressing direction and sequence, as well as the K-values
can be input directly.
All this information comes together in “Tendon”. It requires a loadcase, with which
the tendon stresses are applied to the structure. The tendons can also be shortened
along the axis, based on stationing.
The SOFiSTiK input is used for analytical properties. You can extract the necessary
information from it to create a 3D geometry with Grasshopper components.
35
Rhino Interface – SOFiSTiK Workflow
• Loads
This project shows how to apply settlement to structural points. A displacement at
the bottom of the structural points, that act as supports. A simple list-based input
and a Type-assignment as “SE” is all it needs.
• SOFiSTiK Output
The respective SOFiSTiK modules are fed with the information from Grasshopper,
that we want to use for analysis. For this project we used another method of export-
ing the modules information. A direct TEDDY-text export to .dat (Text File).
These .dat-files are always up to date. If you don’t give them a specific file path, they
are exported in your project file directory.
36
Rhino Interface – SOFiSTiK Workflow
To use these .dat-files in your analysis, it is necessary to include them in your SO-
FiSTiK-project (see included .sofistik-file)
Every time you calculate these tasks, your Grasshopper output is imported to SO-
FiSTiK and you are all set to do your analysis.
37
Parametric Modeling and Design with SOFiSTiK and Grasshopper









