The Randomized Panel Problem

Before moving on to other projects, I wanted to acknowledge all the help I’ve received from forum members over the years by contributing something to share myself that might be helpful to other DynamoBIM learners in the future. I’ve been looking for a project to constrast the abilities of Dynamo and Mathematica 11.3 programming languages for a while now until recently stumbled upon this thread about randomized panels last month that gave me an idea.

Following the real-life example of Sheffield UK’s Cheese Grater parking garage (image from CC credit PeterBarr) I attempted to replicate the geometry of the facade’s randomized pattern. It wouldn’t have been too much more work take the geometry from either into REVIT but for this comparison only the native functionality was considered.


The image above is zoomable but please excuse the lack of annotations. It’s meant more for study than wide distribution or long-term reuse.
A grid showing my early progress. I’m testing the function to see if anything is broken at the extremes.
Dynamo seemed maxed out at about 56x56x2 panels but I haven’t tried to go back and optimize it.

Mathematica 11.3
I’m no stranger to asking for help online.

A grid of some early success. Again trying to stress the function to see if any bugs crop up.

The computing power of Mathematica 11 in the cloud goes a bit further before constantly hanging up the browser at 80x80x2.

These conclusions were also posted on medium but ultimately the main insight I gained from attempting to replicate the same geometry in Dynamo and Mathematica was that Mathematica 11 was superior at developing the abstract math of the panels, whereas direct control of the geometry was better in Dynamo. For example, I was able to create the divided panel points quicker in Mathematica, but then struggled to apply the geometric transformations. In Dynamo, it was more difficult to derive the panel points from the divided surface, but once the panels were created found manipulating them easier. Other’s in the Dynamo community have commented on this feature of Dynamo’s programming limits. I was able to generalize both algorithms so they simply take the desired number of panel divisions as the main parameter to drive the form. One can see the variations created throughout this piece. As a next step — if I wanted to continue to develop the code — it should be possible to take each model into REVIT and assign materials and documentation etc., but left them as is here because I wanted to move onto other projects. Clearly when approaching computational BIM, the wider variety of tools one has available, the higher the chance a better tool for the job can be found, and this all feeds in to raising the final building’s design quality.


You indicated that you ran the Mathematica version not on your system but in a cloud. Did you consider running this in Fractal instead of your local machine to test any gains there?

Depending on the overall approach, you can definitely scale this further. Here’s my take on this. Rendering a 120x120 point grid in Dynamo takes a bit under a minute and the slowest part is rendering the surfaces. If you use just polygons, it’s pretty much instant:

Sending that over to Revit however would be a very slow process. It’d be a lot easier to represent it as some kind of a parametric panel.

played a bit more with this and made a version that uses vector map and produces a unified mesh as the output. That can scale to over a 50k rectangles in a few seconds:

and for the curious, revit did not complain at all when I tried to import the mesh as a tessellated shape and was surprisingly speedy :slight_smile:

ending up with a very reasonable project size too:


I haven’t done any optimization in Mathematica either. I was really focused on the proof-of-concept and then curious to move on to other projects. Optimization of these programs is such a specialty in my opinion, but also a necessity if one is hoping to use them on larger jobs. I’m sure I could squeeze more panels out of each function if I went back and reworked some of the code. Definitely plan to work with fractals in MMA in the future.

I had actually wanted to use an adaptive random panel but knew I would run out of free time. I need to think of a fun adaptive family project with dynamo too.

Ah, was referring to project Fractal or the ‘send to web’ functions of Dynamo studio, but I see how utilizing a fractal pattern for reducing the computations could also help.

Oh project fractal. I didn’t know that was a capability of it (computational support). The only demo’s I’ve seen all have to do with optimization and design prototyping for multiple options. I will have to check that out.