N AT E ANDERSON 2014 PORTFOLIO
Nate Anderson njander.arch@gmail.com 734.223.4139
Bio Nathan Jeffery Anderson (b. 1987) is an Intern Architect at design firm Ellumus, LLC. Nate earned a Masters Degree in Architecture followed from a B.S. in Architecture at the University of Michigan. He had conducted internships with Shepley Bulfinch in Boston, MA, and Pickard Chilton in New Hav e n , C T. H e h a s b u i l t w o r k f r o m Beijing (study abroad) in “Beijing: Inside Out” (2010) in addition to the TCAUP student show and Extreme Urban Euphoria exhibits. His thesis work was showcased as a finalist in M T V u ’s I n n o v a t i o n D a y ( 2 0 1 2 ) a n d displayed in the TCAUP Graduate Architecture Thesis Exhibition.
PROFESSIONAL WORK 01
Huahai Bank Tower Xuzhou, China 02
Central Transit Center
Wusheng City in Wuhan, China 03
New District Development Xiamen, China 04
The Paradise Pearl Retail Center Haikou City, Hainan, China 05
1900 Crystal Drive Crystal City, Virginia 06
Old Dominion University Norfolk, Virginia
G R A D U AT E W O R K 07
ReJOIN : Technonic System Graduate Thesis Work 08
Tek-Tonic Form Day Spa Milford, MI 09
The Points [A2] Ann Arbor, MI 10
Architecture of Objects
Student Design Collaborative Studio
N AT E A N D E R S O N NJANDER.ARCH@GMAIL.COM 734.223.4139
E D U C AT ION University of Michigan // Ann Arbor, MI 2012
A. Alfred Taubman College of Architecture and Urban Planning
2010
A. Alfred Taubman College of Architecture and Urban Planning
Master of Architecture
Bachelor of Architecture
P R OF ESSION AL EXP ERI ENCE 2013-2014
Ellumus, LLC // Bellevue, WA
March 2011
Pickard Chilton // New Haven, CT
March 2009
Architecture Intern Developed architectural concept, schematic, and design development models and drawings for corporate and commercial mixed-use projects // Designed proposals with integrated storylines tailored for the China market along with firm marketing materials such as updated brochures, intro videos, and a redesigned website // Managed workflow between design of models with the development of proposals, presentations, and client correspondences // Additional work included master planning, brand identity and project vision development.
Architecture Intern (Taubman Externship) Collaborated with two design teams to develop a corporate office tower along with a mixed use master plan which demonstrated excellence within a competitive work environment under project deadlines // Work included design charrettes, renderings, CAD documents and client meetings.
Shepley Bulfinch // Boston, MA
Architecture Intern (Taubman Externship) Obtained a valuable understanding of a large firm // Audited multiple project teams and developed understanding of a collaborative work environment to develop large scale projects at various stages of design // Attended a professional practice seminar and discussed the employee structure throughout the firm.
R ELATED E XPERI ENCE 2010-2012
Vincent James Construction // Royal Oak, MI
2013-2014
Beijing Architecture Studio Enterprise (B.A.S.E.) // Bejing, China
Draftsman, Crew Member Demonstrated the collaboration between Architect and Contractor; sought out construction documents to tangible spaces by operating and participating in a small build team // Aquired knowledge of pulling permits, working with inspectors, and an overal understanding of housing from the seat of the excavator to the placement of the last shingle.
Designer, Researcher Participated in multiple projects documenting the condition of migrant workers in Beijing. Varying focuses from small scale of how the hands carry out specific tasks and photographing daily life in the urban village of Caochangdi, Beijing to larger scales with categorizing and mapping the remaining urban villages still in existence. Collaborated on unique fabric products and obtained ritualistic spatial understandings of the Liu and and Master of the Nets Gardens through documentation (Suzhou, China)
HON OR S AND PUBL I CATI O NS 2012 2010 2009 2009 2009
MTVu Innovation Day Finalist | thesis work exhibited TCAUP Annual Student Show Finalist | undergraduate work exhibited TCAUP Annual Student Show | undergraduate work exhibited Beijing: Inside Out | research and work published Extreme Urban Euphoria Exhibit | work selected for exhibition
T EC H N ICAL S K I L L S Autodesk
Revit, AutoCAD
3D Modeling and Rendering
Rhinoceros 5.0, Grasshopper, Python, 3D Studio Max, Google Sketchup, Vray, and Maxwell Render
Visualization Media
Hand Sketching, Model Construction, Architectural and Marketing Photography, Video Production
Adobe Creative Suite
Acrobat Pro, Illustrator, Photoshop, Indesign, Premier Pro, After Effects
Microsoft Office
PROFESSIONAL WORK
01 HUAHA I BA NK TOW E R XUZH OU, CHI NA Ellumus, LLC Spring 2013 In need of a new corporate headquarters, the client asked for a new development that was unique to the company and defined its essence. From conception to design development, this project was designed to embody harmonic simplicity and cultural symbolism. Inspired by the symbolism behind the company logo, the building resembles the Chinese “Golden Boat.” Viewed from the ground it looks as if a strong open hand is protecting and supporting the rising tower. From its side, the bottom of the tower flares out and becomes the main entry in reference to the “people” Chinese character. Currently under construction, this project is designed to reflect the future growth and activity that the employees and visitors can share. Inside the entrance, a triple height space exposes the tower core and provides views to the adjacent atrium that connects the offices with the auditorium and conference center. Customers are greeted by a grand escalator that lifts them into the banking center, open to the atrium to give panoramic views out to the exterior. Designed with a continuous dialogue between Rhino and Revit, this project allowed free form spaces to be quantified and produced to a complete design development package which allows for clear communication to the Chinese state-owned Local Design Institute and contractors for construction.
Designing with Revit gives the project team an open, collaborative problem solving flatform that promotes discussion and clear decision making.
Celebrating the top two floors of the tower, a grand stair atrium at the west connects the lower public amenity floor with private meeting rooms above.
Working with a senior designer I was able to discuss, sketch, and model the details of the system our team designed. I was directly responsible for drawing the 500 detail set within Revit.
The shading system around the tower and podium are a result of the program within the envelope. Public spaces and circulation are celebrated while traditional office tower spaces receive traditional treatments for each facade according to sustainable strategies.
Photoshop Rendering Using the light and base material from 3DsMax, elements of collage and layering help to get an accurate feel of what the final space will be.
3DsMax Model View To get realistic shading effects, 3DsMax provides base renderings for both discussions and preliminary views for the client.
The End Result The continuous workflow of Revit, Rhino, and 3DsMax let free-form modeling, detailed documentation, and realistic visuals all work together to cover each area of design.
02 WUSHENG CENTRA L TRA NS I T CE NTE R A M I XED US E DEVELOP ME NT I N W UHA N, CHI NA Ellumus, LLC Summer 2013 Encompassing many programs and ideas, the City of Wusheng’s vision was to create a new transit headquartered in its dense, busy downtown. This hub serves as the main transfer station of bus routes throughout the city, connecting thousands of people who transfer lines daily. Incorporating bus traffic with parking, maintenance, and transit offices with a retail center, office tower, and living units presented a large challenge. In developing the project, a central organizing idea of separating functions with specific overlaps provided a great way to make sense of the system. From the organizational diagram, two major options were pursued further into a complete Schematic Design package for the City of Wusheng. The Wusheng Transit Center’s aesthetic is client-inspired by the four major cloud forms: Cirrus, Cumulus, Stratus, and Cumulonimbus. The hub is a veiled undulating form that is a metaphor for the perpetual cycle of transformation, metamorphosis and interconnection in nature. The building’s pearlescenteffect finishes are inspired by light reflecting through condensation in the outer atmosphere.
The heart of this mixed-use project was developed based off of this organizational diagram. It separates the functions but allows for connections between them, providing additional areas as determined by the client’s needs.
Defining Design Capturing movement and transitions work both functionally in plan and section but also in the form of the envelope.
Floating Ski n Developing a skin system with layering gives the podium a dynamic facade that leads the eye around the exterior, holdng true to the idealized movement of clouds over transit.
03 NEW DI S TRI CT D E V E L OP ME NT A MIXE D USE COM M ERCI AL D E V E L OP ME NT I N X I A ME N, CHI NA Ellumus, LLC Summer 2013 Located across the Xiamen Bay, this industrial shipping hub is set to become a new commercial corridor with housing developments, cultural centers, and attractions with commercial as the city’s new development district. Starting with a large corner parcel, our team created a master plan that provides a solution for the client’s vision. Designing parcel divisions, street types, overall FAR distribution, and building massing, our team designed a park and mixed use office tower, office and SOHO complex, commercial and hotel center, and a mountain top view platform that all communicate within a grand storyline. The site planning and design are inspired by “two distinguishable aspects that cannot be separated.” Like the sky in interaction with mountains or the ocean aganst the shore, the master plan is divided into Yin and Yang districts which are conjoined by a park, plaza, and view platform. Together, the forms and functions of the planning mutually support each other in an Infinite Harmony.
Early vision renderings show what the center could look like. Dancing, curved elements that resemble those of cultural designs are a result of the client’s vision for the new district development.
The view platform will be the first structure of the master plan to be constructed. Currently in refinement, the platform will have functions built underneath while a sculpture representing Infinite Harmony rests above.
04
THE PARADI SE P E A RL RE TA I L CE NTE R R ETAIL S TRATEG Y A ND BRA ND I DE NTI TY I N HA I NA N, CHI NA Ellumus, LLC Summer 2013
Located in the tropical region of southern China, this project is designed as a sports entertainment retail center that seamlessly integrates living, working and entertainment. This type of strategy was organized by a string of “node� activities that are organized by entertainment and sport, with an even blending of food and beverage around related retail streets. To become a new destination just outside the downtown area of Haikou, this project needed both a center for entertainment and a strong brand identity. Using the local black pearl industry as a point of inspiration, the Paradise Pearl is used both for the name and the retail strategy. Having this clear relationship is easy for the shopper to identify themselves with the project while getting caught up in areas of attraction.
开发模式
Development Analysis
传统商业 综合体
sis
海口唐人中心 NHH Center Haikou 主要功能 Program
传统商业 综合体
Conventional Mixed-use
ment
运动娱乐 商业综合体 Sports - retail Complex
商业 Retail 百货 Dept. store 影院 Cinema 餐饮 F&B 超市 Hypermarket 娱乐 Entertainment 办公 Office 酒店 Hotel 住宅 Residential
体育公园 Sports Park 体育娱乐 Sports Arena 体育商业 Sports Retail 会所 Clubhouse 影院 Cinema 餐饮 F&B 娱乐 Entertainment 酒店 Hotel
Conventional Mixed-use
- 整合集团现有优质资源, 以互动体育娱乐带动旅游度假商业 现有开发经验 Existing Development
旅游度假 商业 Tourism Commercial
互动体育 娱乐
Interactive - sports Entertainment
运动娱乐 体育公园 Sports Park 体育娱乐 商业综合体 Sports Arena SportsRetail - retail 体育商业 Sports Complex 旅游商品 Tourism Retail 会所 Clubhouse 影院 Cinema 餐饮 F&B 酒店 Hotel 住宅 Residential ...
The organizing principle is to integrate interactive sports and entertainment with commercial tourism. In an effort to clearly define how the system can work, a retail strategy diagram shows how a visitor gets immersed within the experiences throughout the project.
Picking the Name When choosing a project name, we must not be too specific because we do not want people to get the wrong impression, but also not too complicated that nobody can relate to it.
Creating Options Color goes a long way when creating a brand, and with this active retail we chose generally warm colors and focused on the movement of the logo.
The Grand Entry In order to get the customer excited, a strong visual signage sculpture can be constructed to pull people in from the street and become a marker for the grand drop off area.
Capturing the Audience In order to visually describe the complexity of the project, sketch modeling along with layering within photoshop creates a strong, eventful space with lots of activity.
P r o fi l e A
v O r N a DO
/ CH ar les
e .
1 9 0 0 C R Y S TA L D R I V E . A R L I N G T O N , V I R G I N I A
s M it H
P iCK ar D
CH il t ON
/ COOP
er
C ar ry
D D P R O G R E S S . 0 4 M A R C H 2 0 1 1 . PA G E 4
05 1 9 0 0 CRY S TA L D RI V E A COM M ERCI AL DEVELO P ME NT I N CRY S TA L , V I RG I NI A Pickard Chilton Spring 2011 As part of a design development progress presentation, I was involved in creating a set of variation proposals for the Crystal City redevelopment project run by Pickard Chilton. Profile studies among the envelope included four versions of the rooftop design and retail podium. In addition, the lobby was rendered with materials as a segway into it’s discussion for the future client meeting. As a result, plans and views were generated for the presentation. The shading system that is applied the new building envelope is intended to cut the operational costs over the lifespan of the project and further to enhance the quality of the space for it’s inhabitants. Special attention was given to the curtain wall system to reduce the southern exposure via sun shades and limit West and East hard light by chnging the type of glass to reduce heat gain. This is all topped by a void slice that is now the new sky terrace with it’s own sun canopy, containing an automatic shading system to allow comfortable occupancy throughout the year.
4 ' 6# + . 2 1 & + 7 /
-&7&- 10%*6. #308
&-
(
300' 5&33"$&
(-"44 (6"3%3"*-
-&7&-
-&7&-
&-
&-
10%*6. #308
300' 5&33"$&
(
(-"44 (6"3%3"*-
-&7&- &-
4 ' 6# + . 2 1 & + 7 /
7*4*0/ (-"44
7*4*0/ (-"44
-&7&-
-&7&-
&-
&-
0''*$&
-&7&- &-
7*4*0/ (-"44 1"/&- 8*5) "-6.*/6. 4)"%08 #09
$&*-*/( 40''*5
7*4*0/ (-"44
0''*$&
-&7&- &-
7*4*0/ (-"44
105&/5*"4*(/"(& ;0/&
105&/5*"4*(/"(& ;0/&
45"*/-&44 45&&3&5"*- &/53: %003
&-&7"5*0/
3&5"*-
-&7&-
-&7&-
&-
&-
&-&7"5*0/
4&$5*0/
2 + % - # 4 & % * + .6 1 0 % 1 1 2 ' 4 % # 4 4 ;
' ' 3 5 2 * 5 ( 6 6 0 $ 5 & + 3$ * (
2 + % - # 4 & % * + .6 1 0 % 1 1 2 ' 4 % # 4 4 ; ' ' 3 5 2 * 5 ( 6 6 0 $ 5 & + 3$ * (
(
(
99
3&5"*-
1-"/
-&7&- &-
8 1 4 0 # & 1 % * # 4 . ' 5 ' 5 / + 6 * 99 & 5 < 6 7$ / ' 5 , 9 ( $ 5 / , 1 * 7 2 1 9 , 5 * , 1 , $
3&5"*-
1-"/
3&5"*-
4&$5*0/
8 1 4 0 # & 1 % * # 4 . ' 5 ' 5 / + 6 * 99 & 5 < 6 7$ / ' 5 , 9 ( $ 5 / , 1 * 7 2 1 9 , 5 * , 1 , $
-&7&-
45"*/-&44 45&&3&5"*- &/53: %003
&-
46/4)"%&
/&(0;*0
46/4)"%&
/&(0;*0
99
4 ' 6# + . 2 1 & + 7 /
10%*6. #308
-&7&-
-&7&-
&-
&-
10%*6. #308
7*4*0/ (-"44
(
(-"44 (6"3%3"*-
$-&3&4503:
300' 5&33"$&
-&7&- &-
300' 5&33"$&
-&7&- &-
(
(-"44 (6"3%3"*-
4 ' 6# + . 2 1 & + 7 /
105&/5*"4*(/"(& ;0/&
46/4)"%&
46/4)"%&
/&(0;*0
105&/5*"4*(/"(& ;0/&
/&(0;*0
105&/5*"4*(/"(& ;0/&
45"*/-&44 45&&3&5"*- &/53: %003
-&7&-
-&7&-
&-
&-
4&$5*0/
2 + % - # 4 & % * + .6 1 0 % 1 1 2 ' 4 % # 4 4 ;
&-&7"5*0/
' ' 3 5 2 * 5 ( 6 6 0 $ 5 & + 3$ * (
' ' 3 5 2 * 5 ( 6 6 0 $ 5 & + 3$ * (
3&5"*-
99
(
At the clientâ&#x20AC;&#x2122;s request, a small team including myself put together multiple options for integrated signage within the podium as a result of a conversation pertaining to street presence. This involved drafing an elevation and section with updated renderings to show the differences.
-&7&- &-
2 + % - # 4 & % * + .6 1 0 % 1 1 2 ' 4 % # 4 4 ;
(
3&5"*-
4&$5*0/
8 1 4 0 # & 1 % * # 4 . ' 5 ' 5 / + 6 * 99 & 5 < 6 7$ / ' 5 , 9 ( $ 5 / , 1 * 7 2 1 9 , 5 * , 1 , $
3&5"*-
1-"/
3&5"*-
&-&7"5*0/
8 1 4 0 # & 1 % * # 4 . ' 5 ' 5 / + 6 * 99 & 5 < 6 7$ / ' 5 , 9 ( $ 5 / , 1 * 7 2 1 9 , 5 * , 1 , $
&-
45"*/-&44 45&&3&5"*- &/53: %003
-&7&- &-
0''*$&
-&7&- 41"/%3&- (-"44
105&/5*"4*(/"(& ;0/&
-&7&- &-
/&(0;*0
-&7&- &-
"-6.*/6. 1"/&-
-&7&-
0''*$& &95&3*03 8"--
4503&: 3&5"*%*41-": "3&"
0''*$&
&-
-*()5 4)&-'
/&(0;*0 7*4*0/ (-"44
1-"/
99
.1$$; 24'8
Rhino Rendering Using materials from the firmâ&#x20AC;&#x2122;s library, it is possible to quickly export a base layer for presentation views. I found that it was a difficult process to apply the right lighting because you must know the quality and level you want to achieve a certain effect for the spaces provided.
.1$$; 24'
Rhino Model View Once the general form of the space is generated, you must break down the components to add detail. This involved using both reference material and catalogs of interior elements within the firmâ&#x20AC;&#x2122;s library.
8140#&1 %*#4.'5 ' 5/+6*
2 + % - # 4 & % * + .6 1 0 % 1 1 2 ' 4
& 5 < 6 7$ / ' 5 , 9 ( $ 5 / , 1 * 7 2 1 9 , 5 * , 1 , $
'' 352*5(66 0$5&+
0'4/:58
:°+
,[Z[XK°
.8
.8
28
'** °28
*4
;6
3+4
.8
28
28
#
$
8°°°9
-9
=53+4
.8
"
9°°°6
5°°°'
.8
.8
28
28
-9
;6
*4
8°°°9
9°°6
-9
'.;
+2+):°
%
& ' (
The Entry Lobby Plan
- 0# # : - ":06 5 0 1 5 * 0 /
4 5" * 3 - 0 $ "5 * 0 / . * %
In the short time on this project I did not personally work on the plans, but it was $ 0 / / &$ 5* 0 / - 0 $ "5 * 0 / 0 6 important to use them when modeling and sketching to ensure everything falls into place. an agreement on the retail facade option, I 2modeled 8140#&1 %*#4.' 5 ' After 5 / +reaching 6* + % - # 4 the & % * + .6 1 0 % 1 1 2 ' 4 % # & 5 < 6 7$ / ' 5 , 9 ( $ 5 / , 1 *changes 7 2 1 9 , 5 * , and 1 , $ found the plan did not match the updated model. The work I created ' ' 3 5 2 * 5 ( 6 6 0 $ 5 & + 3 was used to update the entry lobby plan shown above.
06 OLD DOM I NI ON UNI V E RS I TY A NEW CENTER I N NORFOL K , V I RG I NA SHW Group Spring 2012 Designed as a student center for the commuter-oriented student body, this building provides services and space for students while providing classrooms and offices for faculty with room for future expansion. Previously a parking lot, this building improves upon an old trail which continues through the heart of the campus. Views from the road and along the path show how students circulate the path to an outdoor space at the back of the building.
Institutional Scale Using various camera views, a scale study was conducted using Google SketchUp. The exterior colonade was in question, and the colonade height was determined based on how the space felt when walking around the building.
G R A D U AT E W O R K
07
R e JOIN: RECURSI VE S YSTEM S A ND CO M P O UND W O O D J O I NE RY A CUL M I NATI ON O F GRA DUATE THE S I S RE S E A RCH University of Michigan Fall 2011 - Spring 2012 The research for ReJOIN takes on the design challenges of the digital age and questions the traditional formation of tectonic systems. ReJOIN investigates the possibility of design and production of interlinked wooden structures based on the constraint of structure, joinery, site, and production through recursive relationships. The research is structured around a continuous dialogue between traditional wood craft, algorithmic design technique, and digital fabrication processes, all of which inform the resultant built installation. The project leverages L-system-based computation and embeds logic of self-organization to investigate the hierarchical assembly of interconnected members as part of an emergent whole. By introducing an understanding of these members as autonomous entities with positional-awareness and attraction or rejection based behavior the geometric system is transformed into built structures describing density and porosity, enclosure and openness.
By implementing dynamic processes with recursive logic, material and production constraints, and physical prototyping of complex wooden joints, ReJOIN explores how to design and construct such a system. The combination of computational capabilities with digital fabrication allows the introduction of craft related knowledge into contemporary practice that was previously bound to the skill and knowledge of the trained craftsman. The use of the 5-axis CNC Router allows the cutting of complex multi-member compound angled joints in high speed and variable geometry which allows for mass customization of parts and easier assembly. Thus the implemented system mediates between site conditions, formal design intentions, tectonic needs, and production processes while creating a responsive connection the conceptual and itâ&#x20AC;&#x2122;s physical manifestation.
It is without question that technology is having a profound impact on the field of Architecture, whether it is through design research, digital fabrication, parametric design, or environmental simulation, the long-term effects of these shifts are only beginning to become apparent. An area where the status quo of architectural production is being challenged by the advances of technology is the transformation, or in some cases abandonment, of centuries old techniques of design and representation. In her book Digital Fabrications: Architectural and Material Techniques, Lisa Iwamoto states that “architecture continuously informs and is informed by its modes of representation and construction, perhaps never more so than now, when digital media and emerging technologies are rapidly expanding what we conceive to be formally, spatially, and materially possible. Digital fabrication, in particular, has spurred a design revolution, yielding a wealth of architectural invention and innovation. ”These new techniques offer the architect more freedom in the design process, yet they require a body of knowledge that has been absent from architecture’s required studies until recently: scripting, parametric design, and digital fabrication. For many years, the use of the computer in architecture simply replaced the pencil and paper as a tool, while making very little impact on the design process, but with exponentially increasing computer power and access n architecture schools to advanced robotic fabrication this has changed. As we move forward in an age where digital technologies are revolutionizing both the way that architectural ideas are conceived of and represented, and the means by which those ideas are ultimately constructed, the advancement of these digital tools “offer new and up until now unimaginable venues and possibilities for openness and participation by even nontechnical agents in all stages of design,” while it requires the architect to regain some of the craftsman knowledge that it gave away over the course of history. In his book, The Alphabet and the Algorithm, Mario Carpo asserts that there has been a paradigm shift in the dissemination of architectural ideas from an allographic Albertian framework of notational drawings and replication from drawing to building, to an autographic, pre-Albertian notion of designer-craftsman, that supports mass customization through algorithmic design. “As the digital turn is reshaping the Albertian and modern terms of architectural agency, and architects adjust to a new and untested authorial environment, many transitional hybrids between the old model and the new are likely to be tried out. But the spirit of the game should not be lost, regardless of the roles that architects may be called to play. Open-endedness, variability, interactivity, and participation are the technological quintessence of the digital age. They are here to stay.”
Joint Development While most of the initial joint tests failed in producing functioning physical compound joints, an enormous amount of knowledge was gained and a foundation was built around grasping the back-and-forth relationships in moving between digital design space, digital toolpath output, and CNC methodology.
Plan (Exploded)
Plan (Assembled)
1
2
3
1
2
3
4
Second Generation
Second Generation
2
3
Second Generation
Interlocking
Edge-to-Face /D Mortise-and-Tenon
1
Mortise-and-Tenon
D
C
C
B B
A
B
C
A
A
A
B
C
D
A
B
C A
B
C
D
Second and third generation of physically produced â&#x20AC;&#x153;branchesâ&#x20AC;? increased in success rate and honed in on an aesthetic that was being tailored while also testing for new limitations, including length and size. Joint types evolved to become more producible and reproducible.
Branch_1.py
ing points for B”,rs.filter.point) ptBTranslationHeight = rs.GetReal(“Select starting height for B Points between “ + MinHeightString + “ and “ + MaxHeightString, PtTranslationHeightMin, PtTranslationHeightMin,PtTranslationHeightMax) BBaseAngle = math.degrees(math.acos(ptBTranslationHeight/42)) BBaseWidth = math.sin(math.radians(BBaseAngle))*42 BBaseTranslationVector = rs.VectorCreate((BBaseWidth,0,ptBTranslation Height),(0,0,0))
import rhinoscriptsyntax as rs import math as math import random as random def randomWithinRange(min, max): randomWithinRange = min + (max - min) * random.random() return randomWithinRange
workingPtsCSelect = rs.GetObjects(“Select some points to become starting points for C”,rs.filter.point) ptCTranslationHeight = rs.GetReal(“Select starting height for C Points between “ + MinHeightString + “ and “ + MaxHeightString, PtTranslationHeightMin, PtTranslationHeightMin,PtTranslationHeightMax) CBaseAngle = math.degrees(math.acos(ptCTranslationHeight/42)) CBaseWidth = math.sin(math.radians(CBaseAngle))*42 CBaseTranslationVector = rs.VectorCreate((CBaseWidth,0,ptCTranslation Height),(0,0,0))
randomWithinRange(0,90)
Final ReJoin Script Logics
#Inputs iterations = 6 def FieldofPoints ( ): baseRotation1 = 90 baseRotation2 = 210 baseRotation3 = 330 arcAngle = 30 memberAScale = 1 memberBScale = 1 memberCScale = 1 memberDScale = 1
Elevation
if workingPtsCSelect == None: None else: for pt in workingPtsCSelect: basePt = rs.CopyObject(pt,-CBaseTranslationVector) baseEndPt1 = rs.RotateObject(basePt,pt,baseRotation1 + 60, None, True) baseEndPt2 = rs.RotateObject(basePt,pt,baseRotation1 - 60, None, True) baseEndPt3 = rs.RotateObject(basePt,pt,baseRotation1 + 180, None, True) baseStartPt1 = rs.CopyObject(pt, baseJointTopVector) baseStartPt2 = rs.CopyObject(pt, baseJointMidVector) baseStartPt3 = rs.CopyObject(pt, baseJointBotVector) baseMember1 = rs.AddLine(baseStartPt1,baseEndPt1) baseMember2 = rs.AddLine(baseStartPt2,baseEndPt2) baseMember3 = rs.AddLine(baseStartPt3,baseEndPt3) rs.DeleteObject(basePt)
workingPtsDSelect = rs.GetObjects(“Select some points to become if workingPtsDSelect == None: Upper surface to avoid starting points for D”,rs.filter.point) None ptDTranslationHeight = rs.GetReal(“Select starting height for D Points else: between “ + MinHeightString + “ and “ + MaxHeightString, PtTranslationfor pt in workingPtsDSelect: HeightMin, PtTranslationHeightMin,PtTranslationHeightMax) basePt = rs.CopyObject(pt,-DBaseTranslationVector) DBaseAngle = math.degrees(math.acos(ptDTranslationHeight/42)) baseEndPt1 = rs.RotateObject(basePt,pt,baseRotation1 + 60, DBaseWidth = math.sin(math.radians(DBaseAngle))*42 None, True) DBaseTranslationVector = rs.VectorCreate((DBaseWidth,0,ptDTranslation baseEndPt2 = rs.RotateObject(basePt,pt,baseRotation1 - 60, avoid Height),(0,0,0)) None, True)Field of Points 2. Select AreasWall to to Avoid 3. Select Paths 4. Construct 5. Remove Points Select Designated Areas where voids are desired Select curves that represent circulation routes A grid of starting points are set up based on U and V spacing Delete points from areas design baseEndPt3 = rs.RotateObject(basePt,pt,baseRotation1 + 180, None, True) baseStartPt1 = rs.CopyObject(pt, baseJointTopVector) ptATranslation = rs.VectorCreate((0,0,ptATranslationHeight),(0,0,0)) baseStartPt2 = rs.CopyObject(pt, baseJointMidVector) baseStartPt3 = rs.CopyObject(pt, baseJointBotVector) 24 46 45 ptBTranslation = rs.VectorCreate((0,0,ptBTranslationHeight),(0,0,0)) baseMember1 = rs.AddLine(baseStartPt1,baseEndPt1) 5 6 baseMember2 = rs.AddLine(baseStartPt2,baseEndPt2) 23 ptCTranslation = rs.VectorCreate((0,0,ptCTranslationHeight),(0,0,0)) baseMember3 = rs.AddLine(baseStartPt3,baseEndPt3) rs.DeleteObject(basePt) 4 ptDTranslation = rs.VectorCreate((0,0,ptDTranslationHeight),(0,0,0))
#Lists Iterations = [] templateMember = [] branches = [] testSurfaces = [] 1. Starting=Ground intersectionLines [] Select a surface as a ground condition voidSurfaces = [] truncatedMembers = [] previousBranches = [] pointsA = [] pointsB = [] def=MakeBranches ( ): pointsC [] pointsD = [] workingPtsA = [] workingPtsB = [] workingPtsC = [] workingPtsD = []
“B” 45°
8
50
49 26
42”
38
28
“C” 40°
“D” 35°
MakeBases()
Wall to avoid
10 22 25 57 51 if workingPtsASelect 7== None: def RunStructureSystem(): #Layers 48 47 42” None 11 truncatedMembersLayer = rs.AddLayer(“Truncated Members”) 27 else: #starting with an A-Branch connectedMembersLayer = rs.AddLayer(“Connected Members”) A, B, C, or D 9 17 for ptA in workingPtsASelect: 41 connectionDotLayer = rs.AddLayer(“Connection Dots”) 40 movedPtA = rs.MoveObject(ptA,ptATranslation) if workingPtsA == []: 36 39 1. Point 2. Move Point 3. Create Bases 4. Add Branches 33 5. Cone of Intersection workingPtsA.append(movedPtA) None #Vectors 16 Select points to start Give points a starting height Base members created based on starting height Branch angle determined by input parameters Produces a cone of vision to search for intersection 44 37 # 27 workingPtsA[:] = workingPtsASelect[:] From an A-point comes a B, C, and D branchelse: XAxis = rs.VectorCreate((1,0,0), (0,0,0)) 19 2 56 31 1 33 12 43 YAxis = rs.VectorCreate((0,1,0), (0,0,0)) 13 32 20 if workingPtsBSelect == None: for point in workingPtsA: 15 21 ZAxis = rs.VectorCreate((0,0,1), (0,0,0)) 29 55 30 53 None 14 else: pointCOORD = rs.PointCoordinates(point) def ConstructMembers ( ): joint2Vector = rs.VectorCreate ((0,0,1),(0,0,0)) 35previousBranchAngle = None # workingPtsB[:] = workingPtsBSelect[:] joint3Vector = rs.VectorCreate ((0,0,2),(0,0,0)) 71 for ptB in workingPtsBSelect: for previousBranch in previousBranches: 78 joint4Vector = rs.VectorCreate ((0,0,3),(0,0,0)) 80 72 = rs.MoveObject(ptB,ptBTranslation) 77 previousBranchEndPt = rs.CurveEndPoint(previousBranch) 70 movedPtB baseJointTopVector = rs.VectorCreate ((0,0,.25),(0,0,0)) 74 Pathway 73 workingPtsB.append(movedPtB) previousBranchStartPt = rs.CurveStartPoint(previousBranch) 81 Joint 1 baseJointMidVector = rs.VectorCreate ((0,0,-.75),(0,0,0)) 75 if rs.Distance(previousBranchEndPt, point) > (3*rs.UnitAbsoluA0 76 baseJointBotVector = rs.VectorCreate ((0,0,-1.75),(0,0,0)) if workingPtsCSelect == None: teTolerance()): B0 None None A3 A3 .75” def StartingStuff(): Lower surface to avoid else: .25” A4 else: B2 B2 C1 .75” C2 61 workingPtsC[:] 63 previousBranchAngleTuple = rs.Angle(previousBranchStartPt, .25” 60 = workingPtsCSelect[:] voidSurfaces = rs.GetObjects(“Select Surfaces to avoid”, rs.filter.surface) 62 # 65 .75” 58 for ptC in workingPtsCSelect: previousBranchEndPt) 64 67 #print voidSurfaces B5 59 68 movedPtC = rs.MoveObject(ptC,ptCTranslation) previousBranchAngle = previousBranchAngleTuple[0] memberBase = rs.AddLine((0,0,0), (0,0,42)) 4. Joint 1 Top Surface66 5. Joint 1 Bottom Surface 6. Joint 1 Face Surfaces workingPtsC.append(movedPtC) break Joint 1 member A’s angle”, 45, 30, 60) 3. Offset Triangle rotationA = rs.GetInteger(“Specify 69 rotationB = rs.GetInteger(“Specify member B’s angle”, 40, 30, 60) if workingPtsDSelect == None: #adding a B-Branch (to an A-Branch) rotationC = rs.GetInteger(“Specify member C’s angle”, 35, 30, 60) None startPoint = rs.CopyObject(point, joint2Vector) rotationD = rs.GetInteger(“Specify member D’s angle”, 30, 30, 60) 1. Existing Line 2. Joint 1 Triangle 7. Middle Loft Rail 8. Joint 2 Triangle else: startPointCOORD = rs.PointCoordinates(startPoint) From def Make Branches Variable edge length determines # workingPtsD[:] = workingPtsDSelect[:] pointGUID = (rs.CopyObject(startPoint,vectorB)) the member’s thickness memberA0 = rs.ScaleObject(memberBase, (0,0,0), (memberAScale, for ptD in workingPtsDSelect: point2 = rs.PointCoordinates(pointGUID) memberAScale, memberAScale), True) movedPtD = rs.MoveObject(ptD,ptDTranslation) rs.DeleteObject(pointGUID) memberA = rs.RotateObject(memberA0, (0,0,0), (90-rotationA), YAxis, workingPtsD.append(movedPtD) newLine = rs.AddLine(startPointCOORD,point2) False) if previousBranchAngle == None: startPtA = rs.CurveStartPoint(memberA) newPtsA=[] rotationTestTuple = divmod(len(Iterations)+2, 2) A endPtA = rs.CurveEndPoint(memberA) C D C D A D BrotationTest B newPtsB=[] = rotationTestTuple[1] vectorA = rs.VetorCreate(endPtA,startPtA) newPtsC=[] if rotationTest == 0: newPtsD=[] newLineRotated = rs.RotateObject(newLine, startPointCOmemberB0 = rs.ScaleObject(memberBase, (0,0,0), (memberBScale, ORD, baseRotation1, ZAxis, False) B A Starting Point C memberBScale, memberBScale), True) else: memberB = rs.RotateObject(memberB0, (0,0,0), (90-rotationB), YAxis, def MakeBases(): newLineRotated = rs.RotateObject(newLine, startPointCOFalse) if workingPtsASelect == None: ORD, baseRotation1+180, ZAxis, False) startPtB = rs.CurveStartPoint(memberB) None endPtB1-B = rs.CurveEndPoint(memberB) 2-B 3-B 4-B 5-B-Int 6-B-Int 7-B 8-B 9-B 10-B 11-B 12-B 13-B 14-B 15-B-Int 16-B-Int 17-B 18-B-Int 19-B-Int 20-M 21-M 22-M 23-M 24-M 25-M 26-M 27-M 28-M 29-M 30-M 31-M 32-M 33-M 34-M 35-M 36-M-Int 37-M-Int 38-M-Int 39-T -Int 40-T-Int 41 else: else: vectorB = rs.VectorCreate(endPtB,startPtB) for pt in workingPtsASelect: newLineRotated = rs.RotateObject(newLine, startPointCOORD, basePt = rs.CopyObject(pt,-ABaseTranslationVector) previousBranchAngle+300, ZAxis, False) memberC0 = rs.ScaleObject(memberBase, (0,0,0), (memberCScale, baseEndPt1 = rs.RotateObject(basePt,pt,baseRotation1 + 60, rotatedPoint = rs.CurveEndPoint(newLineRotated) memberCScale, memberCScale), True) None, True) for srf in voidSurfaces: memberC = rs.RotateObject(memberC0, (0,0,0), (90-rotationC), YAxis, baseEndPt2 = rs.RotateObject(basePt,pt,baseRotation1 60, voidSurfaceIntersection = rs.CurveSurfaceIntersection(newLin False) None, True) eRotated, srf) startPtC = rs.CurveStartPoint(memberC) baseEndPt3 = rs.RotateObject(basePt,pt,baseRotation1 + 180, if len(voidSurfaceIntersection) == 0 and voidSurfaces. endPtC = rs.CurveEndPoint(memberC) None, True) index(srf)+1 < len(voidSurfaces): vectorC = rs.VectorCreate(endPtC,startPtC) baseStartPt1 = rs.CopyObject(pt, baseJointTopVector) None D D C elif len(voidSurfaceIntersection) == 0 and voidSurfaces. baseStartPt2 = rs.CopyObject(pt, baseJointMidVector) B (memberDScale, C B A memberD0 = rs.ScaleObject(memberBase, (0,0,0), A baseStartPt3 = rs.CopyObject(pt, baseJointBotVector) index(srf)+1 == len(voidSurfaces): memberDScale, memberDScale), True) baseMember1 = rs.AddLine(baseStartPt1,baseEndPt1) memberD = rs.RotateObject(memberD0, (0,0,0), (90-rotationD), YAxis, baseMember2 = rs.AddLine(baseStartPt2,baseEndPt2) memberLength = rs.CurveLength(newLineRotated) False) baseMember3 = rs.AddLine(baseStartPt3,baseEndPt3) memberStartPt = rs.CurveStartPoint(newLineRotated) Member A B C D startPtD = rs.CurveStartPoint(memberD) rs.DeleteObject(basePt) memberEndPt = rs.CurveEndPoint(newLineRotated) endPtD = rs.CurveEndPoint(memberD) 3/8” Hex B memberRotate1 = rs.RotateObject(newLineRotated, memvectorD = rs.VectorCreate(endPtD,startPtD) if workingPtsBSelect == None: berStartPt, arcAngle, None, True) 45° 40° 35° 30° None memberRotate2 = rs.RotateObject(newLineRotated, memDegree (rotated from vertical) PtTranslationHeightMin = math.cos(math.radians(60))*42 else: berStartPt, -arcAngle, None, True) PtTranslationHeightMax = math.cos(math.radians(30))*42 for pt in workingPtsBSelect: memberRotate1EndPt = rs.CurveEndPoint(memberRotate1) basePt = rs.CopyObject(pt,-BBaseTranslationVector) memberRotate2EndPt = rs.CurveEndPoint(memberRotate2) MinHeightString = str(PtTranslationHeightMin) baseEndPt1 = rs.RotateObject(basePt,pt,baseRotation1 + 60, testArc = rs.AddArc3Pt(memberRotate1EndPt, memberMaxHeightString = str(PtTranslationHeightMax) None, True) Rotate2EndPt, memberEndPt) baseEndPt2 = rs.RotateObject(basePt,pt,baseRotation1 - 60, testArcSrf = rs.AddRevSrf(testArc, newLineRotated, 0, 360) workingPtsASelect = rs.GetObjects(“Select some points to become startNone, True) testArcSrfBorder = rs.DuplicateSurfaceBorder(testArcSrf) ing points for A”,rs.filter.point) baseEndPt3 = rs.RotateObject(basePt,pt,baseRotation1 + 180, testArcSrfBorderPlane = rs.AddPlanarSrf(testArcSrfBorder[0]) ptATranslationHeight = rs.GetReal(“Select starting height for A Points None, True) memberSphere = rs.AddSphere(memberStartPt, memberbetween “ + MinHeightString + “ and “ + MaxHeightString, PtTranslationbaseStartPt1 = rs.CopyObject(pt, baseJointTopVector) Length) HeightMin, PtTranslationHeightMin,PtTranslationHeightMax) baseStartPt2 = rs.CopyObject(pt, baseJointMidVector) testArcSurfaceTuple = rs.SplitBrep(memberSphere, testArcABaseAngle = math.degrees(math.acos(ptATranslationHeight/42)) baseStartPt3 = rs.CopyObject(pt, baseJointBotVector) SrfBorderPlane, True) ABaseWidth = math.sin(math.radians(ABaseAngle))*42 baseMember1 = rs.AddLine(baseStartPt1,baseEndPt1) testArcSurfaceTuple0 = rs.SurfaceArea(testArcSurfaceTup ABaseTranslationVector = rs.VectorCreate((ABaseWidth,0,ptATranslation baseMember2 = rs.AddLine(baseStartPt2,baseEndPt2) le[0]) Height),(0,0,0)) baseMember3 = rs.AddLine(baseStartPt3,baseEndPt3) testArcSurfaceTuple1 = rs.SurfaceArea(testArcSurfaceTup rs.DeleteObject(basePt) le[1]) workingPtsBSelect = rs.GetObjects(“Select some points to become startA
Script Taxonomy A
B, C, D
B
C, D, A
Final Joint Details
C
D, A, B
D
A, B, C
if testArcSurfaceTuple0 < testArcSurfaceTuple1: testArcSurface = testArcSurfaceTuple[0] rs.DeleteObjects((testArcSurfaceTuple[1], testArcSrf, testArcSrfBorder[0], testArcSrfBorder[1], testArcSrfBorderPlane)) else: testArcSurface = testArcSurfaceTuple[1] rs.DeleteObjects((testArcSurfaceTuple[0], testArcSrf, testArcSrfBorder[0], testArcSrfBorder[1], testArcSrfBorderPlane)) rs.DeleteObjects((memberRotate1, memberRotate2)) rs.DeleteObject(testArc)
rotationTestTuple = divmod(len(Iterations)+2, 2) rotationTest = rotationTestTuple[1] if rotationTest == 0: newLineRotated = rs.RotateObject(newLine, startPointCOORD, baseRotation2, ZAxis, False) else: newLineRotated = rs.RotateObject(newLine, startPointCOORD, baseRotation2+180, ZAxis, False)
sLayer)
newPtsD.remove(pt) rs.DeleteObject(pt) else: None else: None rs.DeleteObject(sacPtFinal) break
else: newLineRotated = rs.RotateObject(newLine, startPointCOORD, previousBranchAngle+60, ZAxis, False) rotatedPoint = rs.CurveEndPoint(newLineRotated) for srf in voidSurfaces: voidSurfaceIntersection = rs.CurveSurfaceIntersection(newLin eRotated, srf) if len(voidSurfaceIntersection) == 0 and voidSurfaces. index(srf)+1 < len(voidSurfaces): None elif len(voidSurfaceIntersection) == 0 and voidSurfaces. index(srf)+1 == len(voidSurfaces):
if len(testSurfaces) > 0: for j in testSurfaces: intersectionLine = rs.IntersectBreps(j, testArcSurface) if intersectionLine == [] and testSurfaces.index(j)+1 < len(testSurfaces): None elif intersectionLine == [] and testSurfaces.index(j)+1 == len(testSurfaces): testSurfaces.append(testArcSurface) branches.append(newLineRotated) newPtsB.append(rs.AddPoint(rotatedPoint)) Wall to avoid break memberLength = rs.CurveLength(newLineRotated) else: memberStartPt = rs.CurveStartPoint(newLineRotated) testSurfaceAreaCentroid = rs.SurfaceAreaCentroid(j) memberEndPt = rs.CurveEndPoint(newLineRotated) sacPt = rs.AddPoint(testSurfaceAreaCentroid[0]) memberRotate1 = rs.RotateObject(newLineRotated, memscp = rs.BrepClosestPoint(j,sacPt) berStartPt, arcAngle, None, True) sacPtFinal = rs.AddPoint(scp[0]) memberRotate2 = rs.RotateObject(newLineRotated, memintersectionLineMid = rs.CurveMidPoint(intersectionLine) berStartPt, -arcAngle, None, True) intersectionLineMidPt = rs.AddPoint(intersectionLineMid) memberRotate1EndPt = rs.CurveEndPoint(memberRotate1) 6. Move Points 7. Give points a starting identity 24 points away from paths based on a factor of the inverse of Add points to groups (A, B, C, or D) nated to avoid 13= rotationPt =Move intersectionLineMidPt memberRotate2EndPt rs.CurveEndPoint(memberRotate2) 5 distance from the two nearest paths Pathway rs.DeleteObject(newLineRotated) testArc = rs.AddArc3Pt(memberRotate1EndPt, membernewLineRotated = rs.AddLine(startPointCOORD,rot Rotate2EndPt, memberEndPt) ationPt) testArcSrf = rs.AddRevSrf(testArc, newLineRotated, 0, 360) rotatedPoint = rs.CurveEndPoint(newLineRotated) testArcSrfBorder = rs.DuplicateSurfaceBorder(testArcSrf) 46 testArcSrfBorderPlane = rs.AddPlanarSrf(testArcSrfBorder[0]) connectionDot = rs.AddTextDot(“intersection”,rotati onPt) memberSphere = rs.AddSphere(memberStartPt, member59 testSurfaces.remove(j) Length) 45 58 rs.DeleteObjects((j, testArcSurface, intersectionLine, testArcSurfaceTuple = rs.SplitBrep(memberSphere, testArc27 63 sacPt)) SrfBorderPlane, True) 6 Wall to avoid 62 23 rs.ObjectLayer(newLineRotated, connectedMembertestArcSurfaceTuple0 = rs.SurfaceArea(testArcSurfaceTup
Plan
for pt in newPtsD: if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbsoluteTolerance()):
le[0])
else: testSurfaces.append(testArcSurface) branches.append(newLineRotated) newPtsC.append(rs.AddPoint(rotatedPoint)) else: #print voidSurfaceIntersection newLineEndPtTuple = voidSurfaceIntersection[0] newLineEndPt = newLineEndPtTuple[1] rs.DeleteObject(newLineRotated) newLineRotated = rs.AddLine(startPointCOORD, newLineEndPt) if rs.CurveLength(newLineRotated) < 14.01: rs.DeleteObject(newLineRotated) else: truncatedMembers.append(newLineRotated) rs.ObjectLayer(newLineRotated, truncatedMembersLayer) 8. Run MakeBranches Script on Lists of Points break 27 48
#adding a D-Branch (to an A-Branch) 9 startPoint = rs.CopyObject(point, joint4Vector)
65
startPointCOORD = rs.PointCoordinates(startPoint) pointGUID = (rs.CopyObject(startPoint,vectorD)) point2 = rs.PointCoordinates(pointGUID) 32 rs.DeleteObject(pointGUID)
newLine = rs.AddLine(startPointCOORD,point2) if previousBranchAngle == None: 56 64 rotationTestTuple = divmod(len(Iterations)+2, 2) 41 if testArcSurfaceTuple0 < testArcSurfaceTuple1: rotationTest = rotationTestTuple[1] 14 testArcSurface = testArcSurfaceTuple[0] if rotationTest == 0: 55 47 if rs.Distance(rs.CurveEndPoint(branch),sacPtFin rs.DeleteObjects((testArcSurfaceTuple[1], testArcSrf, tesnewLineRotated = rs.RotateObject(newLine, startPointCO44 15 ORD, baseRotation3, ZAxis, False) al) < (10*rs.UnitAbsoluteTolerance()): tArcSrfBorder[0], testArcSrfBorder[1], testArcSrfBorderPlane)) 2 39 newBranch = rs.AddLine(rs.CurveStartPoint(branch), else: else: 28 51 6. “Snap” to Intersection 7. Recursively Build Additional Levels 8. Recursively Build Additional Levels rotationPt) testArcSurface 36 = testArcSurfaceTuple[1] newLineRotated = rs.RotateObject(newLine, startPointCOWhen an intersection is found, two branches snap to meet and Repeat steps 4-7 from endpoints of branches Repeat steps 4-8 from endpoints of branches branches.remove(branch) rs.DeleteObjects((testArcSurfaceTuple[0], testArcSrf, tesORD, baseRotation3+180, ZAxis, False) create stability 31 11 35 rs.DeleteObject(branch) tArcSrfBorder[0], testArcSrfBorder[1], testArcSrfBorderPlane)) rs.ObjectLayer(newBranch, connectedMemrs.DeleteObjects((memberRotate1, memberRotate2)) else: 75 61 bersLayer) rs.DeleteObject(testArc) newLineRotated = rs.RotateObject(newLine, startPointCOORD, previousBranchAngle+180, ZAxis, False) Joint 2 for pt in newPtsA: if len(testSurfaces) rotatedPoint = rs.CurveEndPoint(newLineRotated) 33 2 > 0: Rail 3 Joint 2 Drill 74 Rail 3 if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbfor j in testSurfaces: for srf in voidSurfaces: Joint 2 Rail 3 Joint 2 Pocket 60 soluteTolerance()): intersectionLine = rs.IntersectBreps(j, testArcSurface) voidSurfaceIntersection = rs.CurveSurfaceIntersection(newLin B0 newPtsA.remove(pt) .75” if intersectionLine == [] and testSurfaces.index(j)+1 < eRotated, srf) 67 C1 21 .25” 80 rs.DeleteObject(pt) if len(voidSurfaceIntersection) == 0 and voidSurfaces. A0 len(testSurfaces): else: None index(srf)+1 < len(voidSurfaces): None elif intersectionLine == [] and testSurfaces.index(j)+1 None Rail 2 Rail 2 Rail 2 28 == len(testSurfaces): for pt in newPtsB: elif len(voidSurfaceIntersection) == 0 and voidSurfaces. 9. Joint 2 Flat Triangle 10. Offset Triangle 11. Joint 2 Surfaces if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbtestSurfaces.append(testArcSurface) index(srf)+1 == len(voidSurfaces): 8 Lower surface to avoid soluteTolerance()): branches.append(newLineRotated) Edge 2 Edge 1 newPtsB.remove(pt) newPtsC.append(rs.AddPoint(rotatedPoint)) memberLength = rs.CurveLength(newLineRotated) rs.DeleteObject(pt) break memberStartPt = rs.CurveStartPoint(newLineRotated) Joint 1 Drill 26 Edge 3 Rail 1 Rail 1 else: else: memberEndPt = rs.CurveEndPoint(newLineRotated) None testSurfaceAreaCentroid = rs.SurfaceAreaCentroid(j) memberRotate1 = rs.RotateObject(newLineRotated, memRail 1 Upper surface to avoid for pt in newPtsC: sacPt = rs.AddPoint(testSurfaceAreaCentroid[0]) berStartPt, arcAngle, None, True) 12. Loft Surface 1 13. Loft Surface 2 14. Loft Surface 3 15. Edge Surface 4 16. Drill Lines / Pocket Lines if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbscp = rs.BrepClosestPoint(j,sacPt) memberRotate2 = rs.RotateObject(newLineRotated, memFrom edge of joint 1 face surface Create surface from 3 naked edges members that continue growth on joint 2, 3/8” soluteTolerance()): sacPtFinal = rs.AddPoint(scp[0]) berStartPt, For -arcAngle, None, True) through the middle loft triangle drill, for intersecting members, 1/4” drill, otherwise to the edge of joint 2 surface no drill newPtsC.remove(pt) intersectionLineMid = rs.CurveMidPoint(intersectionLine) memberRotate1EndPt = rs.CurveEndPoint(memberRotate1) rs.DeleteObject(pt) intersectionLineMidPt = rs.AddPoint(intersectionLineMid) memberRotate2EndPt = rs.CurveEndPoint(memberRotate2) else: rotationPt = intersectionLineMidPt testArc = rs.AddArc3Pt(memberRotate1EndPt, memberNone rs.DeleteObject(newLineRotated) Rotate2EndPt, memberEndPt) for pt in newPtsD: newLineRotated = rs.AddLine(startPointCOORD,rot testArcSrf = rs.AddRevSrf(testArc, newLineRotated, 0, 360) AB C if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbationPt) testArcSrfBorder = rs.DuplicateSurfaceBorder(testArcSrf) soluteTolerance()): rotatedPoint = rs.CurveEndPoint(newLineRotated) testArcSrfBorderPlane = rs.AddPlanarSrf(testArcSrfBorder[0]) newPtsD.remove(pt) connectionDot = rs.AddTextDot(“intersection”,rotati memberSphere = rs.AddSphere(memberStartPt, memberrs.DeleteObject(pt) onPt) Length) D Intersecting Members Truncated Members else: testSurfaces.remove(j) testArcSurfaceTuple = rs.SplitBrep(memberSphere, testArcNone rs.DeleteObjects((j, testArcSurface, intersectionLine, SrfBorderPlane, True) sacPt)) testArcSurfaceTuple0 = rs.SurfaceArea(testArcSurfaceTup else: rs.ObjectLayer(newLineRotated, connectedMemberle[0]) 1-T-Int 42-T-Int 43-T 44-T 45-T 46-T 47-T 48-T 49-T-Int 50-T-Int 51-T 52-T 53-T 54-T 55-T 56-T 57-T 58-Base 59-Base 60-Base 61-Base 62-Base 63-Base 64-Base 65-Base 66-Base 67-Base 68-Base 69-Base 70-Low 71-Low 72-Low 73-low 74-Low 75-Low 76-Low 77-Low 78-Low 79-Low 80-Low 81-Low None sLayer) testArcSurfaceTuple1 = rs.SurfaceArea(testArcSurfaceTup rs.DeleteObject(sacPtFinal) rs.ObjectLayer(connectionDot, connectionDotLayer) le[1]) break if testArcSurfaceTuple0 < testArcSurfaceTuple1: for branch in branches: testArcSurface = testArcSurfaceTuple[0] else: rs.DeleteObjects((testArcSurfaceTuple[1], testArcSrf, tesA testSurfaces.append(testArcSurface) if rs.Distance(rs.CurveEndPoint(branch),sacPtFin tArcSrfBorder[0], testArcSrfBorder[1], testArcSrfBorderPlane)) C branches.append(newLineRotated) al) < (10*rs.UnitAbsoluteTolerance()): else: newPtsB.append(rs.AddPoint(rotatedPoint)) newBranch = rs.AddLine(rs.CurveStartPoint(branch), testArcSurface = testArcSurfaceTuple[1] rotationPt) rs.DeleteObjects((testArcSurfaceTuple[0], testArcSrf, teselse: branches.remove(branch) tArcSrfBorder[0], testArcSrfBorder[1], testArcSrfBorderPlane)) #print voidSurfaceIntersection rs.DeleteObject(branch) rs.DeleteObjects((memberRotate1, memberRotate2)) 1/4” Hex Boltrs.ObjectLayer(newBranch, connectedMemnewLineEndPtTuple = voidSurfaceIntersection[0] rs.DeleteObject(testArc) D newLineEndPt = newLineEndPtTuple[1] bersLayer) B rs.DeleteObject(newLineRotated) if len(testSurfaces) > 0: newLineRotated = rs.AddLine(startPointCOORD, newfor pt in newPtsA: for j in testSurfaces: LineEndPt) if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbintersectionLine = rs.IntersectBreps(j, testArcSurface) Bolt if rs.CurveLength(newLineRotated) < 14.01: soluteTolerance()): if intersectionLine == [] and testSurfaces.index(j)+1 < rs.DeleteObject(newLineRotated) newPtsA.remove(pt) len(testSurfaces): else: rs.DeleteObject(pt) None truncatedMembers.append(newLineRotated) else: elif intersectionLine == [] and testSurfaces.index(j)+1 rs.ObjectLayer(newLineRotated, truncatedMembersLayer) None == len(testSurfaces): break for pt in newPtsB: testSurfaces.append(testArcSurface) if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbbranches.append(newLineRotated) soluteTolerance()): newPtsD.append(rs.AddPoint(rotatedPoint)) newPtsB.remove(pt) break rs.DeleteObject(pt) else: else: testSurfaceAreaCentroid = rs.SurfaceAreaCentroid(j) #adding a C-Branch (to an A Branch) None sacPt = rs.AddPoint(testSurfaceAreaCentroid[0]) startPoint = rs.CopyObject(point, joint3Vector) for pt in newPtsC: scp = rs.BrepClosestPoint(j,sacPt) startPointCOORD = rs.PointCoordinates(startPoint) if rs.Distance(pt,sacPtFinal) < (10*rs.UnitAbsacPtFinal = rs.AddPoint(scp[0]) pointGUID = (rs.CopyObject(startPoint,vectorC)) soluteTolerance()): intersectionLineMid = rs.CurveMidPoint(intersectionLine) point2 = rs.PointCoordinates(pointGUID) newPtsC.remove(pt) intersectionLineMidPt = rs.AddPoint(intersectionLineMid) rs.DeleteObject(pointGUID) rs.DeleteObject(pt) rotationPt = intersectionLineMidPt newLine = rs.AddLine(startPointCOORD,point2) else: rs.DeleteObject(newLineRotated) if previousBranchAngle == None: None newLineRotated = rs.AddLine(startPointCOORD,rot rs.ObjectLayer(connectionDot, connectionDotLayer) 68 2 for branch in branches:
le[1])
66 testArcSurfaceTuple1 = rs.SurfaceArea(testArcSurfaceTup 33 17
69
Recursive Scripting
A simultaneous component to joint testing was developing a script that produce a network tree-like system that recursively developed the properties of each individual branch and node as it applied to its relationship within the system. The script was broken into two components, one that produced the network of lines in place, and another that turned those lines into the three dimensional members that would then be produced. Each step is illustrated below.
ge III - Growth Point Height / Vertical Member Angle Variation 1 (Variation)
2 (Variation)
4 (Variation)
5 (Variation)
7 (Variation)
8 (Variation)
Output 9 (Variation)
Working drawings of the final output; a culmination of joint/branch development and script to be installed in Liberty Lofts, downtown Ann Arbor. The final form contains 81 unique members connected though 26 joints that were cut on the 5-axis CNC router and assembled on site.
Elevation Stage V -Final Form
Upper surface to avoid
Wall to avoid
24
46
45
5
6 23
4 8
50
49
28
26
51
38
25 57
Wall to avoid
10
22
7
47
48
11
27
17
41
9
36 44
2
31
27 33
21
19
43
40
39
1
33
16
37
56
12
13
20
29
30
15
55
32
53 14
80
72
74
75
35
71
78 Pathway
73
77
70 81
76 Lower surface to avoid
63
62
61
60 67
68
65
58
59 66
1-B
2-B
3-B
4-B 5-B-Int 6-B-Int 7-B
8-B
9-B
10-B
11-B
12-B
13-B
14-B 15-B-Int 16-B-Int 17-B 18-B-Int 19-B-Int 20-M 21-M
64
69
22-M 23-M
24-M
25-M
26-M
27-M
28-M
29-M 30-M
31-M
32-M
33-M 34-M 35-M 36-M-Int 37-M-Int 38-M-Int 39-T -Int 40-T-Int 41-T-Int 42-T-Int 43-T 4
Final Joint Details
3/8” Hex Bolt
Standard Connection
Typical Cut Procedure 3/4” 3-Flute Rougher—Swarf Cut 3/8” Rougher—Pocket Operation
Example Assembly Detail
3/8” Drill
44-T
Elevation
Plan Wall to avoid
Upper surface to avoid
Wall to avoid
24
13
5
Pathway
27 48
24
46
46
45
5
6
9
59
23
45
Wall to avoid
8
50
49
28
26
51
38
25 57
47
27
44
27
31
33
21
1
29
30
15
56
55
31
32
14 15
36 35
11
75
53
56
55 39
28
51
12
13
20
2
33
16
37
19
43
40
39
64
69
47
44
9
36
33
41
48
17
41
66
17 2
32
65
23
68
22
58
6
62
Wall to avoid
10
7
11
2
27
63
4
61
14 80
78
72
74
75
35
71
77
70
Pathway
73
33
74 60
81
67
80
76 Lower surface to avoid
63
61
62
60 67
68
66
21
28 8
65
58
59
2
Lower surface to avoid
64 26
69
Upper surface to avoid
1-B
2-B
3-B
4-B 5-B-Int 6-B-Int 7-B
8-B
9-B
10-B
11-B
12-B
13-B
14-B 15-B-Int 16-B-Int 17-B 18-B-Int 19-B-Int 20-M 21-M
22-M 23-M
24-M
25-M
26-M
27-M
28-M
29-M 30-M
31-M
32-M
33-M 34-M 35-M 36-M-Int 37-M-Int 38-M-Int 39-T -Int 40-T-Int 41-T-Int 42-T-Int 43-T 44-T
45-T
46-T
47-T
48-T 49-T-Int 50-T-Int 51-T
52-T
53-T
54-T
55-T
56-T
57-T 58-Base 59-Base 60-Base 61-Base 62-Base 63-Base 64-Base 65-Base 66-Base 67-Base 68-Base 69-Base 70-Low 71-Low 72-Low 73-low 74-Low 75-Low 76-Low 77-Low 78-Low 79-Low 80-Low 81-Low
Final Joint Details
Plan
1/4” Hex Bolt
Wall to avoid
3/8” Hex Bolt 24
13
5
Pathway
27 48
46 9
59 45
27
63 Wall to avoid
58
6
62
2
33
41
31
56 14
55 39
28
51
64
69
47
44 2
32
65
23
66
17
68
15
36 35
11
75
61 33
74
2
Standard Connection
60 67
80
21
28
Typical Cut Procedure
8
Lower surface to avoid
3/4” 3-Flute Rougher—Swarf Cut 3/8” Rougher—Pocket Operation
26
Example Assembly Detail
45-T
46-T
47-T
48-T 49-T-Int 50-T-Int 51-T
3/8” Drill
Upper surface to avoid
52-T
53-T
54-T
55-T
56-T
57-T 58-Base 59-Base 60-Base 61-Base 62-Base 63-Base 64-Base 65-Base 66-Base 67-Base 68-Base 69-Base 70-Low 71-Low 72-Low 73-low 74-Low 75-Low 76-Low 77-Low 78-Low 79-Low 80-Low 81-Low
1/4” Hex Bolt
“Snapped” Connection
Base Connection
“Snapped” Connection
Base Connection
Production and Assembly
08 TEK -TO NI C FORM D AY S PA A DAY S PA DESI G NE D I N MI L FORD , MI CHI G A N University of Michigan Winter 2011 What can a tectonically driven project accomplish? How can it provide experiential differences across multiple programs? Cap and Tray[ed] is a formally driven project that is situated in transitions. In order to achieve this goal, an exploration of “top” and “bottom” like forms were developed as way to hold the proportion of a specific activity then sequentially indexed to create a catalogue of design. After indexing, a formal cross-reference study of the sectional spaces became connected together through lofting to create dynamically interchanging spaces. The result is a sectional set of buildings which house living quarters, communal spaces and spa among other activities in an effort to create an intimate recreational complex. The buildings incorporate the daily functions of the spa to daily visitors, weekend visitors, and the facility members in a way that separates the groups, maintaining a remote intimate setting, only meeting at specific moments where a function requires it.
Versioning The excercise of versioning produces a matrix of activities that can be categorized spatially, linking proportioned space to program. This became a reference for separating or linking the user groups to varius degrees where the program calls for it.
equal
overlap
angle
obtuse
group
depth
width
angle
acute
dna
envelope [insulated|exposed]
spaces
formal typologies | versioning creating a system of spatial relationships that can respond to the indiosyncracies of light/use/topography
When lofted together, the sectional qualities become a continuous, formally changing structure. These section perspectives of the buildings call out the indexed Cap and Tray element that was initially explored.
09 THE P OI NTS [ A 2 ] A MIX ED USE LI VEWO RK STUDI O I N A NN A RBOR, MI CHI G A N University of Michigan Fall 2011 Increasingly today, more people are conducting business near or in their dwellings. Designed as a comprehensive housing studio, this studio project acts to ease Ann Arbor’s demand for downtown housing with any eye towards what the newer trend of residential living brings to the city. Situated off of Main Street [Ann Arbor’s historic commercial district], The Points [A2] blends retail, housing, and work spaces together as “lifestyle synergy.” Living on top of the city’s biggest destination brings housing and retail to a better balance, giving more space for start-up companies to thrive alongside the community. The primary role was to design the structure to house various apartment units/live-work units according to market analysis and code requirements while systems technologies and tectonics play supporting roles.
A
A.1
B
C
D
A
E
A.1
B
C
D
E
A A.1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
7
7
7
8
8
9
9
9
10
10
10
11
11
11
12
12
12
1
B
D
E
Lobby Open To Below
Mechanical Room
8
C
Storeroom
Mechanical Room Open To Below
Open To Below
Ark Office
Retail
Retail
DN DN
13
13
13 DN Open To Below
14
14
14
15
15
15
16
16
16
17
17
17
17.1
17.1 Lower Level Parking 1 1/16" = 1'-0"
Open To Below
17.1 Upper Level Parking 1 1/16" = 1'-0"
1
Level 2 1/16" = 1'-0"
Elevator Penthouse
3
Upper Level - North Tower 1/16" = 1'-0"
1
Roof Plan - North Tower 1/16" = 1'-0"
Community Room Elevator Penthouse
4
Penthouse Level - Central Tower 1/16" = 1'-0"
2
Roof Plan - Central Tower 1/16" = 1'-0"
Elevator Penthouse
Community Room
1
Level 3 1/16" = 1'-0"
5
Penthouse Level - South Tower 1/16" = 1'-0"
3
Roof Plan - South Tower 1/16" = 1'-0"
op Mechanical Room Scenario
South Tower 111 4’x8’ Flat Plate Collectors 3,552 ft² Collection Area
North Tower 114 4’x8’ Flat Plate Collectors Central Tower 111 4’x8’ Flat Plate Collectors 3,648 ft² Collection Area 3,552 ft² Collection Area
Flat Plate Collecter Summary 336 4’x8’ Flat Plate Collectors 10,752 ft² Collection Area
Flat Plate Solar Collectors Thermal Hot Water System
133’ 2”
Seasonal Panel Adjustment Manual Adjustment allows for panel angle optimization without the added cost of a mechanical tracking system
130’ 0”
129’ 0”
Aluminum Panel Facade Modular, 4’ x 3’ Panels that clip into vertical support mullions with rigid insulation beyond supported by light guage steel studs spanning between precast floor panels
120’ 0”
119’ 0”
Exterior Ceiling Insulation Protects against cold thermal bridging in cases where an exposed floor plate is above an open balcony
113’ 8”
Glass Balcony Door Swing glazed doors allow for preferred views while providing more superior infiltration control compared to sliding glass doors 110’ 0”
109’ 0”
Bunched Louvers At balconies, horizontal shading louvers are “bunched” upward to allow for ideal southern views
Handrail Aluminum extrusion top rail with steel wire mesh panelling, ½” spacing
103’ 8”
100’ 0”
99’ 0”
Interior Ceiling Insulation Protects against cold thermal bridging in cases where an exposed baclony is above a non-balcony zone 97’ 1”
Window Fixed, double glazed fenestration in standard sizes to fit with the aluminum panel facade system
92’ 6”
90’ 0”
89’ 0”
Interior Ceiling Insulation Protects against cold thermal bridging in cases where an exposed baclony is above a non-balcony zone
83’ 8”
Prefab Balcony Insulator Rigid insulation and resteel system designed to prevent thermal bridging through concrete floor plates 80’ 0”
79’ 0”
Balcony Resteel Provides additonal support for the cast-in-place balconies due to their custom insulation system
Horizontal Shading Louvers Folded sheet aluminum louvers, 4” deep, that span the southern facade of the building, and “bulge” out at balcony locations, to provide more ideal shading
73’ 8”
70’ 0”
69’ 0”
10 ARCHI TECT URE OF OBJ E CTS DES I G N S TUDI O I N A NN A RBOR, MI CHI G A N University of Michigan Winter 2012 Alongside studies in architecture, I participated in a design studio that researched ways of building architecture and applied them to everyday objects. As a team of 14 students led by late professor and entreprenuer Shawn Jackson, I helped explore and incorporate elements of digital fabrication from my graduate thesis to design and develop joinery tabs that make up lamp structures. Using Rhino and Grasshopper for design and the ZUND CNC knife cutter to carry out the production, the lamps were produced for consumers to assemble by themselves. Usng the IKEA model of â&#x20AC;&#x153;buy by the boxâ&#x20AC;? and self-assemble at home, the packaging is minimized and instructions are universal.