# Overview

In this assignment, you’ll explore how to change the surface of a structure to respond to data from various input sources, including:

• data files and image files
• physical properties of the surface elements, such as location, elevation, or orientation
💡
You can use Dynamo or Grasshopper to complete your design work for each part of the assignment. Feel free to mix it up and use different platforms for each.

# Steps to Complete

## Stage 1 - Rise and Shine (for 2 or more units)

For Stage 1, you’ll work with data that is sampled from an image file to adjust the color or height of wall panels.

### Part 1 - Use Image Data to Adjust the Color of Surface Panels

• Here are some examples of colorizing a grid of wall panels to create artistic effects.

• A here’s a much larger-scale example - the MSG Sphere in Las Vegas. It uses a hexagonal grid over a spherical surface.

Step 1 - Create an Arc-Shaped Wall Surface
• Provide sliders that will allow users to quickly change:
• the arc’s starting angle
• the arc’s ending angle
• the height of the wall
• Draw an arc curve on the base plane.
• Select this arc curve and extrude it in the Z direction to the specified height.
Step 2 - Panelize the Wall Surface
• Use the Lunchbox Panel.PanelQuad node to divide the surface into rectangular panels.
• Set the u and v inputs to create a grid of nearly square panels - similar to the pixels on an LED screen.
• Create formulas to smartly determine the u and v inputs based on the length of the arc curve and the height of the wall. The number of panels should update as the wall dimensions change, and the panels should maintain a nearly square shape.
• If using Dynamo, use the panel points and very simple adaptive panel (for example, Rect Seamless Panel-4pt) - to create the wall panels in Revit.
Step 3 - Read an Image File and Sample the Image Data
• Copy an image file into the same folder as your main graph.
• Sample the image data to determine the colors that will be applied to the panels on your wall.
• 💡
Be sure to use the same u and v values to sample the image data, so you’ll have a one-to-one mapping from the image data to your wall panels.
Step 4 - Map the Sampled Colors to the Wall Panels
• Map the list of color values to the adaptive panels using the workflow shown in the examples.
Finishing Part 1
• Flex your input sliders to come up with a unique length and height for your wall and confirm that your code works for the new dimensions.
• Save a screenshot showing your model geometry with the image colors mapped to the wall panels.
• Save your files for this part of the assignment using a file name that ends with “_Stage1_Part1”

### Part 2 - Use Image Data to Adjust the Height of Surface Panels

Here are some examples of adjusting the height of surface panels to create artistic effects.

Step 1 - Create a Serpentine (S-Shaped Wall Surface)
• Provide sliders that will allow users to quickly change:
• the length of the wall
• the height of the wall
• the number of waves in the wall
• the amplitude of the waves in the wall
• Draw a line of the desired length on the base plane.
• Use a variation of the Sine or Cosine node to transform this line into a wavy curve on the base plane.
• Select this wavy curve and extrude it in the Z direction to the specified height.
Step 2 - Panelize the Wall Surface
• Use the Lunchbox Panel.PanelQuad node to divide the surface into rectangular panels.
• Set the u and v inputs to create a grid of rectangular panels - about 4” tall x 8” wide - similar to bricks in a wall arranged in a stacked pattern.
• Create formulas to smartly determine the u and v inputs based on the length of the base curve and the height of the wall. The number of “bricks” should update as the wall dimensions change, and the “bricks” should maintain their 4” x 8” shape.
• If using Dynamo, use the panel points and a very simple adaptive panel (for example, Rect Seamless Panel-4pt) - to create the “bricks” in Revit.
Step 3 - Read an Image File and Sample the Image Data
• Copy another image file (different from the one you used for Part 1) into the same folder as your main graph.
• Sample the image data to determine the height values that will determine the thickness of the “bricks” in your wall.
• 💡
Be sure to use the same u and v values to sample the image data, so you’ll have a one-to-one mapping from the image data to your wall panels.
Step 4 - Use the Sampled Colors to the Set the Heights of the Wall Panels
• Map the list of color values to set the “Height” of each of the adaptive panels using the workflow shown in the examples.
• If using Dynamo, use the Color.Brightness node to transform the brightness of each sampled color into data value (ranging from 0 to 1).
• Remap the brightness values from the sample image into a range of heights from 4” to 36”.
Finishing Part 2
• Flex your input sliders to come up with a unique length, height, and waviness for your wall and confirm that your code works for the new dimensions.
• Save a screenshot showing your model geometry with the brightness values of the sampled image mapped to the thickness of the wall panels.
• Save your files for this part of the assignment using a file name that ends with “_Stage1_Part2”

