Step 4 · Adaptive Components
Restructure the point sets into sub-lists of four and place dynamic adaptive components in Revit.
Overview
Create a new data structure — a list of lists where each sub-list holds the four points for one adaptive component, sequenced to match the component's adaptive points — then use Dynamo's Revit node library to place the components. By the end of this step you will have:
- Created the data structure of points required for the adaptive components.
- Placed the adaptive components using Dynamo's Revit node library.
You'll need the sample family. Step 4 places the Bimorph adaptive component, so make sure it's loaded into your Revit project first.
Download the adaptive component (.rfa)Objective 4.1: Build the data structure
You need a 2D list (a list of lists) where each sub-list contains four points in the same order as the component's adaptive points. Most of the work was done in Step 3; here you restructure those point sets into the required arrangement.
First, flatten the pointA, pointB, pointC and pointD sets with the List.Flatten node. Flattening collapses a list of any rank higher than 1 down to a single 1D list, which simplifies combining the points. Place four List.Flatten nodes and connect each point set's List.DropItems output into one.
Flatten each of the four point sets to a 1D list.
To build the sub-lists of four points, use the List.Combine node. Place it and use its + button to add input ports to match the number of List.Flatten nodes, then connect the flattened outputs into those ports. Order matters — lists are ordered collections, so the inputs determine the order of points in each sub-list.

The comb input takes a combinator — a function telling Dynamo which node to apply to each set of items. Because we need to build new lists of points, use List.Create as the combinator.
Passing a node as a function. To use a node as a function, give it no inputs — an unresolved node returns its own function, and that's what you wire into comb. You must also match the combinator's input count to the number of list inputs: increase the List.Create inputs with its + button so they match List.Combine, or the node will fail.
Place List.Create and connect it into the comb input of List.Combine. Dynamo maps the combine inputs to the function, producing the required data structure: a list of lists, each with four ordered points aligned to the component's four adaptive points.
The combinator builds sub-lists of four ordered points.
Objective 4.2: Place the adaptive components
With the family loaded into your project, add the Family Types and AdaptiveComponent.ByPoints nodes from the Revit node library. In the Family Types node, select the Bimorph adaptive component from the list, and connect it to the familyType input of AdaptiveComponent.ByPoints.
Next, connect the List.Combine output into the points input of AdaptiveComponent.ByPoints, and group the nodes.
If every step has been completed successfully, Revit now shows a double-curved roof structure built from adaptive components — one you can control dynamically from Dynamo. Try moving the controller point or rotating the coordinate system and watch the whole roof respond.
The finished parametric roof, driven live from Dynamo.
That's the workshop. You've built a parametric model from Revit elements — point grid, framing geometry, list management and adaptive components — all driven live from Dynamo. The overview lists the concepts you've covered.