algorithmic modeling for Rhino


I need a little hand with a project of mine.

I'm trying to create a diagrid surface that is organized into frames and panels. The panels will be windows and the frames surrounding them will be extruded to shade these windows. The goal is that I could control the depth of the frames at each of the diamonds' 4 points with 4 different numeric sliders. Once this is done, I plan on having the extrusion distance of each point correspond to the path of the sun.

Using LunchBox, I already have part of the solution, but it only controls 1 of the 4 points, and the extrusions are just flat planes without any depth. I'm wondering how I can improve this so that all 4 points can be adjusted independently and the whole panel shape responds accordingly with an actual thickness.

I've attached the grasshopper definition I've been working with and would be glad if somebody could point me into the right direction.



Views: 5309


Replies to This Discussion

:) hope this helps- Ethan


Thanks Ethan, this is awesome! I'm still fairly new to grasshopper so even some of the simple concepts still give me trouble.

I still have a question (for you or anyone else) in regards to the thickness of the extrusions. I am ultimately trying to create doubly angled/sloped extrusions within the diagrid frame as well as a flat offset on both sides of this extrusion. I was easily able to do this in Rhino, but I can't figure out how to create a script that does the same thing. I have attached an image of what I am describing below.

I have also attached an updated grasshopper definition and the Rhino file that contains the 3D model of the above image.

Any help or suggestions would be greatly appreciated!


Try to take your grid and offset it 5 times, then move the middle third one in the direction you want to extrude. then you can make lofts between the pairs needed to form this design. I think when your learning gh its a good idea to do it in rhino first and then the steps taken are how you need to script the algo. your just automating it...If you want to incorporate the previous design of 4 separate adjustable points you can move each vertex of that 3rd curve independently then make a poly line, making sure its closed and use that to make your lofts.

Thanks for the tips. I definitely think it helped to follow the steps I took in Rhino first and then try to automate them. I was able to figure a lot of it out and was even able to incorporate another aspect I was hoping to include, which was basing the panel sizes off of an image using the image sampler component.

But as you can see from the image, I was able to automate all of my Rhino commands in the script--EXCEPT the loft. I've tried multiple ways of lofting in the attached definition but none of them seem to work. The poly lines are all there and they are all closed, but they won't loft... no idea why. In my experiences, it seems as if it is much more difficult to loft lines in Grasshopper compared to Rhino.


your getting there I left some notes. u gotta pay attention to the data trees. use panels or param viewers and make sure data matches in structure...


Wow, the "simplify" setting was super helpful for lofting--as were the other suggestions. I appreciate the help. Data trees are still one of the more confusing aspects for me to understand right now, but hopefully once I get them down I can start helping others out as well.

At this point I think I've mostly got this script figured out. I've adjusted it a little bit to have more control over the offset sizes. The only thing I still want to do with it is to move the 4 control points independently with each panel. So instead of adjusting all of the panels at once, I can control each panel extrusion on its own..... Or to reduce the number of sliders, I might try to setup each column of panels to have its own set of sliders. That way I can plug them into Galapagos and have it make patterns across the surface.

Thanks again for all the help. 


looks great! nice progress. I like the curved profiles. I threw a random number generator into the mix to show you how you might add individualization. The seeds to these random lists could easily be the genes for Galapagos to affect. now you have to think though what will define the fitness?

again pay attention to the trees. I had to flatten the list length component to get the full length of the list but graft and simplify the random numbers to match the data structure of the points. glad I can help! It all comes around as plenty of people on here have helped me tremendously. since these are windows for a facade you might want to look at geco for solar analysis or diva or ladybug maybe. That would be interesting to tie into analysis.  look forward to the progress. keep sharing!


Thanks! I plan on using Ladybug to find the total radiation value of all of the windows panes. I will then use that as the fitness value for Galapagos to minimize. I might even try using Octopus, which is like Galapagos, but allows for two fitness values... and then I could minimize in summer while maximizing in winter.

The random number generator was a far easier solution than I thought I would come across. But I wonder if it's maybe a little too random... after all, the path of the sun is anything but random (although it is varied). Maybe by increasing the range of the seed values I could improve the results from Galapagos. For instance if there are 41 different panels and 20 different possible positions for each point on the panel (via the range slider), would 820 different seed value options for each point cover every possible result?

This would obviously be way too much information for Galapagos to handle on my machine, but I hope simply expanding the range could be similarly effective. I also wonder if Galapagos would have a hard time finding positive trends to reproduce since everything is "random." 

So I think I came up with a more manageable way creating an environmentally responsive facade. After some optimization using Galapagos and Ladybug, I developed 5 different optimized panels to be placed across the surface of a facade. However, I want them to be placed randomly across the surface, and can't seem to get that to work.

I've attached the script I'm using and internalized all of the data. The best I've been able to achieve is a singular profile placed at each point on the surface.

Any help would be appreciated!


This maybe?


And traditionally...


Thanks Peter! Looks great!






  • Add Photos
  • View All

© 2020   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service