## Stage 2 - Gonna Need Shades (for 3 or more units)

For Stage 2, you’ll create a model of a simple building form and panelize the wall surfaces. Then evaluate the orientation of the wall panels (relative to the sun position) and use this data to adjust parameters of the wall panels.

Step 1 - Create a Model of a Simple Two-Level Building Form
Create a resizable rectangle on the base plane to represent the footprint of the lower level.
• Use the Rectangle.ByWidthLength node to create a rectangle that is centered on the origin.
• Provide sliders that will allow users to quickly change:
• the building length at the lower level
• the building depth at the lower level
• the height of the lower level walls
• Use the Surface.ByPatch and Surface.PerimeterCurves to break the rectangle sides into separate curves.
• Extrude these four curves to the height of the lower level walls.
Offset the rectangle defining the lower level footprint to create another rectangle to represent the footprint of the upper level.
• Provide sliders that will allow users to quickly change:
• the offset distance of the upper level walls relative to the lower level.
• 💡
This distance could be positive (to specify that the upper level walls extend outside the lower level walls) or negative (to specify that the upper level walls are inset from the lower level walls.
• the height of the upper level walls
• Extrude the four curves of this upper level rectangle to the height of the upper level walls.
Step 2 - Panelize the Wall Surfaces
• Use the Lunchbox Panel.PanelQuad node to divide the wall surfaces into rectangular panels.
• Set the u and v inputs to create a pattern of tall rectangular panels - similar to the glazing panes of a curtain wall.
• For simplicity, specify that your panelized walls surfaces will be 1 panel tall.
• Create a formula based on the length of each wall segment to determine the number of panels in the horizontal direction for that segment.
• Provide a slider to set the desired panel width.
• Divide the wall segment length by the desired panel width to compute the number of whole panels that could fit into this length.
• Use a Ceiling node to round this number up to the next whole integer.
• Use this number to specify the number of panels.
• Add a List.Flatten node to remove 1 level of hierarchy from the output list of Panels.
• Add a similar List.Flatten node to remove 1 level of hierarchy from the output list of panel Points.
• 💡
Flattening these lists will allow each panel to be evaluated independently, regardless of which wall surface generated the panel.
Step 3 - Place or Create Shading Elements at each Wall Panel location
If using Dynamo
• Use the panel points to place adaptive panel components at each wall panel location in Revit.
• Rotate the adaptive panel placement points to create the desired rotation of the panels.
• Copy the QuadPoint_Rotate custom node from the CEE 120C/220C Shared Library into the same folder as your main Dynamo Graph:
• Place this custom node in your graph and set the inputs as follows:
• desiredRotation
• 0 = No rotation
• 1 = 90 degrees clockwise
• 2 = 180 degrees clockwise
• 3 = 270 degrees clockwise
• Choose the desiredRotation based on the adaptive panel you’re using:
• For the Rect_Panel with Rotating Shade
• Choose 1 to place the hinges on the left side of the panel
• Choose 3 to place the hinges on the right side of the panel
• For Rectangle_Seamless Panel with Folded Surfaces
• Choose 0 or 2 to have the panels fold horizontally.
• Use the output of the QuadPoints_Rotate custom node as the input points for your AdaptiveComponent.ByPoints node.

Step 4 - Set the Sun position
If using Dynamo
• Use the SunSettings.Current and SunSettings.Direction nodes to get a vector representing the sun’s position from your Revit project settings.
If using Grasshopper
• Use the Solar Arc node to compute the sun position for a specific latitude and longitude.
• 💡
You can scale the Arc and Sun to provide a easier visualization of the sun’s position.
• Provide a slider as input to the Offset parameter to simulate the movement of the sun through the day.
• 🟢
Example: Folding Sunshade Panels in Grasshopper
Step 5 – Evaluate the Directness of the Wall Surface Panels to the Sun
• Add a Sun.Settings.Current node to your main graph to capture the current sun position in your Revit project.
• Create node logic to evaluate the directness of each surface panel to the sun using the dot product logic illustrated in the examples.
1. 💡
Use our class examples as a starting point for building the logic in your graph.
2. Copy all 3 of these custom nodes from the the CEE 120C/220C Shared Library into the same folder as your main Dynamo graph:
3. Use the Panels.ComputeSunDirectnessOutwardNormals.dyf custom node to point all the panel normals toward the outside of the building. This will allow us to evaluate the sun is oriented relative to the outer face of the panels (flipping the normals if needed).
1. Input the flattened list of panel surfaces.
2. Use the output fro Sun.SettingsCurrent as the input for projectSunSettings.
3. This node maps the computed directness values to a new range with:
• 0 representing the least direct orientation.
• 1 representing the most direct orientation.
Step 6 – Provide Visual Feedback using Color to Indicate the Directness of Each Panel to the Sun
• Create node logic to map the computed directness values to a range of colors – for example:
• Choose a dark color to indicate the panels with the least direct orientation.
• Chose a bright color to indicate the panels with the most direct orientation.
• Set the color of the surface panel elements based on the computed directness values.
Step 7 – Adjust the Panel Geometry based on the Directness of Each Panel to the Sun
• Adjust the parameters of each panel based on the computed directness values.
If using Dynamo
• Use the panel points to place adaptive panel components at each wall panel location in Revit.
• Set the instance parameters available, based on the adaptive panel component family used:
• Set the Shade Rotation (0 to 89 degrees)
• Set the Shade Width (any positive distance)
• 💡
Here’s a custom node that you can download from the CEE 120C/220C Shared Library and use to set the Shade Rotation angle to closely follow the position of the sun.

You can input the list of panel surfaces and the SunSettiings.Current, and it will return a list of angle values that you can use to set the Shade Rotation parameter.

If the panel rotation is set to 1 (hinge on the left side), the shades will be rotated 90 degrees to the sun.

If the panel rotation is set to 3 (hinge on the right side), the shades will be rotated toward the sun.

Finishing Stage 2
• Save a screenshot showing your model geometry with the wall panels responding to the sun location at two different times of day.
• Save your files for this part of the assignment using a file name that ends with “_Stage2”

## Stage 3 - Shield Your Eyes (for 4 units only)

For Stage 3, you’ll create another model of a simple building form and panelize the wall surfaces. Then, follow a similar workflow to evaluate the orientation of the wall panels (relative to the sun position) and use this data to adjust parameters of the wall panels.

For Stage 3, you’ll be using the same logic for computing the directness of each wall panel to the sun. So, you may want to Save As your graph from Stage 2 under a new name and modify it for this stage.

Step 1 - Create a Model of a Tall Polygonal Tower Form
Create a resizable polygon on the base plane to represent the footprint of the base of the tower.
• Provide sliders that will allow users to quickly change:
• the radius of the tower at the lower level
• the number of sides of the polygon
Create a second resizable polygon with the same centerpoint to specify the footprint at the top of the tower.
• Provide a sliders that will allow users to quickly change:
• the radius of the tower at the top level
• the height of the top level
• Use the same input for the number of sides for this polygon,
• Translate this polygon in the Z direction to the top level.
Create a third resizable polygon with the same centerpoint to specify the footprint at mid-level of the tower.
• Provide a sliders that will allow users to quickly change:
• the radius of the tower at the mid-level
• Use the same input for the number of sides for this polygon.
• Compute a height for this mid-level, then translate this polygon in the Z direction to this height.
Loft these three polygon to create an exterior wall surface for the tower.
💡
Lofting curves compose of straight line segments (for example, the sides of a regular polygon) takes a few extra steps. You can loft the polygons themselves, but the resulting surface won’t panelize as expected. All of the panels will be placed on one edge of the polygons.

So, we’ll use another strategy:

• Breaking the polygons into a series of line segments.
• Then, grouping and lofting the line segments on each side.
• Use the Curves.DeconstructPolyCurve node to break each polygon into a series of segments — one segment for each side.
• Use List.Create to create a list of these lists of segments.
• Use the Lift.Transpose node to reorganize the lists of segments.
• From 3 lists of 5 segments(if you used a pentagon) at each level.
• To 5 lists of 3 segments on each side.
• Use.Surface.ByLoft to create 5 surfaces — one for each group of segments.
Step 2 - Panelize the Wall Surfaces
• Option 1: Use the Lunchbox Panel.Triangle node to divide the wall surfaces into triangular panels.
• Set the u and v inputs to create a pattern of hexagonal panels that are about 8’ tall x 8’ wide.
• Option 2: Use the Lunchbox Panel.PanelQuad node to divide the wall surfaces into rectangular panels.
• Set the u and v inputs to create a pattern of rectangular panels that are about 8’ tall.
• Flatten the outputs from the Panel.Triangle or Panel.PanelQuad nodes by one level to combine all of the Panels and Points (from all the sides) into single lists.
💡
We need to do this, because we created each surface separately. This step just recombines the outputs.

Step 3 - Place or Create Panels with Resizable Openings at each Wall Panel location
If using Dynamo
If using Grasshopper
Step 4 - Set the Sun position
If using Dynamo
• Specify the Sun Settings in your Revit project file.
• Use the SunSettings.Current and SunSettings.Direction nodes to get a vector representing the sun’s position from your Revit project settings.
If using Grasshopper
• Use the Solar Arc node to compute the sun position for a specific latitude and longitude.
• 💡
You can scale the Arc and Sun to provide a easier visualization of the sun’s position.
• Provide a slider as input to the Offset parameter to simulate the movement of the sun through the day.
• 🟢
Example: Folding Sunshade Panels in Grasshopper
Step 5 – Evaluate the Directness of the Wall Surface Panels to the Sun
• Create node logic to evaluate the directness of each surface panel to the sun.
• 💡
Use our class examples as a starting point for building the logic in your graph.
• Map the computed directness values to a new range with:
• 0 representing the least direct orientation.
• 1 representing the most direct orientation.
Step 6 – Adjust the Panel Geometry based on the Directness of Each Panel to the Sun
• Adjust the parameters of each panel based on the computed directness values.
If using Dynamo
• Use the panel points to place adaptive panel components at each wall panel location in Revit.
• Set the parameters available, based on the adaptive panel component family used:
• Rect_Panel with Resizable Opening - 4 pt
• Set Panel Frame Width Parameter A (0.02 to 0.49)
• Set the Panel Frame Width Parameter B (0.02 to 0.49)
• Rect_4 Panel Shutter - 4 pt
• Set the Shutter Coverage Parameter (0.02 to 0.49)
• Set the Shutter Maximum Depth (any positive distance)
• Triangle_Panel with Resizable Opening - 3 pt
• Set the Panel Frame Width Parameter (0.02 to 0.49)
• Triangle_Panel - Panels Folding Outward - 3 pt
• Set the Fold Opening Parameter (0.10 to 0.95)
• Set the Maximum Fold Height (any positive distance)
If using Grasshopper
Finishing Stage 3
• Save a screenshot showing your model geometry with the wall panels responding to the sun location at two different times of day.
• Save your files for this part of the assignment using a file name that ends with “_Stage3”

# Submit

• Please create a folder named “Module 4” within your personal folder in our Autodesk Construction Cloud project.
• Then, upload these items to your Module 4 folder using the web interface:
• Your Revit project (.RVT) file and Dynamo graph (.DYN) file for each stage of the assignment.
• Or, your Grasshopper (.GH) file for each stage of the assignment.
• 💡