If you are new to Grasshopper or new to the Geometry Gym tools the following information will be helpful in helping you understand how Geometry Gym works and integrates with Rhino and Grasshopper. This section with go through some of the background on:
Understanding how a structural model is generated within Grasshopper when using GeometryGym components.
How to work with typical Structural Objects including casting and decomposing
When going through this section it would be best to have a small example open to follow along on what is occurring when performing different operations.
For any structural analysis application there is typically a database (or bunch of lists) which define the different aspects of a structural analysis model and how they interact. For example, you will have a list of materials, a list of structural section properties and a list of elements etc.
Typically to define a curve element in your analysis model you will have to:
Draw a line.
Define a section property by selecting a section profile from a library and also selecting a material from a list of materials that you have likely also created.
Select that section property to assign from your list of defined section properties.
Once you have defined that element in the model two structural nodes are automatically generated so you can start to connect other elements to it and so on.
Geometry Gym allows you to do the exact same thing using Grasshopper by allowing the user to create these objects using components and then define thier relationships through visual programming (known as wiring). I will use this example and the image below to explain how this works. The image below uses the ggEtabs plug-in components.
When a Geometry Gym component relating to a structural concept is added to the canvas, for example, a material component, that component creates the material and automatically sends it (in the background) to a 'Virtual' structural analysis model. Basically, it is adding the created material to a list of materials in the model, similar to if you were creating a material in an analysis application. If another material component is placed onto the canvas that material will also be added to the list and so on.
When a Section(or Frame) property component to the canvas a similar process occurs. Once the required inputs are provided, in this case, the material and a catalogue profile the generated property is added to a list of section properties along with the relationship between the material and the section property defined by the wiring.
Finally in order to create the element bring a CreateFrame component onto the canvas and provide the required inputs. In this case, a geometric curve which I have referenced from Rhino and the created property. This component then sends the 'Structural Beam' to a list of elements in the Virtual analysis model. And as you will see two structural nodes are also generated in the model.
It is important to note that the input geometric curve that is referenced in the create frame component is not apart of the analysis model, it simply defines the Beam axis. To demonstrate this, swap the input curve with another referenced curve. From the image below, there are two curves avaliable but still only one beam in the structural analysis model. However, the previous relationships defined between properties and materials are not lost. This is the power of Grasshopper!
You can test and see how this works by dragging a model decompose component onto the canvas. This is a handy way to keep track of the model as it is built up. The image below shows how different lists are built up as components are added or deleted from the canvas for a particular structural analysis plug-in.
Because the model is virtual you can assess model information without neccesarily needing to feed data through a wire into a component. The ggDecomposeModel component provides the ability to retrieve all the information which is stored in the virtual structural analysis model. Basicilly extracting the lists different materials and properties. It is a very helpful way of retrieving model information without having to back-track through a script to see where that object is being created.
In programming, casting refers to changing an object type to another data type or another 'available' representation of that object. Grasshopper allows this in an efficient way by allowing a developer to set which types of standard Grasshopper objects a Geometry Gym object can be cast/converted to. The simplest form of this is outputting of any Grasshopper component parameter to a panel component. This basically provides the string (or text) representation of the object.
One of the benefits of Geometry Gym is that it allows a number of castings from structural model information to allow the user easy access to Model Database Information (Primarily Geometry representation) and other information in a smart way.
Some typical casting that Geometry Gym allows in Grasshopper:
Profile outline to a Grasshopper Curve (Located at 0,0,0 on XY Plane)
1d Structural Elements to Grasshopper Curve (Member Axis)
1d Structural Element Grasshopper Integer (Member ID)
1d Structural Elements to Grasshopper Brep Representation (Member Geometry)
2d Structural Elements to Grasshopper Surface
Building Story Level to a Grasshopper Plane
Structural Object to Grasshopper Integer (Representing the ID of the Object in the Structural Analysis Model Database)
Being able to cast objects is very useful when trying to group or 'dispact' and structural elements
Like the model, structural objects can also be decomposed into the parts which define the object and this can also be using for managing or dispatching structural data. For instance a Beam can be decomposed to provide output of its component parts such as the property, structural ID, axis curve and orientation plane.
Notice from the image below that the object can be decomposed by wiring the Frame decompose component from where it was created OR from the list of frame elements provided from the model decompose component.