Is it an Adaptive Component Family and/or list issue? Segmented Glass Canopy

I am a new Dynamo user. This will probably become evident quickly…

My goal is to apply a segmented glass panel system to three canopies for a public pier project I am on. I was recently able to work through a relatively simple truss definition (you can see the purlins following Dynamo curves, below). I figured a similar approach to creating intersecting points would be appropriate to then apply custom glass panels.

Canopy purlins

 

 

 

 

 

 

 
I have tried two approaches and end up with same result. The first is below. This one ends up creating the Adaptive Component Family at one location in Revit model space with about 50 instances. If you look in the image above you can actually see the little blue panel(s) floating out there in model space…
Canopy panels

 

 

Next I tried lunchbox to do the same thing (below). I end up with essentially the same result – panels floating in model space.
Canopy panels_lunchbox

 

 

 

Does anyone have any feedback/advice on how to approach this? I have found similar threads posted on here, but none are quite the same. I would like to avoid going back to Revit and redoing the underlying canopy geometry. This project is on an already stretched budget! Thanks in advance.

Hi Keenan. That looks like a really nice project. You’ve started off well but you have to keep a few things in mind.

If your AC requires four points, you’ll need to provide sub-lists of 4 points to be able to feed the “AdaptiveComponent.ByPoints” node correctly. When you flatten the list of points, an AC with the default family layout will be placed at each point instead.

There are a lot of options to generate points on a surface. You might want to avoid geometry intersection because that could prove to be a bit slower.

Lunchbox is a great straight-forward solution and provides us with another node called “LunchBox Quad Grid by Face”. That will divide your surface into “quads” and provide the necessary sub-lists of points. Give the following a try:

2015-06-25_11-09-59

 

If you prefer using the beam curve’s intersection, a great way to sort the points into quads could be the “Quads From Points Lists” node as discussed here:

http://dynamobim.com/forums/topic/list-joining-need-help/

Dimitar, that is tremendous advice. My AC Family started functioning immediately. Thank you. I acquired and applied the Quads From Points Lists you referenced as well.

I am going to give this another go since the face was created in Revit through a mass and mass void to make the curvy perimeter. I am able to identify the intersections on the curvy perimeter, but of course some of these cells are three point triangles which makes makes my four-point AC fail. This will take some more thought. Thank you again.

I was able to get my AC to work with quad-sub lists, below.
Canopies+AC

 

What I need is to get the definition to ignore portions of sub-lists that do not contain four valid points, since the canopy perimeter is curved. Is it possible to create a definition that can apply two separate AC’s: one AC with three points + one AC with four points? If you look at the image below there are several areas where the curved perimeter requires 3-point triangles (between points 1-2 and 2-3 below).
Canopies+AC Triangle

The definition below identifies all the relevant intersecting points, it’s the application of two AC’s, and the ability to isolate and apply the relevant 3-point/4-point list structure(s), that I need to figure out.
Canopies_intersect triangles

Thanks for any feedback!

Hello Keenan,

What you could do now is evaluate the number of points in each sub list and split them based on that into 3 point and 4 point lists. Once done, apply the appropriate AC family:

2015-06-30_11-04-01

Edit:

Maybe a simpler way to check if a list contains 3 or 4 points is with the “ContainsKey” node. Remember that list indices start from 0, so when we check for a key of 3, we’re checking if the list has 4 or more items.

2015-06-30_12-57-47

Thank you, Dimitar. I was able to get the same result using the the contains key with filter and your code block, but when I plug it into my list it stops behaving. I believe my list structure is flawed by something upstream, despite appearing to identify the desired intersecting points at the end.
Canopies_intersect triangles

 

 

 

Perhaps I should approach intersections differently by identifying them from extrusions? Or maybe I am just missing something within the current graph?

I also tried the List.GroupByKey from the Ampersand Library, but had the same issue with the underlying list structure. I will keep at it. Thank you again.

Keenan - I've been trying to subdivide an irregular surface and group them based on the number of vertices.

See if it serves your purpose. The below example considers a flat circular surface, but it should work with more complex surfaces too.

You could extend it to appropriately assign different adaptive components.

File: SurfaceSubDivision.dyn

20150702-7

Vikram this looks great, thank you. I attempted to integrate it last night and am still encountering same issue with underlying list structure from the intersecting points. I am going to attempt debugging and give it another try. Thank you again.

1 Like

Vikram, I was mistaken! Your node worked perfectly. It gave me goosebumps to see the AC’s populate the surface. Thank you.

I realized I initially had not properly included your code block in the graph, and added a List.FirstItem node. Probably an amateur mistake . The happy definition is below.

Vikram Surface

So one more question. Is there a way to adjust the UV grid?

1 Like

Keenan, The isolines grid seems to depend on the way the surface is constructed. (eg. The definition seems to fail in certain cases where the surface is derived from a sphere) I’ll need to alter the script and approach (to not use isolines) in order to obtain a regular grid irrespective of the geometry of the surface. However, if you want a non uniform grid, you could try the below file in which the input parameters for the spacing is a range instead of a number.

File: SurfaceSubDivision-1.dyn

I’ve also uploaded the same as a node in the Package Manager (Search for Testing Waters - Surface.DivideByIsolineGrid) 20150709-1.dyn

Hi everyone, Just wanted to share the latest on this project with a video I just put together. Thank you thank you thank you again to Vikram and Dimitar. Your advice was tremendous. I could not have moved the canopy structures for this project forward without your help. Link to video, below: https://www.youtube.com/watch?v=bYfo57kKXZg Keenan

1 Like

Glad to have been of assistance.

Nice of you to show us the outcome of the exercise.