I drew a couple of beam sections in Rhino. In Grasshopper, using the Curve component I read in the geometry of those sections (and applied Internalize Data so they could be used without linking back to the original file), and with List Item I’m able to retrieve each one. I then wrapped that logic into a cluster.
However, it would be great to parameterize the sections so that I can assign them different dimensions without having to redraw them manually. How can this be done?
I had the idea of reading the dimensions from a CSV file (I recorded the section properties from the steel catalog into a CSV), but in that case I’m not sure how to actually generate the section geometry, or how viable this approach is. I’d love to hear opinions and suggestions from more experienced users.
P.S. I’ve attached the Rhino file with the geometry I mentioned, the Grasshopper file itself, and the CSV. Profiles.3dm (45.1 KB) Profiles.gh (11.2 KB) size.csv (83 Bytes)
You did internalize the curves well. If internalised, the .3dm file is not needed, for a topic on this thread. All the data is in it.
1a. There was a “null” curve internalised. The original was probably deleted in your Rhino space? I used (right-clik; manage Curve Collection) to delete this one. So the error is now gone.
1b. The merge component is not needed here. You can connect the List-Item component directly.
With the csv files you did some nice things to get the data out in a good way. It can be donen easier. For that it is best to study about: Lists, branches, trees and how to manipulate them (there are nice tutorials for that on line. But it works as you did it
2a. Do not connect components using the Panel component. The panel is used to “read” what is in the list. Best is to connect the components directly. And “delete” the panels you do not need anymore when you are content with the content
2b. The data in the csv file was not clear for me. I can guess that they are measurements of the profiles. But what is what? Give the correct names, so we know what you want.
Then to the main thing: making them parameterized.
Bring those shaped back to the most simple version,. Search for symmetry
The C beam can be done with two “corners” and the I-beam with four (double symmetry).
2 first I did was finding some global measurements of the curves you have made. I used a bounding box, for that.
3 For every variable in the curve (length, width, thickness, etcetera I use sliders in the design stage. You can later use your csv data for that.
Design the “smallest” shape. and mirror it to what you want.
I made something with lots of “spaghetti” as I would have started a project like this. Later simpifly. (for example, while doing this, I thought:
It would be simple to do this with two rectangles on top of eachother with different sizes; fillets; make a surface of the part you want and use solid region to get the curve around this region.
There is a free addon from Geometry Gym for structural shapes called Bullant you can use for many shapes.
You can do this with external files if you want. Those will be exact, but you will need a source to search for standards.
To make it yourself, look for symmetry. I attached a few clusters I made some time ago for you to look at. They are not great, but maybe it will give you some ideas.
I don’t think she wants sliders and customisability as much as the ability to choose from a catalogue within Grasshopper. Or she should be working with blocks within Rhino? I don’t know.
Mark – Identification or designation of the steel profile.
Here’s how you could read from your .csv file and then stream the appropriate data to different definitions. Requires the Human plug-in, and the addition of an extra category “Type” in the second position in order to be able to direct the data stream.
At first, I thought about using sliders to adjust the dimensions, but then I realized that for the problem I was solving it would be more appropriate to pull the sizes directly from the official steel-section tables (those used in my country). So I copied the dimensions for several beam profiles into a CSV file and read them from there into a Python component to generate the geometry (I wasn’t quite sure how to do it purely in Grasshopper, so I went this route). Into that component I feed the beam parameters and a unit-scale factor so that the dimensions display correctly regardless of the document’s unit settings. Incidentally, to make the workflow self-contained (so it would still work even without the external CSV), I also pasted the data into a Data component and used Internalize Data. I hooked up a bunch of Panels just to verify that the values were coming through correctly—those were purely for debugging. In the end, I got exactly what I set out to do.
Thanks to everyone (@Eef_Weenink, @Brad_Shipton, @Volker_Rakow) who shared their ideas in this thread—I’ve reviewed all your suggestions, and the knowledge and inspiration I gained will be invaluable for my future tasks and projects. (P.S. @Brad_Shipton’s clusters are simply fantastic—seeing so many different parametrized shapes really gave me a “wow” moment.) (PP.S. @Volker_Rakow’s approach was the closest to what I had in mind and ultimately implemented— I might even integrate the Human plugin’s Item Selector into my setup.)
I would rethink packaging everything into a single component. If you can, separate your database query and your profile definitions for legibility and reusability reasons. Being able to store your dimensions in a .csv is nice. It’s a more exchangable format that other people can use and revise the database with.