Tuesday, December 2, 2014

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


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 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.


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.



3PANEL 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.







 Through the course of the project, I could gain good knowledge about visual programming using dynamo and got comfortable with using the tool.
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