Category Archives: Value

Edvard Munch and Bad Monkeys

Original post at

There’s a building being built in Oslo right now. It’s going to be the new Edvard Munch museum and it’s a high profile project in Norway. It is designed by Spanish architects Herreros Arquitectos who have collaborated with local office LPO arkitekter. One of the guys organizing the construction process of the new Edvard Munch museum is Øyvind, and he’s a really nice guy. One of the reasons why I like him so much is that when he has problems with his building information modeling tools, he picks up the phone and calls the Bad Monkeys. Just like he did last year.

Last year Øyvind needed to coordinate the manufactured façade panels with the intended designed panels. The façade manufacturer Skandinaviska Glassystem (SGS) modeled all the panels for production in 1:1 (think LOD in Solidworks and the architects designed the building in Revit. Solidworks could export IFC that Revit could link, but the panel models were not referenced to the building coordinates because they were modeled for production.

Jakob, one of the brilliant engineers at SGS, exported 300 IFC files, barely covering the base of the building. Along with the IFC-files, which were totaling more than 1.5 GB, he mapped the placement and orientation of each part with Grasshopper and produced an Excel spreadsheet with file names, coordinates and vectors corresponding to each panel type’s intended location and orientation. Most of the IFC-files were repeated multiple times across the façade. For this small part of the building Øyvind needed to coordinate 3000 highly detailed façade panels with an already extraordinary amount of architectural, structural and technical BIM data. So he called us. Really nice guy.

Jakob Brusewitz at SGS mastering Grasshopper during a meeting with Øyvind and others.

I got Dimitar Venkov on board and we started working on a Dynamo based workflow. I’ll spare you the details, but in short we created one Dynamo script that grabbed all the IFC-files in a folder, mapped and copied them around by file names, coordinates and vectors, directed by the Excel spreadsheet. Dynamo then imported the IFC geometry and pushed it to Revit as Direct Shape elements, using the same type of geometry that Link IFC utilizes. Using this lightweight geometry was the only way we could think of bringing to Revit without melting all computers trying to work on the models.

Nice guy Øyvind Børstad from ÅF Advancia mastering Dynamo with his eyes closed.

All the imports worked perfectly, and even though we had to minimise any visual fidelity in the views showing the imported data (no anti-aliasing, no shadows, only Shaded with no edges, and so on), the project team could perform pretty high detailed quality assurance and coordination between the design and fabrication models.

If you want to be a nice guy, like Øyvind, give us call. We’ll make your computer fly and teach you how we do it.

Official site of the building:

Animation showing how the building is intended to be:

Autodesk show casing how local architects at LPO work with BIM: (You can see Øyvind on site at 2:19)

Close up of “Klumpen” – a 40 MB IFC file no bigger than a football.

Close up on one of the corners.

Revit model after import. 2950 highly detailed IFC imports, automated with Dynamo by Dimitar Venkov.

Øyvind and me at the top of the slip forming right before Christmas.

Bad Monkeys

I am a Bad Monkey. So is Julien. And Andreas. And Konrad, Dimitar, Adam, Brian and Marcello. Even Huyn is one although it’s hard to tell. We have a webpage. It’s at and is as volatile as we are.

I like being a Bad Monkey. I like having other Bad Monkeys watching my back. They do, you know. Every time I try to fuck up something in Dynamo, they pull me out of the failure and guide me on the right track. Every time I n00b around in Grasshopper, Konrad stretches his long arms over The Atlantic and points me in the right direction. Every time I challenge my geometry skills in Dynamo, Dimitar reaches out from his tree in Singapore and rains his magic on me. And every goddamn week when I try to do any type of generic computation or list manipulation, The Machine Himself Dynamo Grand Master Bad Monkey Andreas Dieckmann descends from the skies with his cape and shy smile to rescue me from certain doom.

One dark and slow morning a while ago Aleksandra came over to my desk and asked about the best way to number more than 600 rooms in the project we were working on. The coffee was still warm, and I already sensed it was going to be a good day. The way room numbering sequencing worked in France, where our project was located, related to both Level, Department and Grid location. That meant a room on Level 3, with Department ID 9 and located as the second room of that department between Grids 3 and 4 (read left-right, top-bottom) would receive the Room Number 3903-02. After some thinking I told Aleksandra that this could be automated with Dynamo and I could do it. My coffee hadn’t started cooling before I began worrying about my response. Even though all the data I needed was available in the Revit database, I had no clue how to do it. My first two tests were promising, but by the time I got around to iteration three and four I started thinking that I had to write each piece of data to temporary parameters, and then pull the temporary data from Revit and combine them in Dynamo to write one Room Number parameter.



Just after the morning with Aleksandra, I flew to Budapest to meet Monkeys Julien and Andreas. First thing they said when I laid my stress upon them was “Hell no, do this in a smart way by sorting all that data automatically”. “Okay….” I responded, nervously scratching hair that started to fall off.

The following week, less than 3 days before deadline, I woke up to a message that brought the biggest smile to my face and all my hair back. “Check your email. Andreas.” I rushed to work, grabbed a new coffee, opened his Dynamo script, copied the parts I was missing, ran the definition and watched in confused disbelief as all the hundreds of rooms got perfectly numbered according to all possible French rules. By that time Aleksandra had been putting her impressive Revit skills to better use on important design tasks, and I had all day to work on the facade, where I used Konrad’s free software for Grasshopper data linking and Julien’s free software for cutting thousands of Nested Families.




Download Andreas’ script if you want to try for yourself: RoomNumberingByLevelGridAndYPosition

The Bad Monkeys made a Snøhetta design much better. They made an owner’s building more complete. And they helped Snøhetta employees, including me, sleep at night. For free, during their spare time.

I think the Bad Monkeys are so awesome that I am embarrassed to say it. I’m thinking “Am I exaggerating how awesome what we are doing is?” I don’t think so.

Last spring Konrad sent me a book. He wanted me to read Adam Grant’s ‘Give and Take – Why Helping Others Drives Our Success’ after he saw a blog post I wrote about my former boss Christine on how we shared knowledge and content when we worked together. The book explains with astonishing examples and scientific evidence how people throughout history has benefited from helping others, with no or little regard for their own success or personal gain. After finishing the book, I felt more confident than ever that the future of the world holds great promise for all the beautiful people who help each other every day. The world will be shaped by the givers, not the takers.

I read another book last year, The Martian by Andy Weir. (Thanks Ian Keough and Matt Jezyk!) Hopefully without spoiling the story for anyone who has not read it or seen Matt Damon on screen, here’s a beautiful excerpt for the final pages:

“If a hiker gets lost in the mountains, people will coordinate a search. If a train crashes, people will line up to give blood. If an earthquake levels a city, people all over the world will send emergency supplies. This is so fundamentally human that it’s found in every culture without exception. Yes, there are assholes who just don’t care, but they’re massively outnumbered by the people who do.”


It’s pompous, I know. But it gave me goosebumps. Our group of monkeys grew from a community of people who enjoy helping others. I feel that we are a small part of a new connected world where people help each other regardless of business, discipline, department, company, country, culture or continent. Maybe we will realize that the old way of thinking about company knowledge as a secret asset that has to be safe guarded, hidden and protected will give way to an idea that every company, employee and client will prosper if we all help each other a little more.

Here’s a huge THANK YOU to the Bad Monkeys for being awesome. You guys rock.




“The only way to discover the limits of the possible is to go beyond them into the impossible.” – Arthur C. Clarke

Three months ago I started working at Snøhetta. On day one I was introduced to a project that a team of architects were already working on. The facade team on the project needed some assistance, and I started working on the outer skin.

I have never been this consumed by a project before. I have not done a single training session at my new company; not even a short presentation. I have done some external work, but at Snøhetta I have only worked on this project. It’s the coolest thing I have ever done. Here’s why:

The entire outer skin is a first class exercise in amazing visual programming and scripting for building information modeling and interoperability. Below follows a step-by-step recap of how the final result was produced. The summary excludes many of the mistakes I made, not out of pride but simply because the blog post would be too long.

When I started looking at how to model this facade in Revit, I didn’t know how to do it. It seemed impossible. I had some ideas, and fantastic people to help me, but the amount of components and data, rigorous placement and orientation rules, types and geometries, in addition to an insane amount of custom cut elements along multiple curved edges overwhelmed me with fear of failure. Today, looking back, I realize I had no reason to be afraid. Now I know what you can do with remarkable people around you, access to awesome customization and scripting tools and a little Revit skills.


The facade team line-up was composed of Peter French the dancing New Zealander; Luca Bargagli a tall and dark Italian facade engineer with a history in Paris and a perfect name for chanting; Rikard Jaucis who left just after I started, only to return for the post delivery party; and me. Peter had already worked with Rikard on the concept, and after a few short discussions we decided it would be beneficial to develop the entire facade in Revit, together with the rest of the building. Peter was the mastermind, Luca made it work, Rikard had been on the project since we started working on the competition, and I modeled the bastard. I am proud to say that apart from modeling family geometry in Revit, I did not manually place or manipulate a single family instance in the entire outer skin. It is also with great satisfaction I can state that neither Peter nor Luca had ever been in a Revit model before, and as the deadline approached both were making changes and synchronizing them in a large and complex worksharing environment. I’m impressed!


Base Geometry

The out skin geometry was developed in Rhino before I arrived, possibly by Rikard. The building shape deserves a blog post on it’s own, but in essence it’s a collection of 8 open surfaces. Two are vertical, three are straight but tilted, one is spherical and hence double curved, and the last bastard is a conical nightmare from the underworld.

Rhino Surface Facade Model

Rhino Surface Facade Model

Having the base geometry in Rhino was perfect. I loved working with the surfaces in a true 3D CAD program, while creating relationships between geometries in Grasshopper. We could have done a better job at synchronizing coordinate systems at an early stage. For some reason, this is always a problem on projects. I don’t understand why; it’s really simple to set up Revit and Rhino projects to follow the same basic coordinate system rules, while maintaining different settings for export (with Survey Points in Revit and Export with Origin in Rhino, for instance). What I always do: use the same model rotation and keep all that shit as close to the same local origin as I possibly can.

Facade Design

The facade was a double facade, with the inner skin a simple climate curtain wall. The outer skin was set up with two 6 mm thick glass plates (Motherplanks), 1.34 m wide and 305 mm high, glued together and fastened to the inner facade with steel T sections spanning between the floors. On 50 % of the Motherplanks we glued glass C channel profiles (Reglits) with 4 different surface treatments, 4 different lengths, placed at different sides of the Motherplanks and flipped. On 33 % of the non-flipped panels we sandblasted the backside of the Motherplanks where the Reglits were placed.

All beautifully randomized.

Because of the location of the inner facade mullions and T-sections, and the fact that all floors were perfectly horizontal (they usually are, aren’t they?), the panels needed to be placed at exact locations. That meant no standard UV Grid Tool could be used, and we had to create the facade grid ourselves. The only way we could do this was creating intersections between the facade surfaces, an array of horizontal Planes and vertical surfaces extruded from the vertical Mullion Grids. This only became apparent after we had failed with Surface Split for a few days. I was getting help for both Dimitar Venkov and Konrad Sobon to split the facade surfaces to multiple small surfaces, planarize all the surfaces and then extract the vertices for Adaptive Components placement. We had to discard that workflow for two reasons: Surface Split in both Dynamo (thanks Dimitar!) and Grasshopper (thanks Konrad!) is extremely slow. So is Adaptive Component placement and modification in Revit. Hence we decided to go a different way, and that turned out to be a wise choice.

Peter took charge one morning and called our Innsbruck office. Patrick Lüth and his colleague Andreas Glatzl answered the phone and we immediately began discussing working with panel center points instead. Panel center points naturally work well with one-point Generic Model Revit families. These families are also faster than other Revit elements (like Adaptive Components for instance) and easy to standardize with Type Parameters.

Andreas Glatzl (smart guy)

Andreas Glatzl (smart guy)

Andreas is pretty comfortable with geometry and lists in Grasshopper (heavy understatement there). With his scripting skills we were able to extract all panel center points and vectors, while also differentiating between the different facades and also edge and interior panels. We calculated the horizontal and vertical panel rotation angles between each panel normals and the Unit Y and Z Axis vectors in Grasshopper, and linked all these numbers along with the X, Y and Z coordinates of each panel’s center point to Dynamo with Mantis Shrimp.

Andreas Glatzl's Grasshopper Script for extracting all panel center points and vectors

Andreas Glatzl’s Grasshopper Script for extracting all panel center points and vectors

Panel Center Points and Vectors live linked to Dynamo with Mantis Shrimp

Panel Center Points and Vectors live linked to Dynamo with Mantis Shrimp

I suspect Konrad is getting tired of my praise, as it seems every time I present any work on Dynamo these days I hail his Mantis Shrimp Package. I don’t care. It’s pure awesome.

Revit Families

To be able to control the amount of panel types, we had to create a system of nesting families. The Motherplanks were created as simple Face Based Extrusions with Shared Length, Width, Height and Material Parameters. The Reglits were also Face Based, but Sweeps based on predefined Profile families, also with Width, Height, Length and Material Parameters. In addition we needed an empty family for panel instances with no Reglit. All families were constrained to the tilting Reference Line, and in addition the Reglits were constrained to an offset Reference Line for changing the placement sides with integers.

Panel Angle Parameter Changes animated with Dynanimator and GIMP 2

Panel Angle Parameter Changes animated with Dynanimator and GIMP 2

Both the Reglit and Motherplank families had a Flip Parameter (yes/no) that changed the panel facing orientation from convex to concave.

Last, the Sandblasting was added as a separate Face Based Family with a 0.8 mm thick sweep, inheriting the Length Parameters of the Reglits and the Height Parameters of the Motherplanks, with it’s own Material. We also linked it with a Visibility Parameter (yes/no) so that we could turn it on and off with Dynamo.

All 29 Types animated with Dynanimator for Dynamo and GIMP 2

All 29 Types animated with Dynanimator for Dynamo and GIMP 2

Panel Facing Orientation animated with Dynanimator for Dynamo and GIMP 2

Panel Facing Orientation animated with Dynanimator for Dynamo and GIMP 2

Panel Sandblasting animated with Dynanimator for Dynamo and GIMP 2

Panel Sandblasting animated with Dynanimator for Dynamo and GIMP 2

It’s a beautiful thing, and you can download a copy here: _panel (I often use underscore in the file names of the Revit Families I use in Dynamo. It makes them easier to locate.)


Once all the points and numbers (angles) found their way into Dynamo it was only a matter of copying and changing file paths to extract all the data we needed to place panels on all 8 facades. There is a Dynamo node that will horizontally rotate a family instance, and we used that to align all the panels in plan. The vertical rotation had to be done with an Instance Parameter, changing the tilt of a set of Reference Lines in the panel family, and thus tilting the Nested Families.

Mantis Shrimp linked 22576 points between Grasshopper and Dynamo, and eventually the latter placed and rotated an equal number of Revit families. That works when you do everything right the first time. I never do, and quickly found that I worked much more efficient when I built isolated facade surfaces, one at a time. That way the script ran much quicker, and I could do modifications to the scripts after generating each facade. Doing this with Dynamo 0.8.2 presented one huge problem: Element binding. When Dynamo creates a Revit Element (with a Revit Element ID), the node that performs that interaction will remember the ID of the element it created. This means that when we de-wire that node, Dynamo will delete the same element. This is designed for obvious reasons. The Dynamo Development Team wants Revit as synchronized with Dynamo as possible. So, when placing families on Facade 2 after using the same node for facade 1, we had to select all the generated families, Cut them to Clipboard (Ctrl+X), de-wire the placement node, Run Dynamo and finally using Paste to Same Place. When Dynamo runs and finds no Element ID’s (because they are deleted and copied to clipboard), the program will forget the elements. I have hopes that Dynamo comes with a Bake functionality on nodes that creates Revit Elements in the future.

Dynamo writing rotation and ID parameters to Revit Panel families

Dynamo writing rotation and ID parameters to Revit Panel families

Dynamo Nodes for panel placement on one facade

Dynamo Nodes for panel placement on one facade

Entire Dynamo panel placement definition

Entire Dynamo panel placement definition

When placing the panel families, we placed a simple panel with no Reglits. After all panels were placed, we developed 4 Dynamo Scripts that in turn:

  • Randomized 50 % of all panels to 28 different panel types. As mentioned above, these types varied between 4 glass treatments, 4 sizes, where 3 sizes had 2 different placements. The math goes like this: 4 materials * ((3 sizes * 2 sides) + 1 size) = 28 types.


  • Flipped the orientation (from concave to convex) of a randomized 50 % of the panels with Reglits.


  • Added Sandblasting on the backside of the Motherplanks where there were Reglits, on 33 % of the concave (flipped) panels. All the randomization scripts used versions of Nathan Miller’s Lunchbox nodes.


  • Cut (with Cut Geometry) all the Nested Families in all the Edge Panels with giant Closed Polysurfaces from Rhino, exported to SAT, imported and exploded in Generic Model families, Voided and loaded. This workflow used Julien Benoit’s Dynamo Package SteamNodes for cutting, and Jason Andersen’s BlackBox for collecting and organizing Nested Families.


That last procedure was dirty. Adding thousands of Cut Geometry relationships between Nested Families and imported and exploded SAT voids smells like trouble. It did work on this delivery, but it also did bloat the Revit Project file from about 30 to about 100 MB. It was awesome when we made it work, but I would not uncritically recommend the workflow on every design case.

Close up of one of the crazy corners

Close up of one of the crazy corners

Complete Outer Skin Model in Revit

Complete Outer Skin Model in Revit

Facade Section

Facade Section

Complete Revit Model

Complete Revit Model

I have done several presentations on visual scripting with Dynamo over the past years, and every time I do one, I talk about the existential pleasure of watching a computer work while you drink coffee and watch with a moist grin. The exercise above is the purest version of this phenomenon I have ever had. It was pure joy.

Sometimes we forget how lucky we are. When you get to overcome the seemingly impossible, with edge cutting technology that makes your heart beat on a complex, challenging and beautiful building project together with fantastic people, you should smile. Now, I do.


Learn Dynamo


There are hundreds of ways you can learn Dynamo. My good friend and mentor Julien Benoit at Groupe Legendre teaches his colleagues every day. Dynamo is so integrated in his team’s project that they have to. For many of us this is more a case of playing around until we find relevant problems to solve. I have three main categories of ways to learn Dynamo.

First, use the resources on and They include video and written tutorials that cover basic and advanced procedures of computing and automating data. Simple exercises like form creation, parameter manipulation and Excel interoperability are perfect introductions to understand what kind of magic you can pull on your colleagues and clients.

Second, interact with the community. Like many new, free open source programs Dynamo has conjured a fantastic community of people who help each other every day. Guys like Dimitar Venkov and Andreas Dieckmann have done miracles teaching people how to solve their own design problems. Actually Dimitar has two live Code Blocks in critical workflows on my current project at Snøhetta, and I would have gotten nowhere without Andreas’ Clockwork Package. The same goes for Konrad Sobon who created Mantis Shrimp that allows me to move data between Grasshopper and Dynamo, something I do on a daily basis at Snøhetta. Adam Sheather made Dynaworks, a Package that Julien uses to move clashes between Navisworks and Revit in his own workflow. All of these were developed for free under open source licensing. That’s the result of a community of people who like to help others.

Last, arrange courses. When I worked at Dark we asked Nathan Miller to fly from Omaha to Oslo to direct a three day training session. Nate came, and I invited BIM specialists from other companies in Oslo to split the cost. I personally made leaps in understanding computation during those three days. Let me know if you want to set something similar up for you and your colleagues. I can deliver introductory curriculum and pretty advanced architectural design with Dynamo. I can also get you in touch with people like Julien, Andreas and Nate who are on a completely different planet when it comes to advanced topics. As a sidenote to that, Andreas’ topic for his Dynamo class at Revit Technology Conference Europe 2015 in Budapest this fall is Automate Automation. No? He basically has Dynamo run multiple Dynamo definitions in multiple Revit sessions at any time. It blows my mind so hard that I need alcohol and nicotine to not pass out.


“I am too busy. I have no time. All the deadlines. Bu-hu.” We all have time, we just use it differently. I make Dynamo-time when I’m alone at nights (yes it does sound a bit dirty), or sometimes when my wife is working. I also make Dynamo-time at work, and constantly try out stuff that often breaks. When it works, I make awesome. And catch up all time spent. Usually.


Because then you decide what happens.

30 years ago design professionals started drawing lines, text and hatched areas on computers instead of paper. Then 10 years ago we began modeling information in 3D databases. But the operations were not vastly different. Draw, move, rotate, copy. From now on we will start programming information. For coding n00bs like myself visual programming software like Dynamo and Grasshopper are perfect introductions. Building designers need to start making our own software to understand how our components interact, how they perform and to feel greater ownership to our own processes as designers.

To finalize, some images of our latest work at Snøhetta. Facade components beautifully placed according to inner facade mullion and framing placement, and randomized with 4 different sizes, 4 materials, approximately 50 % flipped and “some” of the flipped panels sandblasted. Totally 64 different types. Plus the cut corners, of course. All Dynamo and Adaptive Components.

Fully Clothed

Fully Clothed

Half Naked

Half Naked



Close Up

Close Up


Dynamo in Oslo and Copenhagen

“What is the coolest possible thing we can do?”

Lars Robertsen at Autodesk asked me that question two months ago. I responded “Well that would be having Julien Benoit, Andreas Dieckmann, Matt Jezyk and Dieter Vermeulen come to Norway to show of amazing Dynamo material.” I have to admit that Zach Kron was on that list as well, but I´m sure Matt will do just fine without the Barry White of BIM at his side.

My friends are coming to meet you. Seats are limited, so hurry up. If you are using Revit, you need to learn Dynamo. It´s as simple as that. And you will struggle to find a better lineup of people to teach you. This is the A Team. (Sorry for the lack of humbleness. I have decided to stop using that for a while.)

The events are all free, and are the results of a collaborative effort between Dark Architects, Snøhetta, Autodesk, C.F. Møller and Multiconsult. It´s a beautiful thing when people just get together and teach each other stuff.


Copenhagen August 26 Event

Oslo August 27 Event

Thanks to Julien, Andy, Matt and Dieter for coming, Cathrine Mørch for hosting, Jill Nilsson for organizing and Lars for asking an awesome question. See you all there!

Learn Revit


“Can you make a basic Revit video tutorial series for me”, Rodrigo asked.

“Of course.”

I did. It’s out. You can listen to my ranting at

Margarida Jeronimo Barbosa at Dark helped me so much making this course that I’m embarrassed to admit it. Great work. Thank you<3

I also owe big thanks to the team at Dark and Zinc who I worked with on this project: Jeanette Norin, Caroline Stokkebokjær Hjelseth, Kaja Kittang Kvande, Christine Grape and Ida Stople. I wrote about the project in the blog post A White Sheet.

The main reason I wanted to help Rodrigo and his friends at Think Parametric is I really like their Rhino and Grasshopper courses. I’ve also come to find many interesting design workflows integrating the four programs Revit, Dynamo, Rhino and Grasshopper. I believe Think Parametric’s computational exercises combined with building information modeling knowledge offers many interesting building design solutions.

At RTCAUS I used several examples of moving data between these four programs and letting each of them use their own strengths. I plan on doing more of the same at RTCEUR. And who knows; maybe one day you’ll find a video tutorial on the same topic at Think Parametric?

RTCAUS 2015 Top Ten and Material


One Saturday not long ago I woke up with a punch in the gut. I had snoozed the alarm and overslept. In a few minutes I would stand on a podium on Australia’s Gold Coast, in front of a large audience giving a 75 minute talk on visual programming and building information modeling. With no shower or breakfast, only a short chat with Steve Stafford (that’s nutritious mental breakfast, but still no shower), I went on stage and delivered what was later announced the single best presentation at the entire conference. An hour later I presented the third best session.

Check out the entire list of Top Ten Speakers.

I was also thrilled to read Jonathon Dutton’s feedback earlier today: Post RTCAUS Feedback. Jonathon writes:

“The first Dynamo script I wrote after RTC used our excel project planning file to populate a Revit project with all the proposed drawing sheets – even selecting the appropriate title block and naming conventions. Following this, I wrote a script which placed all my precast panel elevation views on sheets. This saves my company enormous amount of time, which allows our team to focus on more challenging problems rather than work on boring and repetitive tasks.”

If you want to download and study the handout material that helped Jonathon overcome Death By Repetition, please do so from my Workshop page RTC AUS 2015.

Thanks to Margarida Jeronimo Barbosa for help with the content, my company Dark Architects for freedom and inspiration, Stephen Melville for optimized truss sample file, Konrad K. Sobon & Andreas Dieckmann for awesome software, my buddy Arnfinn Aas Eielsen for mental build-up and Adam Sheather (who also had two top ten sessions!) for hanging out with a guy who hadn’t showered.

Adam and me paying attention during the Construction Stream Wrap-Up Forum

Adam and me paying attention during the Construction Stream Wrap-Up Forum. That’s what no-shower hair looks like.

Here’s Stephen’s truss optimization linked to Revit. I showed this at the end of one of my presentations. Rhino, Grasshopper, Kangaroo, Galapagos, Mantis Shrimp, Dynamo and Revit in beautiful symphony: