Algorithmic Modelling
Algorithmic Modelling
Algorithmic Modelling
ALGORITHMICMODELLINGWithGRASSHOPPER Introduction Have you ever played with LEGO Mindstorms NXT robotic set? Associative modelling is something like that! While it seems that everything tends to be Algorithmic and Parametric why not architecture? During my Emergent Technologies and Design (EmTech) master course in the Architectural Association (AA), I decided to share my experience in realm of Algorithmic design and Associative Modelling with Grasshopper as I found it a powerful platform for design in this way. I did this because it seems that the written, combined resources in this field are limited (although online resourcesare quietexciting). This ismy firstdraft and Ihope toimprove it andI alsohope that it wouldbehelpfulforyou. MohamadKhabazi 2009MohamadKhabazi Thisbookproducedandpublisheddigitallyforpublicuse.Nopartofthisbookmaybereproducedin anymannerwhatsoeverwithoutpermissionfromtheauthor,exceptinthecontextofreviews. [email protected] www.khabazi.com/flux
III
Contents
Chapter_1_AlgorithmicModelling........................................................................................................1 Chapter_2_TheveryBeginning..............................................................................................................5 2_1_Method.......................................................................................................................................6 2_2_TheverybasicsofGrasshopper..................................................................................................7 2_2_1_Interface,workplace...........................................................................................................7 2_2_2_Components........................................................................................................................8 2_2_3_Datamatching...................................................................................................................14 2_2_4_ComponentsHelp(Contextpopupmenu)......................................................................16 2_2_5_TypeIncomponentsearching/adding............................................................................17 2_2_6_GeometryPreviewMethod..............................................................................................17 2_3_OtherResources .......................................................................................................................18 . Chapter_3_DatasetsandMath...........................................................................................................19 3_1_NumericalDatasets..................................................................................................................20 3_2_OnPointsandPointGrids.........................................................................................................22 3_3_OtherNumericalSets................................................................................................................23 3_4_Functions...................................................................................................................................25 3_5_BooleanDatatypes...................................................................................................................28 3_6_CullPatterns..............................................................................................................................30 3_7_2DGeometricalPatterns ..........................................................................................................35 . Chapter_4_Transformation..................................................................................................................46 4_1_Vectorsandplanes....................................................................................................................48 4_2_Oncurvesandlineargeometries..............................................................................................49 4_3_CombinedExperiment:SwissRe ..............................................................................................57 . 4_4_OnAttractors............................................................................................................................68
IV
Chapter_5_ParametricSpace..............................................................................................................80 5_1_OneDimensional(1D)ParametricSpace..................................................................................81 5_2_TwoDimensional(2D)ParametricSpace..................................................................................83 5_3_Transitionbetweenspaces.......................................................................................................84 5_4_BasicParametricComponents..................................................................................................85 5_4_1_CurveEvaluation...............................................................................................................85 5_4_2_SurfaceEvaluation............................................................................................................86 5_5_OnObjectProliferationinParametricSpace............................................................................88 Chapter_6_DeformationandMorphing.............................................................................................96 6_1_DeformationandMorphing......................................................................................................97 6_2_OnPanelization.........................................................................................................................99 6_3_MicroLevelManipulations.....................................................................................................102 6_4_OnResponsiveModulation.....................................................................................................106 Chapter7_NURBSSurfaceandMeshes.............................................................................................112 7_1_ParametricNURBSSurfaces....................................................................................................113 7_2_Meshvs.NURBS......................................................................................................................124 7_2_1_GeometryandTopology.................................................................................................124 7_3_OnParticleSystems................................................................................................................126 7_4_OnColourAnalysis..................................................................................................................135 7_5_ManipulatingMeshobjectsasawayofDesign......................................................................139 Chapter_8_Fabrication.......................................................................................................................141 8_1_Datasheets..............................................................................................................................143 8_2_LaserCuttingandCuttingbasedFabrication..........................................................................155 Chapter_9_DesignStrategy...............................................................................................................170 Bibliography ...................................................................................................................................174 .
Chapter_1_AlgorithmicModelling
Associative Modelling
Chapter_1_AlgorithmicModelling
Ifwelookatarchitectureasanobjectrepresentedinthespace,wealwaysdealwithgeometryanda bit of math to understand and design this object. In the History of architecture, different architectural styles have presented multiple types of geometry and logic of articulation and each period have found a way to deal with its geometrical problems and questions. Since computers started to help architects, simulate the space and geometrical articulations, it became an integral tool in the design process. Computational Geometry became an interesting subject to study and combination of programming algorithms with geometry yielded algorithmic geometries known as Generative Algorithm. Although 3D softwares helped to simulate almost any space visualized, it is the Generative Algorithm notion that brings the current possibilities of design, like parametric designintherealmofarchitecture. Architectsstartedtousefreeformcurvesandsurfacestodesignandinvestigatespacesbeyondthe limitations of the conventional geometries of the Euclidian space. It was the combination of Architecture and Digital that brought Blobs on the table and then push it further. Although the progress of the computation is extremely fast, architecture has been tried to keep track with this digitalfastpaceprogress. Contemporary architecture after the age of Blob seems to be even more complex. Architectural design is being affected by the potentials of algorithmic computational geometries with multiple hierarchiesandhighlevelofcomplexity.Designingandmodellingfreeformsurfacesandcurvesas buildingelementswhichareassociatedwithdifferentcomponentsandhavemultiplepatternsisnot an easy job to do with traditional methods. This is the time of algorithms and scripts which are forward pushing the limits. It is obvious that even to think about a complex geometry, we need appropriate tools, especially softwares, which are capable of simulating these geometries and controlling their properties. As the result architects feel interested to use Swarms or Cellular AutomataorGeneticAlgorithmstogeneratealgorithmicdesignsandgobeyondthecurrentpalletof available forms and spaces. The horizon is a full catalogue of complexity and multiplicity that combinescreativityandambitiontogether.
Chapter1
Associative Modelling
Fig.1.1. Parametric Modelling for Evolutionary Computation and Genetic Algorithm, Mohamad khabazi,EmergenceSeminar,AA,conductedbyMichaelWeinstock,fall2008. Astepevenforward,nowembeddingthepropertiesofmaterialsystemsindesignalgorithmsseems tobemorepossibleinthisparametricnotion.Lookingforwardmaterialeffectsandtheirresponses tothehostingenvironmentinthedesignphase,nowtheinherentpotentialsofthecomponentsand systems should be applied to the parametric models of the design. So not only these generative algorithmsdoesnotdealingonlywithformgeneration,butalsothereisagreatpotentialtoembed thelogicofmaterialsystemsinthem. Theunderlyinglogicoftheparametricdesigncanbeinstrumentalisedhereasanalternativedesign method,oneinwhichthegeometricrigourofparametricmodellingcanbedeployedfirsttointegrate manufacturingconstraints,assemblylogicsandmaterialcharacteristicsinthedefinitionofsimple components,andthentoproliferatethecomponentsintolargersystemsandassemblies.This approachemploystheexplorationofparametricvariablestounderstandthebehaviourofsucha systemandthenusesthisunderstandingtostrategisethesystemsresponsetoenvironmental conditionsandexternalforces(Hensel,Menges,2008). Toworkwiththecomplexobjects,usuallyadesignprocessstartsfromaverysimplefirstleveland then other layers being added to it; complex forms are comprised of different hierarchies, each associatedwithitslogicsanddetails.Theselevelsarealsointerconnectedandtheirmembersaffect eachotherandinthatsensethismethodcalledAssociative. Generally speaking, Associative modelling relates to a method in which elements of design being builtgraduallyinmultiplehierarchiesandateachlevel,someparametersoftheseelementsbeing extractedtobethegeneratorforotherelementsinthenextlevelandthisgoeson,stepbystepto producethewholegeometry.Sobasicallytheendpointofonecurvecouldbethecenterpointof another circle and any change in the curve would change the circle accordingly. Basically this methodofdesigndealswiththehugeamountofdataandcalculationsandrunsthroughtheflowof algorithms. Instead of drawing objects, Generative Algorithmic modelling usually starts with numbers, mathematics and calculations as the base data to generate objects. Even starting with objects, it extractsparametricdataofthatobjecttomoveon.Anyobjectofdesignhasinfinitepositionsinside,
Chapter1
Associative Modelling
andthesepositionscouldbeusedasthebasedataforthenextstepandprovidemorepossibilities togrowthedesign.TheprocesscalledAlgorithmicbecauseofthispossibilitythateachobjectinthe algorithm generated by previously prepared data as input and has output for other steps of the algorithmaswell. Thepointisthatallthesegeometriesareeasilyadjustableaftertheprocess.Thedesigneralwayshas accesstotheelementsofthedesignproductfromthestartpointuptodetails.Actually,sincethe designproductistheresultofanalgorithm,theinputsofthealgorithmcouldbechangedandthe resultwouldalsobeupdatedaccordingly.Inconventionalmethodsweusedtomodifymodelsand designs on paper and model the final product digitally, to avoid changes which was so time consuming. Any change in the design affected the other geometries and it was dreadful to fix the problemsoccurredtotheotherelementsconnectedwiththechangedelementandallthoseitems shouldbereadjusted,rescaled,andreorientatedifnothappenedtoredraw. Itisnowpossibletodigitallysketchthemodelandgeneratehundredsofvariationsoftheprojectby adjusting some very basic geometrical parameters. It is now possible to embed the properties of materialsystems,Fabricationconstraintsandassemblylogicsinparameters.Itisnowevenpossible torespondtotheenvironmentandbeassociativeinlargersense.Parametricdesignenablesthe recognitionofpatternsofgeometricbehaviourandrelatedperformativecapacitiesandtendenciesof thesystem.Incontinuedfeedbackwiththeexternalenvironment,thesebehaviouraltendenciescan then inform the ontogenetic development of one specific system through the parametric differentiationofitssublocations(Hensel,Menges,2008).
Grasshopper is a platform in Rhino to deal with this Generative Algorithms and Associative modelling. The following chapters are designed in order to combine geometrical subjects with algorithmsandtoaddresssomedesignissuesinarchitectureinanAlgorithmicmethod.
Chapter_2_TheveryBeginning
Chapter_2_TheveryBeginning
2_1_Method BythetimethatyoudownloadedtheGrasshopper,Iamsurethatyouwentthroughthewebsiteand uptonowyouhavesomeideathatwhatisitallaboutandhowitworksgenerally.Youmighthave seensomeoftheonlinevideotutorialsaswell.IfyouhavealookattheGrasshopperPrimerby AndyPayneofLiftArchitects(whichisaddressedintheGrasshopperwebsite),youwillfindalmost allbasicunderstandingofworkingwithcomponentsandsomerelatedsubjectslikevectors,different typesofcurves,surfacesandsoon. I would try not to repeat this great information and I recommend you to go through them, if you havenotyet!SointhefollowingchaptersIwouldtrytofocusondifferentconceptsandexamplesof AssociativeModellingmostlyrelatedtoarchitecture.InmostcasesIassumedthatyoualreadyknow the basic understanding of the ingredients of the discussion and I would not go through the definitionofthedegreeofacurvealthoughIwilltouchsome. TostarttheGrasshopperandhaveageneralideaaboutit,thebesttodoistogotothefollowing linkandchecktheGrasshopperwebpage.Thereissomeusefulinformationthatgivesyouthebasic understandingtostartwith.Youcankeepyourselfupdatedbythediscussionsintheforumaswell. BythewayhereinthischapterIjustbrieflydiscussedaboutgeneralissuesofworkplaceandbasics ofwhatweshouldknowinadvance.
Chapter2
http://grasshopper.rhino3d.com/
2_2_TheverybasicsofGrasshopper 2_2_1_Interface,workplace BesidetheotherusualWindowsmenus,therearetwoimportantpartsintheGrasshopperinterface: ComponentpanelsandCanvas.Componentpanelsprovideallelementsweneedforourdesignand canvasistheworkplace.Youcanclickonanyobjectandclickagainoncanvastobringittowork placeoryoucandragitontotheworkplace.Otherpartsoftheinterfaceareeasytoexploreandwe will be familiar with them throw using them later on. (If you like to know more, just go to http://grasshopper.rhino3d.com/2008/05/interfaceexplained_26.htmlformoredetails)
Fig.2.1.GrasshopperComponentmenuandCanvas.
Chapter2
2_2_2_Components TherearedifferenttypesofobjectsinGrasshoppercomponentmenuwhichweusetodesignstuff. You can find them under nine different tabs called: Params, Logic, Scalar, Vector, Curve, Surface, Mesh,IntersectandXForm.
Parametersareobjectsthatrepresentdata,likeapointorline.Wecandefinethemmanuallyfrom Rhinoobjectsaswell.Componentsareobjectsthatdoactionswiththemlikemove,orientate,and decompose.Weusuallyneedtoproviderelevantdataforthemtowork.InthismanualIusedthe term component to talk about any objects from the component panel to make life easier! and I alwaysuse<>toaddressthemclearlyinthetext,like<Point>.
<Point>component If you rightclick on a component a menu will popup that contains some basic aspects of the component.Thismenucalledcontextpopupmenu.
Contextpopupmenuof<Pt>component
Chapter2
Definingexternalgeometries Most of the time we start our design by introducing some objects from Rhino workplace to the Grasshopper;Apoint,acurve,asurfaceuptomultiplecomplexobjectstoworkonthem.Sinceany object in Grasshopper needs a component in canvas to work with, we can define our external geometriesincanvasbycomponentsintheParamstabunderGeometry.Thereisalistofdifferent typesofgeometriesthatyoucanusetodefineyourobject. Afterbringingthepropergeometrycomponenttothecanvas,defineaRhinoobjectbyrightclickon the component (context menu) and use set one ... / set multiple to assign abject to the component. By introducing an object/multiple objects to a component it becomes a Grasshopper object which we can use it for any purpose. It means we can use our manually created objects or evenscriptgeneratedobjectsfromRhinoinGrasshopper.
10
Fig.2.3.SetpointfromRhinoinGrasshoppercomponent
Fig.2.4. The Grasshopper canvas and three points defined in the canvas which turned to (x) in the Rhino workplace. I renamed the components to point A/B/C by the first option of their menu to recognizethemeasierinGrasshoppercanvas.
Chapter2
11
Componentsandconnections There are so many different actions that we can perform by components. Generally a component takes some data from another source (like parameters) and gives the result back. We need to connectthecomponentwhichincludestheinputdatatotheprocessingcomponentandconnectthe resulttotheothercomponentthatneedsthisresultandsoon. Goingbacktotheexample,nowifyougototheCurvetabofcomponents,inthePrimitivesection youwillseea<line>component.Dragittothecanvas.Thenconnect<pointA>totheAportofthe <line>and<pointB>totheBport(justclickonthesemicircleanddragituptotheothersemicircle onthetarget.YoucanseethatRhinodrawsalinebetweenthesepoints).
Fig.2.5.Connectingthe<point>componentstothe<line>componentbydraggingfromoutputofthe <pointB>totheinputofthe<line>. Now add another <line> component for <point B> and <point C>. Do it again for <point C> and <pointA>withthethird<line>component.Yes!ThereisatriangleinRhino.
Fig.2.6.The<line>componentsdrawlinesbetween<point>components.Asyouseeanycomponent couldbeusedmorethanonceasthesourceofinformationforotheractions.
Chapter2
12
Fig.2.7. Now if you change the position of the points manually in Rhino viewport, the position of points in Grasshopper (X ones) and the triangle will change accordingly and you do not need to redrawyourlinesanymore. As you can see in this very first example, the associative modelling technique made it possible to manipulate the points and still have the triangle between these points without further need to adjustment.Wewilldomorebythisconcept. Input/Output As mentioned before, any component in the grasshopper has input and output which means it processesthegivendataandgivestheprocesseddataback.Inputsareatleftpartofthecomponent and outputs at right. The data comes from any source attached to the input section of the componentandtheoutputofthecomponentistheresultofthatspecificfunction. Youhavetoknowthatwhatsortofinputyouneedforanyspecificfunctionandwhatyougetafter that.Wewilltalkmoreaboutthedifferentsortofdataweneedtoprovideforeachcomponentlater on. Here I propose you to hold your mouse or hover your mouse over any input/output of the components.Atooltipwillpopupandyouwillseethename,sortofdatayouneedtoprovidefor thecomponent,isanypredefineddatathereornot,andevenwhatitforis.
Chapter2
Fig.2.8.Popuptooltip
13
Multipleconnections Sometimesyouneedtofeedacomponentbymorethanonesourceofdata.Imagineintheabove exampleyouwanttodrawtwolinesfrompointAtopointBandC.youcanusetwodifferent<line> components or you can use one <line> component and attach both point B and C as the second pointofthe<line>component.Todothis,youneedtoholdShiftkeywhenyouwanttoconnectthe secondsourceofdatatoacomponentotherwiseGrasshopperwouldsubstituteit(Fig.2.12).When holdingshift,thearrowofthelineappearinagreencirclewithatiny(+)iconwhilenormallyitis gray.YoucanalsouseCtrlkeytodisconnectacomponentfromanother(orusemenu)todisconnect anexistingunwantedconnection.Inthiscasethecirclearoundthearrowappearsinredwithatiny ()icon.
Fig.2.9.Multipleconnectionsforonecomponentbyholdingshiftkey Colourcoding There is a colour coding system inside the Grasshopper which shows the components working status.
Fig.2.10.Thecolourcoding. Any gray component means there is no problem and the data defined correctly/the component workscorrectly.Theorangeshowswarninganditmeansthereisatleastoneproblemthatshould besolvedbutthecomponentstillworks.Theredcomponentmeanserrorandthecomponentdoes not work in this situation. The source of the error should be found and solved in order to make
Chapter2
14
componentworksproperly.Youcanfindthefirsthelpaboutthesourceoferrorinthecomponents contextmenu(contextmenu>Runtimewarning/error)andthensearchtheinputdatatofindthe reason of the error. The green colour means this component selected. The geometry which is associatedwiththiscomponentalsoturnsintogreeninRhinoviewport(otherwiseallGrasshopper geometriesarered). Preview ThecomponentsthatproduceobjectsinRhinohavethePreviewoptionintheirmenu.Wecanuse ittohideorunhideitinthescene.Anyuncheckedpreviewmakethecomponentblackpartbecome hatched.Weusuallyusepreviewoptiontohidetheundesiredgeometrieslikebasepointsandlines incomplexmodelstoavoiddistraction. 2_2_3_Datamatching FormanyGrasshoppercomponentsitisalwayspossibletoprovidealistofdatainsteadofjustone input. So in essence you can provide a list of points and feed a <line> component by this list and drawmorelinesinsteadofone.Itispossibletodrawhundredsofobjectsjustbyonecomponentif weprovideinformationneeded. Lookatthisexample: Ihavetwodifferentpointsetseachwithsevenpoints.Iusedtwo<point>componentsandIused setmultiplepointstointroduceallupperpointsinonecomponentandallloweronesinanother componentaswell.Asyousee,byconnectingthesetwosetsofpointstoa<line>component,seven lines being generated between them. So we can generate more than one object with each component(Fig.2.14)
Fig.2.11.Multiplepointsetsandgeneratinglinesbythem.
Chapter2
15
Butwhatwouldhappenifthenumberofpointswouldnotbethesameintwopoint(data)sets? In the example below I have 7 points in top row and 10 points in the bottom. Here we need a concept in data management in Grasshopper called Data matching. If you have a look at the contextmenuofthecomponentyouseetherearethreeoptionscalled: Shortestlist Longestlist Crossreference LookatthedifferenceintheFigure0.15
Fig.2.12.DatamatchingA:shortestlist,B:longestlistandC:crossreference
Chapter2
16
Itisclearthattheshortestlistusestheshortestdatasettomakethelineswith,andthelongestlist usesthelongestdatasetwhileusesanitemoftheshortestlistmorethanonce.Thecrossreference optionconnectsanypossibletwopointsfromtheliststogether.Itisverymemoryconsumingoption andsometimesittakesawhileforthescenetoupgradethechanges. Since the figures are clear, I am not going to describe more. For more information go to the followinglink:http://grasshopper.rhino3d.com/2008/06/descriptionofdatastreammatching.html 2_2_4_ComponentsHelp(Contextpopupmenu) Asitisnotusefultointroduceallcomponentsandyouwillbetterfindthemandlearnhowtouse themgraduallyinexperiments,Irecommendyoutoplayaround,picksomecomponents,gotothe components context menu (rightclick) and read their Help which is always useful to see how this component works and what sort of data it needs and what sort of output it provides. There are otherusefulfeaturesinthiscontextmenuthatwewilldiscussaboutthemlater.
Fig.2.13.ContextpopupmenuandHelppartofthecomponent
Chapter2
17
2_2_5_TypeIncomponentsearching/adding Ifyouknowthenameofthecomponentthatyouwanttouse,orifyouwanttosearchitfasterthan shuffling the component tab, you can doubleclick on the canvas and typein the name of the componenttobringittothecanvas.Forthosewhousedtoworkwithkeyboardentries,thiswould beagoodtrick!
Fig.2.14. Searching for line component in the componentpopup menu by double clicking on the canvasandtypingthenameofit.Thecomponentwillbebroughttothecanvas. 2_2_6_GeometryPreviewMethod
Fig.2.15. In order to enhance the working speed and get faster updates, whenever your project becomesheavytocalculate,usetheWireframePreviewoption.Itisalwaysfaster.
Chapter2
18
2_3_OtherResources There are so many great online resources and creative ideas that you can check and learn from them.Herearesomeofthem: MainGrasshopperwebpage: http://grasshopper.rhino3d.com/2008/06/someexamplesofgrasshopper.html SomeresourcesonMcNeelWikiWebPages: http://en.wiki.mcneel.com/default.aspx/McNeel/ArchitectureCommunity.html http://en.wiki.mcneel.com/default.aspx/McNeel/ExplicitHistoryExamples.html (Linkstootherresources) Asmentionedbefore,theGrasshopperPrimerfromLiftArchitects: http://www.liftarchitects.com/journal/2009/1/22/thegrasshopperprimer.html Andhundredsofonlinevideotutorialswhichyoucansearcheasily.
Chapter2
Chapter_3_DatasetsandMath
20
Chapter_3_DatasetsandMath
Althoughin3Dsoftwaresweusedtoselectourgeometryfrommenusanddrawthemexplicitlyby clicking without thinking of the mathematical aspects of what we design, in order to work with GenerativeAlgorithms,as thename sounds,we needto thinka bitabout dataand mathto make inputs of algorithm and generate multiple objects. Since we do not want to draw everything manually,weneedsomesourcesofdataasthebasicingredientstomakethisgenerationpossible. Thewayalgorithmworksissimpleandstraightforward.AsIsaid,insteadofcopyingbyclicking100 timesinthescreen,wecantellthealgorithm,copyanitemfor100timesinXpositivedirection.To dothatyouneedtodefinethe100asnumberofcopyingandXPositivedirectionforthealgorithm, anditperformsthejobautomatically.Allwearedoingingeometryhassomepeaceofmathbehind. Wecanusethesesimplemathfunctionsinouralgorithms,incombinationofnumbersandobjects, generateinfinitegeometricalcombinations. Letshavealook;itiseasierthanwhatitsounds! 3_1_NumericalDatasets First of all we should have a quick look at numerical components to see how we can generate differentnumericaldatasetsandthenthewaywecanusethem. Onenumericalvalue The most useful number generator is <Number slider> component (Params > Special > Number slider)thatgeneratesonenumberwhichisadjustablemanually.Itcouldbeinteger,real,odd,even andwithlimitedloweranduppervalues.YoucansetthemallbyEditpartofthecontextmenu. ForsettingonefixednumericvalueyoucangototheParams>Primitive>Integer/Numbertoset onevalue.
Chapter3
21
Seriesofnumbers We can produce a list of discrete numbers by <series> component (Logic > Sets > Series). This componentproducesalistofnumberswhichwecanadjustthestartpoint,stepsizeofthenumbers, andthenumberofvalues. 0,1,2,3,,100 0,2,4,6,,100 10,20,30,40,,1000000
Rangofnumbers We can divide a numerical range between a low and high value by evenly spaced numbers and producearangeofnumbers.Weneedtodefineanintervaltosetthelowerandupperlimitandalso thenumberofstepsbetweenthem(Logic>Sets>Range). 1,2,3,,10 1,2.5,5,,10 1,5,10
Intervals Intervals provide a range of all real numbers between a lower and upper limit. There are one dimensional and two dimensional intervals that we talk about them later. We can define a fixed interval by using Params > Primitive > Interval/interval2 component or we can go to the Scalar > Intervalwhichprovidesasetofcomponentstoworkwiththeminmoreflexibleways. Intervalsbythemselvesdonotprovidenumbers,theyarejustextremes,upperandlowerlimits.As younowthereareinfiniterealnumbersbetweenanytwonumbers.Weusedifferentfunctionsto dividethemandusedivisionfactorsasthenumericalvalues.
Chapter3
22
3_2_OnPointsandPointGrids Points are among the basic elements for geometries and Generative Algorithms. As points mark a specific position in the space they can be a start point of a curve or multiple curves, centre of a circle,originofaplaneandsomanyotherroles.InGrasshopperwecanmakepointsinseveralways. Wecansimplypickapoint/bunchofpointsfromthesceneandintroducethemtoourworkplace by<point>component(Params>Geometry>point)andusethemforanypurposes(Thesepoints could be adjusted and moved manually later on in Rhino scene and affect the whole project. Examplesonchapter_2). We can introduce points by <point xyz> component (vector > point > point xyz) and feed the coordinatesofthepointsbydifferentdatasets,basedonourneeds. Wecanmakepointgridsby<gridhexagonal>and<gridrectangular>components. Wecanextractpointsfromothergeometriesinmanydifferentwayslikeendpoints,midpoints,etc. Sometimeswecanuseplanes(origins)andvectors(tips)aspointstostartothergeometriesand viceversa. Youhaveseentheveryfirstexampleofmakingpointsinchapter_2butletshavealookathowwe canproducepointsandpointsetsby<series>,<range>and<numberslider>componentsandother numericaldataproviders.
Chapter3
Fig.3.1. feeding a <point xyz> component by three <number slider> to make a point by manually feedingtheX,YandZcoordinates.
Fig.3.2. Making a grid of points by <series> and <point xyz> components while the first <number sliders>controls the distance between pointsand the second one controlsthe number of points by controllingthe number of values in<series> component (The data matchof the <pt> set into cross referencetomakeagridofpointsbutyoucantryalldatamatchingoptions).
23
Fig.3.3.Dividinganumericalrangefrom0to1by5andfeedinga<pt>componentwithLongestlist data match. You can see we have 6 points which divided the range by 5 and all points drawn between the origin point and (1, 1) on the Rhino workplace (you can change the lower and upper limitofthe<range>tochangethecoordinatesofthepoint). Since the first experiments look easy, lets go further, but you can have your own investigations aroundthesecomponentsandprovidedifferentpointgridswithdifferentpositionsanddistances. 3_3_OtherNumericalSets Randomdatasets Iwasthinkingofmakingarandomlydistributedsetofpointsforfurtherproductions.AllIneedisa set of random numbers instead of a <series> to feed my <pt> component (I use <pt> instead of <pointxyz>becauseitisshownonthecomponent).SoIpicka<random>componentfromLogic> sets.ToavoidthesamevaluesforX,YandZ,Ineeddifferentrandomnumbersforeach.
Fig.3.4.Makingarandompointset. The <random> component produces 10 random numbers which is controlled by <number slider> and then this list is shuffled by <jitter> component (Logic > Sets > Jitter) for Y coordinate of the pointsonce,andagainforZcoordinates,otherwiseyoucouldseesomesortofpatterninsideyour grid(checkit!).Thedatamatchsettolongestlistagaintoavoidthesesortsofpatternsinthegrid. Inthefigure3.4allpointsaredistributedinthespacebetween0and1foreachdirection.Tochange the distribution area of the points we should change the numerical domain in which random component produces the numbers. This is possible by manually setting the domain of random numeric range on Rhino command line or by defining the domain intervals adjustable by sliders. (Fig.3.5)
Chapter3
24
Fig.3.5.Settingupadomainbyan<interval>component(Scalar>Interval>Interval)toincreasethe distributionareaofthepoints(lookatthedensityofthescenesgridincomparisonwiththeFig.3.4). If you connect only one <number slider> to the domain of the <random> component it just adjusts theupperintervalofthedomain(withloweras0). Fibonacciseries What about making a point grid with nonevenly spaced increasing values? Lets have a look at availablecomponents.WeneedseriesofnumberswhichgrowrapidlyandunderLogictabandSets sectionwecanseea<Fibonacci>component. AFibonacciisaseriesofnumberswithtwofirstdefinednumbers(like0and1)andthenextnumber isthesumoftwopreviousnumbers. N(0)=0,N(1)=1,N(2)=1,N(3)=2,N(4)=3,N(5)=5,,N(i)=N(i2)+N(i1) Herearesomeofthenumbersoftheseries:0,1,1,2,3,5,8,13,21,34,55,89, Asyouseethenumbersgrowrapidly. Here I use <Fibonacci> series (Logic > Sets > Fibonacci) to produce incremental numbers and feed the<pt>componentwiththem.
Fig.3.6. Using <Fibonacci> series to produce increasing distances (noneevenly spaced series of numbers)tomakepoints.Thenumberofpointscouldbecontrolledwitha<numberslider>.
Chapter3
25
3_4_Functions Functionsarecomponentsthatarecapableofperformingmathfunctions.Therearefunctionsfrom onetoeightvariables(Scalar>Expressions).Youneedtofeedafunctionwithdifferentdata(not alwaysnumericbutalsoBoolean,coordinate,etc)anditperformstheuserdefinedfunctiononthe inputdata.Todefinethefunctionyoucanrightclickonthe(F)partofthecomponentandtypeitor go to the Expression Editor. Expression editor has so many predefined functions and a library of mathfunctionsforhelp. Mathfunctions Usingthepredefinedcomponentsisnotalwayswhatweaimedfor,butinordertogetthedesired result we can use mathematical functions to change the data sets and feed them for making geometries. AsimpleexampleisthemathematicalfunctionofacirclethatisX=Sin(t)andY=Cos(t)while(t)isa rangeofnumbersfrom0to2Pi.Iamproducingitbya<range>ofnumberswhichisstartsfrom0to 1byNnumberinbetween,times2Piby<function>thatmeansarangeofnumbersfrom0to2pi thatmakesacompletecircleinradian.
Fig.3.7. Parametric circle by mathematical functions. You have <Sin> and <Cos> functions in the Scalar>Trig.(F(x)=x*2Pi).
Chapter3
Fig.3.8. Series of points which is defined by <Fibonacci> series and simple mathematical functions (x>F(x)=x/100, y>F(x)=x/10). The selected green F(x) is a simple function to add 1 to the <number slider> (x+1) in order to make the values of <series> numbers equal to the Fibonacci numbers. The aimistoshowyouthatwecansimplymanipulatethesedatasetsandgeneratedifferentgeometries accordingly.
26
Fig.3.9. A <range> of numbers from 0 to 2 times by 2Pi with <Function> that make it a numerical range from 0 to 4Pi that feeds the <pt> component by the following math function (X=t*Sin(t),Y=t*Cos(t)). You can reduce all components between <range> and <pt> by two functions to feed the <pt> by definingthewholeprocessinExpressionEditor. Xofpt>F(x)=X*Sin(x*2*Pi) Yofpt>F(x)=X*Cos(x*2*Pi)
Fig.3.10. Inter tangent spirals from two inverted spiral point sets (<range> interval from 0 to 4 multipliedby2Pi,makesthedatasetfrom0to8Piwhichisinvertedforthesecondspiralby<Reverse list>componentfromLogic>Listsas8pito0). First<pt>:X=t*Sin(t),Y=t*Cos(t)inwhicht=0to8Pi Second<pt>:X=t*sin(t),Y=t*Cos(t)inwhicht=8Pito0(<reverselist>)
Chapter3
27
Fig.3.11.Moebiusbypoints X=Sin(u)*(2+v*sin(u/2)) Y=Cos(u)*(2+v*sin(u/2)) Z=v*Cos(u/2) Whileu=0to8Piandv=2to2 Playingaroundthemathfunctionscouldbeendless.Youcanfindsomanymathematicalresources tomatchyourdatasetswiththem.Theimportantpointisthatyoucanmanipulatetheoriginaldata setsandgeneratedifferentnumericalvaluesandfeedothercomponentsbythem. Soasyouseebysomesimplesetofnumericaldatawecanstarttogeneratedifferentgeometries. Sinceweneedtoworkwiththesedatasetsasasourceofourgeometriesletsgofurtherwiththem. Fig.3.12.Ennepersurface,by RhinosMathfunctionplugin. Designingsurfaceswith mathematicalequations.
Chapter3
28
3_5_BooleanDatatypes Data is not limited to Numbers. There are other data types that are useful for other purposes in programming and algorithms. Since we are dealing with algorithms, we should know that the progress of an algorithm is not always linear. Sometimes we want to decide whether to do something or not. Programmers call it conditional statements. And we want to see whether a statementmeetscertaincriteriaornottodecidewhattodonext.Theresponseoftheconditional question is a simple yes or no. in algorithms we use Boolean data to represent these responses. BooleanvaluesaredatatypeswhichrepresentTrue(yes)orFalse(no)valuesonly.Ifthestatement meetsthecriteria,theresponseisTrue,otherwiseFalse.Asyouwillseelater,thisdatatypeisvery usefulindifferentcaseswhenyouwanttodecideaboutsomething,selectsomeobjectsbycertain criteria,sortobjects,etc.
Fig.3.13.HereIgeneratedten<random>valuesandbya<function>componentIwanttoseeifthese numbers are less than a certain <Upper_limit> or not. As you see the <function> is simply X>Y and wheneverthenumbersmeetthecriteria,thefunctionpassesTruetothe<panel>.
Chapter3
29
Fig.3.14.b.Here I used a <Gate And> component (Logic > Boolean > Gate And) and I attached both <function>s to perform Boolean conjunction on them. The result is True when both input Boolean valuesareTrue,otherwiseitwouldbeFalse.Asyousee,thosenumericalvalueswhicharebotheven andbiggerthanthe<Upper_limit>aremeetingthecriteriaandpassTrueattheend.Wewilldiscuss howtousetheseBooleanvalueslater. TherearemultipleBooleanoperatorsonBooleansectionoftheLogictabthatyoucanusetocreate yourcriteriaandcombinemanyofthem.
Chapter3
30
3_6_CullPatterns Therearemanyreasonsthatwemightwanttoselectsomeoftheitemsfromagivendatasetand do not apply a function to all elements. To do this we either need to select some of the specific items from a list or omit other items. There are different ways to achieve this but lets start with omittingorcullinglistsofdata. Uptonowtherearetwo<cull>componentstocullalistofdatainGrasshopper.While<cullNth> omit every N item of the given list of data, <cull pattern> takes a pattern of Boolean values (True/False)andcullalistofdata,basedonthispattern,meansanyitemofthelistthatassociates withTruevalueinBooleanlistwillpassandthosethatassociatewithFalsewillomitfromthelist. IfthenumberofvaluesinthedatalistandBooleanlistarethesame,eachitemofthedatalistbeing evaluated by the same item in the Boolean list. But you can define a simple pattern of Boolean values (like False/False/True/True which is predefined in the component) and <cull> component wouldrepeatthesamepatternforallitemsofthedatalist. Distancelogic I am thinking of selecting some points from a point set based on their distance to another point (referencepoint).Bothpointsetandthereferencepointaredefinedeachbya<point>component. Firstofallwhatweneedisa<distance>component(Vector>Point>Distance)thatmeasuresthe distancebetweenpointsandthe reference.Icomparedthesedistances byauserdefined number (<number slider>) with a <F2> component. This comparison generates Boolean values as output (True/False)toshowwhetherthevalueissmaller(True)orbigger(False)thantheupperlimit.Iam going to use these Boolean values to feed the <Cull pattern> component (the function of <F2> componentdefinedasf=x>y). As mentioned before, <Cull pattern> component takes a list of generic data and a list of Boolean data and omits the members of the generic list of data who associate with the false value of the Boolean list. So the output of the <Call pattern> component is a set of points that associate with Truevalueswhichmeanstheyarecloserthanthespecifiednumbershownonthe<numberslider>, tothereferencepoint,becausetheX>YfunctionalwayspassTrueforthesmallervalues.Toshow thembetterIjustconnectedthemtothereferencepointbyasimpleline.
Fig.3.16.Selectionofpointsfromapointsetbasedontheirdistancefromareferencepointwith<Cull pattern>component.
Chapter3
31
Topography Having tested the first distance logic, I am thinking of selecting some points which are associated withcontourlinesonatopographymodel,basedontheirheight.
Fig.3.17.Topographywithpointsassociatedwithcontourlines. Iwanttoselectthesepointsbasedontheirheight.WhatIhaveisapointsetwhichisdefinedbya <point>component(namedtopography).Ineedtheheightofthepointwiththesamelogicasthe aboveexampletoselectthespecificpoints.HereIuseda<Decompose>component(Vector>Point > Decompose) to get the Z values of these points. I compared these values with a given number (<numberslider>)witha<F2>componenttoproducealistofassociativeBooleanvalues.The<Cull pattern>componentpassesthosewhoassociatedwiththeTruevalueswhichmeansselectedpoints arehigherthantheuserdefinedheightvalue(thefunctionof<F2>componentdefinedasf=x>y).
Chapter3
Fig.3.18.Selectedpointswhicharehigherthan4.7550units!(Auserdefinedvalue).Thesepointsare nowreadytoplantyourPinetrees!!!!
32
Fig.3.19.Makingtrianglesbyanetworkofpoints. Thefirststepistosimplycreateagridofpointsby<series>and<pt>components.Thenextstepis tofindtheproperpointstodrawlinesinbetween.Eachtimeweneedalinestartsfromapointand endsatthenextpointonthenextcolumn,thenanotherlinegoesfromtheretothebackcolumnbut atthenextrowandfinallinegoesbacktothestartpoint.Todothis,itseemsbettertomakethree different lists of points, one for all first points, one for all second points and another for all third pointsandthendrawlinebetweenthem. Icanusetheoriginalpointsasthelistforallstartpints. Thefirstsecondpointisthesecondpointonthepointsetandthenthelistgoesononebyone.Soto selectthesecondpointsIjustshiftedtheoriginallistby<Shiftlist>component(Logic>List>Shift list)byshiftoffset=1toshiftthedatasetbyonevalueandmakethesecondpointslist.(Gotothe <shift list> help to learn more about component). Since the original data is a set of points which makethestartpointsinourexample,theshifteddatawouldbethesecondpointofthetriangles(all secondpointsinthenetwork). Thethirdpointoftrianglesisinthesamecolumnasthestartpointbutinnextrow,soIshiftedthe original list of points again by shift offset=the number of columns (the value comes from the <numberslider>)tofindthesepointsforallpointsetandmakealistofallthirdpoints.
Chapter3
33
tem is the s shifted point by the sh offset va ts hift alue of equa to the nu al umber of Fig.3.20. Selected it swhichproducesallthird dpointsofth hetriangles. columns Tocomp pletethetaskIneedtoo omitsomepointsineach hset.Firstof fallthepoin ntsinthelastcolumn neverco ouldbefirstpointsoftria anglessoIneedtoomitthemfromt thelistofsta artpoints.Th hepoints onthef firstcolumn alsoneverc couldbethe esecondpoi ints,soInee edtoomitt themfromth helistof second pointsandt thesamefor rlastcolumn nagainasth hirdpoints.S Sobasically Iattachedallpoints ch Cull hich omits specific mem mbers of a da set by a number ata lists eac to one <C Nth> component wh whichis scullfrequen ncy(Fig.3.17 7).Inthiscas sealldatase etsculledby thenumber rofcolumnswhichis clearwh hy.SoIjustc connectedth he<numbers slider>toeach<CullNth>componen ntasfrequen ncy.
Fig.3.21. Using <Cul Nth> to o ll omit A. last column, B. first column and c. last column of the first, f seconda andthirdpoi intslists. The nex step is jus to feed th xt st hree <line> c components to connect first points to the seco ond, then secondp pointstothe ethirdandfinallythirdpointstothefirstagain.
Chapter3
34
Fig.3.22.Makinglinesbyconnectingculledlistsofpointstothe<Line>component. Nowbychangingthe<numberslider>youcanhavedifferentgridsofpointswhichproducesthese trianglesaccordingly. Although there are still some problems with our design and we now that we should not start any trianglefromthepointsofthelastrow,buttheconceptisclearsoletsgofurther.Wewillcome backtothisideawhiletalkingaboutmeshgeometriesandthenIwilltrytorefineit.
Chapter3
35
3_7_2DGeometricalPatterns Geometrical Patterns are among the exciting experiments with the Generative Algorithms and in Grasshopper. We have the potential to design a motif and then proliferate it as a pattern which couldbeusedasabaseofotherdesignproductsanddecorations.Incaseofdesigningpatternswe shouldhaveaconceptuallookatourdesign/modelandextractthesimplegeometrythatproduces the whole shape while being repeated. So by producing the basic geometry we can copy it to producethepatternaslargeasweneed(Fig.3.23).
Fig.3.23.Extractingtheconceptofapatternbysimplegeometries. I still insist on working on this models by data sets and simple mathematical functions instead of otherusefulcomponentsjusttoseehowthesesimpleoperationsandnumericaldatahavethegreat potentialtogenerateshapes,evenclassicalgeometries.
Chapter3
36
geometries o Sheikh Lot of tfolah Mosq ques tile wo comprise of simple patterns ork es Fig.3.24. Complex g reatedbyma athematical geometrical lcalculations s.SheikhLotf folahMosqu ue,Isfahan,Ir ran. whichcr Simplelinearpattern n Here I d decided to m make a simp pattern b some inte ple by ersecting line and my a is to dra some es aim aw patterns ssimilartoFigure.3.25.
ofsimplecon nceptstomak kepatterns. Fig.3.25.Exampleso Istarted dmydefiniti ionbya<series>which Iamableto ocontrolthe enumberof values(herepoints) f andthe stepsize(h heredistance ebetweenp points).Byth his<series> Igenerated asetofpointsandI also gen nerated anot ther three d different sets of points with differen Y values w s w nt which I am adjusting a themre elativelybya a<numbersl lider>and<F1>compon nents(y=x/3 3,y=x,y=x/3,y=x+(x/3)ifxisthe numbercomingfrom mthe<numb berslider>).
Chapter3
37
Fig.3.26.Generatingfoursetofpoints,allassociatedwithaone<series>componentwhichcontrols the number and distance of points and another <number slider> which controls the Y value of the pointsets(Iamusinglongestlistforpointsdatamatching). TogetthezigzagformoftheconnectionsIneedtocullthepointsetswith<cullpattern>onewith True/FalseandanotheronewithFalse/Truepatternandthenconnectthemtogether(Fig.3.20).
Fig.3.27.Cullpatternandselectedpointsasabaseforzigzagpattern. SinceIwanttodrawpolylineonthisculledpointsets,Icullallpointsetswiththesamelogicand merge these points to make a one merged stream by <merge 02> component (Logic > Streams > Merge02).
Chapter3
38
Fig.3.28.Cullpatternforthemiddlepointsinvertedtomakethemirroredpatternofthefirstset. Tomakethesecondrowsofpoints,Iusedthesamepointsofthefirstrowandmergethemagain withthesecondrowtohavefourmergeddatastreamsattheend.Ifyouconnectthesemergeddata setstoa<polyline>componentyouwillgetazshapedpolylineandthatisbecausethepointsare notinadesiredorderandthe<merge>componentjustaddthesecondlistofpointsattheendof firstone. So I needto sort the points inthe desired way. A<Sort> component sorts some generic databasedonasortablekey.Whatdowehaveasasortablekey? If we look at the order of the points we can see that the X dimension of the points increases incrementally, which seems suitable as an item to sort our points with. To do this, we need to extract the X coordinate of the points. The <decompose> component make it possible. So we connecttheXcoordinateofthepointsasasortablekeytothe<sort>componentandthensortthe pointswith that. Finally we can use thesesorted points to feed <polyline> components, make our patternwiththem(Fig.3.29).
Chapter3
Fig.3.29. Sorting points by their X component as key and then making polyline with them. I sorted mirroredgeometrybyanother<sort>componentbecausetheyarefromdifferentcullpattern.
39
Fig.3.30.Lateronwewilldiscusshowwecouldcreaterepetitivepatternsbysimplecomponentsand thewaywecanarraythesimplemotiftocreatecomplexgeometries.
Chapter3
40
Circularpatterns There are endless possibilities to create motifs and patterns in this associative modelling method. Figure.3.31showsanothermotifwhichisbasedoncircularpatternsratherthanthelinearone.Since therearemultiplecurveswhichallhavethesamelogicIwilljustdescribeonepartofthealgorithm andkeeptherestforyou.
Fig.3.31.Circulargeometricalpatternswhichisrepeatedinthesecondpicture. Thestartpointofthispatternisadatasetwhichproducesabunchofpointsalongacircle,likethe examplewehavedonebefore.Thisdatasetcouldberescaledfromthecentretoprovidemoreand morecirclesaroundthesamecentre.Iwillcullthesesetsofpointswiththesamewayasthelast example. Then I will generate a repetitive zigzag pattern out of these rescaledcircular points to connectthemtoeachother,makeastarshapecurve.Overlapofthesestarscouldmakemotifsand usingdifferentcullpatternsmakeitmoreinteresting.
Chapter3
Fig.3.32.Providingarangeof0to2PiandbyusingSin/Cosfunctions,makingafirstsetofpoints.The second<numberslider>changestheradiusofthecircle(poweroftheXandY).
41
Fig.3.33.IncreasingthenumbersofSin/Cosfunctionsbya<numberslider>makingthesecondsetof pointswithbiggerradius.
Fig.3.34.Firstandsecondcirclesmadebypoints. Inordertocullthepoints,wecansimplyusethe<Cullpattern>forthepointsanduseTrue/False likethelastexample.Buthowwecansortthelistofpointsafterall?Ifyouconnecttheculledpoints toa<polyline>componentyouwillnotgetastarshapepolylinebuttwooffsetpolygonconnected to each other. Here I think it is better to sort the points based on their index number in the set. Because I produced the points by a <range> component, here we need a <series> component to provide the indices of the points in the list. The N parameter of the <range> factor defines the number of steps of the range so the <range> produces N+1 number. I need a <series> with N+ 1 valuetobetheindexofthepoints(Fig.3.34)andcullandsortthesepointsbasedontheirindices.
Chapter3
42
Fig.3.35.Generatingindexnumberofthepoints.
Chapter3
43
Fig.3.37.GeneratingPolylinebysortedpoints.
Fig.3.38.Starshapedpolyline. Thesamelogiccouldbeusedtocreateamorecomplexgeometrybysimplygeneratingotherpoint sets, culling them and connecting them together to finally produce patterns. We can use these patternsasinputsforotherprocessesanddesignotherdecorativeshapes.
Chapter3
44
Fig.3.39. You can think about different possibilities of the patterns and linear geometries in applications. AlthoughIinsistedtogenerateallpreviousmodelsbydatasetsandsimplemathematicalfunctions, wewillseeothersimplecomponentsthatmadeitpossibletodecreasethewholeprocessorchange thewayweneedtoprovidedata.
Chapter3
45
Fig.3.40.Finalmodel.
Chapter3
Chapter_4_Transformation
47
Transformations
Chapter_4_Transformation
Transformationsareessentialoperationsinmodellingandgeneratinggeometries.Theycanenable us to get variations from the initial simple geometries. Transformations help us to scale and orientateourobjects,move,copyandmirrorthem,ormayresultinaccumulationofobjects, that couldbethedesiredmodelwe.Therearedifferenttypesoftransformationsbuttoclassifyit,wecan divideittomainbranches,thefirstdivisionislinearandthesecondisspatialtransformations.Linear transformationsperformon2Dspacewhilespatialtransformationsdealwiththe3Dspaceandall possibleobjectpositioning. In other sense we can classify transformations by status of the initial object; transformations like translation,rotation,andreflectionkeeptheoriginalshapebutscaleandshearchangetheoriginal stateoftheobject.Therearealsononlineartransformations.Inadditiontotranslation,rotationand reflectionwehavedifferenttypesofshearandnonuniformscaletransformationsin3Dspace,also spiralandhelicaltransformationsandprojectionswhichmakemorevariationsin3Dspace. In order to transform objects, conceptually we need to move and orientate objects (or part of objectslikeverticesorcagecorners)inthespaceandtodothisweneedtousevectorsandplanes as basic constructs of these mathematical/geometrical operations. We are not going to discuss aboutbasicsofgeometryandtheirmathematicallogicherebutfirstletshavealookatvectorsand planesbecauseweneedthemtoworkwith.
Fig.4.1. Transformations provide great potential to generate forms from individuals. Nature has somegreatexamplesoftransformationsinitscreatures.
Chapter4
48
Transformations
4_1_Vectorsandplanes Vectorisamathematical/geometricalobjectthathasmagnitude(orlength)anddirectionandsense. Itstarts from a point, go toward another points with certain length and specific direction. Vectors havewideusageindifferentfieldsofscienceandingeometryandtransformationsaswell.
Fig.4.2.A:BasicelementsofaVector,B:pointdisplacementwithavector. Simply if we have a point and a vector, this vector could displace the point with the distance of vectors magnitude and toward its direction to create a new position for the point. We use this simple concept to generate, move, scale and orientate geometries in our associative modelling method. Planesareanotherusefulsetofgeometriesthatwecandescribethemasinfiniteflatsurfaceswhich hasanoriginpoint.ConstructionplanesinRhinoarethesetypesofplanes.Wecanusetheseplanes toputourgeometriesonthemanddosometransformationsbasedontheirorientationandorigin. Forexampleinthe3Dspacewecannotorientateanabjectonavector!butweneedtwovectorto makeaplanetobeabletoputgeometryonit. Vectors have direction and magnitude while planes have orientation and origin. So they are two differenttypesofconstructsthatcanhelpustocreate,modify,transformandarticulateourmodels. Grasshopper has some of the basic vectors and planes as predefined components. These are includingX,YandZvectorsandXY,XZ,andYZplanes.Therearecoupleofothercomponentswhich wecanproduceandmodifythemwhichwetalkabouttheminourexperiments.Soletsjumpinto designexperimentsandstartwithsomeofthesimpleusageofvectorsandgostepbystepforward.
Chapter4
49
Transformations
4_2_Oncurvesandlineargeometries As we have experimented with points that are 0Dimension geometries now we can start to think about curves as 1Dimensional objects. Like points, curves could be the base for constructing so manydifferentobjects.Wecanextrudeasimplecurvealonganotheroneandmakeasurface,we can connect different curves together and make surfaces and solids, we can distribute any object alongacurvewithspecificintervalsandsomanyotherwaystouseacurveasabasegeometryto generateotherobjects. Displacements We generated so many point grids in chapter 3. There is a component called <Grid rectangular> (Vector > Point > Grid rectangular) which produces a grid of points which are connected together make some cells also. We can control the number of points in X and Y direction and the distance betweenpoints.
Fig.4.3.asimple<GridRectangular>componentwithitspredefinedvalues. You can change the size of grid by a <number slider>. I want to change the Z coordinates of the pointsaswell.SoIneedtochangethebaseplaneofthegrid.Todothis,Iintroduceda<XYplane> component(Vector>Constants>XYplane)whichisapredefinedplaneintheorientationoftheX and Y axis and I displaced it in Z direction by a <Z unit> component (Vector > Constants > Z unit) which is a vector along Z axis with the length (magnitude) of one. I can change the height of this displacementbythesizeofthevectorthrougha<numberslider>thatIconnectedtotheinputof the<Zunit>component.Sobychangingthepositionofthe<XYplane>alongtheZaxistheheightof thegridalsochanges.
Chapter4
50
Transformations
Fig.4.4. Manipulated Grid (selected in green) with one <number slider> for scale of the grid and anotherwitha<Zunit>and<XYplane>tochangetheZcoordinateofthegridspoints.(Furtheryou canjustconnectthe<Z>vectorcomponenttothe<Gridrectangular>componentandgetthesame result). Now if you look at the output of the <grid rectangular> you can see that we have access to the wholepointsaswellasgridcellsandcellcentres.Iamlookingforabunchoflinesthatstartfromthe grid cells centre points and spread out of it to the space. Although we can simply connect these pointsfromthetwo<grid>componentMparttoa<line>component,thelengthoflinesinthiscase wouldbedifferent.ButasIwanttodrawlineswiththesamelength,Ineedanotherstrategy.Here,I amgoingtousea<lineSDL>component.ThiscomponentdrawsalinebyStartpoint(S),Direction (D),andLength(L).SoexactlywhatIneed;Ihavethestartpoints(cellsmidpoint),andlengthofmy lines.Whataboutthedirection?Sincethedirectionofmylinesareinthedirectionofthelinesthat connectthemidpointsofthecellsofthetwogrids,Iamgoingtomakeasetofvectorsbytheseto pointsets.
Chapter4
Fig.4.5. Making vectors from the cells midpoints of the first grid toward the cells midpoints of the second grid by <vector 2pt> component (Vector > Vector > vector 2pt). This component makes vectorsbythestartandendpointofvectors.
51
Transformations
Fig.4.6.The<lineSDL>componentgeneratesbunchoflinesfromthegridcellmidpointsthatspread outintospace.Icanchangethelengthoflinesby<numberslider>.
Fig.4.7.Bysimplyusingan<endpoints>component(Curve>Analysis>Endpoints)andusingthese end points as the base points for a set of <circle> components (Curve > Primitive > Circle) and extruding these circles by <extrude point> component we can generate a set of cones, pointing towardsamedirectionandwecanfinishourfirstexperiment.
Chapter4
52
Transfo ormations
mdisplaceme ents Random I decide to make a set of rand ed a domly distributed pipes (lines) with random len ngth, woven to each n other,m makeafunny yelement.Is sketcheditlikeFigure.4.8 8.
Fig.4.8.Firstsketche esofmodel There are different ways to des sign this mo odel. I am th hinking of ma aking a circle as the bas curve, se divideit tintodesire partsandth hengenerate esomerandomcurvesfr romthesepointsandthenmake pipesby ythesecurve es.Butletss seehowwec candoitinG Grasshopper. AsIsaid d,firstIwan nttodoitw withacirclet todivideita andcreatethebasepoin nts.Iuseda a<circle> compon nent(Curve> >Primitive> >Circle)andIattached a<numbers slider>forfu urtherchang gesofits radius.T Thenweatta achourcircle etoa<divid decurve>com mponent(Cu urve>Divisio on>Dividec curve)to divideth hecircle.Ag gainwecan controlthe numberofd divisionsby aninteger< <numberslid der>.The <Divide curve>componentgivesmethepo ointsonthe curve(asthedivisionpo oints).These earethe rgeneratingourbaselines. firstsetofpointsfor
Chapter4
53
Transformations
Fig.4.9.Dividingthebasecircle. Inthisstep,forsomereasons!Iwanttogeneratethesebaselinesindifferentsegments.Inorderto draw our first step, I need the second set of points, above the first set (to make the lines semi horizontal !!!!) and in a randomly distributed field. To do this, I want to make a set of random vectorsinZdirectionanddisplacethefirstsetofpointswiththeserandomvectors.Byconnecting thefirstandsecondsetsofpointswewouldhaveourfirstpartofourlines. Because I need the same amount of vectors as the base points, I used the value of the <number slider> that controls the amount of base points (circle divisions), to generate the same amount of random vectors. So I connect the <number slider> of <divide curve> component to a <random> componentNparttogenerateNrandomvalues.ThenIuseda<unitZ>componentbutIfeedthis <UnitZ>vectorcomponentwiththe<random>componentsoitproducesNrandomlengthvectors inZdirectionaccordingly.
Fig.4.10.GeneratingrandomlengthvectorsinZdirection.The<numberslider>whichisconnectedto theSpartofthe<random>componentdifferstherandomnumbersasseedofrandomengine. Sonowwearereadytodisplacethepointsbythesevectors.Justbringa<move>component(XForm > Euclidian > Move) to the canvas. Basically a <move> component moves geometries by given vectors.Youcanmoveoneobject/agroupofobjectswithonevector/agroupofvectors.Sinceyou still have the component of the source geometry, the <move> component works like a copy commandinRhino.Toseehowthesevectorsdisplacedthepoints,wecanusea<line>component toseetheresult.
Chapter4
54
Transformations
Chapter4
55
Transformations
Fig.4.14.Finalpipes.Uncheckthepreviewoflines.Itspeedsupyourprocessingtime. Thatsit.Nowyoucanchangetheradiusofthebasecircletodistributethepipesinlarger/smaller areas, you can change the number of pipes (curves), you can change the random seed and pipes radius.TodoallandchecktheresultyoucangototheViewmenuoftheGrasshopperandselect RemoteControlPaneltohavethecontrolpanelforyouradjustmentswhichismuchmoreeasier than the sliders inside the canvas when you want to observe the changes in Rhino scene. To hide/Unhidethecanvas,justdoubleclickonitswindowtitlebar.
Chapter4
56
Transformations
Fig.4.15.RemoteControlPanel(fromviewmenu)andobservingthechangesofthemodel.
Fig.4.16. Although the connections of pipes need a bit more elaboration, for an experiment it is enough.
Chapter4
57
Transformations
4_3_CombinedExperiment:SwissRe Todayitisverycommontodesigntheconceptoftowerswiththisassociativemodellingmethod.It allowsthedesignertogeneratedifferentiatedmodelssimpleandfast.Therearesomanypotentials tovarythedesignproductandfindthebestconceptsquietquickly.HereIdecidedtomodelatower andIthinktheSwissRetowerfromFosterandpartnersseemssophisticatedenoughtostart,for somemodellingexperiments. Letmetellyoutheconcept.Iamgoingtodrawasimpleplanofthetowerandcopyittomakethe floors. Then I will rescale these floors to match the shape, and then I will make the skin of the surfaceandfinallythefaadesstructuralelements.Iwilldotheprocesswithverysimplegeometries forthisstepandalsotosavetime. Lets start with floors. I know that the Swiss Res floors are circles that have some Vshaped cuts aroundit,butIjustuseasimplecircletomakethesectionofthetower.SinceIknowthatithas41 floorsIwillcopythissectionfor41timesInZdirectionwith4metersspaceinbetweenandIwill play around the proportions because I dont know the real dimensions, but I will try to manage it visually.
Fig.4.17. The <circle> component (plan_section) with radius of 20 which is copied by <move> componentalongZdirectionbya<Zunit>vectorcomponentfor41timesabove.TogetthisIuseda <series> component (floors) starts from 0 and has the step size=4 with 41 values. (I renamed the componentstorecognizethemeasily).
Chapter4
58
Transformations
Nowthefirstthing weneedis torescalethese circlestomake theproperfloors. Ineeda <scale> component(XForm>Affine>Scale)torescalethem.The<scale>componentneedsthegeometryto scale,centreforscalingandthefactorofscaling.SoIneedtofeedthegeometrypartofitbyour floorsorcircleswhichis<move>component. The predefined centre of scaling is the origin point, but if we scale all our floors by the origin as centre,theheightofthetowerwouldrescaleandtheplaneofeachfloorwouldchange.Soweneed thecentreofrescalingatthesamelevelatthefloorlevelandexactlyatthecentreofit.SoIuseda <Centre> component (Curve > Analysis > Centre) which gives me the centre of the circles. By connecting it to the <scale> you can see that all circles would rescale in their level without movement.
Fig.4.18. Rescaling floors from their centre point as the centre of scaling, using a <centre> component.Thescaledcirclesareselectedingreen. AlthoughIrescaledthewholecirclesthesame,butweknowthatallfloorsarenotinthesamesize, soweneedtorescaleourfloorsdifferentfromeachother;andweknowthatfromthecirclewhich is grounded on earth they first become bigger up to certain height, look constant on the middle partsandthenbecomesmallerandsmalleruptothetoppointofthetower.SoIneedtoprovidea listofscalefactorsforallfloorswhichare41andagainInowthatthislisthasthreedifferentparts thatifwesaystartsfrom1thenincreasesuptocertainfactor,thenremainconstantinsomefloors and then decreases. If you look at Figure 4.19 you cans see the pictures that give you a sense of these scaling factors. So basically I need to provide a list of data (41 values) which is not strait forwardthistime.
Chapter4
59
Transformations
Fig.4.19. Swiss Re HQ, 30 St Mary Axe, London, UK, 19972004, (Photos from Foster and Partners website, http://www.fosterandpartners.com). ScaleIntervals As I mentioned before, intervals are numeric ranges. They are real numbers from lower limit to upper limit. Since I said real numbers, it means we have infinite numbers in between. They are differenttypesofusageforthesemathematicaldomains.Asweexperimentedbefore,wecandivide anumericalintervalbyacertainnumberandgetdivisionsasevenlydistributednumbersbetween twonumbers. AsIalsomentionedthatwehavethreedifferentpartsforthescalingfactorsofthetower,weneed threedifferentsetofnumbers,thefirstandthelastonesareintervalsandthemiddlepartisjusta real number which is constant. Lets have a look at Figure 4.20. Here I used two <interval> component (Scalar > Interval > Interval) to define two numerical range, one increasing and one decreasing.Theincreasingonestartsfrom1whichIassumedthatthegroundfloorisconstantand thenincreasesupthenumberofthe<numberslider>.Thesecond<interval>startsfrom<number slider> and ends at another <number slider> which is the lower limit. By using the same <number slider>forthemiddlepart,Iamsurethatmiddlepartofthedatasetisthesamefrombothsides.
Chapter4
60
Transformations
Fig.4.20. Two <interval> components, top one increasing and the bottom one decreasing. I do this becauseIdontknowtheexactproportions,butthishelpustodiscussaboutmoreinterestingstuff! Know I have the increasing and decreasing numeric intervals, but to produce the scaling factors I need numbers not ranges. So I am going to use <range> components to divide these numeric intervalsuptocertainnumbers. BecauseIdontknowtheprojectsdata,stillIdonotknowinwhichflooritstartstoremainconstant andwhereitdecreases.Soinordertoassignthesefactorscorrectly,Iamgoingtosplitthefloorsin two parts. I am using a <Split list> component (Logic > List > Split list) and I attach the <series> componentwhichInameditfloorstoittosplitthefloorsintwodifferentparts.ThenIneedtoknow howmanyfloorsarethereineachpartthatlateronIcanchangeitmanuallyandcorrectitvisually. <Listlength>component(Logic>List>Listlength)dothisformeandpassesthenumberofitemsin the list, so I know that how many floors are in the increasing scale part and how many in the decreasingscalepart. Theonlyremainingpartistheconstantfloors.Ijustassumedthatthereare8floorswhichtheirscale doesnot change andI need toomit them from thefloors in theincreasing and decreasing scaling part.SincetwoofthesefloorsareincludedinincreasinganddecreasinglistsasthemaximumscaleI needtoomitanother6floors.SoIjustneedtogetthenumberofthefloorsfrom<listlength>and apply(3)functiontoeach,toomitthese6floorsanddistributethembetweenbothtwolists. And the final trick! Since the <range> component divides the domain to N parts, it produces N+1 number at the end which means 1 more number than we need. So all together I need to add a <function> component by (X4) expression to reduce the number of steps that each <range> componentwantstodivideitsnumericrange.
Chapter4
61
Transformations
Fig.4.21.Generatingthescalefactors. And finally as you can see in the Figure.4.22, I merged all my data by a <merge 8> component to makeaunifiedlistofdatawhichisthenumericfactorsfortheincreasingparts,6constantnumber just coming from the < number slider> (the constant factor between the two range) and the decreasingfactor.The<merge8>componentincludes41scalingfactorthatnowIcanattachtothe <scale>componentandrescaleallfloors.
Chapter4
Fig.4.22. The <merge 8> component includes <range> of increasing numbers, 6 constant numbers (which is the maximum number of the increasing and decreasing parts), and the <range> of decreasingnumbersasoneunifiedlistofdata.
62
Transformations
Fig.4.23.Scalingfactors
Chapter4
63
Transformations
The steel elements around the faade are helical shapes that have the cross section like two connectedtrianglesbutagaintomakeitsimple,Ijustmakethevisiblepartofitwhichisalmostlike atriangle(insection).Iwanttogeneratethesesectionsandthenloftthemtomakeasurface. I started with a <polygon> component (Curve > Primitive > Polygon). I used an <end points> component to get the start/end points of my floors. By attaching these points as the base for <polygon>Icangeneratecoupleofpolygonsonthestartpointsofmyfloors.Iattacheda<number slider> to the <polygon> to control its radius and I set the number of segments to 3 manually. I renamedthe<scale>componenttothe<rescaled_floors>.
Fig.4.25.Polygonspositionedonthefacade.
Chapter4
NowIwanttomakethehelicaltransformationforthepolygons.ForsomereasonsIthinkthatevery floors rotate for 5 degree! So I need to rotate all polygons for 5 degree around the centre of the floors.SoIbroughta<rotate>componenttothecanvas(XForm>Euclidian>Rotate).Geometryis my<polygon>andthebaseofrotationisthecentreofthefloors/<centre>ofcircles.Toproduce the rotation angle I need a list of incremental factors that each time adds 5 degree. So I used a <series> starts from 0 with the step size of 5 and with 41 values which come from the floors and numberof<polygon>also.Theonlythingremainisbecause<rotate>componentworkswithRadian I need to convert Degree to Radian by a <function> which is Radian=Degree * Pi / 180 (There is a predefinedfunctioncalledRAD(x)thatconvertsdegreetoradianalso.Checkthefunctionslibrary).
64
Transformations
Fig.4.26.Rotatingthepolygonsaroundthecentreoffloors,eachfor5degreefromthepreviousone. Now just use a <loft> component to make a surface by connecting all these sections together. To makethesceneclean,uncheckthepreviewofanyunnecessarygeometry. Asyoucansee,wedonthavethetoppointofthetowerbecausewedonthaveanyfloorthere.We knowthat theheight oftower is 180m.So Iadded asimple <point> component(0, 0,180) to the canvas and I attached it to the <polygon> component (by holding shift). So the <polygon> component produces another polygon at the top point of the tower and the number of polygons becomes42.SoIchangedthe<series>componenttoproduce42numbersaswell.Iknowthatthe toppartoftheSwissReismoreelegantthanthismodelbutforourpurposethisisfine.
Chapter4
Fig.4.27.oneofthefaadeelementsmadebythe<loft>component.
65
Transformations
To generate these elements all around the building, I am using a <rotate> component which I attached the <loft> object as source geometry and I used a <range> from 0 to 2Pi divided by a <number slider> as the number of elements, to rotate it all around the circle. Since the centre of rotation is the Z axis at the centre of the tower, and it is predefined on the component, I do not needtochangeitorintroduceanyplaneforrotation.
Fig.4.28.firstsetofspiralelementsaroundthetower.
Chapter4
66
Transformations
Glasscover To cover the whole tower simply with glass, I should go back to the floors component and <loft> them. Again since we dont have any floor at the top point of the tower, I used another <circle> component and I feed it by the top point as the position and I attached it to the <loft> object to maketheloftsurfacecompleteuptotoppoint.
Fig.4.30.a.loftingfloorcurvestomakethefaadesglasscover.
Fig.4.30.b.Theloftedsurfacecoversthewholefaade.IntheSweesReproject,thereistwocolours of glass. If once we decided to make this effect, we can use faade structure to produce different surfacesandrenderthemdifferently.
Chapter4
67
Transformations
4.31.Finalmodel.Althoughitisnotexactlythesame,butforasketchmodelinashorttime,itwould work.
Chapter4
68
Transfo ormations
4_4_OnA Attractors fstatesofa dynamicphysicalsystem mtowardwh hichthatsystemtendsto oevolve, Attractorisasetof essofthesta artingcondit tionsofthe system.Ap pointattractorisanattr ractorconsis stingofa regardle singlest tate.Forexample,amarblerollingin nasmooth,r roundedbow wlwillalway yscometore estatthe lowest p point, in the bottom cen e nter of the b bowl; the fin state of p nal position and motionlessness is a d pointatt tractor.
Fig.4.32.StrangeAtt tractor. Intheca aseofdesignandgeom metry,attract torsareelem ments(usual llypointsbu utcouldbec curvesor anyothe ergeometry)thataffecttheotherge eometriesinthespace,c changetheirbehavioura andmake them di isplace, reo orientate, re escale, etc. T They can ar rticulate the space arou e und themselves and introduc fields of actions with specific rad ce h dius of power. Attractors have diffe erent applications in paramet design since they ha the pote tric ave ential to change the who objects o design co ole of onstantly. Defining gafield,attr ractorscould dalsoaffect themultiple eagentsyste emsinmulti ipleactions. Theway they cou affect th product a the pow of attrac uld he and wer ctors are all adjustable. We go thro ough the conceptofattractor rsindifferent toccasionss soletshavesomeverys simpleexperimentsfirst.
Chapter4
69
Transformations
PointAttractors IhaveagridofpointsthatIwanttogenerateasetofpolygonsonthem.IalsohaveapointthatI named it <attractor_1> and I draw a <circle> around it just to realize it better. I want this <attractor_1> affects all my <polygon>s on its field of action. It means that based on the distance between each <polygon> and the <atractor_1>, and in the domain of the <attractor_1>, each <polygon>respondtotheattractorbychangeinitssize.
Fig.4.33.Base<point_grid>andthe<polygon>sandthe<attractor_1>. Thealgorithmissosimple.Basedonthe<distance>between<attractor_1>andthe<Ptgrid>,Iwant toaffecttheradiusofthe<polygon>,sotherelationbetweenattractorandthepolygonsdefineby theirdistance.Ineeda<distance>componenttomeasurethedistancebetween<attractor_1>and the polygons center or <pt_grid>. Because this number might become too big, I need to <divide> (Scalar>Operators>Division)thisdistancebyagivennumberfrom<numberslider>toreducethe powerofthe<attractor_1>asmuchasIwant.
Chapter4
70
Transformations
Fig.4.35.Byusinga<minimum>component(Scalar>Util>Minimum)andauserdefinednumber,I am telling the algorithm to choose the value from the <div> component, if it is smaller than the numberthatIdefinedasamaximumradiusby<numberslider>.Asyoucanseeinthepictures,those polygonsthatareinthepowerfieldofattractorbeingaffectedandothersareconstant. Nowifyouchangethepositionofthe<attractor_1>intheRhinoworkplacemanually,youcansee thatallpolygonsgettheirradiusaccordingtothe<attractor_1>position.
Chapter4
Fig.4.36. The effect of the <attractor_1> on all polygons. Displacement of the attractor, affects all polygonsaccordingly.
71
Transformations
Fig.4.37.Wiyhthesameconcept,IcandisplacepolygonsinZdirectionbasedonthenumberscoming fromthe<Min>componentorchangingitbymathematicalfunctions,ifnecessary. Simple.Icandoanyotherfunctiononthesepolygonslikerotate,changecolour,etc.Butletsthink whatwouldhappenifIwouldhavetwoattractorsinthefield.Imadeanotherclusterwhichmeans anotherpointinRhinoassociatedwitha<point>and<circle>inGrasshopper. It seems that the first part of the algorithm is the same. Again I need to measure the distance betweenthis<attractor_2>andthepolygonscenteror<pt_grid>andthenfindthe<min>ofthese distancesandthepreviouslydefinedmaximumnumberfortheradius.
Chapter4
72
Transformations
4.39.Findingthecloserattractor.Afterfindingthecloseroneby<min>component,therestofthe processwouldbethesame.Nowall<polygon>sarebeingaffectedbytoattractors.
Fig.4.40. Again you can change the position of the attractors and see how all polygons reacting accordingly. Wecanhavemoreandmoreattractors.Theconceptistofindtheattractorwhichiscloserforeach polygon and apply the effect by selecting that one. Selection in terms of distance happens with <min>functions,butwewilltalkaboutothertypesofselectionlater. There are other ways of dealing with attractors like using <cull> component. In this method you need to provide different lists of data from the distance between points and attractors and then culls those far, select the closer one by simple Boolean function of a>b. since there are multiple examplesonthistopiconline,Ihopeyouwilldothembyyourself.
Chapter4
73
Transformations
CurveAttractors:Wallproject LetscompletethisdiscussionwithanotherexamplebutthistimebyCurveattractorsbecauseinso manycasesyouneedtoarticulateyourfieldofobjectswithlinearattractorsinsteadofpoints. Myaimhereistodesignaporouswallforaninteriorspacetoletmehaveamultipleframedviewto the other side. This piece of work could be cut from sheet material. In my design space, I have a plane sheet (wall), two curves and bunch of randomly distributed points as base points of cutting shapes. I decided to generate some rectangles by these points, cutting them out of the sheet, to makethisporouswall.Ialsowanttoorganizemyrectanglesbythistwogivencurvesoattheend, my rectangles are not just some scattered rectangles, but randomly distributed in accordance to thesecurveswhichhavealeveloforganisationinmacroscaleandcontrolledrandomnessinmicro scale. WhatIneedistogeneratethisbunchofrandompointsanddisplacethemtowardthecurvesbased on the amount of power that they receive from these lines. I also decided to displace the points toward both curves so I do not need to select closer one, but I displace the points based on their distance to the curve. Then I want to generate my rectangles over these points and finally I will definethesizeoftheserectanglesinrelationtotheirdistancetotheattractors.
Fig.4.41. Generating a list of randomly distributed <point>s and introducing the attractors by two <curve> component (Params > Geometry > Curve) over a sheet. I used an <interval> component to define the numeric interval between 0 and <number slider> for the range of random points. I will makeaclusterby<interval>,<random>,<jitter>and<point>tomakethecanvasmoremanageable.
Chapter4
74
Transformations
Fig.4.42.Whentheattractorisapoint,youcansimplydisplaceyourgeometrytowardsit.Butwhen the attractor is a curve, you need to find a relative point on curve and displace your geometry towardsthatspecificpoint.Andthispointmustbeuniqueforeachgeometry,becausethereshould beaonetoonerelationbetweenattractorandanygeometryinthefield.Ifweimagineanattractor likeamagnet,itshouldpullthegeometryfromitsclosestpointtotheobject.SobasicallywhatIfirst need is to find the closest point of <Rnd_pt_grid> on both attractors. These points are the closest points on the attractors for each member of the <Rnd_Pt_Grid> separately. I used <Curve CP> component (Curve > Analysis > Curve CP) which gives me the closest point of the curve to my <Rnd_Pt_Grid>.
Chapter4
Fig.4.43. In order to displace the points towards the attractors, I need to define a vector for each point in <Rnd_Pt_Grid>, from the point to its closest point on the attractors. Since I have the start andendpointofthevectorIamusinga<vector2Pt>componenttodothat.Thesecondpointofthe vector(Bportofthecomponent)istheclosestpointonthecurve.
75
Transformations
Fig.4.44. Now I connected all my <Rnd_Pt_Grid> to two <move> components to displace them towardstheattractors.ButifIusethevectorwhichIcreatedinthelaststep,itdisplacesallpoints ontothecurveandthatsnotwhatIwant.Iwanttodisplacethepointsinrelationtotheirdistanceto the attractor curves. If you look at the <Curve CP> component it has an output which gives us the distance between the point and the relevant closest point on the curve. Good. We do not need to measurethedistancebyanothercomponent.Ijustuseda<Function2>componentandIattached the distance as X and a <number slider> to Y to divide the X/Log(Y) to control the factor of displacement(Logfunctionchangethelinearrelationbetweendistanceandtheresultingfactorfor displacement). Ijustuseda<multiply>component(Vector>Vector>Multiply),Iattachedthe<vector2P>asbase vectorandIchangeditssizebythefactorIcreatedbydistance,andIattachedtheresultingvector tothe <move>components whichdisplaces the <Rnd_Pt_Grid>in relationto theirdistance to the attractors,andtowardsthem.
Chapter4
76
Transformations
Fig.4.45. The <number slider> changes the power with which attractors displace objects towards themselves.
Chapter4
77
Transformations
Fig.4.47.ManipulatingthevariableswouldresultindifferentiatedmodelsthatIcanchoosethebest oneformydesignpurpose.
Chapter4
78
Transfo ormations
Fig.4.48.Differentsh hadoweffectsofthefinaldesignproductasaporouswallsystem. t a d r s
Chapter4
79
Transformations
Fig.4.49.Finaldesignproduct.
Chapter4
Chapter_5_ParametricSpace
81
Parametric Space
Chapter_5_ParametricSpace
OursurveyinGeometrylooksforobjectsinthespace;Digitalrepresentationofformsandtectonics; different articulation of elements and multiple processes of generations; from classical ideas of symmetryandpatternuptoNURBSandcurvaturecontinuity. Wearedealingwithobjects.Theseobjectscouldbeboxes,spheres,cones,curves,surfacesorany articulation of them. In terms of their presence in the space they generally divided into points as 0dimensional, curves as 1dimensional, surfaces as 2dimensional and solids as 3dimensional objects. We formulate the space by coordinate systems to identify some basic properties like position, directionandmeasurement.TheCartesiancoordinatesystemisa3dimensionalspacewhichhasan OriginpointO=(0,0,0)andthreeaxisintersectingatthispointwhichmaketheX,YandZdirections. Butweshouldconsiderthatthis3Dcoordinatesystemalsoincludestwodimensionalsystemflat space(x,y)andonedimensionlinearspace(x)aswell.Whileparametricdesignshiftsbetween thesespaces,weneedtounderstandthemasparametricspaceabit. 5_1_OneDimensional(1D)ParametricSpace TheXaxisisaninfinitelinewhichhassomenumbersassociatedwithdifferentpositionsonit.Simply x=0 means the origin and x=2.35 a point on the positive direction of the X axis which is 2.35 unit awayfromtheorigin.Thissimple,onedimensionalcoordinatesystemcouldbeparameterisedinany curve in the space. So basically not only the World X axis has some real numbers associated with differentpositionsonit,butalsoanycurveinthespacehasthepotentialtobeparameterizedbya series of real numbers that show different positions on the curve. So in our 1D parameter space when we talk about a point, it could be described by a real number which is associated with a specificpointonthecurvewearedealingwith. ItisimportanttoknowthatsincewearenotworkingontheworldXaxisanymore,anycurvehasits own parameter space and these parameters does not exactly match the universal measurement systems.AnycurveintheGrasshopperhasaparameterspacestartsfromzeroandendsinapositive realnumber(Fig.5.1).
Chapter5
82
Parametric Space
Fig.5.2.1Dparmeterspaceandconversionin3Dcoordinatesystem.
Chapter5
83
Parametric Space
5_2_TwoDimensional(2D)ParametricSpace Two axis, X and Y of the World coordinate system deals with the points on an infinite flat surface that each point on this space is associated with a pair of numbers p=(X,Y). Quite the same as 1D space,herewecanimaginethatallvaluesof2Dspacecouldbetracedonanysurfaceinthespace. So basically we can parameterize a coordinate system on a curved surface in the space, and call differentpointsofitbyapairofnumbershereknownasUVspace,inwhichP=(U,V)onthesurface. Againwedonotneedtoworkwith3valuesof(X,Y,Z)as3Dspacetofindthepointandinsteadof thatwecanworkwiththeUVparametersofthesurface.(Fig.5.3)
Fig.5.3.UV(2D)parameterspaceofsurface. These Parameters are specific for each surface by itself and they are not generic data like the World coordinate system, and thats why we call it parametric! Again we have access to the 3D equivalentcoordinateofanypointonthesurface(Fig.5.4).
Chapter5
Fig.5.4.EquivalentofthepointP=(U,V)ontheworldcoordinatesystemp=(X,Y,Z).
84
Parametric Space
5_3_Transitionbetweenspaces It is a crucial part in parametric thinking of design to know exactly which coordinate system or parameter space we need to work with, in order to design our geometry. Working with free form curvesandsurfaces,weneedtoprovidedataforparameterspacebutwealwaysneedtogoback and forth for the world coordinate system to provide data for other geometry creations or transformations etc. It is almost more complicated in scripting, but since Grasshopper has a visual interface rather than code, you simply identify which sort of data you need to provide for your designpurpose. Considerthatitisnotalwaysaparameteroravalueinacoordinatesystemthatweneedinorderto call geometries in Generative Algorithms and Grasshopper, sometimes we need just an index numbertodoit. Ifweare workingwitha bunchofpoints, linesorwhatever, andtheyhave been generated as a group of objects, like point clouds, since each object associated with a natural numberthatshowsitspositioninalistofallobjects,wejustneedtocallthenumberoftheobjectas indexinsteadofanycoordinatesystem.Theindexnumberinglikearrayvariablesinprogrammingis a0basedcountingsystemwhichstartsfrom0(Fig.5.5).
Fig.5.5. Index number of a group of object is a simple way to call an on object. This is 0based countingsystemwhichmeansnumbersstartfrom0. Soasmentionedbefore,inAssociativemodellingwegenerateourgeometriesstepbystepassome related objects and for this reason we go into the parameter space of each object and extract specificinformationofitanduseitasthebasedataforthenextsteps.Thiscouldbestartedfroma simplefieldofpointsasbasicgeneratorsandendsupatthetinydetailsofthemodel,indifferent hierarchies.
Chapter5
85
Parametric Space
5_4_BasicParametricComponents 5_4_1_CurveEvaluation The<evaluate>componentisthefunctionthatcanfindthepointonacurveorsurface,basedonthe parameter you feed. The <evaluate curve> component (Curve > Analysis > Evaluate curve) takes a curveandaparameter(anumber)andgivesbackapointoncurveonthatparameter.
Fig.5.6. The evaluated point on <curve> on the specific parameter which comes from the <number slider>.
Chapter5
Fig.5.7.Wecanuse<series>ofnumbersasparametersto<evaluate>insteadofoneparameter.In theaboveexample,becausesomenumbersofthe<series>componentarebiggerthanthedomainof the curve, you see that <Evaluate> component gives us warning (becomes orange) and that points arelocatedontheimaginarycontinuationofthecurve.
86
Parametric Space
Fig.5.8. Although the D output of the <curve> component gives us the domain of the curve (minimum and maximum parameters of the curve), alternatively we can feed an external <curve> component from Param > Geometry and in its context menu, check the Reparameterize section. It changes the domain of the curve to 0 to 1. So basically I can track all <curve> long by a <number slider>oranynumericalsetbetween0and1andnotbeworrythatparametermightgobeyondthe numericaldomainofthecurve. ThereareotherusefulcomponentsforparameterspaceoncurvesonCurves>AnalysisandDivision thatwetalkaboutthemlater. 5_4_2_SurfaceEvaluation While for evaluating a curve we need a number as parameter (because curve is a 1Dspace) for surfaces we need a pair of numbers as parameters (U, V), with them, we can evaluate a specific pointonasurface.Weuse<evaluatesurface>component(Surface>Analysis>Analysis)toevaluate apointonasurfaceonspecificparameters. We can simply use <point> components to evaluate a surface, by using it as UV input of the <Evaluatesurface>(itignoresZ dimension)andyoucan trackyourpointson thesurfacejustby X andYpartsofthe<point>asUandVparameters.
Chapter5
87
Parametric Space
Fig.5.9.Apoint<Evaluate>donthe<surface>baseontheU,Vparameterscomingfromthe<number slider>witha<point>componentthatmakethemapairofNumbers.Againlikecurvesyoucancheck theReparameterizeonthecontextmenuofthe<surface>andsetthedomainofthesurface0to1 in both U and V direction. Change the U and V by <number slider> and see how this <evaluated> pointmovesonthesurface(IrenamedtheX,Y,ZinputsofthecomponenttoU,V,manually).
Fig.5.10.Sincewecanuse<point>to<evaluate>a<surface>asyouseewecanuseanymethodthat weusedtogeneratepointstoevaluateonthe<surface>andouroptionsarenotlimitedjusttoapair of parameters coming from <number slider>, and we can track a surface with so many different ways.
Chapter5
88
Parametric Space
5_5_OnObjectProliferationinParametricSpace For so many design reasons, designers now use surfaces to proliferate some other geometries on them. Surfaces are flexible, continues two dimensional objects that prepare a good base for this purpose.TherearemultiplemethodstodealwithsurfaceslikePenalisation,buthereIamgoingto startwithoneofthesimplestoneandwewilldiscussaboutsomeothermethodslater. We have a freeform surface and a simple geometry like a box. The question is, how we can proliferatethisboxoverthesurface,inordertohaveadifferentiatedsurfacei.e.asanenvelope,in thatwehavecontrolofthemacroscale(surface)andmicroscale(box)ofthedesignseparately,but inanassociativeway. Inordertodothis,weshoulddealwiththissurfaceissuebydividingittodesiredpartsandgenerate our boxes on these specific locations on the surface and readjust them if we want to have local manipulationoftheseobjects. Generatingthedesiredlocationsonthesurfaceiseasy.Wecandividesurfaceorwecangenerate somepointsbasedonanynumericaldatasetthatwewant. About the local manipulation of proliferated geometries, again we need some numerical data sets whichcouldbeusedfortransformationslikerotation,localdisplacement,resize,adjustment,etc.
Chapter5
Fig.5.12.Afreeform,reparameterized,<surface>being<evaluate>dbyanumeric<range>from0to 1, divided by 30 steps by <number slider> in both U and V direction. (Here you can use <divide surface> but I still used the <point> component to show you the possibilities of using points in any desiredway).
89
Parametric Space
Fig.5.13.Asyouseethe<evaluate>componentgivesNormalandplaneofanyevaluatedpointson the surface. I used these frames to generate series of <box>es on them while their sizes are being controlledby<numberslider>s. Inordertomanipulatetheboxeslocally,Ijustdecidedtorotatethem,andIwanttosettherotation axistheYdirectionofthecoordinatesystemsoIshouldusetheXZplaneasthebaseplanefortheir rotation(Fig.5.13).
Fig.5.14.Localrotationofthebox.
Fig.5.15. The <rotate> component needs geometry which I attached <box>es and rotation angle thatIusedrandomvalues(youcanrotatethemgraduallyoranyotherway)andIsettheNumberof randomvaluesasmuchasboxes.Finallytodefinetheplaneofaxis,Igenerated<XZplane>sonany pointthatI<evaluate>donthe<surface>andIattachedittothe<rotate>component.
Chapter5
90
Parametric Space
Fig.5.16.Finalgeometry.
Chapter5
91
Parametric Space
Nonuniformuseofevaluation DuringaprojectthisideacametomymindthatwhyshouldIalwaysusetheuniformdistributionof thepointsoverasurfaceandaddcomponentstoit?CanIsetsomecriteriaandevaluatemysurface basedonthatandselectspecificpositionsonthesurface?OrsinceweusetheU,Vparameterspace andincrementaldatasets(orincrementalloopsinscripting)arewealwayslimitedtoarectangular divisiononsurfaces? There are couple of questions regarding the parametric tracking a surface but here I am going to deal with a simple example to show how in specific situations we can use some of the U,V parametersofasurfaceandnotauniformrectangulargridoverit. SocialSpace I have two Freeform surfaces as covers for a space and I think to make a social open space in between. I want to add some columns between these surfaces but because they are freeform surfacesandIdontwanttomakeagridofcolumns,Idecidedtolimitthecolumnslengthandadd asmanyplacesaspossible.Iwanttoaddtwoinvertedandintersectedconeascolumnsinthisspace justtomaketheshapeofthemsimple.
Chapter5
Fig.5.17.Primarysurfacesascoversofthespace.
92
Parametric Space
Fig.5.18.IintroducedsurfacestoGrasshopperby<srf_top>and<srf_bottom>andIReparameterized them. I also generated a numerical <range> between 0 and 1, divided by <number slider>, and by usinga<point>componentI<evaluate>thesesurfacesatthat<points>.Againjusttosaythatstillit isthesameassurfacedivision.
Chapter5
Fig.5.19. I generated bunch of <line>s between all these points, but I also measured the distance betweenanypairofpoints(wecanuselinelengthalso),asIsaidIwanttolimittheselinesbytheir length.
93
Parametric Space
94
Parametric Space
Fig.5.22.Byusingan<endpoints>componentIcangetthebothendsofthecolumn.SoIattached these points as base points to make <circle>s with given radius. But you already know that these circlesareflatbutoursurfacesarenotflat.SoIneedto<project>mycirclesonsurfacestofindtheir adjustedshape.SoIuseda<project>component(Curve>Util>Project)forthisreason.
Chapter5
Fig.5.23.Thefinalstepistoextrudetheseprojectedcirclestowardsthespecifiedpointsoncolumns axis (Fig.5.20). So I used <extrude point> component (Surface > Freeform > Extrude point) and I connectedthe<project>edcirclesasbasecurves.Fortheextrusionpoint,Iattachedallcolumnsaxis to a simple <curve> component and I Reparameterized them, then I <evaluate>d them in two specificparameterof0.6fortopconesand0.4forbottomcones.
95
Parametric Space
Fig.5.24. Although in this example, again I used the grid based tracking of the surface, I used additionalcriteriatochoosesomeofthepointsandnotallofthemuniformly.
Fig.5.25.Finalmodel.
Chapter5
Chapter_6_DeformationandMorphing
97
Chapter_6_DeformationandMorphing
6_1_DeformationandMorphing DeformationandMorphingareamongthepowerfulfunctionsintherealmoffreeformdesign.By deformationswecantwist,shear,blend,geometriesandbyMorphingwecandeformgeometries fromoneboundaryconditiontoanother. Letshavealookatasimpledeformation.Ifwehaveanobjectlikeasphere,weknowthatthereisa boundingbox (cage) around it and manipulation of this boundingbox could deform the whole geometry.
Fig.6.1.DeformationbyBoundingbox(cage). Based on different manipulations, we might call it shear or blend or free deformation. For any deformationfunction,wemightneedthewholeboundingbox,orjustoneofitssidesasaplaneor even one of the points to deform. If you check different deformation components in Grasshopper youcaneasilyfindthebasegeometricalconstructstoperformthedeformations. Morphinginanimationmeanstransitionfromonepicturetoanothersmoothlyorseamlessly.Here in3Dspaceitmeansdeformationfromonestateorboundaryconditiontoanother.TheMorphing components in Grasshopper work in the same fashion. There are two <morph> components, one deformanobjectfromareferencebox(BoundingBox)toatargetbox,theothercomponentworks with a surface as a base on that you can deform your geometry, on the specified domains of the surfaceandheightoftheobject.
Chapter6
98
Thefirstoneis<BoxMorph>andthenextoneis<SurfaceMorph>bothfromXFormtabunderthe Morph section. Since we have couple of commands that deform a box, if we use these deformed boxesastargetboxesthenwecandeformanygeometryinGrasshopperbycombinationwithBox Morphcomponent. As you see in Figure.6.2 we have an object which is introduced to Grasshopper by a <Geometry> component. This object has a boundingbox around it which I draw here just to visualize the situation.Ialsodrawanotherboxbymanuallyfeedingvalues.
Fig.6.2.Objectandmanuallydrawnbox.
Chapter6
Fig.6.3. The <Box morph> component (XForm > Morph > Box morph) deforms an object from a referenceboxtoatargetbox.BecauseIhaveonlyonegeometryIattacheditasaboundingboxor referenceboxtothecomponentbutinothercases,youcanuse<Boundingbox>component(Surface > Primitive > Bounding box) to use as the source box. I unchecked the preview of the <Box> componenttoseethemorphedgeometrybetter.
99
Fig.6.4.Nowifyousimplychangethesizeofthetargetboxyoucanseethatthemorphedgeometry wouldchangeaccordingly.
Fig.6.5.hereyouseethatinsteadofonebox,ifIproducebunchofboxes,wecanstarttomorphour object more and more. As you see the differentiated boxes by the <series> component in their Y dimension,showthedifferentiationinthemorphedobjectaswell. 6_2_OnPanelization One of the most common applications of the morphing functions is Panelization. The idea of panelizationcomesfromthedivisionofafreeformsurfacegeometryintosmallpartsespeciallyfor fabricationissues.Althoughfreeformsurfacesarewidelybeingusedincarindustry,itisnotaneasy jobforarchitecturetodealwiththeminlargescales.Theideaofpanelizationistodivideasurface intosmallpartswhichareeasiertofabricateandtransportandalsomorecontrollableinthefinal product. Sometimes the reason is to divide a curve surface into small flat parts and then get the curvature by the accumulation of the flat geometries which could be then fabricated from sheet materials. There are multiple issues regarding the size, curvature, adjustment, etc. that we try to discusssomeofthem.
Chapter6
100 1
weneedtoin ntroduceour rsurfaceand dmoduleas Grasshopper rcomponent ts.Based Fig.6.8. Firstofall,w possible com mponents in the Grasshopper, the idea is to generate cou i uple of boxes on the on the p surface and use the boxes as target boxe and morp or modul into them. So I used the <box ese s es ph le morph> andIusedt thegeometr ryitselfasbo oundingbox x.Nowwene eedtogener rateourtarg getboxes tomorphthecompo onentintothem.
Chapter6
101
Fig.6.10.NowIconnected<divideinterval2>whichtellsthe<surfacebox>thathowmanydivisionsin Uand Vdirections weneed. Another<number slider> definesthe heightof thetarget boxes which meansheightofthemorphedcomponents. So basically the whole idea is simple. We produce a module (a component) and we design our surface. Then we make certain amount of boxes over this surface (as target boxes) and then we morphthemoduleintotheseboxes.AfterallwecanchangethenumberofelementsinbothUand Vdirectionandalsochangethemodulewhichupdatesautomaticallyonthesurface.
102
Fig.6.11.Finalsurfacemadeupofourbasemodule 6_3_MicroLevelManipulations Althoughitisgreattoproliferateamoduleoverasurface,itstillseemsaverygenericwayofdesign. It is just a bumpy surface. We know that we can change the number of modules, or change the module by itself, but still the result is a generic surface and we dont have local control of our system. NowIamthinkingofmakingacomponentbasedsystemthatwecouldapplymorelocalcontrolover thesystemandavoiddesigninggenericsurfaceswhicharenotrespondingtoanylocal,microscale criteria. In order to introduce the concept, lets start with a simple example and proceed towards a more practicalone.Weusedtheideaofattractorstoapplylocalmanipulationstoagroupofobjects.Now I am thinking to apply the same method to design a component based system with local manipulations.The idea is to change the components size(in this case, their height) based on the effectofa(point)attractor.
Chapter6
103
Fig.6.12. A doublecurve surface introduced as <Base_Srf> and a cone which is introduced as <component>totheGrasshopper,a<divideinterval2>forsurfacedivisions,anda<boundingbox>as thereferenceboxofthe<component>.HereIuseda<scale>componentformyboundingbox.Nowif I change the size of the bounding box, I can change the size of all components on the <base_srf> becausethereferenceboxhaschanged.
Chapter6
Asyouhaveseen,the<surfacebox>componenthastheheightinputwhichasksfortheheightof the boxes in the given intervals. The idea is to use relative heights instead of constant one. So insteadofaconstantnumberasheight,wecanmakearelationbetweenthepositionofeachboxin relationtotheattractorsposition. WhatIneedistomeasurethedistancebetweeneachboxandtheattractor.Sincethereisnobox yet,Ineedapointonsurfaceatthecenterofeachboxtomeasurethedistance.
Fig.6.13. Here I used the same <divide interval2> for an <Isotrim> component (Surface > Util > Isotrim). This component divides the surface into subsurfaces. By these subsurfaces I can use another component which is <BRep Area> (Surface > Analysis > BRep area) to actually use the by product of this component that is Area Centroid for each subsurface. I measured the distance of these points (area centroids) from the <attractor> to use it as the reference for the height of the targetboxesin<surfacebox>component.
104
Fig.6.14. I just divided the distances by a given number to control the effect of the attractor and I used the result as height to generate target boxes with <surface box> component. The surface comesfromthe<base_srf>,the<divideinterval2>usedassurfacedomainandheightscomingfrom therelationofboxpositionandtheattractor.Asyousee,theheightofboxesnowdiffer,basedon thepositionofthepointattractor.
Fig.6.15.Theonlyremainingpart,connectingthe<component>,<scale>dboundingboxand<surface box>toa<morphbox>componentandgeneratethecomponentsoverthesurface.Bychangingthe scale factor, you can change the size of the all components and like always, the position of the attractorisalsomanuallycontrollable.
Chapter6
105
Fig.6.16.Finalmodel. As you see, the size of components started to accept local manipulations, based on an external propertywhichishereapointattractor.Althoughtheideaisasimpleattractor,theresultcouldbe interestingandyoucoulddifferentiateyourreferenceboxesinsomanyotherwaysaswell.Nowwe knowthatthemorphingconceptandpanelizationisnotalwaysgeneric.Havingtestedtheconcept, letsgoforanotherpracticalexperiment.
Chapter6
106 1
6_4_OnR ResponsiveM Modulation Theidea aforthenex xtstepistom modulateag givensurface ewithcontr rolovereach hmodule,meansany module ofthissyste em,hastob beresponsibleforsome certaincrite eria.Soeven nmorethan regional hereIwantt tohaveamorespecific controlover rmysystem bygiven differentiationofthemodules,h criteria. Thesecould dbeenvironm mental,func ctional,visua aloranyotherassociativ vebehaviour rthatwe urmodulebe eresponsible efor. wantou In the next examp ple, in orde to make a building envelope more resp er s ponsive to the host t environm ment,Ijust wantedthe systember responsivetothesunlig ght.Inyour experiments sitcould bewind,rainorinte ernalfunction nsoranyoth hercriteriathatyouarel lookingfor. HereIhaveasurfac ce,simplyastheenvelop peofabuildingwhichIw wanttocove erwithtwo different typesof fcomponent ts.Onewhic chiscloseda anddoesno otallowthe penetration ofthesun lightand the othe has opening. These c er components should be proliferated over my env p velope based on the maindir rectionofthesunlighta atthesite.Is setauserde efinedangle tosaythealgorithmtha atforthe certaind degreesofsu unlightwes shouldhavec closedcomp ponentsandfortheothers,openone es. TheGrasshopperde efinitiondoes snothaveanythingnew w,butitisthe econceptth hatallowsustomake variation noverthee envelopeinst teadofmakingageneric csurface.Ba asicallywhen nthesurface eisfree form an it turns ar nd round and h different orientations, it also has different a has t angles with the main t sunlight tateachpart.Sobasedontheangl ledifferentia ationbetwee enthesurfaceandthes sunlight, thisvariationinthecomponents shappensto othesystem. .
Chapter6
107
Fig.6.18.Surfaceofthebuildingasenvelope.
Fig.6.19.Twodifferenttypesofcomponentsforbuildingenvelope.
Chapter6
108
Fig.6.20. The first step is similar to the previous experiments. I introduces <surface> and I used <divideinterval2>todivideitinUandVdirectionsandIgeneratedtargetboxesby<surfacebox>.I alsousedthe<isotrim>withthesameintervalsandIused<BReparea>tofindthecentroidofeach area(whichisselectedingreen).AtthesametimeIuseda<curve>componenttointroducethemain sunlightangleofthesiteandwhitits<endpoints>Imadea<vector2pt>whichspecifythedirection ofthesunlight.Youcanmanipulateandchangethiscurvetoseetheeffectofsunlightindifferent directionsoncomponentslateron.
Fig.6.21.inordertoevaluatetheanglebetweenthesunlightandthesurface,Iwanttomeasurethis angle between sun light and normals of the surface at the position of each component. So I can decide for each range of angles what sort of component would be useful. So after generating the centerpoints,Ineednormalsofthesurfaceatthosepoints.thatswhyIuseda<surfaceCP>tofind the closest point of each center point on the surface to get its UV parameters and use these parameters to <evaluate> the surface at that points to actually get the normals of surface at that points.
Chapter6
109
Fig.6.22.Iusedan<angle>component(Vector>Vector>Angle)toevaluatetheanglebetweenthe sun direction and the faade. Then I converted this angle to degree and I used a <function> to see whethertheangleisbiggerthanthe<max_angle>ornot.Thisfunction(x>y)givesmeBooleandata, TrueforsmalleranglesandFalseforbiggerangles.
Chapter6
Fig.6.23.BasedontheBooleandatacomesfromtheanglecomparison,I<dispatch>thedatawhich are target boxes (I have the same amount of target box as the center points and normals). So basicallyIdividedmytargetboxesintwodifferentgroupswhosedifferenceistheangletheyreceive thesunlight.
110
The rest of the algorithm is simple and like what we have done before. I just need to morph my componentsintothetargetboxes,herefortwodifferentones.
Fig.6.24. Here I introduced two different components as single geometries and I used two <morph box>componentseachoneassociatedwithonepartofthe<dispatched>datatogenerate<C_close> or<C_open>componentsoverthefaade.
6.25.Nowifyoulookcloser,youcanseethatindifferentpartsofthefaade,basedonitscurvature anddirection,differenttypesofcomponentsaregenerated.
Chapter6
111
Fig.6.26.Finalmodel.Thebifurcationofthetargetboxes(andthecomponents)couldbemorethan twointhealgorithm.Itdependsonthedesignandthecriteriathatweuse. Wecanthinkaboutacomponentbasedfaade,inwhichsomecomponentsareclosed,andsomeof them are open, in which open ones have adjustable parts that orientate towards external forces, andhaveaperturesthatadjustthemselvestotheinternalfunctionsofthebuildingandsoonandso forth. You see that the idea is to have module based control over the system. We still have the globalcontrol(form)andregionalcontrol(affectingcomponentsheightorscaleregionally)overthe systemaswell.
Chapter6
Chapter7_NURBSSurfaceandMeshes
113
Chapter7_NURBSSurfaceandMeshes
We have had some experiments with surfaces in the previous chapters. We used Loft and Pipe to generate some surfaces. We also used free form surface and some surface analysis accordingly. Usually by surfaces, we mostly mean FreeForm surfaces which we generate them by curves or sometimesbunchofpoints.Sousuallygeneratingsurfacesdependsonthecurvesthatweprovide for our surface geometries. There are multiple surface components in the Grasshopper and if you havealittlebitofexperienceinworkingwithRhinoyoushouldknowhowtogenerateyoursurface geometriesbythem. Surfacegeometriesseemstobethefinalproductsinourdesign,likefacades,wallsetc.andthats why we need lots of effort to generate the data like points and curves that we need as the base geometries and finally surfaces. Here I decided to design a very simple schematic building just to indicate that the multiple surface components in the Grasshopper have the potential to generate differentdesignproductsbyverysimplebasicconstructs. 7_1_ParametricNURBSSurfaces IntheareasofDocklandsofThamesinLondon,closetotheCanaryWharf,wheretheLondonshigh riseshavethechancetolive,therearesomepotentialtobuildsometowers.Iassumedthatwecan proposeonetogether,andthisdesigncouldbeverysimpleandschematic,herejusttotestsomeof thebasicideasofworkingwithfreeformsurfaces.Letshavealookatthearea.
Chapter7
Fig.7.1.Arialview,CanaryWharf,London(image:www.maps.live.com,MicrosoftVirtualEarth).
114
CanaryWharf
Fig.7.2.Siteoftheproposedtower. Manualdrawings Therearemultiplewaystostartthissketch.Icandrawthegroundfloorandcopyitandstarttoadd detaillikewhatwehavedoneforSwissRe.Anotherwayistodrawsomeboundarycurvesforthe towerandusethiscurvesasbasegeometryforthebuildingvolumeandthenaddmoredetailsto completethesketch.Iwouldpreferthesecondwaysincewealreadyknowaboutthefirstone. IamgoingtodrawtheboundarycurvesinRhino.IcandrawtheselinesinGrasshopperbutbecause IwantthemtomatchthegeometryofthesitesoIneedsomedatafromthesitewhichIcangetin thisway. Ihaveavagueideainmind.Mytowerhassomelinearelementsinfaadewhicharegeneric,butI alsowanttohavesomehollowspacesbetweentheoutsideandinside,positionedonthefaade. I also want to design a public space close to the river and connected to the tower with the same elementsasfaade,continuousfromtowertowardstheriverbank.
Chapter7
115
Chapter7
Fig.7.3.Thebasiclinesofthetowerassociatedwiththesite. As you see in the Figure.7.3 I have drawn my base curves manually in Rhino. These curves correspond to the site specifics, height limitations, sites shape and borders, etc, etc. four curves drawn for the main building and another two curves as the borders of the public space, which startedfromtheearthlevelandthenwentuptobeparalleltothetoweredges.Thesecurvesare verygeneral.Youcoulddrawwhateveryoulikeandgofortherestoftheprocess. Basicfaadeelements
Fig.7.4. For the first step I imported these four corner curves into Grasshopper by <curve> componentsandthenIused<dividecurve>todividethesecurvesinto<N_div>parts.
116
Fig.7.5. Now I have the same amount of division points on each curve and I draw <line> between each curves points and the next one, so basically I generated <N_div> number of quads like floor edges.
Fig.7.6. By connecting these <line>s to <extrude> component (Surface > Freeform > Extrude) and extrusioninZdirection,IgeneratedsurfacesacrossfaadewhichremindsmeMieshighrisesbutina differentiatedway!
Chapter7
117
Fig.7.7.Therearefourstraightlinesthatconnectthefourcornersofthetowerinplan.Iintroduced these lines by another four <curve> components and I generated four surfaces as general faade surfaces that could be glass. Here because I have the planner section curve and two curves that define the boundary of the faade on each face, I used a <Sweep 2> component to use Rails for makingasurfacebyasectioncurve.SobasicallyafterIattachedeach<Crv_p_n>tothe<Sweep2> componentasthesectioncurve,Iattachedthecornercurvesastherailstomakeeachfacessurface. Foreachsectioncurveintheplan,Iusedtwoedgecurvesthatstartfromitsendpoints.Sotheorder is<crv_1>and<crv_2>forthe<crv_p_1>andsoon.
Fig.7.8. Using towers edge curves as Rails to make faade surfaces behind the ribs shaped faade elementsthatwemadebefore.
Chapter7
118
Fig.7.9. With the same method, I just divided another two curves that I have drawn for the public space and I attached them to a line component to generate some lines as the base geometry for extrusion.Iwillattachittothesame<extrude>componentasthefaade(dontforgettoholdthe Shiftkeywhenyouwanttoaddanewcomponenttotheinputofanalreadyexistingcomponent).
Chapter7
Fig.7.10.Nowyoucanalterthecornercurvesifyoulike,thenumberofdivisionsandtheheightof extrusiontogetthebestschematicdesign.
119
Localchanges Up to this point you already know that how to design this tower with differentiation and gradual changes across the faade elements. Here I designed very generic surface elements and the only parametersthatmaketheglobaldifferentiationsareedgecurvesofthetower.NowIwanttoadd someelementstomakesomelocalchangesinthesegenericelementstoshowhowyoucanchange thebehaviouroftheseelementsyoudesigned. Asyousee,themainelementinourcaseissomelinesthatIgeneratedbetweendivisionpointsof theedgecurvesandthenIextrudedthemtomakethefaadeelements.Therearemanywaysthat youcanchangeandmanipulatetheselinesandthenextrudethem,soyoucangetdifferentforms outside,anddifferentspacesinside. HereIdecidedtoaddsomehollowspacesbetweentheseelementsandmakethefaadewiththese general linear elements with locally omitted parts as the combination of general and local design effects. Toaddthesehollowspaces,Iwanttoaddthemmanuallyassolidstothetowerandthensubtract themfromthealreadyexistingforms.AsanexampleIwanttoaddsomeverysimpleellipsoidsto thefaade,andrandomlydistributethemalongsidetheitsface.Theseellipsoidscouldbeaddedby acertainspatialcriteriabutheretheaimisjusttoexploremodellingpropertiesandtechniquesandI dontwanttogofurtherindesignissues.
Chapter7
Fig.7.11.Asyoucansee,Irandomlyaddedsomeellipsoidsothetowerthatcouldbespecialhollow spacesinthebuilding.Iwilldoitforallsurfacesofthetower.
120
Fig.7.12. after distributing all ellipsoids alongside the faade surfaces now I import them to the Grasshopper by <Geometry> components and for each side of the faade I use one <geometry> component and introduce them as Set multiple Geometries. So each side of the faade has one groupofellipsoidgeometries.
Fig.7.13.Byusinga<TrimwithBReps>component(Curve>Util>TrimwithBReps)Icantrimthese lines across the faade by these randomly distributed ellipsoids. The output of the component are curvesinsidetheBReporoutsideitandIusetheoutsidecurvestoextrudewiththesame<extrude> component that I generated before. I hide all geometries in Rhino and uncheck the preview in Grasshoppertoseetheresultbetter.IwilldoitforallfacesandIwillconnecttheoutputcurvesto theextrudecomponent.
Chapter7
121
Chapter7
Fig.7.15. The <Solid difference> component (Intersect > Boolean > Solid difference) takes two differentsolidsandperformssoliddifferenceonthem.SoIattachedthefaadesurfaceandhollow geometriestofindthedifferenceofthem.AsItoldyouhereIalsoused<Flip>component(Surface> Util>Flip)tofliptheNormalofthesurfaceandthenattachittothe<Soliddifference>component otherwise the hollow space would face the inside of the tower. I will do it for all surfaces of the tower.
122
Chapter7
123
Fig.7.17.a/b.Finalmodel.
Chapter7
124 1
7_2_Mesh hvs.NURBS S Up to n now we hav used diff ve ferent comp ponents that worked wi the NUR surfaces But as t ith RBS s. mention before t ned there are ot ther types o surfaces which are us of w seful in othe contexts. It is not er alwayst thesmoothb beautyofthe eNURBStha atweaimedf for,butwem mightneedm moreprecise econtrol, easier p processing or simpler eq quations. Be eside the cla assical surfac types of revolution, ruled or ce pipes,w wehavedifferentfreefor rmsurfacesl likeBesieror rBSplines.B ButhereIam mgoingtota alkalittle bitabou utmesheswh hicharequie etdifferentt typesofsurfa aces. Meshes areanother rtypeoffree eformsurfacesbutmad deupofsmallparts(face es)andaccumulation esmallparts makesthew wholesurfac ce.Sothere isnointerna al,hiddenmathematical function ofthese thatgen neratestheshapeofthesurface,butthesefacesdefinetheshapeofthesurfaceallto ogether. Ifweloo okatamesh h,firstwese eeitsfaces.F Facescould betriangle, quadrantorhexagon.By ylooking closerw wecanseeagridofpoin ntswhichmakethesefa aces.Thesep pointsareb basicelementsofthe meshsu urface.Anytinygroupof fthesepoints(forexamp pleanythree eintriangula armesh)makeaface with wh hich the who geometry become su ole y urface. These points are connected together by straight e y lines. Therear retwoimportantissuesaboutmeshes:positionofthesepointsandtheconnectivityofthese points.T Theposition nofthepoin ntsrelatedto othegeome etryofthem meshandthe econnectivityofthe pointsre elatedtothe etopology. 7_2_1_G Geometryan ndTopology While th geometry deals with the position of the stuff !! in the s he y n space, topol logy deals with their w relations Mathematically speak s. king, topolog is a prop gy perty of the object that transformation and deforma ationcannot tchangeit.S Soforinstan ncecircleand dellipseare topologicallythesame andthey haveonlygeometric caldifference e.Havealoo okatFigure 7.20.Asyou useetherea arefourpoin ntswhich nectedtoea achother.Inthefirstima age,bothA andBhave thesameto opologybeca ausethey areconn have th same rel he lation between their p points (same connection). But the are geom e ey metrically different,becauseofthedisplac cementofon nepoint.But tinthesecon ndimage,thegeometryofpoints isthesa amebutthec connectivityisdifferenta andtheyare enottopolog gicallyequiva alent.
Chapter7
125
The idea of topology is very important in meshes. Any face in the mesh object has some corner pointsandthesecornerpointsareconnectedtoeachotherwithanorderinasamewayforallfaces ofthemeshobject.Sowecanapplyanytransformationtoameshobjectanddisplacetheverticesof the mesh in the space even nonuniformly, but the connectivity of the mesh vertices should be preservedtoremainthefacesotherwiseitcollapses.
Fig.7.21.A:Bothredandgreysurfacesaremesheswiththesameamountoffacesandvertices,but inthegrayone,theverticesarejustdisplaced,makeanothergeometricalconfigurationofthemesh, buttheconnectivityofthemeshobjectisnotchangedandbothsurfacesaretopologicallythesame. B: Two Mesh surfaces are geometrically the same and have the same amount of vertices but connectivityofverticesaredifferent,facesaretriangularinthegrayonebutquadinthered,make differenttopologyforthem. Knowingtheimportanceoftopologicalaspectsofmeshobjects,theyarepowerfulgeometrieswhile we have bunch of points and we need a surface type to represent them as a continuous space. Differenttypesofalgorithmsthatworkingwithpointscouldbeappliedtothemeshgeometrysince wesavethetopologyofthemesh.Forinstance,usingfiniteelementanalysisorspecificapplications likedynamic relaxation, and particlesystems, it is easierto work with meshesthan other types of surfacessincethefunctioncanworkwithmeshvertices. Meshobjectsaresimpletoprogressandfastertoprocess;theyarecapableofhavingholesinside and discontinuity in the whole geometry. There are also multiple algorithms to refine meshes and makesmoothersurfacesbymeshobjects.Sincedifferentfacescouldhavedifferentcoloursinitially, meshobjectsaregoodrepresentationsofanalysispurposes(bycolour)aswell. There are multiple components that dealing with the mesh objects in mesh tab in Grasshopper. Letsstartameshfromscratchandthentrytogrowourknowledge.
Chapter7
126
7_3_OnParticleSystems IhaveagroupofpointsandIwanttomakeasurfacebythesepoints.Inthisexamplethegroupof pointsissimplifiedina gridstructure.Todiscuss thebasicconceptof theparticlesystemshere I willtrytoprojectthisideaonameshgeometryinasimpleexample. I am thinking of a vertical grid of points that represent the basic parameters of a surface which is beingaffectedbyanimaginarywindpressure.Iwanttodisplacethepointsbythiswindfactor(or anyforcethathasavector)andrepresenttheresultantdeformedsurface.Basicallybychangingthe windfactor,wecanseehowthesurfacechanges. (ActuallyIwanttodealwithasurfacegeometryandanextraforcethatappliestothissurface,with eachpointasaparticleseparately,andobservetheresultwithchangesofthemainforce)
Chapter7
Fig.7.22. The first step is simple. By using a <series> component with controlled number of points <N_pt>,anddistancebetweenthem<distance_pt>Igeneratedagridofcrossreferenced<point>s. Thepressureoftheimaginarywindforce,affectsallpointsinthegridbutIassumedthattheforceof thewindincreaseswhengoesup,sothewindpressurebecomehigherinthehigherZvaluesofthe surfaces.Andatthesametime,theforceaffectstheinnerpointsmorethanthepointsclosetothe edges.Thepointsontheedgesintheplansectiondonotmoveatall(fixpoints).Inparticlesystem thereisarelationbetweenparticlesaswell,andweshoulddefineanothersetofrulesforthem,but hereIjustsettheexternalforcesjusttoshowhowwecanworkwithpointsasparticles.
127
Fig.7.23.Diagramofthewindforceaffectedthesurface.A:section;theverticaleffectoftheforce,B: plan;thehorizontaleffect. BasicallyIneedtwodifferentmechanismstomodeltheseeffects,oneforthesectiondiagramand anotherfortheplan.Isimplifiedthemechanismtoanequationjusttoshowthewaywewantthe forceaffectspoints.Forthefirstmechanism,toproducepointsdisplacementsbyusing(X^2)whileX is the Z value of the point being affected by the force. So for each point I need to extract the Z coordinateofthepoint. Tomakeeverythingsimple,IjustassumedthattheforcedirectionisintheYdirectionoftheworld coordinatesystem.Soforeachpointonthegrid,IneedtogenerateavectorinYdirectionandIset itsforcebythenumberthatIreceivefromthefirstequation.Fortheseconddiagramweneedabit moreofanequationtodo.Letshavealookatpartonefirst.
Fig.7.24.TheZcoordinateofthepointextractedbya<decompose>componentandthenpoweredby (x^2)andthendividedbyagiven<numberslider>justtocontrolthemovementgeneraly.Theresult is a factor to <multiply> the vector (Vector > Vector > Multiply) which is simply a world <unit Y> vectorasforce.SobasicallyIgeneratedforcevectorsforeachpointinthegrid.
Chapter7
128
Fig.7.25.IfIdisplacethepointsbythesevectorsyoucanseetheresultantgridofpointsthatsatisfy thefirststepofthismodelling. Now if we look at the second part of the force modelling, as I said, I assumed that in the planner section, the points on the edge are fixed and the points on the middle displaced the most. Figure 7.26showthisdisplacementforeachrowofthepointgrid.
Chapter7
Fig.7.26.Displacementofpointsinrows(plannerview). SinceIhavetheforcevectorsforeachpoint,Ineedtocontrolthemandsetavalueagain,tomake surethattheirdisplacementintheplannersectionisalsometthesecondcriteria.Soforeachrowof the points in the grid, I want to generate a factor to control the force vectors magnitude. Here I assumedthatforthepointsinthemiddle,theforcevectorspoweraremaximumthatmeanswhat theyare,andforthepointsontheedges,itbecomezeromeansnodisplacementandfortheother pointsarangeinbetween.
129
Fig.7.27.Forthesecondmechanism,Ineeda<range>ofnumbersbetween0and1toapplytoeach point;0fortheedge,1forthemiddle.Ineedarangefrom0to1fromoneedgetothemiddleand thenfrom1to0togofromthemiddletotheotheredge.Ineedthis<range>componentgenerates values as half of the numbers of points in each row. I set the <N_pt> to the even numbers, and I divideditby2,thenminus1(becausethe<range>componenttakesthenumberofdivisionsandnot numberofvalues).Youseethefirst<panel>showsfournumbersfrom0to1forthefirsthalfofthe points. then I <reverse>d the list and I merge these two list together and as you see in the second <panel>Igeneratedalistfrom0to1to0andthenumberofvaluesinthelististhesameasnumber ofpointsineachrow. The final step is to generate these factors for all points in the grid. So I <duplicate>d the points as muchas<N_pt>(numberofrowsandcolumnsarethesame).NowIhaveafactorforallpointsinthe gridbasedontheirpositionsintheirrows.
Fig.7.28.NowIneedto<multiply>theforcevectoragainbythenewfactors.IfIdisplacethepoints bythesenewvectors,wecanseehowtwodifferentmechanismsaffectedthewholepointgrid.
Chapter7
130
Actually this part of the example needed a little bit of analytical thinking. In reality, methods like ParticlespringsystemsorFiniteElementAnalysisusethisconceptthatmultiplevectorsaffectingthe wholepointsinthesetandpointsaffectingeachotheralso.Sowhenyouapplyaforce,itaffectsthe wholepointsandpointsaffectingeachothersimultaneously.Theseprocessesshouldbecalculated initerativeloopstofindtherestingpositionofthewholesystem.HereIjustmakeasimpleexample without these effects of particle systems and I just want to show a very simple representation of suchasystemdealingwithmultipleforceswhichinrealsubjectsareabitmorecomplicated! Mesh
Fig.7.29.Meshgeneration.Nowifyousimplyadda<mesh>component(Mesh>Primitive>Mesh)to thecanvasandconnectthedisplacedpointstoitasvertices,youwillseethatnothinghappeningin thescene.Weneedtodefinethefacesofthemeshgeometrytogenerateit.Facesofthemeshare actuallyaseriesofnumberswhojustdefinesthewaythesepointsareconnectedtogethertomake the faces of the surface. So here vertices are the geometrical part of the mesh but we need the topologicaldefinitionofthemeshtogenerateit. Every four corner point of the grid, define a quadrant face for the mesh object. If we look at the pointgrid,weseethatthereisanindexnumberforeachpointinthegrid.Weknoweachpointby itsindexnumberinsteadofcoordinatesinordertodealwithitstopology.
Chapter7
131
Chapter7
Fig.7.31. In a given point grid, a simple quadrant face defined by the order of points that if you connectthembyapolyline,youcanmaketheface.Thispolylinestartsfromapointinthegrid,goes to the next point, then goes to the same point of the next row and then goes to the back column pointofthatrow,andbyclosingthispolyline,youwillseethefirstfaceofthemeshfindsitsshape. Herethefirstfacehaspoints[0,1,6,5]initsfacedefinition.Thesecondfacehas[1,2,7,6]andsoon.
132
To define all mesh faces, we should find the relation between these points and then make an algorithmthatgeneratesthesefacematricesforus. Ifwelookatthefacematrix,weseethatforanyfirstpoint,thesecondpointisthenextinthegrid. Sobasicallyforeachpoint(n)inthegrid,thenextpointofthefaceis(n+1).Simple! Forthenextpointofthegrid,weknowthatitisalwaysshiftsonerow,soifweaddthenumberof columns (c) to the point (n) we should get the point at the next row (n+c). So for instance in the aboveexamplewehave5columnssoc=5andforthepoint(1)thenextpointofthemeshfaceis point(n+c)meanspoint(6).Soforeachpoint(n)asthefirstpoint,whilethesecondpointsis(n+1), thethirdpointwouldbe(n+1+c).Thatsit. Forthelastpoint,itisalwaysstatedinonecolumnbackofthethirdpoint.Sobasicallyforeachpoint (n+1+c) as the third point, the next point is (n+1+c1) which means (n+c). So for instance for the point(6)asthethirdpoint,thenextpointbecomespoint(5). Alltogetherforanypoint(n)inthegrid,thefacethatstartsfromthatsinglepointhasthispoints astheorderedlistofvertices:[n,n+1,n+1+c,n+c]while(c)isthenumberofcolumnsinthegrid.
Fig.7.32.Afterdefiningallmeshfaces,themeshcanbegenerated. Looking at the mesh vertices, there is a bit more to deal with. If you remember the Triangle example of chapter_3, there was an issue to select the points that could be the first points in the grid. If you look at the grid of points in the above example, you see that the points on the last columnandlastrowcouldnotbethestartpointsofanyface.Sobesidethefactthatweneedan algorithmtogeneratethefacesofthemeshobject,weneedabitofdatamanagementtogenerate the first points of the whole grid and pass these first points to the algorithm and generate mesh faces.
Chapter7
133
Fig.7.34.Finalindexnumberofthepossiblefirstpointsofthemeshfacesinthegrid(with8pointsin eachcolumn).
Chapter7
134
Chapter7
135
Fig.7.37.Theresultantmesh.
Chapter7
Fig.7.38.Changingtheparameters,relatedtotheforceandmanipulatingthemesh. 7_4_OnColourAnalysis Tofinishthisexample,letshavealookathowwecanrepresentourfinalmeshwithcoloursasa mediumforanalysispurposes.TherearedifferentcomponentsintheGrasshopperthatprovideus colourrepresentationsandthesecoloursaresuitableforouranalysispurpose. Hereinthisexample,againtobringaconcept,Isimplyassumedthatattheend,wewanttoseethe amountofdeviationofourfinalsurfacefromtheinitialposition(verticalsurface).Iwanttoapplya gradient of colours start from the points which remained fix with bottom colour up to the points whichhasthemaximumamountofdeviationfromtheverticalpositionwiththehighercolourofthe gradient.
136
Simply,tofindtheamountofdeviation,Ineedtomeasurethefinalstateofeachpointtoitsoriginal state.ThenIcanusethesevaluestoassigncolourtothemeshfacesbaseonthesedistances.
Fig.7.40. For our analysis purpose I want to use a <Gradient> component (Params > Special > Gradient) to assign gradient of colours to the mesh. I attached my <distance> values to the parameterpart(t)ofthe<Gradient>andIattachedittotheColourinputofthe<mesh>component. ButtocompletetheprocessIneedtodefinethelowerlimitandupperlimitofgradientrange(L0 andL1).Lowerlimitistheminimumvalueinthelistandupperlimitismaximumvalueinthelistand othervaluesarebeingdividedinthegradientinbetween. TogetthelowerandupperlimitofthelistofdeviationsIneedtosimplysortthedataandgetthe firstandlastvaluesinthatnumericalrange.
137
Fig.7.42. By clicking on the small colour icon on the corner of the <gradient> component we can changethecoloursofthegradient.
Chapter7
138
Fig.7.43. Rightclick on the component and on the context popup menu you have more options to manipulate your resultant colours. Different types of colour gradient to suit the graphical representationofyouranalysispurpose.
Fig.7.44.a/b.Differentgradientthresholds.
Chapter7
139
7_5_ManipulatingMeshobjectsasawayofDesign Dependsontheobjectandpurposeofthemodelling,Ipersonallyprefertogetmymeshobjectby manipulatingasimplemeshgeometryinsteadofgeneratingameshfromscratchsincedefiningthe point set and face matrices are not always simple and easy to construct. By manipulating, I mean that we can use a simple mesh object, extract its components and change them and then again make a mesh with varied vertices and faces. So I do not need to generate points as vertices and matricesoffaces.Letshavealookatasimpleexample. ModifyingGeometry
Fig.7.45.Inthisexample,Isimplyuseda<meshplane>componentandIextracteditsdatabyusinga <mesh components> to have access to its vertices and faces. Then I displaced vertices along Z direction by random values powered by a <number slider> and again attached them to a <mesh> component to generate another mesh. Here I also used a <cull pattern> component and I omitted someofthefacesoforiginalmeshandthenIusedthemasnewfacesformakinganothermesh.The resultantmeshhasbothgeometricalandtopologicaldifferencewihitsinitialmeshandcanbeused foranydesignpurpose. This idea of geometrically manipulating the vertices and topologically changing the faces has so many different possibilities that you can use in your design experiments. Since mesh objects have the potential to omit some of their faces and still remain as surface, different design ideas like poroussurfacescouldbepursuedbythem.
Fig.7.46.Resultantmanipulatedmesh(justarandomcase).
Chapter7
ModifyingTopology
140
Fig.7.47.a/b.Finalmodel.
Chapter7
Chapter_8_Fabrication
142
Fabrication
Chapter_8_Fabrication
Today there is a vast growing interest on material practice and fabrication in combination with ComputerAidedManufacturing.Duetothechangeshavehappenedindesignprocesses,itseemsa crucialmoveandoneoftheMustsinthefieldofdesign.Anydesigndecisionindigitalarea,should betestedindifferentscalestoshowtheabilityoffabricationandassembly.Sinceitisobviousthat thenewdesignprocessesandalgorithmsdonotfitintothetraditionalbuildingprocesses,designers now try to use the modern technologies in fabrication to match their design products. From the moment that CNC machines started to serve the building industry up to now, a great relation between digital design and physical fabrication have been made and many different technologies andmachineriesbeinginventedoradjustedtodothesetypesoftasks. Inordertodesignbuildingelementsandfabricatethem,weneedtohaveabriefunderstandingof the fabrication processes for different types of materials and know how to prepare our design outputsforthem.Thisisthemainpurposeofthefabricationissuesinourdesignprocess.Basedon theobjectwedesignedandmaterialweused,assemblylogic,transportation,scale,etc.weneedto providethesuitabledatafromourdesignandgetthedesiredoutputofthattofeedmachineries. If traditional way in realization of a project made by Plans, Sections, Details, etc. today, we need moredetailsordatatotransferthemtoCNCmachines,tousethemassourcecodesanddatasheets forindustriesandsoon. The point here is that the designer should provide some of the required data, because it is highly interconnectedwithdesignobject.Designersometimesshouldusethefeedbackofthefabrication datapreparation for the design readjustment. Sometimes the design object should be changed in ordertofitthelimitationsofthemachineryorassembly. Up to this point we already know different potentials of the Grasshopper to alter the design, and thesedesignvariationscouldbeinthefavouroffabricationaswellasothercriteria.Ijustwantto openthesubjectandtouchsomeofthepointsrelatedtothedatapreparationphase,tohavealook at different possibilities that we can extract data from design project in order to fabricate it or sometimereadjustittofitthefabricationlimitations.
Chapter8
143 1
Fabric cation
8_1_Data asheets Inorder rtomakeob bjects,somet timeswesim mplyneeda seriesofme easurements s,angels,coo ordinates and gen nerally nume erical data. There are multiple components in Grasshopp to comp n per pute the measure ements,dista ances,angel ls,etc.theim mportantpointisthecor rrectandpre eciseselectio onofthe objects thatwenee edtoaddres ssforanysp pecificpurpo ose.Weshou uldbeaware eofanygeo ometrical xity ts sign and cho oose the des sired points for measure ement purpo oses. The complex that exit in the des nextpoi intistofind theposition nsthatgiveu ustheprope erdataforourfabricatio onpurposeandavoid to generate lots of tables of numerical da which co ata ould be time consuming in big proj e g jects but need to expo the data from 3D so ort oftware to th spreadsheets and he useless at the end. Finally we n datasheetsforfurtheruse.
Chapter8
Paper_s strip_project t The idea of using p a paper strips attracted m for some investigations, although it had bee tested me h en before(likeinMorphoEcologies sbyHensela andMenges, ,2008).Tounderstandth hesimpleassemblies Istarted dwithverys simplecomb binationsfor rfirstlevelandItriedto oaddthese simplecomb binations togetherastheseco ondlevelof assembly.It twasinteres stinginthef firsttriesbut tsoonitbec cameout randtheres sultobjectw wasnotwhatIassumed.S SoItriedtobemorepre ecisetogett themore oforder delicategeometriesattheend.
Fig.8.1.Paperstrips, ,firsttry.
144 1
Fabric cation
Inthene extstepItriedtomake averysimplesetupand dunderstand dthegeometricallogicanduseit as the b base for digital modelling. I assumed that by jumping into d d digital mode elling I would not be abletom makephysica almodeland dIwassuret thatIneedtotesttheea arlystepswit thpaper. Myaim wastouset threepaper stripsandconnectthem m,oneinthe emiddleand danothertw wointwo thlongerlen ngth,restrict tedattheire endstothem middlestrip.Thiscouldbethebasicm module. sideswit
Fig.8.2. simple pape strip com er mbination to understand the connec d ctions and m move toward digital ds modellin ng. Digitalm modelling HereI w wantedto m modelthe paperstrip dig gitallyafter mybasic understanding of thephys m sical one. From th start poin I need a v he nt very simple c curve in the middle as t base of my design and I can the a divideitandbycullingthesedivisionpoints(true,false)andmoving(falseones)perpendicul lartothe middle curve and using all these points (true ones and moved ones) as t the vertices for two tripsalmostthesameaswhatIdescribed. interpolatedcurvesIcanmodelthispaperst
Chapter8
145
Fabrication
But it seemed so simple and straightforward. So I wanted to add a gradual sizedifferentiation in connection points so it would result in a bit more complex geometry. Now lets jump into Grasshopper and continue the discussion with modelling there. I will try to describe the definition brieflyandgotothedataparts.
Chapter8
146
Fabrication
Fig.8.5. After remapping the numerical data I evaluated the middle curve with two different <evaluate>components.Firstbysimplyattachittothedatafrom<graphmapper>asbasicpoints. ThenIneedtofindthemidpoints.HereIfindtheparametersofthecurvebetweeneachbasicpoint andthenextone.I<shift>edthedatatofindthenextpointandIused<dispatch>toexcludethelast itemofthelist(exclude1)otherwiseIwouldhaveoneextrapointinrelationtothe<shift>edpoints. The <function> component simply find the parameter in between ( f(x)=(x+y)/2 ) and you see the resultantparametersbeingevaluated.
Fig.8.6. Now I want to move the midpoints and make the other vertices of the side strips. Displacementofthesepointsmustbealwaysperpendiculartothemiddlecurve.Soinordertomove thepointsIneedvectors,perpendiculartothemiddlecurveateachpoint.IalreadyhavetheTangent vector at each point, by <evaluate> component. But I need the perpendicular vector. We now that the Cross product of two vectors is always a vector perpendicular to both of them (Fig.8.7). For exampleunitZvectorcouldbethecrossproductoftheunitXandYvectors.Ourmiddlecurveisa planercurvesowenowthattheZvectorateachpointofthecurvewouldbealwaysperpendicularto thecurveplane.SoifIfindthecrossproductoftheTangentofthevectorandZvectorateachpoint, theresultisavectorperpendiculartothemiddlecurvewhichisalwayslaydowninthecurvesplane. SoIusedTangentofthepointfrom<evaluate>Componentanda<unitZ>vectortofindthe<XProd> ofthemwhichIknowthatisperpendiculartothecurvealways.Anothertrick!Iusedthenumbersof the <Graph Mapper> as the power of these Z vectors to have the increasing factors for the movementsofpoints,intheirdisplacementsaswell,sothelongerthedistancebetweenpoints,the biggertheirdisplacements.
Chapter8
147 1
Fabric cation
Fig.8.7.Vectorcross sproduct.Ve ectorAandB Bareinbase eplane.Vect torCisthecrossproduct toftheA nditisperpe endiculartot thebaseplan nesoitisals soperpendiculartobothvectorsAan ndB. andBan
Fig.8.8.NowIhaveb bothbasicpo ointsandmo ovedpoints.I<merge>d themtogeth herandIsort tedthem basedon ntheir(Y)va aluestogeneratean<interpolate>d curvewhich hisoneofm mysidepaper rstrip.(If you man nipulate you main curv extremely or rotate it you should sort your p ur ve y t, d points by th proper he factor).
Chapter8
148
Fabrication
Fig.8.9. Using a <Mirror Curve> component (XForm > Morph > Mirror Curve) I can mirror the <interpolate>dcurvebymiddle<curve>soIhavebothsidepaperstrips.
Fig.8.10.NowifIconnectmiddlecurveandsidecurvestoan<extrude>componentIcanseemyfirst paperstripcombinationwithdecreasingspacesbetweenconnectionpoints.
Fig.8.11. I can simply start to manipulate the middle strip and see how Grasshopper updates the threepaperstripswhichareconnectingtoeachotherinsixpoints.
Chapter8
149
Fabrication
AfterIfoundtheconfigurationthatIwantedtomakeapaperstripmodel,Ineededtoextractthe dimensionsandmeasurementstobuildmymodelwiththatdata.Althoughitisquieteasytomodel allthesestripsonpapersheetsandcutthemwithlasercutterbuthereIliketomaketheprocess moregeneralandgettheinitialdataneededtobuildthemodel,soIamnotlimitedmyselftoone specific machine and one specific method of manufacturing. You can use this data for any way of doing the model even by hand !!!! as I want to do in this case to make sure that I am not overwhelmedbydigital! BydoingasimplepapermodelIknowthatIneedthepositionoftheconnectionpointsonthestrips and it is obvious that these connection points are in different length in left_side_strip, right_side_stripandmiddle_strip.SoifIgetthedivisionlengthsfromGrasshopperIcanmarkthem onthestripsandassemblethem. Since strips are curve, the <distance > component does not help me to find the measurements. I needthelengthofcurvebetweenanytwopointsoneachstrip.WhenIevaluateaparameterona curve, it gives me its distance from the start point as well. So I need to find the parameter of the connection points of the strips (curves) and evaluate the position of them for each curve and the <evaluate>componentwouldgivemethedistanceofthepointsfromthestartpointofcurvemeans positionsofconnectionpoints.
Chapter8
Fig.8.12. Although my file became a bit messy I replaced some components position on canvas to bringthemtogether.AsyouseeIusedthefirstsetofpointsthatIcalledthemmaincurvepointson the middle strip (initial curve). These are actually connection points of strips. The (L) output of the component gives me the distances of connection points from the start points of the middle strip. I used these points to find their parameter on the side curves as well (<curve cp> component). So I used these parameters to evaluate the side curve on those specific parameters (connection points) andfindtheirdistancesfromthestartpoint.Icandothesametofindthedistanceoftheconnection pointsontheothersidestrip(<mirror>edone)also.Attheend,Ihavethepositionofallconnection pointsineachpaperstrip.
150
Fabrication
Make sure that the direction of all curves should be the same otherwise you need to change the directionofthecurveorifitaffectsyourproject,youcansimplyaddaminuscomponenttominus thisdistancesfromthecurvelengthwhichmathematicallyinversesthedistanceandgivesyouthe distancesofpointsfromthestartpointinsteadofendpoint(orviceversa). ExportingData
Chapter8
151
Fabrication
Fig.8.14.OntheExcelsheet,simplyclickonanemptycellandgototheDatatabandundertheGet External Data select From Text. Then select the saved txt file from the address you saved your stream content and follow the simple instructions of excel. These steps allow you to manage your differenttypesofdata,howtodivideyourdataindifferentcellsandcolumnsetc.
Fig.8.15.NowyouseethatyourdataplacedontheExceldatasheet.Youcandothesamefortherest ofyourstrips.
Chapter8
152
Fabrication
Chapter8
Fig.8.16.Tableoftheconnectionpointsalongsidethestrip. Ifyouhavealistof3DcoordinatesofpointsandyouwanttoexportthemtotheExcel,thereare differentoptionsthantheaboveexample.Ifyouexport3Dcoordinateswiththeabovemethodyou willseetherearelotsofunnecessarybracketsandcommasthatyoushoulddelete.Youcanalsoadd columnsbyclickingintheexcelimporttextdialogueboxandseparatethesebracketsandcommas fromthetextindifferentcolumnsanddeletethembutagainbecausethesizeofthenumbersare notthesame,youwillfindthecharactersindifferentcolumnsthatyoucouldnotalignseparation linesforcolumnseasily. InsuchcaseIsimplyrecommendyoutodecomposeyourpointstoitscomponentsandexportthem separately.Itisnotabigdealtoexportthreelistsofdatainsteadofone.
Fig.8.17.Using<decompose>componenttogettheX,YandZcoordinatesofthepointsseparatelyto exporttoadatasheet.
153
Fabrication
You can also use the Format() function to format the output text, directly from a point list in desired string format. You need to define your text in way that you would be able to separate differentpartsofthetextbycommasinseparatecolumnsindatasheet. Enoughformodelling!Iusedthedatatomarkmypaperstripsandconnectthemtogether.Toprove iteventomyself,Ididalltheprocesswithhand!!!!toshowthatfabricationdoesnotnecessarily mean laser cutting (HAM, as Achim Menges once used for Hand Aided Manufacturing!!!!). I just spentanhourtocutandmarkallstripsbuttheassemblyprocesstookabitlongerwhichshouldbe byhandanyway.
Chapter8
154 1
Fabric cation
Fig.8.18.a/b/c.Final lpaperstripproject.
Chapter8
155
Fabrication
8_2_LaserCuttingandCuttingbasedFabrication The idea of laser cutting on sheet materials is very common these days to fabricate complex geometries. There are different ways that we can use this possibility to fabricate objects. Laser cuttermethodsuitstheobjectsthatbuiltwithdevelopablesurfacesorfoldedones.Onecanunfold thedigitalgeometryonaplaneandsimplycutitoutofasheetandfoldthematerialtobuildit.Itis alsosuitabletomakecomplexgeometriesthatcouldbereducedtoseparatepiecesofflatsurfaces andonecandisassemblethewholemodeldigitallyinseparateparts,nestitonflatsheets,addthe overlappingpartsforconnectionpurposes(likegluing)andcutitandassembleitphysically.Itisalso possible to fabricate doublecurve objects by this method. It is well being experimented to find different sections of any Blob shaped object, cut it at least in two directions and assemble these sectionstogetherusuallywithBridlejointsandmakeribcageshapedmodels. Sincethelasercutterisagenerictool,thereareothermethodsalso,butalltogethertheimportant pointistofindaway,toreducethegeometrytoflatpiecestocutthemfromasheetmaterial,no matterpaperormetal,cardboardorwoodandfinallyassemblethemtogether(ifyouhaveRobotic armandyoucancut3Dgeometriesitissomethingdifferent!). AmongthedifferentwaysdiscussedhereIwanttotestoneoftheminGrasshopperandIamsure thatyoucandotheothermethodsbasedonthisexperimenteasily. Freeformsurfacefabrication Idecidedtofabricateafreeformsurfacetohavesomeexperimentswithpreparingthenestedparts ofafreeformobjecttocutandallotherissuesweneedtodealwith.
Chapter8
Fig.8.19. Here I have a surface and I introduced this surface to Grasshopper as a <Geometry> component, so you can introduce any geometry that you have designed or use any Grasshopper objectthatyouhavegenerated. Sectionsasribs In order to fabricate this generic freeform surface I want to create sections of this surface, nest themonsheetsandpreparethefilestobecutbylasercutter.Iftheobjectthatyouareworkingon hasacertainthicknessthenyoucancutitbutiflikethissurfaceyoudonothaveanythicknessyou needtoaddathicknesstothecuttingparts.
156
Fabrication
Fig.8.21.InthisstepIgeneratedmultipleperpendicularframesalongsideeachofselectededges.The numberofframesisactuallythenumberofribsthatIwanttocut.
Fig.8.22. Closer view of frames generated alongside the length and width of the objects bounding box.AsyouseeIcanstarttocutmysurfacewiththisframes.
Chapter8
157
Fabrication
Fig.8.23.NowifIfindtheintersectionsoftheseframesandthesurface(maingeometry),Iactually generated the ribs base structure. Here I used a <BRep | Plane> section component (Intersect > Mathematical > BRep | Plane) to solve this problem. I used the <Geometry> (my initial surface) as BRepandgeneratedframes,asplanestofeedthesectioncomponent.
Fig.8.24.Intersectionsofframesandsurface,resultedinseriesofcurvesonthesurface.
Chapter8
158
Fabrication
Nesting Thenextstepistonestthesecurvesectionsonaflatsheettopreparethemforthecuttingprocess. Here I drew a rectangle in Rhino with my sheet size. I copied this rectangle to generate multiple sheetsoverlappingeachotherandIdrewonesurfacethatcoversalltheserectanglestorepresent themintoGrasshopper.
Fig.8.25.PapersheetsandanunderlyingsurfacetorepresenttheminGrasshopper. I am going to use <Orient> component (XForm > Euclidian > Orient) to nest my curves into the surfacewhichrepresentsthesheetsforcuttingpurpose.Ifyoulookatthe<orient>componentyou see that we need the objects plane as reference plane and target plane which should be on the surface.SinceIusedtheplanestointersecttheinitialsurfaceandgeneratethesectioncurves,Ican usethemagainasreferenceplanes,soIneedtogeneratetargetplanes.
Fig.8.26.I introduced the cuttingsurface to Grasshopper and Iused a <surface Frame> component (Surface>Util>Surfaceframes)togenerateseriesofframesacrossthesurface.Itactuallyworkslike <dividesurface>butitgeneratesplanesastheoutput,soexactlywhatIneed.
Chapter8
159
Fabrication
Frames
Chapter8
Fig.8.27.Orientation.Iconnectedthesectioncurvesasbasegeometries,andtheplanesthatIusedto generate these sections as reference geometry to the <orient> component. But still a bit of manipulationsisneededforthetargetplanes.Ifyoulookatthe<surfaceframe>componentresults youseethatifyoudivideUdirectionevenby1youwillseeitwouldgenerate2columnstodividethe surface.SoIhavemoreplanesthanIneed.SoI<split>thelistoftargetplanesbythenumberthat comesfromthenumberofreferencecurves.SoIonlyuseplanesasmuchascurvethatIhave.ThenI moved these planes 1 unit in X direction to avoid overlapping with the sheets edge. Now I can connecttheseplanestothe<orient>componentandyoucanseethatallcurvesnownestedonthe cuttingsheet.
Fig.8.28.nestedcurvesonthecuttingsheet.
160
Fabrication
Makingribs
Fig.8.29.Afternestingthecurvesonthecuttingsheet,asItoldyou,becausemyobjectdoesnothave anythickness,inordertocutit,weneedtoaddthicknesstoit.ThatswhyI<offset>orientedcurves withdesiredheightandIalsoadd<line>stobothendsofthesecurvesandtheiroffsetonestoclose thewholedrawingsoIwouldhavecompleteribstocut. Joints(Bridlejoints) Thenextissueistogenerateribsinotherdirectionandmakejointstoassemblethemafterbeing cut.AlthoughIusedthesamemethodofdivisionoftheboundingboxlengthtogenerateplanesand thensections,butIcangenerateplanesmanuallyinanydesiredpositionaswell.Soinessenceifyou donotwanttodividebothdirectionsandgeneratesectionsevenly,youcanuseothermethodsof generatingplanesandevenmakethemmanually.
Fig.8.30.Asyouseehere,insteadofpreviouslygeneratedplanes,Iusedmanuallydefinedplanesfor the sections in the other direction of the surface. One plane generated by X value directly from <numberslider>andanotherplanecomesfromthemirroredplaneontheothersideofthesurface (surfacelengthnumberslider).Thesectionofthesetwoplanesandsurfaceisbeingcalculatedfor thenextsteps.
Chapter8
161
Fabrication
NowIcanorientthesenewcurvesonanothersheettocutwhichisthesameastheotherone.So letsgeneratejointsfortheassemblywhichistheimportantpointofthispart.
Fig.8.31. since we have the curves in two directions we can find the points of intersections. Thats whyIused<CCX>components(Intersect>Physical>Curve|Curve)tofindtheintersectpositionof thesecurveswhichmeansthejointpositions(The<CCX>componentisincrossreferencemode). Afterfindingjointspositions,Ineedabitofdrawingtopreparethesejointstobecut.Iamthinking ofpreparingbridlejointssoIneedtocuthalfofeachribonthejointpositiontobeabletojointhem attheend.FirstIneedtofindtheseintersectpositiononthenestedribsandthendrawthelinesfor cutting.
Fig.8.32. If you look at the outputs of the <CCX> component you can see that it gives us the parameter in wish each curve intersect with the other one. So I can <evaluate> the nested or <orient>edcurveswiththeseparameterstofindthejointpositionsonthecuttingsheetaswell.
Chapter8
162
Fabrication
Fig.8.33.Nowwehavethejointpositions,weneedtodrawthem.FirstIdrewlineswith<lineSDL> componentwiththejointpositionsasstartpoints,<unitY>asdirectionandIusedhalfoftheribs height as the height of the line. So as you see each point on the nested curves now has a tiny line associatedwithit.
Fig.8.34.Nextstep,drawalineinXdirectionfromthepreviouslinesendpointwiththelengthofthe <sheet_thickness>(dependsonthematerial).
Chapter8
163
Fabrication
Fig.8.35.ThispartofthedefinitionisabittrickybutIdonthaveanybettersolutionyet.Actuallyif you offset the first joint line you will get the third line but as the base curve line is not straight it wouldcrossthecurve(ornotmeetit)sotheendpointofthethirdlinedoesnotpositionedonthe curve.HereIdrewalinefromtheendpointofthesecondline,butlongerthanwhatitshouldbe,and I am going to trim it with the curve. But because the <trim with BRep> component needs BRep objectsnotcurves,IextrudedthebasecurvetomakeasurfaceandagainIextrudedthissurfaceto makeaclosedBRep.SoifItrimthethirdlineofthejoinwiththisBRep,Iwouldgettheexactjoint shapethatIwant.
Fig.8.36.Usinga<joincurves>component(Curve>Util>Joincurves)nowasyoucanseeIhavea slotshaped<joincurve>thatIcanuseforcuttingasbridlejoinintheribs.
Chapter8
164
Fabrication
Leftjointslot
Fig.8.37.Iamapplyingthesamemethodfortheotherendofthecurve(secondjointsontheother sideofthecurve).
Fig.8.38.Ribswiththejointsdrawnontheirbothends.WiththesametrickIcantrimthetinypartof thebasecurveinsidejointbutbecauseitdoesnotaffecttheresultIcanleaveit. Labelling While working in fabrication phase, it might be a great disaster to cut hundreds of small parts withoutanyclueoraddressthathowwearegoingtoassemblethemtogether,whatistheorder, and which one goes first. It could be simply a number or a combination of text and number to addressthe part. If the object comprisesof different parts we can namethem, so we can use the namesorinitialswithnumberstoaddressthepartsalso.Wecanusedifferenthierarchiesofproject assemblylogicinordertonamethepartsaswell. HereIamgoingtonumberthepartsbecausemyassemblyisnotsocomplicated.
Chapter8
Rightjointslot
165
Fabrication
Initialplanes
Movedplanes
Fig.8.40.Imovedthecornerplanes1unitinXdirectionand0.5unitinYdirection(as<sum>ofthe vectors) and I used these planes as the position of the text tags. Here I used <text tag 3D> and I generatedaseriesofnumbersasmuchasribsIhavetousethemastexts.The<integer>component thatIusedheresimplyconverts12.0to12.Astheresult,youcanseeallpartshaveauniquenumber intheirleftcorner.
Chapter8
166 1
Fabric cation
Fig.8.41.Icanchang gethedivisio onfactorsof fthecuttingsurfacetoco ompressribs sasmuchas spossible dwastingma aterial.Asyo ouseeinthe eaboveexam mple,fromth hestartpoin ntofthesheet_3ribs toavoid startedt tobemoref flatandIhav vemorespac ceinbetween n.HereIcan nsplitribsintwodifferen ntcutting surfaceandchangethedivisionpointsofeachtocompre essthembas sedontheir shape.Butb becauseI h rts f ually in Rhino all parts does not o, am not dealing with lots of par I can do this type of stuff manu necessar rilytobeAss sociative!No owIhavethe eribsinonedirection,an ndIamgoin ngtodothesamefor theothe erdirectiono ofribsaswel ll.Theonlyth hingthatyoushouldcon nsiderhereis sthatthedir rectionof the joints flip aroun here, so basically w nd while I was working with the <orien geometr in the w h nt> ry previous sparthereIs shouldwork kwiththe<of ffset>one. Cutting Whenallgeometriesbecomere eadytocut,I Ineedtoburnthemand dmanagethe emabitmor reonmy sheets.A AsyouseeinFigure8.42theyallne estedinthre eesheets.Ig generatedth hreedifferen ntshapes forther ribsinthewi idthdirectionoftheobje ecttocheckt themout.Th hefileisnow wreadytobe ecut.
Chapter8
167 1
Fabric cation
Fig.8.43.Cutribs,rea adytoassem mble. Assembly Inourcaseassemblyisquietsim mple.Somet timesyoune eedtocheck kyourfileag gainoreven nprovide elpfilesore excelsheets inordertoa assembleyourpartsind differentfabr ricationmet thods.All somehe together,hereisthe esurfacethatImade.
Chapter8
168 1
Fabric cation
Chapter8
169
Fabrication
Fabricationisawidetopictodiscuss.Ithighlydependsonwhatyouwanttofabricate,whatisthe material,whatisthemachineandhowfabricatedpartsgoingtobeassembleandsoon.AsItoldyou before, depend on the project you are working on, you need to provide your data for the next stages.Sometimesitismoreimportanttogettheassemblylogic,forexamplewhenyouareworking withsimplecomponentsbutcomplexgeometryastheresultofassembly.
Chapter8
Fig.8.45.Assemblylogic;materialandjointsaresimple;Icanworkontheassemblylogicandusethe datatomakemymodel.
Chapter_9_DesignStrategy
171
Design Strategy
Chapter_9_DesignStrategy
Associativemodellingisanalgorithmicwayofdealingwithgeometry.Morethantheconventional geometricalobjects,withthisalgorithmicmethod,nowwehaveallpossibilitiesofcomputational geometriesaswellasdealingwiththehugeamountofdata,numbersandcalculations.Itseemsthat thereisagreatpotentialinthisrealm.Heretheargumentistonotlimitthedesigninanypredefined experiment,andexploretheseinfinitepotentials;therearealwaysalternativewaystodo algorithmicmodelling.Althoughitseemsthattheinbuiltcommandsoftheseparametricmodelling softwarescouldlimitsomeactionsordictatesomemethods,butalternativesolutionscouldalways bebroughttothetable,letourcreativityflyawayoflimitations. Inordertodesignsomething,havingaDesignStrategyalwayshelpstosetupagoodalgorithmand tofindthedesignsolution.Thinkingaboutthegeneralpropertiesofthedesignobject,drawingsome parts,evenmakingsomephysicalmodels,wouldhelptoabetterunderstandingofthealgorithmso betterchoiceof<components>indigitalmodelling.Thinkingaboutfixparameters,parametersthat mightchangeduringthedesign,numericaldataandgeometricalobjectsneeded,alwayshelpsto improvethealgorithm.Itwouldbehelpfultoanalyticallyunderstandthedesignproblem,sketchit andthenstartanalgorithmthatcansolvetheproblem. WeshouldthinkinanAlgorithmicwaytodesignAlgorithmic.
Chapter9
172
Design Strategy
Fig.9.1.Weavingproject;FromAnalyticalunderstandingtoAssociativemodelling.
Chapter9
173 1
Design Strategy n
Fig.9.2.Porouswallproject;FromAnalyticalunderstandingtoAssociativemodelling. m i i l
Chapter9
174
Bibliography Pottman,HelmutandAsperl,AndreasandHofer,MichaelandKilian,Axel,2007:Architectural Geometry,BentlyInstitutePress. Hensel,MichaelandMenges,Achim,2008:MorphoEcologies,ArchitecturalAssociation. Rutten,David,2007:RhinoScript101,digitalversionbyDavidRuttenandRobertMcNeeland Association. Flake,GaryWilliam,1998:Thecomputationalbeautyofnature,computerexplorationsoffractals, chaos,complexsystems,andadaptation,TheMITPress. MainGrasshopperwebpage:http://grasshopper.rhino3d.com/ GrasshoppertutorialsonRobertMcNeelandAssociateswiki: http://en.wiki.mcneel.com/default.aspx/McNeel/ExplicitHistoryExamples.html Kilian,AxelandDritsas,Stylianos:DesignToolingSketchingbyComputation, http://www.designexplorer.net/designtooling/inetpub/wwwroot/components/sketching/index.html WolframMathworld:http://mathworld.wolfram.com/ StylianosDritsas,http://jeneratiff.com/
175
Notes
176