[Question] Adaptive Panel onto Conceptual Mass



























































Hello there.

I am having trouble trying to ‘flow’ a custom made adaptive panel onto a simple conceptual mass.

After hours of struggle, I was able to get the panels to actually go on the mass, but I still can’t get it to work properly.

I’m guessing arrays, lists and logic that I’m not getting quite right. Please help!


  1. REVIT mass that I’m using

  2. REVIT panel that I’m trying to ‘flow’ on the mass


  1. DYNAMO: script

  2. DYNAMO CUSTOM SCRIPT: Grid to Quads that I’m using


Looks like there’s something off with the row count you are feeding into the quad component.

Alternatively, use the script below - but you’ll need package Clockwork to run it.

In any case, I would suggest you place your components by UV not by Point, that way they will inherit the correct orientation from the surface (i.e. surface normals).


And here’s the DYN file: Quadrilateral


Apologies for teaching grandmother but you know you can ‘flow’ your (pattern-based) adaptive component onto your mass using a divided surface in Revit, without using Dynamo at all?

Adaptive Panels


Thank you for your input. Using divided surface in Revit is how I started, but I wanted more controls (potentially) with the panels.



The DYN works flawlessly. Thank you very much for this simple and elegant solution! Clockwork is quite amazing.

May I please ask you one more question -
What will be the best way to control the parameters (angle and depth) of the panel across the mass?
Ultimately, I’d love to have North and South sides to have smaller aperature, and East and West sides to have larger aperatures.
The size of the aperature can be controlled with angle and depth of the component I made (shown below).

Again, thank you so much :slight_smile:

panel configs



Here’s one way of doing it:


In a nutshell: compute the average surface normal for each panel (based on the respective placement points), compute the horizontal orientation of each normal (a.k.a. azimuth) and write that into an instance parameter of your choosing. (It’s really a matter of preference how much intelligence you put into the family, i.e. is there a formula inside the family that will interpret the azimuth angle and convert it into a geometry-driving parameter or are you doing that in Dynamo already.)

Please note that that is how the graph should look. However, the Vector.AltitudeAndAzimuth node is not running properly on recent daily builds (here’s why: https://github.com/DynamoDS/Dynamo/issues/3106). It is not processing lists correctly, so we will have to make it process each element in a list separately by using a List.Map node like so:


P.S.: The Vector.Average node is a new addition to the Clockwork package, so you might have to reinstall it. There used to be a built-in node called Average XYZs but it seems like it didn’t get migrated to 0.7 …

I’m trying out the Vector.Average nodes, and I have a good feeling.