ARCH-653 : Project 2
The primary objective of the project is to explore the usability of Autodesk Revit architecture plug-in called DYNAMO. Dynamo is a visual programming tool that aims to be accessible to both non-programmers and programmers alike. It gives users the ability to visually script behavior, define custom pieces of logic, and script using various textual programming languages.
I have done quite a bit of research about the applications of dynamo, and that turned to be a never ending process, I found more and more interesting things and was confused what to choose as the application is capable of doing ridiculously diverse things.
After a long brainstorming exercise I have been through, I planned my project as described. My aim through this project is to learn as much as I can about visual programming in Revit using Dynamo. I decided to use my project 1 to accomplish this and take it a little further with Dynamo.
I split my project into three tasks,
TASK 1: Incorporate dynamo programming to demonstrate the parametric features of the mass model of project1.
TASK 2: Create a randomized pixel façade or curtain panel for the building.
TASK 3: Panel Deviation based on two different approaches, one being the time of the day and the sun vector is the other.
The Project-1 dealt with creating a building information model of New Museum of Contemporary Art located in New York and investigating the parametric design capability of Revit architecture using the mass model of the selected case study.
The form of the building was derived from an additive process and can be described as a series of seven asymmetrical boxes stacked on one another according to the anticipated needs and circulation patterns of building users, different levels were driven away from the vertebrae of the building core laterally to the north, south, east, or west.
The distinctive form of the building defining solution to fundamental challenges of an overcrowded site. The shifted-box approach gives wider internal spaces that are different heights at every level, with different characters and are column free.
(1) EDITING MASS PARAMETERS IN DYNAMO
As a very first step the mass model created in project 1 must be loaded into another conceptual mass family in order to access the parameters of the mass model and then,
STEP 1: Go to Add Ins tab and launch dynamo, to create a new work plane.
STEP 2: Load the mass model into dynamo using select model elements node.
STEP 3: Using Get family parameter node the parameters are connected to the mass model in dynamo environment.
STEP 4: Integer slider is used to vary the values of each parameter. List. Create node is used to organize data and these are plugged into Element.Set.ParameterByName node.
STEP 5: By using the integer slider and having “Run Automatically” option checked, parameters of the mass model can be varied in dynamo and these changes can be viewed in the Revit window.
(2) PIXEL PATTERN FACADE
As the name suggests, the random pixel pattern façade consists of panel elements with different size, thickness and material.
Steps for creating the curtain panel element.
· A rectangular pattern based panel was selected, to make the size of the curtain panel variable, the rectangular panel is divided in to four quadrants using reference lines joined through points.
· The points hosted on the lines of the rectangular panel were assigned normalized parameters named ‘a’, ‘b’, ‘c’,‘d ’.
· The points in length direction are controlled by ‘a’ and ‘b’, while the points in width direction are controlled by ‘c’ and‘d’.
The next step was to create form and assign thickness and material parameters to each of the segments
STEP
7: At this stage Python scripts were compiled to get a list of values which
were then assigned to the corresponding parameters. To assign different
thickness and sizes to each piece of pixel panel of with a specific material,
the lists obtained from python script were modified using List. Shuffle node. To create a curtain panel pattern with a
regular arrangement these lists can be directly used in combination with
materials list without shuffling.
Steps for creating the curtain panel element.
· A rectangular pattern based panel was selected, to make the size of the curtain panel variable, the rectangular panel is divided in to four quadrants using reference lines joined through points.
· The points hosted on the lines of the rectangular panel were assigned normalized parameters named ‘a’, ‘b’, ‘c’,‘d ’.
· The points in length direction are controlled by ‘a’ and ‘b’, while the points in width direction are controlled by ‘c’ and‘d’.
The next step was to create form and assign thickness and material parameters to each of the segments
This
section presents specific programming approaches that were used in dynamo to
carry out the tasks mentioned in the section 2.1, under heading ‘GENERAL’.
Referring to TASK
2: Creating
a random pixel pattern, Data
Interoperability, Python scripting were the two methods that form a significant
part of the corresponding dynamo graph.
The Data
Interoperability is a scripting technique that allows users to import data
from various other formats like spreadsheets and images. Using this option users
have an advantage of bringing data like numbers in a spreadsheet or a color
from an image into dynamo and Revit processes.
The Python script is a specific node used in the Dynamo which allows users
to script complex logics using simple syntaxes. A bunch of commands can be
incorporated in just a single node .The python script comes in handy as a big
if-else statement. Without this it would make the dynamo code look more
clustered and confusing.
The flow of Python
script usually involves:
Import References > > Declare
variables >> Process Elements > > Declare Output
(.NET programing language & Revit API) (elementlist.append (input list (True)) OUT =elementlist()
Additionally, pertaining to TASK 3:
Panel Deviation based on two different logics, one being the time of the day
and the sun vector is the other, A Computational logic attractor system was
developed using the environment data from Autodesk Revit. This allows us to
establish relation between Revit families and its environmental settings like
sun path and time of the day.
Code Block is
another multi-functional node available in dynamo, was used in the dynamo graph
of this task, through which various operations like conditional and Boolean
logic, looping etc.; can be executed in a simplest form of scripting. It can
also be used to call other regular nodes from the dynamo library except for
certain user interface nodes like watch and watch 3D.
STEP 1: Initially the custom curtain panel created was
loaded and applied on the divided surface of the mass model.
STEP 2: Launch Dynamo from the Add Ins tab of the tool
bar.
STEP 3: The goal is to gather the parameters of the
custom curtain panel which are ‘Thickness of panel (1, 2, 3, and 4)’; ‘Pixel panel
material (1, 2, 3 and 4) ‘; Size controlling parameters a and c .This was
achieved through select model element
, in which the selected element was the panel , and Get family parameter nodes. Then these parameters were compiled
into lists with indices (1, 2, 3…and so on) using List. Create node. These parameters can be again extracted
individually using GetItemByIndex to
use in the later part of the code.
STEP 4: Lists of values for the above parameters were
created, the figure below shows the nodes that were used for this purpose.
STEP 5: The File.
Path was used to load the CSV (Excel) file into the dynamo graph. The data
in the CSV file was then converted to text and a Random list of strings was
read using String. Split
STEP
6: The excel sheet that was used for randomizing is shown in the figure below.
A
RANDBETWEEN function was used to get
an array of randomly distributed numbers between 0 and 3 as there are four
different values for the parameters. Different spreadsheets were
used to get different patterns of pixel façade. Note that the number of cells
in the spreadsheet should match the number of panels on the divided surface.
And these numbers correspond to the indices of the parameter list developed in
the dynamo graph discussed below.
The Excel file should be saved a CSV file, to upload into
dynamo definition, else a FATAL error occurs when program is ran.
STEP
8: The final step is to assign these values to parameters and apply the façade
pattern to the mass surface. SetElementParameterByName
node does this for us.
SelectDividedSurfaceFamilies node was used to select the panels on the face
and the output was plugged into the ELEMENT tab of the SetElementParameterByName, the PARAMETERNAME was obtained from GetItemByIndex (from step 3), the
output from the python Script was then joined to the VALUE.
3. PANEL DEVIATION
In this exercise the curvature of the
curtain panel used in my project 1 was varied based on two different logics,
Time of the day and the sun vector. The
purpose of this task was to demonstrate a basic optimization principle i.e
energy consumed by artificial lighting and cooling equipment in a building.
PART 1
The curvature of the curtain panels vary
with the time of the day, it will be convex during day time and concave in the
evening so as to utilize the natural daylight through window and other
openings.
STEP 1: The curtain panel family was
loaded into the mass family and was applied to the divided surface. Select
sun-settings in Revit and set to desired location.
STEP 2: The Family Types node was used to load the curtain panel family into
dynamo. All Elements of Family Type was
used to select and apply the logic to all the panels in the Revit window.
STEP 3: The SunSettings.Current and SunSettings.CurrentDateTime
gives the time and date for the given sun setting. String Split was used to separate Date and Time components.
STEP 4: The CodeBlock was used to script the
logical statement i.e if the time string outputs ‘AM’ value of parameter ‘A’
will be equal to 1 and -1 for ‘PM’. Thus the panel opens during the first
session of the day and lets in sunlight thus reducing energy consumed by
artificial lighting and closes during the second session of the day.
STEP 5: Again Element.SetParameterByName was used to
apply the logic to the curtain panels and the results were seen in the Revit
window.
COMMENT:
An error was noticed in dynamo during
this exercise, the time settings in Revit and Dynamo were not matching, to
rectify this a time-span was added to the resulting value from dynamo and the
definition was modified using a formula node instead of a code lock . But this
still did not eliminate the error completely and a solar study for an entire
day (Sun rise to Sun set) with one hour intervals couldn’t be satisfactorily
achieved. To precisely resolve the problem this inherent glitch in dynamo must
be resolved by the developers.
PART 2
A slightly different logic was used for the second
part of the exercise. The logic in the dynamo graph is set such that the
curvature of the panels on the face on which the incidence of sun rays is less
than 45 degrees have convex curvature and the panels on the face with incidence
angle greater than 45 degrees will have concave curvature. This can be observed
as a technique to reduce heat absorption by the building faces. To make the
change in the curvature of the panel evident, I used different colors for the
panels .The panels with convex curvature are blue in color and those with
concave are red.
STEP 1: Sunsettings.SunDirection
gives the vector that determines position of the sun.
STEP 2: The faces of the mass model were selected
using Select Face and the normal
vector to these faces was found by SurfaceNormalParameter
node.
STEP 3: The angle between sun and normal vector was
derived from Vector.AngleBetween.
STEP 4: Create List of surfaces and angles and flatten
to eliminate sub-lists.
STEP 5: A python script was used to incorporate the
desired design intent.
STEP 6: The output from the python script is the value
driving the curvature of the panel (A).
STEP 7: These values from output list are plugged into
the value of SetParameterByName
node, and assigned to the curtain panels through SelectDividedSurfaceFamilies plugged into elements tab.
STEP 8: Now the curtain panel color was modified based
on its curvature, again the python script comes in handy here to assign
specific color to the panels. The list of material ids and curvature values
created will be the input to the Python node.
STEP 9: The final step was to set the material
parameter of the panel to the values obtained from the python node.
TASK 2 of the project was aimed at exploring the
multifarious parameterizing capabilities of dynamo. Through this exercise, it
is understood that number of elements can be repeatedly manipulated with
several parameters at once and can be retrieved to get any desired
architectural arrangement.
TASK 3 was intended to investigate the usability and
advantage of using dynamo to create sustainable real world designs. The panels
retain the feature of responding to environmental conditions which is one of
the key characteristics of the building performance analysis and low energy
design.
The further advancement in the scope of the project
could be performing Building performance evaluation using Autodesk Revit-Dynamo
in combination with other simulation software like Autodesk Ecotect, Green
Building Studio , Energy Cost Range
(ECR) for Revit etc.;
DESIGN IDEAS
FOR FUTURE
I
intend to continue my study on visual programing and its applications in the
field of architecture and sustainable design. Below described are few of the
design ideas that I contemplate to further enhance my knowledge about dynamo.
To
divide each floor/ block of my building in project 1 in to realistic functional
categories like lobby, coffee lounge, gallery, study room, meeting room,
administrative office etc.; develop a dynamo graph which allows for the
automatic redistribution of the individual areas when the size or gross area of
the building changes, so that the area of each category will be optimally
distributed based on its functional requirements. To accomplish this, other
optimization and simulation software in addition to API programing is required.
To classify these rooms based on occupancy load = Area
of the room / Occupancy Type Number, Retrieve this data and modify these room
parameters to adjust to the occupancy category.
Element Collector node from the Lunchbox package can be used to collect room boundaries and then
API programing may be used to unwrap the elements and their ids to place extra
rooms based on level.
[1]The
other interesting design idea I came across through my research was to identify
room that serves as a better fire escape, for this purpose list of pairs of
rooms can be created based on the doors in Revit project model and then
sequence of possible paths to move in and out of these rooms must be developed.
The graph of sequence of rooms can be reduced into sequence of doors and then
to sequence of points. The shortest path to each room in the sequence and
longest distance to the door for the first room of a sequence will give the
egress path. The rooms that does not exceed the maximum egress path length are
the ones suitable for the fire exit placement.
These
Figures refer to the preliminary work that was outset to achieve the proposed
design intent for the prospective work.
[1]
Source:
“Utilizing Dynamo "Beyond" Computational Design “By
Andreas Dieckmann. Presented at RTC Europe 2014, Dublin/Ireland. Software:
Autodesk Revit, Dynamo.
4. PROJECT MOVIE
REFERENCE LIST
1. http://bim-sim.org/ARCH653/lectures/lecture24/html By Dr.Wei Yan
2. http://bim-sim.org/ARCH653/lectures/lecture25/1.html By Dr.Wei Yan
3. http://dynamobim.org/blog
4. https://github.com
5. http://archi-lab.net – Blog by Mr. Konrad K Sobon - Project BIM Specialist at Grimshaw
2. http://bim-sim.org/ARCH653/lectures/lecture25/1.html By Dr.Wei Yan
3. http://dynamobim.org/blog
4. https://github.com
5. http://archi-lab.net – Blog by Mr. Konrad K Sobon - Project BIM Specialist at Grimshaw