BIMtopia
/CEE 120C/220C Parametric Design & Optimization | Spring 2026
CEE 120C/220C Parametric Design & Optimization | Spring 2026
/
đźš«
CEE 120C/220C - For the Teaching Team Use Only
/
Module 4 Assignment (1)

Module 4 Assignment (1)

âť—Assignment: Rise or Shine | Due Mon, May 1stâť—Assignment: Rise and Shine (in Progress)
‣

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.
    • Use one of these adaptive panel component families from the CEE 120C/220C Shared Library:
      • Rect_Panel with Rotating Shade
      • Rect_Panel with Rotating Shade.rfa

        drive.google.com

      • Rect_Seamless Panel with Folded Surfaces
      • Rect_Seamless Panel with Folded Surfaces.rfa

        drive.google.com

      • Rect_Seamless Panel with Peak
      • Rect_Seamless Panel with Peak.rfa

        drive.google.com

  • 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:
    • QuadPoints_Rotate.dyf

      drive.google.com

    • Place this custom node in your graph and set the inputs as follows:
      • listOfQuadPoints = the Points output from Panel.PanelQuad
      • 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.
‣
If using Grasshopper
  • Create geometry to represent the shading elements by following the workflows in one of these examples:
‣
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
‣
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. Panels.ComputeSunDirectnessOutwardNormals.dyf

      drive.google.com

      PanelNormals.AllPointOutward.dyf

      drive.google.com

      PanelNormals.AllPointUpward.dyf

      drive.google.com

    4. 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. image
      2. Input the flattened list of panel surfaces.
      3. Use the output fro Sun.SettingsCurrent as the input for projectSunSettings.
  • Map 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:
    • Rect_Panel with Rotating Shade
      • Set the Shade Rotation (0 to 89 degrees)
      • Set the Shade Width (any positive distance)
      • Set the Shade Height to match your panel height
    • Rect_Seamless Panel with Folded Surfaces
      • Set the Fold Distance (0.05 to 0.95)
      • Set the Fold Outdent (any positive or negative distance)
    • Rect_Seamless Panel with Peak
      • Set the Peak Outdent (any positive or negative distance)
‣
If using Grasshopper
  • Adjust the geometry representing the shading elements by following the workflows in one of these examples:
‣
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”