Open navigation menu
Close suggestions
Search
Search
en
Change Language
Upload
Sign in
Sign in
Download free for days
0 ratings
0% found this document useful (0 votes)
756 views
145 pages
Grasshopper Foundations
zcczxc
Uploaded by
Siena Dierra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content,
claim it here
.
Available Formats
Download as PDF or read online on Scribd
Download
Save
Save Grasshopper Foundations For Later
Share
0%
0% found this document useful, undefined
0%
, undefined
Print
Embed
Report
0 ratings
0% found this document useful (0 votes)
756 views
145 pages
Grasshopper Foundations
zcczxc
Uploaded by
Siena Dierra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content,
claim it here
.
Available Formats
Download as PDF or read online on Scribd
Carousel Previous
Carousel Next
Download
Save
Save Grasshopper Foundations For Later
Share
0%
0% found this document useful, undefined
0%
, undefined
Print
Embed
Report
Download
Save Grasshopper Foundations For Later
You are on page 1
/ 145
Search
Fullscreen
FOUNDATIONS THE GRASSHOPPER PRIMER THIRD EDITION eX OF BA STNAASFTHB GR eax Phe Kp FU O#E RE CUP *EMK OD SrFewMentwt dr zee 2. BHR PU eC BAe SOre OMe uk FOR FOVIAEMOCRE S4+HAOBN OTS [OomN Oe OYE Kw eo Be Eg Pee BMteeKxvOnRMEweseorve&&GRO*OOWA> Hev.er.vernvaeg wR 6 ay r %, fu AR Ore NECRBHT MRF HORT SECR EY & FESR FAR eene By Ot QeerxVhvs ees %aGnr B® H@VexaG @@mwEr® i EY & se CMRF SSeRORDCDE SERA OF A+ GORDSHGAS O2ewx.,FYEGoCERGYNEZe®< GF O4a QAQ*x*HhE Ox VUES & & © H Es & NH OBR GS 2 te >RMeogd %@ev x BOeseOGa ee ae P KGeAAEDO & a a on od Br: FeSres H#OGCGvo0nsOe Fr SR EBER OBS NECK AHW*EEEH HERS PRB RVAY FBP OHA es Owe? Fw e Poa ea1.0 Preface ‘WELCOME You have just opened the third edition of the Grasshopper Primer. This primer was originally written by Andrew O. Payne of Lift Architects for Rhinod and Grasshopper version 0.6.0007 which, at the time of its release, was a giant upgrade to the already robust Grasshopper platform. We now find ourselves at another critical shift in Grasshopper development, so a much needed update to the existing primer was in order. We are thrilled to add this updated primer to the many amazing contributions put forth by Grasshopper community members. With an already excellent foundation from which to build, our team at Mode Lab went to work designing and developing the look and feel of the third edition. This revision provides a comprehensive guide to the most current Grasshopper build, version 0.90076, highlighting what we feel are some of the most exciting feature updates. The revised text, graphics, and working examples are intended to teach visual programming to the absolute beginner, as well as provide a quick introduction to Generative Design workflows for the seasoned veteran. Itis our goal that this primer will serve as a field guide to new and existing users looking tonavigate the ins and outs of using Grasshopper in their creative practice. FOUNDATIONS This primer, titled Foundations, introduces you to the fundamental cancepts and essential skill-building workflows to effectively use Grasshopper. Foundations is the first volume in a forthcoming collection of Grasshopper primers (to be released in the coming months). This first volume tracks through an introduction to the Grasshopper user interface, the anatomy of a Grasshopper definition, and three chapters dealing with parametric concepts and case study examples. ‘An appendix closes out this volume, providing you with resources for continued exploration. We hope that at the very least this primer will inspire you to begin exploring the many opportunities of programming with Grasshopper. We wish you the best of luck as you embark on this journey. Gil Akos Mode Lab httpi/modelab is/ Ronnie Parsons Mode Lab http:/modelabis/ special thanks to David Rutten for the endless inspiration and invaluable work pioneering Grasshopper. We would also like to thank Andrew O. Payne for providing the assets from which this work initiated. Lastly, many thanks to Bob McNeel and everyone at Robert McNeel & Associates for their generous support over the years.REQUIRED SOFTWARE Rhinos Rhino 5.0 is the market leader in industrial design modeling software. Highly complicated shapes can be directly modeled or acquired through 3D digitizers. With its powerful NURBS based engine Rhino 5.0can create, edit, analyze, and translate curves, surfaces, and solids. There are no limits on complexity, degree, or size. hitte://mmawirhino3d.cony/download/rhino/S atest, Grasshopper For designers who are exploring new shapes using generative algorithms, Grasshoppers a graphical algorithm editor tightly integrated with Rhino's 8D modeling tools. Unlike RhinoScript or Python, Grasshopper requires no knowledge of the abstract syntax of scripting, but still allows designers to build form generators from the simple to the awe inspiring. hitto://mmaw.grasshopper3d,com/page/download-1 FORUMS ‘The Grasshopper forum is very active and offers a wonderful resource for posting questions/answers and finding help on just about anything. ‘The forum has categories for general discussion, errors & bugs, samples & examples, and FAQ. hitpy//waw-grasshopper3d.com/forum ‘The Common Questions section of the Grasshopper site contains answers to many questions you may have, as well as helpful links: htto://wen grasshopper 3d.com/notes/index/aliNotes McNeel Forums For more general questions pertaining to Rhino3D be sure to check out the McNeel Forum powered by Discourse. hittpy//discourse:mcneel comy GENERAL REFERENCES Essential Mathematics Essential Mathematics uses Grasshopper to introduce design professionals to foundation mathematical concepts that are necessary for effective development of computational methods for 3D modeling and computer graphics. Written by Rajaalssa. hittp://wewrhinoSd.corm/download/rhino/5 0/EssentialMathematicsThirdEdition/ Wolfram MathWorld ‘MathWorld is an online mathematics resource., assembled by Eric W. Weisstein with assistance from thousands of contributors, Since its contents first appeared online in 1995, MathWorld has emerged as a nexus of mathematical information in both the mathematics and educational communities. Its entries are extensively referenced in journals and books spanning all educational levels http:/#mathworldwolfram.com/ THINGS TO REMEMBER Grasshopper is a graphical algorithm editor that is integrated with Rhino3D's modeling tools. = Algorithms are step by step procedures designed to perform an operation ~ You use Grasshopper to design algorithms that then automate tasks in Rhino3D. ~ _ Aneasy way to get started if you are unclear how to performa specific. operation in Grasshopper would be to try manually and incrementally. creating an algorithm using Rhino commands.i Contents [|.] Introduction 0 Preface | 4 Contents \ 2 Grasshopper - an Overview 1.3 Grasshopper in Action [F] Foundations FO Hello Grasshopper F.00 Installing & Launching Grasshopper F.0.0.0 Downloading F0.0.1 Installing F002 Launching FO.1 The Grasshopper Ul F.0.1.0 The Windows Title BAr FOL Main Menu Bar F0.1.2 File Browser Control F0.1.3 Component Palettes FO.1.4 The Canvas FO.4.5 Grouping F016 Widgets F.0.1.? Using the Search Feature FO.18 The Find Feature FO.1.9 Using The Radial Menu F0.4.10 The Canvas Toolbar FO.2 Talking to Rhino F0.2.0 Viewport Feedback FO.2.1 Live Wires F0.2.2. Gumball Widget F0.2.3 Baking Geometry F0.2.4Units& Tolerances F025 Remote Control Panel F026 File Management F027 Templates F:1 Anatomy of a Grasshopper Defii F110 Grasshopper Object Types F1.0.0 Parameters F1.0.1 Components F1.0.2 Object Colors 2 4 8 httpywwwgrasshopper3d.com 10 14 16 _ http/Amugrasshopper3d.com/ 16 5 gefdownload-1 16 17 18 18 19 19 21 22 22 23 24 24 25 26 28 28 29 29 30 30 31 32 32 a4 36 36 36 37F.1.1 Grasshopper Component Parts F1.1.0 Label vs Icon Display F:1.1.1 Component Help. F1.1.2 Tool Tips F.1.1.3 Context Popup Menus F114 Zoomable User Interface F1.2 Data Types F120 Persistent Data F.1.2.1 Volatile Data F122 Input Parameters F 1.3 Wiring Components F1.3.0 Connection Management F1.3.1 Fancy Wires F132 Wire Display F 1.4 The Grasshopper Definition F41.40 Program Flow F141 The Logical Graph F 2 Building Blocks of Algorithms F 2.0 Points, Planes & Vectors F2.0.0 Points F.2.0.1 Vectors F.2.0.2 Planes F 2.1 Working with Attractors F2.1.0 Attractor definition F 2.2 Mathematics, Expressions & Conditionals. F2.20 The Math Tab F.2.2.1 Operators F.2,2.2 Conditional Operators F2.2.3 Trigonometry Components F.2.2.4 Expressions F23 Domains & Color F.24 Booleans and Logical Operators F.2.4.0 Booleans F.2.4.1 Logical Operators F3 Designing with Lists, F3.0 Curve Geometry F3,0.0 NURBS Curves F.3,0.1 Grasshopper Spline Components 38 SeSGREERBSESES 49 50— £14 the grasshopper defitiongh 50 50 52 54 55 55 55 56 57-— £2.10 attractor definition gh €0— £22 operators and conditionals.eh 60 61 1 62— 12.23 trigonometry components gh 65-— £2.24 expressions gh €8— £23 domains and colorgh 72.— £24 booleans and logical operators gh 72 72 74 6 76 shopper spli 77,___300:1_prasshopper spline — components.ehF.3.1 What isa List? F.3.2 Data Stream Matching F.3.3 Creating Lists F.3,3.0 Manual List Creation F.3.3.1 Range F3.3.2 Series F3.3.3 Random F.3A4 List Visualization F3.4.0 The Point List component FA. Text Tags F342 Color F.3.5 List Management F3,5.0 List Length F3.5.1 List item F.3,5.2 Reverse List F353 Shift List F354 Insert Items F355 Weave F356 Cull Pattern F3.6 Working with Lists F 4 Designing with Data Trees F40 Surface Geometry F4.0.0NURBS Surfaces, F 4.0.1 Projecting, Mapping & Morphing F 4.0.2 Morphing Definition F4.1 Whatis a Data Tree? F.4,1.0 Data Tree Visualization F-4.3 Working with Data Trees F4.3.0 Flatten Tree F431 Graft Tree F4.3.2 Simplify Tree F4.3.3 Flip Matrix F.4.3.4 The Path Mapper F4.3.5 Weaving Definition F.4.3.6 Rail Intersect Definition [A] Appendix AOiIndex 79 80— 13.2 datamatching gh £4 £333 list crestioneh 84 84 86 86 87 87 87 86 €9— £35 list management eh 89 29 a9 90 0 91 ca 92-— £36 working with lists gh 9% 98 % 100 101— £4.02_morphing definitiongh 104 105— £4.10 datatree visualizationgh 107— £43 workingwith datatreesgh 107 107 108 108 109 110— £4.35 weaving definitiongh 116— £4.36 ,allintersect defitiongh 124AL Resources 136 A2Notes 140 A About this Primer 14212 Grasshopper - an Overview Grasshopper is a visual programming editor developed by David Rutten at Robert McNeel & Associates. As a plug-in for Rhino3D, Grasshopper is integrated with the robust and versatile modeling environment used by creative professionals across a diverse range of fields, including architecture, engineering, product design, and more. In tandem, Grasshopper and Rhino offer us the opportunity to define precise parametric control over models, the capability to explore generative design workflows, and a platform to develop higher-level programming logic - all within an intuitive, graphical interface. The origins of Grasshopper can be traced to the functionality of Rhino3d Version 4's "Record History button. This built-in feature enabled users to store modeling procedures implicitly in the background as you go. If you lofted four curves with the recording on and then edited the control points af one of these curves, the surface geometry would update. Back in 2008, David posed the question: “what if you could have more explicit control over this history?" and the precursor to Grasshopper. Explicit History, was born. This exposed. the history tree to editing in detail and empowered the user to develop logical sequences beyond the existing capabilities of Rhino3D’s built in features. Six years later, Grasshopper is now a robust visual programming editor that can be extended by suites of externally developed add-ons. Furthermore, it has fundamentally altered the workflows of professionals across multiple industries and fostered an active global community of users. This primer focuses on Foundations, offering the core knowledge you need to dive into regular use of Grasshopper and several on-ramps to how you might go further within your own creative practice. Before diving into the descriptions, diagrams, and examples supplied hereafter, let's discuss what visual programming is, the basics of the Grasshopper interface and terminology, as well as the live” characteristics of the viewport feedback and user experience. Visual Programming is a paradigm of computer programming within which the user manipulates logic elements graphically instead of textually. Some of the most well-known textual programming languages such as C#, Visual Basic, Processing ~ and more close to home for Rhino ~ Python and Rhinoscript require us to write code that is bound by language-specific syntax. In contrast. visual programming allows us to connect functional blocks into a sequence of actions where the only “syntax” required is that the inputs of the blocks receive the data of the appropriate type, and ideally, that is organized according to the desired result - see the sections on Data Stream Matching and Designing with Data Trees. This characteristic of visual programming avoids the barrier to entry commonly found in trying to learn anew language, even a spoken one, as well as foregrounds the interface, which for designers locates Grasshopper within more familiar territory. Thisimage show the process for drawing sine curve in python and in Grashopper,To access Grasshopper and its visual programming capabilities, we need to download and install the program from the Grasshopper3D.com website. Once installed, we can open the plug-in by typing “Grasshopper” into the Rhino Command Line. The first time we do so in a new session of Rhino, we will be presented with the Grasshopper loading prompt followed by the Grasshopper editor window. We can now add functional blocks called “components” to the canvas’ connect them with “wires” and save the entire definition’ in the.ghx file format. ‘A Grasshopper definition, made up of ‘components connected with wires onthe (Once we've started to develop a Grasshopper definition and created “slider” objects within our canvas to cantral geometry, we may naturally intuit the connection we've made between this input object to what we see in Rhino's viewports. This connection is essentially live ~ if we adjust the grip on the slider, we will see the consequences in that, within our definition an input somewhere hhas changed and the program must be solved again to recompute a solution and display the update. To our benefit when getting started with using Grasshopper, the geometry preview we see is a lightweight representation of the solution and it automatically updates. It is important to take note this connection now as when your definitions become more complex, adeptly managing the flow of data, the status of the “solver,” and what is previewed in the Rhino viewport will prevent many unwanted headaches. Upstream Downstream Program Flow ‘As you begin first exploring Grasshopper or further building your skills, you have joined the global Grasshopper community, one that is full of active members from many fields, with diverse experience levels, The forum at Grasshopper3D. comis.a useful resource for posing questions, sharing findings, and gaining knowledge. This is a community that we have held dear as we've written this primer and watched Grasshopper develop over the years. Welcome!ie Grasshopper in Actionbend amo ite /eatharccom Hta./urdrla blogspot com, Soft Voronoi Shelf Ftp ony gt2p conv a Dy tad ‘minimamaxioa) ‘Opening Chronometry Zinzae sat grasshopperSd comiprofie/JohnBrockway _livacemponents-ncom, sowicassstudlocom bayou'duminescence Divide hit vipatharccom) Fete sw grasshapper3Acom/prafle/jovan Sin the hope kaopor Image credit Catalyst Hexshell bit /wwen g82p.cor von et /mats)sdesioncomy Bartop c Vilu Light grasshopper3écomr ” betwen gp cor[F.] FOUNDATIONS Astrong foundation is built to last. This volume of the Primer introduces the key concepts and features of parametric modeling with Grasshopper.F.O HELLO GRASSHOPPER Grasshopper is a graphical algorithm editor that is integrated with Rhino3D’s modeling tools. You use Grasshopper to design algorithms that then automate tasks in Rhino3D.BkRU HB BSCEHRS6ANODBOLYE LPR CANHXH4A SGA~ KT TRSHBAAEBVA BAG ORPS Ea EBOREF RR OCHS Se veerzva SOH EHR GCeETVUS ae FOeoe tCcarveoeOaisr Kear oeew’ SOF STHRErTY@GHOVEOKEBES P@uoer SBnNHosSk&+>wr Oar esr TADORISCS A+ +e ueya@ey we Bs eke es BB OrXtE Cora
[email protected]
SOHBEN*eSHR BTR BOO4 ORO SO@adHROWU eR RRL sPP RRP BB SOs OR TRE BDGOREKH OST BL£Oxa-FSSRBS&tReHAN + BAe rOPesUeUuseerntve > B60 FPCM® uy Tender & i a FRE RGXK BORK NL F a €Bervrtreao has e@zruene@ s BRSMABKR"“SFZOTOMR ED & ¥ @ HHMOFHHAMOY He SPOUSES # BYarfiwaetr do eaoeuw s ts BR ROFHUX NDS BR BLO H Ea SOAs BMH AR PRAVYR HBS ae #¢SB°HOO4 tere sTRO ms bP eSPEESR* BEGG LD» ¥ @ BSB ek&_ RAG Oe SeOPach® :@ S=eHePGATRRABKOKYW @ FuB@OurSaAKeeaParrve a PSa/FAXF ROY OC EWS + @F.0.0 Installing & Launching Grasshopper The Grasshopper plugin is updated frequently so be sure to update to the latest build. Note that there is currently no version of Grasshopper for Mac. F0.0.0 DOWNLOADING To download the Grasshopper plug-in, visit the Grasshopper web site. Click on the Download tab at the top of the page, and when prompted on the next screen, enter your email address. Now right click on the download link, and choose Save Target As from the menu, Select a location on your hard drive (note: the file cannot be loaded over a network connection, so the file must be saved locally to your computer's hard drive) and save the executable file to that address. https/iwngrasshopper 3d.com/page/ donnioad-2 Dowinioac F0.0.1 INSTALLING Select Run from the dawnload dialog box follow the installer instructions. (note: you must have Rhino 5 already installed on your computer for the plug-in to install properly) Rhino Package Installation Wizard Follow the steps in the Installation insolan comple euscessy, wicare 1é FO Hello GrasshopperF0.0.2 LAUNCHING ‘To Launch Grasshopper, type Grasshopper into the Rhino Command line. When you launch Grasshopper, the first thing you will see is a new window floating. in front of Rhino. Within this window you can create node-based programs to automate various types of functionality in Rhino. Best practice is to arrange the windows so that they do not overlap and Grasshopper does not obstruct the Rhino viewports, “Type"'Grasshopper" into the Rhino ‘comand line t launch the Grasshopper plugin SRepstoc teas Sich” The Grasshopper window floats ontop lof the Rhino vigeports Grasshopper clsplaysthe version ‘umber atthe bottom the window Splitthe screen sa that Graszhopper does net abstruct the Rhino Viewnorts. You can do this by dragging each window to opposite sides of te screen, or by hoing the Wondowskoy and pressing tholeft or right arrowsF.0.1 The Grasshopper UI Grasshopper’s visual “plug-and-play” style gives designers the ability to combine creative problem solving with novel rule systems through the use of a fluid graphical interface. Let's start by exploring Grasshopper's user interface Ul. Grasshopper is a visual programming application where you are able to create programs, called efinitions or documents, by dragging components onto the main editing window (called the canvas). The outputs to these components are connected to the inputs of subsequent components — creating a graph of information which can be read from left to right. Let’s get started with the basics. ‘Assuming you've already installed the Grasshopper plugin (see 0.0), type the ‘word “Grasshopper’ in the Rhino command prompt to display the Grasshopper Editor, The Grasshopper interface contains a number of elements, most of which will be very familiar to Rhino users. Let's look at a few features of the interface. Windows title bar ‘Main menu bar File broweer control ‘component palettes Canvas toolbar canvas This area, indicated by a eridof rectangular ‘bows, provides anintertace with which to open rocontly accessed file. The 3x3 menushows the file most recently accessed (ehronelosicaly) andi eiplay ared rectangular box the fle Cannot be found (whieh canoccurifyeumove a fie toanew folder or delete) ‘The statusbar tells ou what version of GGrasshopoer is currently installed on your machine, fanewer versions available 2 ‘pop-up menu will appear in your tray providing Instructions on hove ta down the start FD.L0 THE WINDOWS TITLE BAR The Editor Window title bar behaves differently from most other dialogs in Microsoft Windows. If the window is not minimized or maximized, double clicking the title bar will collapse the dialog into a minimized bar on your screen. Thisis a great way to switch between the plug-in and Rhino because it minimizes the Editor without moving it to the bottom of the screen or behind other windows, Note that if you close the Editor, the Grasshopper geometry preview in the Rhino viewport will disappear, but the file won't actually be closed. The next time you run the “Grasshopper” command in the Rhino dialog box, the window will come back in the same state with the same files loaded. This is because once it is launched from the command prompt, your session of Grasshopper stays active until that instance of Rhinos closed. 18 FOHEllo GrasshopperF0.1. MAIN MENUBAR The title bar is similar to typical Windows menus, except for the file browser control on the right (see next section). The File menu provides typical functions (eg. New File, Open, Save, etc.) in addition to a few utility tools which let you export images of your current Grasshopper document (see Export Quick Image and Export Hi-Res Image). You can control different aspects of the user interface using the Viewand Display menus, while the Solution menu lets you manage different attributes about how the solver computes the graph solution. itis worth noting that many application settings can be controlled through the Preferences dialog box found under the File menu. The Author section allows you to set personal metadata which will be stored with each Grasshopper document while the Display section gives you fine grain control over the look and feel of the interface. The Files section lets you specify things like how often and where to store automatically saved fie (in case the application is inadvertently closed or crashes). Finally, the Solver section lets you manage core and third-party plugins which can extend funetionality. Peach are Fleneteneaacewe F 0.1.2 FILE BROWSER CONTROL, The File Browser allows you to quickly switch between different loaded files by selecting them through this drop-down list. Accessing your open files through the File Browser drop-down list enables you to quickly copy and paste items from open definitions. Just click on the active file name in the browser control window and a cascading lst of all open files will be displayed (along with a small, thumbnail picture of each open definition) for easy access. You can also hit Alt+Tab to quickly switch between any open Grasshopper documents Of course, you can go through the standard Open File dialog to load any Grasshopper decument, although you can also drag and drop any Grasshopper file onto the canvas to load a particular definition. Note: Be careful when using harteuts since they are hanaled by the active window which caulk etherbe Rhino, the Grasshapper eanvas fr anyother now inside Rina, ts ute lexey fo use a shortcut commanc, only orealite ‘that youhad the wrong active window selected ‘and aceldentally invoked the wrong command, ‘The Preforences dalogallows youta set many ‘of Grasshopper's aplication settings GGrasshopoer sa plurin that works en-top! ‘of Rhino ang as such has ite ow fle types ‘The default filetype is abinary data le, saved vith an extension of gh The other filetype isknown as a Grasshopper XML file, which sos the extension hx, The XML (Extensible Markup Language) file type uses tags todefine ‘objacts and object attributes (much ike an HTML document) but uses custom tas to ‘fino objects and the data within each object Because XML files are formatted os text documents, ou could openup any Grasshopper XML fein atexe editor like NotePa tose the coding thats going on behind the scenes. O Hell GrasshopperGrasshopper has several different methods by which it can open a file, and you will need to specify which option you would like to use when using this method, Open File: As the name suggests, this file option will definition that you drag and drop onto the canvas. ply open any Insert File: You can use this option to insert an existing file into the current document as loose components. Group File: This method will insert a file into an existing document, but will group all of the objects together. Cluster File: Similar to the group function, this method will insert a file into an existing document, but will create a cluster object for the entire group of objects. Examine File: Allows you to open afile in a locked state, meaning you ‘can look around a particular file but you can’t make any changes to the definition. Grasshopper also has an Autosave feature which will be triggered periodically Noto: Autosavoonly works the file hasalroady based on specific user actions. A list of Autosave preferences can be found. been saved atleast once under the File menu on the Main Menu Bar. When the active instance of Rhino is closed, a pop-up dialog box will appear asking whether or not you want to save any Grasshopper files that were open when Rhino was shut down. Drax and Drop Files onto the Canvas Documents library ‘tein 1h counans re rr | oy | c | fo Mo [eee tomy I wcee orf) aac TUR rg wim data Oe mone 944 20 EO Hallo GrasshopperF0.1. COMPONENT PALETTES This area organizes components into categories and sub-categories. Categories are displayed as tabs, and subcategories are displayed as drop-down panels. All components belong toa certain category. These categories have been labeled to help you find the specific component that you are looking for (e."Params” for all primitive data types or *Curves’ for all curverelated tools). To add a component to the canvas, you can either click on the objects in the drop-down menu or you can drag the component directly from the menu onto the canvas. DDrag'+ Drop a component from the palette to adda component to the eanvas. Since there can be many more components in each sub-category than will fit into the palette, a limited number of icons are displayed on each panel. The height of the component palette and the width of the Grasshopper window can be adjusted to display more or fewer components per sub-category. To see a menu. of all of the components in a given sub-category, simply click on the black bar at, the bottom of each sub-category panel. This will open a dropdown menu which provides access to all components in that sub-category. Catgory tab click the black bar to open the sub-category panel ment Sub-category panel Hover your mouseover a component fora short descristion Drop-down menu 1 coveree ( csoramet 1g oom sre 1B rowtcooeee oursF0.1.4 THE CANVAS The canvas is the primary workspace for creating Grasshopper definitions. Itis here where you interact with the elements of your visual program. You can start ‘workingin the canvas by placing components and connecting wires, F0.1.5 GROUPING Grouping components together on the canvas can be especially useful for readability and comprehensibility. Grouping allows you the ability to quickly select and move multiple components around the canvas. You can create a group by typing Ctrl+G with the desired components selected. An alternate method ‘can be found by using the “Group Selection’ button under the Edit Menu onthe Main Menu Bar. Custom parameters for group color, transparency, name, and outline type can be defined by right-clicking on any group object. ‘A groupet components delineated bythe Box Outline profile. 7 ,@e Goud Seectal aoxoutine Bich cutine Racrangl tine Ura fait aouo Remove om group calour . Make Cotour Default 10 Right-click anrwhere onthe sroupto edt the name and 2o- pearanceat the sreup. . SE oF e Gs dex tt Yeti dtte groupings metal orth ty sng he lob Out pote qe ‘Two groups are nested inside one another. — The color light Dive) hasbeen changed on the » ‘outer group to help visually identify one group fromthe other. Groups are drawn “behind” the components within them and incasessuch as this, therels adepth order to the two groups. ‘Ta change ths, oto Edit > Arrange in he main | menue Put Te Back cone. Bring To Front cur Move Backwards Gul#ShittB Mave Forwards Curl*Shit+F ‘Align Selection Ctr+Shitt+WF0.16 WIDGETS There are a few widgets that are available in Grasshopper that can help you perform useful actions. You can toggle any of these widgets on/off under the Display menu of the Main Menu bar. Below we'll look at a few of the most frequently used widgets. The Align Widget (One useful U! widget which can help you keep your canvas clean is the Align widget. You can access the Align widget by selecting multiple components at the same time and clicking on one of the options found in the dashed outline that surrounds your selected components. You can align left, vertical center, right, or top, horizontal center, bottom, or distribute components equally through this interface. When first starting out, you may find that these tools sometimes get in the way (itis possible to make the mistake of collapsing several components on top of each other). However, with alittle practice these tools can be invaluable as you begin to structure graphs which are readable and comprehensible. Align right L Distribute vertically ‘The Profiler Widget The profiler lists worst-case runtimes for parameters and components, allowing you to track down bottlenecks in networks and to compare different components in terms of performance. Note that this widget is turned off by default. ‘The Profilor widget gvos you visual feadback as towhich components in your definition could be causing longer computational times. The Markov Widget This widget uses Markov chains to ‘predict’ which component you may want to use next based on your behavior in the past. A Markov chain is a process that consists of a finite number of states (or levels) and some known probabilities. It can take some time for this widget to become accustomed to a particular user, but over time you should begin to notice that this widget will begin to suggest components that you may want to use next. The Markov Widget can suggest up to five possible camponents depending. on your recent activity. You can right-click on the Markov widget (the default location is the bottom left-hand carner of the canvas) to dock it into ane of the other corners of the canvas or to hide it completely.0.1.7 USING THE SEARCH FEATURE Although alot of thought has gone into the placement of each component on the component panel to make it intuitive for new users, people sometimes find difficult to locate a specific component that might be buried deep inside one of the category panels. Fortunately, you can also find components by name, by double-clicking on any empty space on the canvas. This willinvoke a pop-up search bax. Simply type in the name of the component you are looking for and you will see alist of parameters or components that match your request. BE duibsirice EF pukomon HF bwteLeur BD ovo F0.L8 THE FIND FEATURE There are literally hundreds (if not thousands) of Grasshopper components which are available to you and it can be daunting as a beginner to know where to look to find a specific component within the Component Palettes. The quick solution is to double-click anywhere on the canvas to launch a search query for the component you are looking for. However, what if we need to find a particular component already placed on our canvas? No need to worry, By right-clicking anywhere on the canvas or pressing the F3 key, you can invoke the Find feature. Start by typing in the name of the component that you are looking for. ‘The Find feature employs the use of some very sophisticated algorithms which search not only for any instances of a component's name within a definition (a component's nameis the title of the component found under the Component Panel which we as users cannot change), but also any unique signatures which we may have designated for a particular component (known as nicknames). The Find feature can also search for any component type on the canvas or search through text panel, scribble, and group content. Once the Find feature has found a match, it will automatically grey out the rest of the definition and draw a dashed line around the highlighted component. If multiple matches are found, alist of components matching your search query will be displayed in the 1d dialog box and hovering aver an item in the list will turn that particular component on the canvas green. Earache Double-click anywhere onthe canvasto Invoke a kay word search fora particular component found in the Component Pans ‘Asearch for ivide tists a variety of Division operator component Divide Surface component Divide Domain? component Preview On Preview OFF BD dicatie ke Zaom @ Group cluster Recampute Lock Solver Preferences. Navigatea_= we. =x seer ee A small arrow will also be displayed next to each item in the list which points to its corresponding component on the canvas. Try moving the Find dialog box around on the canvas and watch the arrows rotate in to keep track of their components. Clicking on the Find result will try to place the component (on the canvas) next to the Find dialog box. F0.19 USING THE RADIALMENU. ‘As you become more proficient in using the Grasshopper interface, you'll begin to find ways to expedite your workflow. Using shortcuts is one way to do this, however there is another feature which can allow you to quickly access ‘a number of useful tools ~ the radial UI menu. You can invoke the radial menu by hitting the space bar (while your mouse is over the canvas or a component) or by clicking your middle mouse button. The radial menu will enable different tools depending on whether you invoke the menu by clicking directly on top of a component, or just anywhere on the canvas. In the image below, you see the radial menu has more features available when clicking on top of aselected component versus just clicking anywhere else on the canvas. This menu can dramatically increase the speed at which you create Grasshopper documents. Re Fi ale soln The Find feature can bequite helfulto locates partllar component on tho canvas Right-click anywheroon the canvas to launch the Find tlalos box ‘The Radial Ul menuallows youto quickly access frequently used menu itemsF0.1.10 THE CANVAS TOOLBAR The canvas toolbar provides quick access to a number of frequently used Grasshopper features. All of the tools are available through the menu as well, and you can hide the toolbar if you like. The toolbar can be re-enabled from the View tab on the Main Menu Bar. Save File: Ashorteut tosave the current Grasshopper Fil ‘Open File: shortcut to open a Grasshopper — ‘Zoom Defaults: Default zoomsettings that allow ‘youtozoom in or out of your canvas at pre {fined interval Sl om - ‘Zoom Extents: Zoo tothe extent of your definition, lik ‘nthe arrow next tothe Zoom Extents eon to select one of ‘the sub-menu items to zoom toa particular region within your definition. [Named Views: This feature exposes amenu allowing yout storecor recall any view area in your definition. The Sketch Took The skotch tool works smilary tothe pencil toolset found in Adobe Photoshop with afew added features. Grazhopper unnamed Fe eat | Pam | Nth (Grasshopper unnamed Hep Fo Ex Vow a “Solon Fm @ 0000 Vow Depiay Seaton “Lead from Rhine simply » Colour , @ tee. Tho sketch tool allows changos tothe line weight line type, and color. By right-lickin onthe selected sketch object you can choose to simply your line tocreate asmoother effect. Riht-ick on your sketch object and select'Load from Rhine’ When prompted, select any 2D shape in your Rhine Scene. Once you have selected your referenced shape it Enter, and your previous sketch in willbe reconfigured o your Rhino reference shape, Note: Your sketch object may have moved from its original location once youhaveloaded a shape from Rhino. Grasshopper places your sketch abject lative te the origin ofthe canvas (upper lefthane corner) and the world x plane originin Rhino,Proview Settings: a Grasshopper component senerates some fermof geometry, then 2 proviow ofthis peometry willbe visible inthe viewport, by defaut. You can disable the preview on a per- ‘objacthasis by right-clicking each component and de-actvating the preview festure, or globally ‘change the preview state by usingone of these three buttons | \ eOo'SOo- Mieetamerrerer [Proview Mesh Quality: For optimization pes purposes these settings allow you to control Turn off preview —__ the quality ofthe meshvsurface display ofthe Shaded preview (default) _peomatry rendered in hina Higher quality Settings will cause longer calculation times, Proview Selected Objects: With this button tousled ‘whereas lower settings wil display less accurate Grasshopper willony display geometry thatis part of — preview geometry selected components, even those components have 3 preview-of state should benoted thatthe geometry stil —_ maintains ahih-desres of resolution whenbaked Document Preview Settings: Grasshopper has adofault inte the Rhediocunent- these aettias merely color scheme for selected (semi-transparent green) and ‘tect the daplay performance andeqanty. Unselected (sembtransparent ed) geometry is possible to override thiscolor scheme withthe Document Preview Betings dial. cco bse" ssepeeeF.0.2 Talking to Rhino Unlike a Rhino document, a Grasshopper definition does not contain any actual objects or geometry. Instead, a Grasshopper definition represents a set of rules & instructions for how Rhino can automate tasks. Grasshopper Application window Grasshopper preview geometry Rhino viewports F0.2.0 VIEWPORT FEEDBACK All geometry that is generated using the various Grasshopper components will show up (by default) in the Rhino viewport. This preview is just an Open GL approximation of the actual geometry, and as such you will not be able to select the geometry in the Rhino viewport (you must first bake it into the scene). You can turn the geometry preview on/off by right-clicking on a component and selecting the Preview toggle. The geometry in the viewport is color coded to provide visual feedback. The image below outlines the default color scheme. Blue feedbackmeans you are currently making election nthe Rhine Viewpor®. Green geometry inthe viswort belongs to 3 component which i currently selected. Red geometry inthe viewport belongs toa companentwhich ie currently unsalactec, Point geometry is drawn as.acrossrather than rectangle to distinguish itfrom other Rhino Doint objects. Note: This isthe detaut color scheme, which can be modified using the Document Preview Settings too! on the canvas toolbar. 2% EOHllo GrasshopperF 0.2.4 LIVE WIRES Grasshopper is a dynamic environment. Changes that are made are live and their preview display is updated in the Rhino viewport. F0.2.2 GUMBALL WIDGET When storing geometry as internalized in a Grasshopper parameter, the gumball allows you to interface with that geometry in the Rhino viewport. This update is, live and updates will occur as you manipulate the gumball. In contrast, gometry referenced from Rhino directly will continue to exist in the Rhino document and updates from Grasshopper will happen only after any changes occur (as apposed to during),F 0.2.3 BAKING GEOMETRY In order to work with (select, edit, transform, etc.) geometry in Rhino that was created in Grasshopper, you must “bake’ it. Baking instantiates new geometry into the Rhino document based on the current state of the Grasshopper graph. It Press the INSERT key to bake all selected components into the curently active Rhino layer will no longer be responsive to the changes in your definition, c N RY Bt a Gl Preview Hl tnavies Bake by right-clicking 2 component and selecting Bake dialog vill appear that allows youte select tent which Rhine layer the geometry vil bake. Grouping your baked geometry is a convenient ‘way to manage th instantiated Rhine seometry particularly if you arecreating many objects with Grasshopper. F0.24UNITS & TOLERANCES Colour Decorations Oispley Node Group UserText Grasshopper inherits units and tolerances from Rhino. To change the units, type Dacument Properties in the Rhino command line to access the Document Properties menu. Select Units to change the units and tolerances. CChango the units and tolerances inthe Rhino Document Properties menu ‘o aeent ae CE a dew 30. EO Hallo GrasshopperF.0.25 REMOTE CONTROL PANEL ‘Once you get the hang of it, Grasshopper is an incredibly powerful and flexible tool which allows you to explore design iterations using a graphic interface. However, if you're working with asingle screen then you may have already noticed that the Grasshopper editor takes up a lot of screen real-estate. Other than constantly zooming in and out and moving windows around your screen, there really isn’t an elegant solution to this problem. That is..until the release of the Remote Control Panel! ‘The Remote Control Panel (RCP) provides a minimal interface to control your definition without taking up a substantial portion of your screen. The RCP can be instantiated by clicking on the toggle under the View menu of the Main Menu bar. By default, the RCP is blank — meaning it doesn't contain any information about your current Grasshopper document. To populate the RCP with UL elements like sliders, toggles, and buttons, simply right click on the element and click Publish To Remote Panel. This will create a new group and create a synchronized Ul element in the RCP. Changing the value of the element in the RCP will also update the value in the graph, as well as modify any geometry in the viewport which might be dependant on this parameter. You can publish multiple elements and populate a complete interface which can be used to control your file without having the clutter of the visual graph showing up on top of the Rhino viewport. EZ] _ inorder to got a Ul ctoment (eg. sider, to =e button, etc) to showup in the Remote Contr! Panel, wehaveto fist publish it Note: The RCP willinerit the Utelements ame ara use Ia the abel. Its good practice toundate your slides and tosses with com prehonsible and meaningful narves. This wil translatelectly to your RCP making iteasior touse The RCP Ul can also be customized - allowing you to control where abjects appear in the interface, the names and colors of different groups. To modify the layout of the RCP you first have to switch from Working Made (the default RCP view) to Edit Mode. You can enter the Editing Made by clicking on the green pencil in the upper right hand corner of the RCP. Once in Editing Mode, you can create new UI groups, rearrange elements within groups, add labels, change colors and more. To delete a UI element, simply drag the element outside the border of the RCP. You cannot change the individual values of the parameters if you are in Editing Mode. Instead, you will have to click on the green pencil icon to switch back to the standard Working Mode. ‘The Remote Control Panel has tao medes: Fat ‘Mode (let) which allows you to recrganize the look ancfeel of the RCP and Warking Med Where youcan modify the actual values of the Urelements ‘The Remote Cantrl Panelin Eat Mode hasan orange nackgraund.0.2.6 FILEMANAGEMENT It your Grasshopper file references geometry from Rhino, you must open that same file for the definition to work. Keep your files organized by storing the Grasshopper and Rhino files in the same folder, and giving them related names. Project Folder Rhino file Grasshopper fle 0.2.7 TEMPLATES Creating and specifying a template file in your Grasshopper preferencesis ‘convenient way to set up every new Grasshopper definition youcreate. The ‘template can include Grasshopper components as well as panels and sketch objects for labeling Create template fle ane saveit 32 EO HalloGrasshopperTemoat Fle ‘Topitoto us when cag 2 ro, ne A. Granboppe Beet Pactces CAD ovina arpa In File/Preferences, load the le you just creat- ed under Template Fil. Your template will nove bbe usec each time you creste anew file.F.L ANATOMY OF A GRASSHOPPER DEFINITION Grasshopper allows you to create visual programs called definitions. These definitions are made up of nodes connected by wires. The following chapter introduces Grasshopper objects andhowtointeract with them to start building definitions.F.1.0 Grasshopper Object Types Grasshopper consists of two primary types of user objects: parameters and components. Parameters store data, whereas components perform actions that result in data. The most basic way to understand Grasshopper is to remember that we will use data to define the inputs of actions (which will result in new data that we can continue to use). F100 PARAMETERS Parameters store the data - numbers, colors, geometry, and more - that we send through the graph in our definition, Parameters are container objects which are usually shown as small rectangular boxes witha single input and single output. We also know that these are parameters because of the shape of their icon. All parameter objects have a hexagonal border around their icon, Geometry parameters can reference geometry from Rhino, or inherit geometry fromother components. The point and curve objects are both geometry parameters. Input parameters are dynamic interface objects that allow you to interact with your definition. The number slider and the graph mapper are both input | parameters. F101 COMPONENTS ‘Components perform actions based on the inputs they receive. There are many types of components for different tasks. ‘The multiplication componentis an operator that calculates the product of two numbers. ‘The Divide component operates on geometry, segments iding a curve into equal ‘The Circle CNR component constructs a circle geometry from input data; a center paint, normal vector, and radius. ‘The Loft component constructs a surface by lofting curves. ‘Aparameter with nowarnings or Aparamotor with warnings Acomponentwith warnings component with no warnings oFF.1.0.2 OBJECT COLORS We can glean some information about the state of each object based on their color. Let's take a look at Grasshopper’s default color coding system. Apparameter which contains neither warnings nor errors is shown in light gray. This color object indicates that everything is working properly with this parameter. A parameter which contains warnings is displayed as an orange box. Any object, which fails to collect data is considered suspect in a Grasshopper definition since itisnot contributing to the solution.. Therefore, all parameters (when freshly added) are orange, to indicate they do not contain any data and have thus no functional effect on the outcome of the solution. By default, parameters and G tweety components that are orange also have a small balloon at the upper right hand Senate eee corner of the object. If you hover your mouse over this balloon, it will reveal Ginette woe st oence information about why the component is giving you a warning. Once a parameter inherits or defines data, it will become grey and the baloon will disappear. It youbover your mouse over the balloon in the Upper righthand corner ofthe parameter a tool Acomponent is always amore involved object, since we have to understand and tip with explain the warning then coordinate what its inputs and outputs are. Like parameters, a component with warnings is displayed as orange. Remember, warnings aren't necessarily __ bad, it usually just means that Grasshopper is alerting you to a potential problem inyour definition. ‘Acomponent which contains neither warnings nor errors is shown in light gray. ‘A component whose preview has been disabled is shown in a slightly darker gray. There are two ways to disable a component's preview. First, simply right- click on the component and toggle the preview button. To disable the preview for multiple components at the same time, frst select the desired components and then toggle the disable preview icon (blindfolded man) by right (GD Gitte Gidecny anywhere on the canvas. “cone re neg. Glatt elelin osee sto ‘A component that has been disabled is shown in a dull gray. To disable a component you may right-click on the component and toggle the disable button, = or you may select the desired components, right click anywhere on the canvas __Thiscomponent containsa warning becouse It and select Disable, Disabled components stop sending data to downstream —_—_ {oss not havecrouhinformatlontocrestea components. ‘A.component which has been selected will be shown in a light green color. If the selected component has generated some geometry within the Rhino scene, this will also turn green to give you some visual feedback. component which contains at least 1 error is displayed in red. The error can come either from the component itself or from one of its inputs or outputs. ‘component with preview disabled Acomponentthathasbeendlisabled _Aselectedcomponent ‘component with anerrer “aFan Grasshopper Component Parts Components are the objects you place on the canvas and connect together with Wires to form a visual program. Components can represent Rhino Geometry or operations like Math Functions. Components have inputs and outputs. ig cl] fc] NIG c NIB Ic GN GIc R | R GR ‘Acomponent requires data in order to perform its actions, and it usually comes up witha result. That is why most components have a set of nested parameters, referred toas Inputs and Outputs, respectively. Input parameters are positioned along the left side, output parameters along the right side. There are a few Grasshopper components that have inputs but no outputs, or vice versa. When a component doesn't have inputs or outputs, it will have a jagged edge. q GR GA + F 1.10 LABEL VS ICON DISPLAY Every Grasshopper abject has a unique icon. These icons are displayed in the center area of the object and correspond te the icons displayed in the component palettes, Objects can also be displayed with text labels. To switch between icon and label display, Select “Draw Icons” from the display menu. You can also select “Draw Full Names" to display the full name of each object as well as its inputs and outputs. tats se Dewi @ O06 1% om ‘The thves input parameters of the Circle CCNR component The output parameter ofthe Circle CNR ‘component, TT _ the circle cr component area ‘Components without inputs or outputs have a lagod edge. ‘Switch between leon and Label ‘isla. OO 1 moraines Pare tgs Promauneor Ede CIM BE OGOOe Cee Wen 5 £1 Anatomy ofa Grasshopper Deftion Display the fullname of the component anditsinguts and uteutsqc CNG cd qR The Circle CNR componenttin Label Display _-TheCircleCNR componentin icon Display _The Circle CNR.component with fullnames ddisplayed We reccommend using icon display to familiarize yourseif with the component icons so you can quickly locate them in the palettes. This will also enable you to understand definitions at a glance. Text labels can be confusing because different components may share the same label. ‘Circle CNR and Circle St have the same label but ciferent icons, (One feature that can help you familiarize yourself with the location of components in the palettes is holding down Ctr1+ Alt and clicking on an existing component on the canvas. This will reveal its locati Hold Cntr + Altand lig ona component ‘onthe canvas to revealitslocatontn the palettesFLL COMPONENT HELP Right clicking an object and selecting “Help” from the drop-down menu wi ‘open a Grasshopper help window. The help window contains a more detailed description of the object, a list of inputs and outputs, as well as remarks. {Grasshopper help window for the Point * Point parameter parameter la rome cones la tae "Yorcsmsie poison sos aig be poranser IS tae wen is aot oer Seat ont “The remarks nthe help window give additonal Insight about the point parameter fa Speypiiaspitdon tect commansonn tt Jove snot Sen pace SES ganar ‘Suede on eco mot es F112 TOOL TIPS Component inputs are expecting to receive certain types of data, for example 2 Component might indicate that you should connect a point or plane to its input. ‘When you hover your mouse over the individual parts of a Component object, you'll see different tooltips that indicate the particular type of the sub-object currently under the mouse. Tooltips are quite informative since they tell you both the type and the data of individual parameters. Header ofthe tootip shows the icon forthe Input type the Name of the Component the label for the input, andthe input type again in textformat “The plain language description of what the inputs for the Component Any values defined forthe input eter locally ‘orfromits connactee wire “The Header ofthe output teotip provides ‘thesame detall asfor inputs but for the corresponding ouptut “The result of the component's action, 40. £1 Anatomy ofa Grasshopper DefinitionF 1.1.3 CONTEXT POPUP MENUS Allobjects on the Canvas have their own context menus that expose their settings and details. You can access this context menu by right-clicking on the center area of each component. Inputs and outputs each have their own context menus which can be accessed by right-clicking them, Component content ments Editable text fed that lists the name of the object * Preview lag-indicates whether or not the ‘neornetry produced by this ebject willbe visible Inthe Rhino viewperts. Switching off preview will speed upbath the Rhino viewpart frame rate and ‘theta taken fora olution | _ 1L Input parameter N failed to collect data Runtime warnings -lsts warnings that are hindering the functioning ofthe component Cinputcontoxt mon @ Boke. Wie Display , © Principal poset ner mattinte paint allows you toselect i) reverse roferance geometry in the Rhino viewport Flatten a] Gate ‘Manage Poiat collection- opens dialog that Simplify allews you ta ade or remove points from the point Collection and view information about each point ®_ epression , Set one Point Set Multiple Points Additer to collection Delete selection Clear values re “aces Extract parameter Ez a0 @ Help. Intemalise data Rast Nore ately Siero Rewenteateci ——Sataencw le oeacEGR, etree Parone ‘omens acres aorg es ereape Owapoiss wtonparceo = 4F114 ZOOMABLE USER INTERFACE ‘Some components can be modified to increase the number of inputs or outputs through the Zoomable User Interface (ZUI). By zooming in on the component on the canvas, an additional set of options will appear which allows you add or remove Inputs or Outputs to that component. The Addition component allows you to add inputs, representing additional items for the addition operation. Clic the sign toremowe antnput toaddan Input The panel component also has a zoomable user interface. A Panel is like a Post- It sticker. It allows you to add little remarks or explanations to a Document. You can change the text through the menu or by double-clicking the panel surface. Panels can also receive and display data from elsewhere. If you plug an output into a Panel, you can see the contents of that parameter in real-time. All data in Grasshopper can be viewed in this way. When you zoom in on a panel, amenus appears allowing you to change the background, font, and other attributes. These options are also available when you right-click the panel Dra aris to aust panel margins Increaseor reduce the font size ofthe panel content ‘Change the alignment of panel content Select a font for panel content —! Scie pbcerat ba Disney ’ a [cwaure lcnk: wet Davia Note: Youcansot anew default color for your panels by right cliekins the panel and lectin ‘Set Default Color (So cnet)EL2 Data Types Most parameters can store two different kinds of data: Volatile and Persistent. Volatile data is inherited from one or more sources and is destroyed (i.e. recollected) whenever a new solution starts. Persistent data is data which has been specifically set by the user. F.1.2.0 PERSISTENT DATA maces puts, which Persistent datas accessed through the menu, and depending on the kind of Tiserceseobes acute vtec, parameter has adifferent manager. Point parameter for example allows youto TisrsfisueS“Oumivarceoleiie set one or more points through its menu. But, let'sback upafewsteps and see dependentupon thecomponentof which the how a Point Parameter behaves. re apart When you drag and drop a Point Parameter from the Params/Geometry Panel onto the canvas, the Parameter is orange, indicating it generated a warning. It's nothing serious, the warning is simply there to inform you that the parameter is empty [it contains no persistent records and it failed to collect volatile data) and thus has no effect on the outcame of the solution. The context menu of the Parameter offers two ways of setting persistent data: single and multiple. Right click on the parameter to set Multiple Points. Once you click on either of these menu items, the Grasshopper window will disappear and you will be asked to pick a point in one of the Rhino viewports. ‘Theparameters orange indicating it contains no persistent records anditfalled to collect ‘volatile data) and thus has no effect onthe outcome nf the elution Right lick an any parameter toset Is persistent data <@ >} (Once the parameter contains some persistent fata, the cemponent willturn from erangeto grey. Once you have defined all the points you can press ter and they will become part of the Parameters persistent data record. This means the Parameter is now no longer empty andi turns from orange to grey (Notice thatthe information belloonin the upper right corner also disappears as there are nomore warnings, Tetootefershepsntpmamater show ‘At this point you can use the points stored in this Parameter for any subsequent haysteatese input in your definition. 43. £1 Anatomy ofa Grasshopper DeftionF1.2.1 VOLATILE DATA Volatile data, as the name suggests, is not permanent and will be destroyed each time the solution is expired. However, this will often trigger an event to rebuild the solution and update the scene. Generally speaking, most of the data generated ‘on the fly’ is considered volatile As previously stated, Grasshopper data is stored in Parameters (either in Volatile or Persistent form) and is used in various Components. When data is not stored in the permanent record set of a Parameter, it must be inherited from elsewhere, Every Parameter (except output parameters) defines where it gets its data from and most Parameters are not very particular. You can plug a number Parameter (which just means that itis a decimal number) into an integer source and it will take care of the conversion. You can change the way data is inherited and stored in the context menu of a parameter or component input. To change store referenced Rhino geometry in the grasshopper definition itself, right click a parameter and select Internalise data from the menu. This is useful if you want your grasshopper definition to be independent from a Rhino file. You can also Internalise data in a component input. Once you select Internalise data in the menu, any wires will disconnect from that input. The data has been changed from volatile to persistent, and will no longer update. Ifyou want the data to become volatile again, simply reconnect the wires to the input and the values will automatically be replaced.. You can also right click the input and select Extract parameter. Grasshopper will create a parameter connected to the input with a wire that contains the data. = le be c Preview @ Bake. Enabled Wie Display Boke. ® Principal Wire Display é @D Reverse Reverse Flaten Flatten @ Gen Gratt @ Simptty simplify @ Expression Expression > Set one Point Setone Point Set Multiple Points Set Multiple Points Manage Point collection Manage Point collection ‘Gear values ‘Gear values Internalse data Internalise data, Extract parameter | Help. 4 HE: Anatomy ofa Grasshopper DefinitionF122 INPUT PARAMETERS. Grasshopper has a variety of Parameters that offer you the ability to interface with the data that is begin supplied to Component inputs and thereby control for changing the result of your definition. Because they Parameters that change with our input, they generate Volatile Data, Number Slider The number slider is the most important and widely used Input Parameter. It allows us to output a value between two given extremes by interacting with its rip with our mouse. Sliders can be used to specify a value and see the change to our deifnition that comes with adjusting the grip, buta slider should also be thought of as the means to identify successful ranges of our definition. Right click the slider component to change the name, ype, and values | L_ __—eatasotox itor tn sider ne (i_Enabted Eatabo txt fed forthe ae 2 lle) oat pore | scethetype of number forthe sider touse ait Integers Edit Snapsing pauls Even umbers Values ame} eat therange of values Expression . Animate. Publish To Remote Pazel Pronses an te Nemo i oe a Dra the sider srip to charge the value~each me time youdo ths, Grasshopper will recompute the solution ——— Funan R N|E O Doubleclick the name poctionof te slider component te open the Slider EditorGraph mapper The Graph Mapper is a two-dimensional interface with which we can modify numerical values by plotting the input along the Graph’s X Axis and outputting the corresponding value along the Y Axis at the X value intersection of the Graph. It is extremely useful for modulating a set of values within an institutive, erip-based interface, Graph Enabled Wire Display» Disconnect + Reverse: Flatten Grait Simplify None Baier Conic Gaussian Linear Parabola Pestin Power Sine sine ‘Sine Summation ‘Square Root HaHa 2ENSNno a gop ess 4éELAnatomy of a Grasshopper Definition Move tho grips toed tho graph - each time veudo this, Grasshopper will recompute the olution Right click the graph mapper component to select the graph type Double cilek the graph mapper to open the Graph Chango the xandy domainsValue List The Value List stores a collection of values with corresponding list of Labels associated by way of an equal sign. Itis particularly useful when you want to have afew options, labeled with meaning, that can supply specific output values, Right click the Value List component and select an option fromthe menu. a wait Preview Enabled tate Check st Dropdown st Value Sequence Value Ge Double ile the Value List component taopen the editor andadd or change valies w ae. sqrt (16) Help. In Dropdown List moda click thearrow to select one ofthe values The solution wll Fecompute each timeyeu change the value InCheck List mode, click nextto each value tacheckit. The component will ott al the values that are checked, In Value Sequence and Value Cycle modes, ci tt a ret facing arros to cycle ‘hroughtne valuesFas Wiring Components When data is not stored in the permanent record set of a parameter, it must be inherited from elsewhere. Data is passed from one component to another through wires. You can think of them literally as electrical wires that carry pulses of data from one object to the next. F130 CONNECTION MANAGEMENT ‘To connect components, click and drag near the circle on the output side of an object. A connecting wire will be attached to the mouse. Once the mouse hovers over a potential target input, the wire will connect and become solid. This is not apermanent connection until you release the mouse button. It doesn't matter if \we make the connections in a ‘left to right’ or ‘right to left’ manner. Unconnected objects @ ‘The Divide Curve component ~divides acurve into equal length segments ‘Curve parameter-right click and select Set (ne Cuneta reference Rhine Geomatry Lett click and dragthe wire from the outout of ‘one object tothe input ef nother IF you hold down CONTROL, the cursor will becomered, andthe targeted source willbe remaved from the source ist F, @ Bdetoul.a new comctionillerae ‘tatingcomection: Hold the SHIT button sine crageng connection resto dene tratplescurces The cursor urercen to Inst he acon behavice, ® ac Youcanalso disconnect wires through the context popup meni right tik the gripf the Nd oe Inout or output and select dlsconnect We Dipoy ‘ Dicomet ¥]_Dizomet a © Precpat @ IF there are malin connections, soect the ‘one youwant to disconnect fromthe ist B Reece @ cv B fates B cor Sinai ‘hen you hove over an iter. the wire wil be @ Ropar highlighted in red Seterecu Sot utile Cues Imemaize data oO Hep 48 £1 Anatomy ofa Grasshopper Defnition13.1 FANCY WIRES Wires represent the connections as well as the flow of data within the graph in our definition. Grasshopper can also give us visual clues as to what is flowing through the wires. The default setting for these so-called “fancy wires" is off, so you have to enable them before you can view the different types of line types for the connection wires. To do this, imply click on the View Tab on the Main ‘Menu Bar and select the button labeled "Draw Fancy Wires” Fancy wires can tell you a lot of information about what type of information is flowing from one component to another. Empty Item An crange wiretype indicates thatna information hasbeen trancfarrea This parameter has generated awarning message because it contains nodata, and thus no information is boing sent across the wie, F132 WIRE DISPLAY Ifyou have spent any great deal of time working on a single Grasshopper definition, yau may have realized that the canvas can get cluttered with anest of wires quite quickly. Fortunately, we have the ability to manage the wire displays for each input of acomponent. There are three wire displays: Default Display, Faint Display, and Hidden Display. To change the wire display, simply right-click on any input on a component and select one of the views available under the Wire Display pop out menu. Hidden Display - When hidden displays selected, the wire willbe completely invisible ‘The datas transferred wirelessly from the source tothe input parameter. Ifyou select the source or target component, ersen wire will appear to show youwhich components are comectedtoeach ether-Once you deselect the companent, the wire will disappear. TheMergecomponentis an alternative to conecting more than ne source toa single Input List Ifthe information fewing aut of component contains a ist of information, the wire type willbe shown as ary double ine Single Item The dats lowing out of sry parameter that contains a single tere Shown with aolld ere ine ‘Tree Information ransterred between components which contain a data structure ill be shownin a grey éuble-line-dash wire ‘ype. Default Display ~The default wire asplay wil drawallconnections (if fancy wires isturned onl. Faint Display ~ The fant wire display wil drawthe wire connection ea verytain, Semi transparent ine Faint and Hidden wre Aispayscan be very helpful if you have many source vires cominginto asingle inputF.L4 The Grasshopper Definition Grasshopper Definitions have a Program Flow that represents where to start program execution, what to do in the middle and how to know when program execution is complete. F140 PROGRAM FLOW Grasshopper visual programs are executed from left to right. Reading the graph relative to the wired connections from upstream to downstream provides understanding about the Program Flow. Ustieam Downstream @OQr-4 Pp s a 4 nor Sc mde ge | Sama 28, Yi AR do \ ( : P14 pa Ae 2B o27 ,) Deveinatyafdata F.14.1 THE LOGICAL GRAPH Allof the objects and the wires connecting the objects represent the logical graph of our program. This graph reveals the flow of data, dependencies of any input to its wiired output, Any time our graph changes, sometimes referrred to as being “dirtied,’ every downstream connection and object will be updated. fefernceacurveron ting _Didothecuve lito 13caual__Runthe parameter values seonents stead cavedntlonbotnt iteownite oon Reparametrize the curvedomain between 00 and 10 50. F:1 Anatomy of a Grasshopper DefinitionMattioty each value by27F.2 BUILDING BLOCKS OF ALGORITHMS This chapter will introduce you to basic geometric and mathematical concepts and how they are implemented and manipulated in Grasshopper.E20 Points, Planes & Vectors Everything begins with points. A point is nothing more than one or more values called coordinates. The number of coordinate values corresponds with the number of dimensions of the space in which it resides. Points, planes, and vectors are the base for creating and transforming geometry in Grasshopper. &yj2) AS Blaine Blacks of Algor2.0.0 POINTS Points in 3D space have three coordinates, usually referred to as [xy.z]. Points in 2D space have only two coordinates which are either called [x] or [uv] depending on what kind of two dimensional space we're talking about. 2D parameter space is bound toa finite surface. Itis still continuous, Le. hypothetically there are an infinite amount of points on the surface, but the maximum distance between any of these points is very much limited. 2D parameter coordinates are only valid if they do not exceed a certain range. In the example drawing, the range has been set between 0.0 and 1.0 for both [u] and [V directions, but it could be any finite domain. A point with coordinates [1.5, 0.6] would be somewhere outside the surface and thus invalid. Since the surface which defines this particular parameter space resides. regular 3D world space, we can always translate a parametric coordinate into a 3D world coordinate. The point [0.2, 0.5] on the surface for example is the same as point [18, 2.0, 4.1] in world coordinates. Once we transform or deform the surface, the 3D coordinates which correspond with [0.2, 0.5}will change. If thisis ahard concept tograsp, might helpto think of yourself and your position Inspace. We tend touse local coordinate systems to describe our whereabouts: "Tn sitting in the third eaten the seventh rowin the movie theatre’ min the back seat If the earyeureinis onthe road your position inglobal coordinates is changing allth time, {eventhough you remain n the same back seat ‘coordinate. F.2.0.1 VECTORS Avector is a geometric quantity describing Direction and Magnitude. Vectors are abstract; ie. they represent a quantity, not a geometrical element. Vectors are indistinguishable from points, That is, they are both lists of three numbers so there's absolutely no way of telling whether a certain list represents a point or a vector. There is a practical difference though; points are absolute, vectors are relative. When we treat a list of three doubles as a point it represents, acertain coordinate in space, when we treat it as a vector it represents a certain direction. A vector is an arrow in space which always starts at the world origin, (0.0,0.0,0.0) and ends at the specified coordinate. F.2.0.2 PLANES Planes are “Flat” and extend infinitely in two directions, defining a local coordinate system. Planes are not genuine objects in Rhino, they are used to define a coordinate system in 3D world space. In fact, it’s best to think of planes as vectors, they are merely mathematical constructs.Bat Working with Attractors Attractors are points that act like virtual magnets - either attracting or repelling other objects. In Grasshopper, any geometry referenced from Rhino or created within Grasshopper can be used as an attractor. Attractors can influence any number of parameters of surrounding objects including scale, rotation, color, and position. These parameters are changed based on their relationship to the attractor geometry. Actractor point ‘Circles orient toward attractor based on ‘their normals In the image above, vectors are drawn between an attractor point and the center point of each circle. These vectors are used to define the orientation of the Circles so they are always facing the attractor point. This same attractor could be used to change other parameters of the circles. For example, circles that are closest to the attractor could be scaled larger by using the length of each vector to scale the radius of each circle. o ° SSS ° es siete er-Tstshs) e toe ooM msm NN e ® vee ete erst s ky ° ofa eco eters e se u a se 2 er \ \ e ute are erent @ Ss a a es @,e ‘ \ \ e use e®e avaty e e ase ° ovata ly e ®e sas ee tee? Bete tly e ace ae ele at ii e ® ass ° eral ag ty ty e e acs ee wre es! e ass ane wrt gt pty %e Sas ee Pe a ee ae e e aks =e ate ees2.1.0 ATTRACTOR DEFINITION In this example, we will use an attractor point to orient a grid of circles, based on the vectors between the center points of the circles and the attractor point. Each Circle will orient such that itis normal to (facing) the attractor point. 01 Type Ctrl#N in Grasshopper to start anew definition 02, Vector/Grid/Hexagonal - Drag and drop the Hexagonal Grid component onto the canvas 03, Params/Input/Slider - Drag and drop two Numeric Sliders on the canvas 04, Double-click on the first slider and set the following: (05. Name: Cell Radius 06, Rounding: Floating Point 07, Lower Limit: 0.000 06, Upper Limit: 1.000 09, Value: 0.500 410. Double-click on the second slider and set the following: LL Name: # of Cells 12. Rounding: Integers 43. Lower Limit: 0 414 Upper Limit: 10 45. Value: 10 414. Connect the Number Slider (Cell Radius) to the Size (S) input of the Hexagon Grid component, 17 Connect the Number Slider (# of Cells) tothe Extent X (Ex) input and the Extent Y (Ey) input of the Hexagon Grid component 28. Curve/Primitive/Circle CNR - Drag and drop a Circle CNR component onto the canvas 418. Connect the Points (P) output of the Hexagon Grid to the Center (C) input of the Circle CNR component 20, Connect the Number Slider (Cell Radius) to the Radius (R) Input of the Circle CNR component. 21 Vector/Vector/Vector 2Pt - Drag and Drop the component Vector 2Pt 22. Connect the Points output (P) ofthe Hexagonal Grid componenttto the Base Point (A) input of the Vector 2Pt component. 29, Params/Geometry/Point - Drag and Drop the Point component onto the 24. Right-Click the Point component and select set one point. In the model space select where you would like the attractor point to be 25. Connect the Point component to the Tip Point (B) input of the Vector 2Pt component 26 Connect the Vector (V) output of the Vector 2Pt to the Normal (N) input of the Circle CNR component. 27. Curve/Uti/OFfset - Drag and Drop the Offset Component onto the 28, Params/Input/Slider - Drag and drop a Numeric Slider on the canvas 29, Double-click on the slider and set the following: 30. Name: Offset Distance 91. Rounding: Floating Point0.500 Upper Limit: 0.500 32. Lower Limit: 0 aa OTOIOTOTOT Connect the Number Slider (Offset Distance) to the Distance (D) input of the offset component Surface/Freeform/Boundary Surfaces ~ Drag and drop Boundary Surfaces onto the canvas, oO 37. Connect the Curves (C) output of the offset component to the Edges (E) input of the Boundary Surfaces. Drag and Drop the Surface Component onto 35 Params/Geometry/Surface ~ the canvas 3 g g 2 S 8 z £Fa? Mathematics, Expressions & Conditionals Knowing how to work with numeric information is an essential skill to master as you learn to use Grasshopper. Grasshopper contains many components to perform mathematical operations, evaluate conditions and manipulate sets of numbers. In mathematics, numbers are organized by sets and there are two that you are probably familiar with: 9,-2,-1,0,1,2,3,4,5, 4.8, -3.6,-2.4,-1.2,0.0, 1.234, €, 3.0,40,.. Integer Numbers: Real Numbers: [=, While there are other types of number sets, these two interest us the most because Grasshopper uses these extensively. Although there are limitations in representing these sets exactly in a digital environment, we can approximate them to a high level of precision. In addition, it should be understood that the distinction between Integral types (integers) and Floating types (real numbers) corresponds to the distinction between discrete and continuous domains. In this chapter, we're going to explore different methods for working with and evaluating various sets of numbers. OTHE MATH TAB Most of the components that deal with mathematical operations and functions can be found under the following sub-categories of the Math tab: Foroms [athe | Sets Vector uve Surface Mesh Intersect Transform Display “The tility subcategory Isa grab bag’ of usefullcomponents that canbe used in various ‘mathematical equations, Check here ifyou're taying find the maximum or minimum values between two lists of numbers: or averaso3 soup of punbors. Polynomials are one ofthe most important concepts in algebra and throughout mathematics and scence. You can use the Components found inthis subcategory to compute factorial, logarithms, oF toraise a number tothe nth power. The time subcategory has a number ot components which allow yeu toconstruct instances of cater snd times Operators are used to perform mathematical ‘operations such s Addition, Subtraction, Multialication, etc, Conditional operators allow you to determine whether asetof rhumbersarelarger than, less than, or similar to another set of numbers ‘These components allow youto solve trigonometric functions suchas Sine Cosine, Tangent, ete Inmathematies a matrv isan arrayof numbers organized in rows andcalurns. Ths Subcategory contains a serles of utility tools “The crit subcategory contains single and toconstruct anc:modity matrices, rmult-variable oxoressions a well ae the \VBNET and C# scriating components. Domains areused te define arange of values (formerly known as intervals) between two numbers The components under the Demain {ab allow you tocreate or decompose sitteent comain types, 60 F2Bildine Blocks of Algorithms2.2.1 OPERATORS ‘As was previously mentioned, Operators are a set of components that use algebraic functions with two numeric input values, which result in one output value. Most of the time, you will use the Math Operators to perform arithmetical actions on a set of numbers. However, these operators can also be used on various data types, including points and vectors. F 2.2.2 CONDITIONAL OPERATORS Almost every programming language has a method for evaluating conditional, statements, In most cases the programmer creates a piece of code to ask a simple question of "what if What if the area of a floor outline exceeds the programmatic requirements? Or, what if the curvature of my roof exceeds a realistic amount? These are important questions that represent a higher level of abstract thought. Computer programs have the ability to analyze “what if” ‘questions and take actions depending on the answer to that question. Let's take a look at a very simple conditional statement that a program might interpret: If the object is a curve, delete it. The piece of code first looks at an object and determines a single boolean value or whether or not itis a curve. There is, no middle ground. The boolean value is True if the object is a curve, or False if the object is not a curve. The second part of the statement performs an action dependent on the outcome of the conditional statement; in this case, if the object is a curve then delete it. This conditional statement is called an It statement. There are four conditional operators (found under the Math/ Operators subcategory) that evaluate a condition and return a boolean value. The Equality component takes two lists and compares the first item of List A and compares it to the first item of List B. f the two values are the same, thena True boolean value is created; conversely if the two values are not equal, then a False boolean value is created. The component cycles through the lists according to the set data matching algorithm (default is set to Longest List). There are two outputs for this component. The first returns alist of boolean values that shows which of the values in the list were equal to one another. The second output returns a list that shows which values were not equal to one another - or a list that is inverted from the first output. ‘The Similarity component evaluates two lists of data and tests for similarity between two numbers. Itis almost identical to the way the Equality component compares the two lists, with one exception: it has a percentage input that defines the ratio of list A that list B is allowed to deviate before inequality is assumed. The Similarity component also has an output that determines the absolute value distance between the two input lists. The Larger Than component will take two lists of data and determine if the first, item of List Ais greater than the first item of List B. The two outputs allow you to determine if you would like to evaluate the two lists according toa greater than (>) or greater than and equal to (>=) condition. The Smaller Than component performs the opposite action of the Larger Than component. The Smaller Than component determines if ist Ais less than list B and returns a list of boolean values. Similarly, the two outputs let you determine if you would like to evaluate each list according to a less than (<) or less than and, equal to (<=) condition. CF ams Reel a ar 2 WX. a 1m. @ & co = st Tae me ra og ==F2.2.3 TRIGONOMETRY COMPONENTS We have already shown that we can use an Expression (or Evaluate) component to evaluate conditional statements as well as compute algebraic equations. However, there other ways to calculate simple expressions using a few of the builtin Trigonometry functions. We can use these functions to define periodic phenomena like sinusoidal wave forms such as ocean waves, sound waves, and light waves. y=0 Sine Curve tO =sinit) Spiral xi = teost 21) = Cs) In this example, we will use Grasshopper to cunstruct various trigonometric curves using trigonometry function components found in the Math tab: 1. Type Ctrl+N (in Grasshopper) to start a new definition 02. Params/Geometry/Point ~ Drag and drop a point parameter onto the 03. Right click the Point parameter and click Set One Point - select a point in the Rhino viewport 04. Vector/Vectar/Unit X ~ Drag and drop the Unit X component to the cams ————___—________ (05 05, Params/Input/Number Slider ~ Dragand drop the Number Slider Enmponentonts the carwas/ —————____ (gga o55 04. Double-click on the Number slider and set the following: Rounding: Integer Lower Limit: 10 Upper Limit: 40, Value: 20 fs ch 07. Transform/Array/Linear Array ~ Drag and drop the Linear Array, 4D ‘component onto the canvas qn XP 2Bualdne Blocks of Algorithms08, Connect the output of the Point parameter to the Geometry (G) input of the Linear Array component (08. Connect the Unit Vector (V) output of the Unit X component to the You shoul ee aline of 20 pints alongthe x Direction (D) input of the Linear Array component ceieiekitnicas 10. Connect the Number Slicer output to the Count (N) input ofthe Linear Array Component @ 41 Curve/Spline/interpolate - Dragand drop the InterpolateCurve ——~ ¢D component tothe canvas e 12. Connect the Geometry (G) output of the Linear Array component to the k_° Vertices (V) input of the Interpolate Curve component We have ust connected the array of points with We have just created a line by connecting an array of points with a curve. Let's try using some of Grasshopper's Trigonometry components to alter this curve: 18. Vector/Point/Deconstruct ~ Drag and drop a Deconstruct component ged onto the canvas 14 Vector/Point/Construct Point - Drag and drop a Construct Point: component onto the canvas. 15. Maths/Trig/Sine - Drag and drop a sine component onto the canvas 416. Disconnect the wire from the Vertices (V) input of the Interpolate Curve component —§ vou canlsconnect wires by holdin down 27 Connect the Geometry (G) output ofthe Linear Array component tothe ‘mclandrarirg ob ele the Point (P) input of the Deconstruct component 18 Connect the Point X (X) output of the Deconstruct component to the coordinate (X) input of the Construct Point Component 19. Connect a second wire from the Point X (¢) output of the Deconstruct Component to the Value (x) input of the Sine component 20. Connect the Result (y) output ofthe Sine component to the ¥ coordinate — Weave som reconstactedour pints (Y)input of the Construct Point component sine curve 21 Connect the Point (Pt) output of the Construct Point component to the ——- Youshould now se sine wave curve alongthe Vertices (V) input of the Interpolate companent, Aen Ron,22. Maths/Trig/Cosine - Drag and drop a Cosine component to the canvas 23. Connect a third wire from the Point X (X) output of the Deconstruct ‘Component to the Value (x) input of the Cosine component 24 Connect the Result (y) output of the Cosine component to the Z coordinate (Z) input of the Construct Point component. 25. Maths/Operators/Multiplication ~ Drag and drop two Multiplication ‘components onto the canvas 26. Connect wires from the Point X (X) output of the Deconstruct component tothe (A) input of each Multiplication component 27. Connect the Result (y) output of the Sine component to the (B) input of the first Multiplication component, 28. Connect the Result (y) output of the Cosine component to the (B) input of tthe second Multiplication component 29. Disconnect the wire from the Y Coordinate (Y) input of the Construct Point component. 50. Connect the Result (R) output of the first Multiplication component to the X Coordinate (X) input of the Construct Point component. 1. Connect the Result (R) output of the second Multiplication component to the Z Coordinate (Z) input of the Construct Point component Werhave now erastad a 2D helix Youshould now see aspial curve — E42 Balding Blocks of Algorithms2.2.4 EXPRESSIONS. The Expression component (and its brother the Evaluate component) are very flexible tools; that is to say that they can be used for a variety of different applications. We can use an Expression (or Evaluate component) to solve mathematical algorithms and return numeric data as the output, % lrormat("{0}, 11)" x, a (OH, 42) yi fr In the following example, we will look at mathematical spirals found in nature and how we can use a few Functions components to create similar patterns in Grasshopper. We will build on our trigonometric curves definition as a starting point. (01. Open your Trigonometric curves Grasshopper definition from the previous example 02. Delete the Sine, Cosine, Multiplication, and Interpolate components 03, Params/Input/Number Slider - Drag and drop a Number Slider onto the 04. Double-click on the Number slider and set the following: Rounding: Float Lower Limit: 0.000 Upper Limit: 1.000 Value: 1.000 05. Connect the Number slider to the Factor (F) input of the Unit X. ————— This sider allows you to adust the distance ‘component between the points in the array 06. Maths/Script/Expression ~ Drag two Expression components onto the V8 cr 07. Double-click the first Expression component to open the Expression : Editor and change the expression to: xsintx) 08. Double-click the second Expression component to open the Expression Editor and change the expression to: ? © ba2) fa} EGITIED ROD DOI GED z : Double lick the Expression component to open See NB 8 Pl i the Grasshopper Bevession Editar ener s2 xyrord x%N RRR EM +t OWxcosx) 09. Connect two wires from the Point X (X) output of the Deconstruct component to the Variable x (x) input of each Expression component 10. Connect the Result R) output of the first Expression component to the X coordinate (X) input of the Construct Point component ‘11 Connect the Result (R) output of the second Expression component to the Y coordinate (Y) input of the Construct Point component 12. Mesh/Triangulation/Voronoi - Dragand drop the Voronai component onto the canvas 13. Params/Input/Number Slider ~ Drag and drop a Number Slider onto the 414. Double-click on the Number slider and set the following: Rounding: Integer Lower Limit: 1 Upper Limit: 30 Value: 30 15. Connect the Number slider to the Radius (R] input of the Voronoi ‘component 16, Connect the Point (Pt) output of the Construct Point component to the Points (P) input of the Voronoi component xesin (x) xrc0s (x) You can create different Voronoi patterns by manipulating the Factor, Count, and Radius sliders. Below are three examples: Factor = 1.000 Facter=0400 Radius = 15 Radius 10 2Bualdne Blocks of Algorithms We have replace the Tignometry functions and multiplication operators with the ‘expression component for amore efficient ‘chiition|{SOE TL Se aa : 4S Sei ATLL , cee ere LLL ESSE LTT TT:B23; Domains & Color The color wheel is a model for organizing colors based on their hue. In Grasshopper, colors can be defined by their hue value in a range of 0.0 to 1.0. Domains are used to define a range of all possible values between a set of numbers between a lower limit (A) and an upper limit (B). Inthe color wheel hue correspond ta angle. shopper has taken this 360 domall and edit between 2er0 ae one —180_ By dividing the Hue domain (0.0 to 1.0) by the number of segments desired, we can assign a hue value to each segment to create acolor wheel.In this example, we will use Grasshopper’s domain and color components to create a color wheel with a variable amount of segments. 01. Type Ctri#N (in Grasshopper) to start a new definition 02. Curve/Primitive/Polygon ~ Drag and drop a polygon component onto the ? 03, Params/Geometry/Point - Drag and drop a Point Parameter onto the canvas 04 Right-Click on the Point Component and select set one point 05. Seta point in the model space. 06. Connect the Point Parameter (Base Point) to the Plane (P) input of the polygon component $$$ 07 Params/Input/Number Sliders ~ Drag and drop two number sliders onto the canvas 08 Double-click on the frst slider and set the following: Rounding: Integers Lower Limit: 0 mit: 10 ‘on the second slider and set the following: Note: Wtien you connect anumber sider i toacomponentitwil automaticaly change Rounding: Integers its name to the name of input that itis Lower Limit: 0 connecting te. Upper Limit: 100 Value: 37 40. Connect the Number Slider (Radius) to the Radius (R) input of the Polygon eo mponentt $$ 11. Connect the Number Slider (Segments) to the Segments (S) input of the Polygon component 12. Curve/Util/Explode ~ Drag and drop an Explode component onto the canvas. > t 13. Connect the Polygon (P) output of the Polygon component to the Curve Oa) (© input ofthe Explode component dat"? 14 Surface/Freeform/Extrude Point - Drag and drop the Extrude Point component onto the canvas 15. Connect the Segments (5) output of the Explode component to the Base — - (@) input of the Extrude Point 4, By nae 414 Connect the Point Parameter (Base Point) to the Extrusion Tip(P) 117, Surface/Analysis/Deconstruct Brep ~ Drag and drop the Deconstruct Brep component on to the canvas 418. Connect the Extrusion (E) output of the Extrude Point component to the 7 Deconstruct Brep (B) componen rae aes 19. Maths/Domain/Divide Domain - Drag and drop the Divide Domain x oie 20. Connect the Number Slider (Segments) to the Count (C) input of the Soe Dives Domaereourenent ro 211 Math/Domain/Deconstruct Domain ~ Drag and drop the Deconstruct Domain component22. Connect the Segments (S) output of the Divide Domain component to the Note: The Base Domain (|)is automatically Domain input ofthe Deconstruct Domain component sheen toweenienttienens 3. Display/Colour/Colour HSL - Drag and drop the Colour HSL component 24 Connect the Start (S) output of the Deconstruct Domain component to. thethelMinntoftcolurtSLeamponnts Display/Preview/Custom Preview - Drag and drop the Custom Preview component Right click on the Geometry (G) input of the Custom Preview component and select Flatten 27. Connect the Faces (F) output of the Deconstruct Brep component to the oh f Geometry (G) input of the Custom Preview S <= 28. Connect the Colour (C) output of the Colour HSL component to the Shade {(S) input of the Custom Preview Components Note: See F Designing with Data Tres for detallsabout fattening For diferent colareffects, try connecting the Deconstruct Domain component to the saturation (5) Luminance (L} inputs ofthe Colour HSL component. £2 Balding Blocks of AlgorithmsF.2.4 Booleans and Logical Operators £2.10 BOOLEAN 0. Obviously we never use booleans to perform calculations because of their meena limited range. We use booleans to evaluate conditions. In Grasshopper, booleans can be used in several ways. The boolean parameter is a container for one or multiple boolean values, while the Boolean Toggle allows you to quickly change between single true and false values as inputs. Grasshopper also has objects that test conditions and output boolean values. For example, the Includes component allows you to test anumeric value to see ifit is goclean Togele-double cick the boolean included in a domain. value to toggle between trueand false ‘The Includes components testing wether ‘the number 6.85 included in the domo from 0010. Itretums a boolean value of Tis, F2.4.1 LOGICAL OPERATORS Logical operatars mostly work on booleans and they are indeed very logical. As you will remember, booleans can only have two values, Boolean mathematics were developed by George Boole (1815-1864) and today they are at the very core of the entire digital industry. Boolean algebra provides us with tools to analyze, compare and describe sets of data. Although Boole originally defined six boolean operators we will only discuss three of them: Not 2.And 30r ‘The Not operator isa bit of an oddity among operators, because it doesn't require two values. Instead, it simply inverts the one on the right. Imagine we have a script which checks for the existence of a bunch of Block definitions in Rhino. If block definition does not exist, we want to inform the user and abort the script. ‘The Grasshopper Not operator (gate) rn And and Or take two arguments on either side. The And operator requires both of them to be True in order for it to evaluate to True. The Or operator is more than happy with a single True value. As you can see, the problem with Logical operators is not the theory, it’s what happens when you need alot of them to evaluate something. Stringing them together quickly results in convoluted code; nat to mention operator precedence problems. a a Rent roe [true [Te False Five [ake [Falco Fake [Tue [Flee Fake [Fae [Fale ‘The Grasshopper And operator (gate) A oy Result Fie [Tae [True The: True [False (Tre Fake [True [tive Fake [Fake [False “The Grasshopper Or operator Gate) 2Bualdne Blocks of Algorithms‘Agood way to exercise your own boolean logic is to use Venn diagrams. A Venn diagram is a graphical representation of boolean sets, where every region contains a (subset of values that share a common property. The most famous one is the three-circle diagram: Every circular region contains all values that belong to a set; the top circle for ‘example marks off set (AJ. Every value inside that circle evaluates True for {A} and every value not in that circle evaluates False for (Al. By coloring the regions we can mimic boolean evaluation in programming code: © ae & Not A AAnd B AOrB AOrBOrc (AOrB) and Not C ‘And Not A and Not B BOr(CAndA) (AAnd B) Or ((BAnd C) and Not A) Or (Band Not ©) Or AAndB And C (BAnd ©) Or (AAndC) (Aand Not Band Not C) (Cand Not B)F.3 DESIGNING WITH LISTS One of the most powerful features of Grasshopper is the ability to quickly build and manipulate lists of data. This chapter will explain how to create, manipulate, and visualize list data.— a ft tt > mB --- ee oeeeeeeeeeeecceeteee HE SEO0B SRBRE~BI -------- a3 t nn a a - sovantanean ss sdeduocl coi main wandedoaos w-------- A - | a woeeees MMMM ----------------------, =< =~ ERITIR- == --- | a 4 = tF.3.0 Curve Geometry NURBS (non-uniform rational B-splines) are mathematical representations that can accurately model any shape from a simple 2D line, circle, arc, or box to the most complex 3D free-form organic surface or solid. Because of their flexibility and accuracy, NURBS models can be used in any process from illustration and animation to manufacturing. Since curves are geometric objects, they possess a number of properties or characteristics which can be used to describe or analyze them. For example, every curve hasa starting coordinate and every curve has an ending coordinate. When the distance between these two coordinates is zero, the curve is closed. Also, every curve has a number of contro-points, ifall these points are located in the same plane, the curve as a whole is planar. Some properties apply to the curve as.a whole, while others only apply to specific points on the curve. For. example, planarity is a global property while tangent vectors are a local property. Also, some properties only apply to some curve types. So far we've discussed some of Grasshopper’ Primitive Curve Components such as: lines, circles, ellipses, and arcs. a Line Polvtine Circle lipse Ac NURRS curve ——_Polyeurve rain °. 8 Ca F 3.0.0 NURBS CURVES ANURBS curve is defined by degree, control points, and knots. Degree: The degree is a positive whole number. This number is usually 1, 2,3 or 5, but can be any positive whole number. The degree of the curve determines the range of influence the control points have on a curve; where the higher the degree, the larger the range. NURBS lines and polylines are usually degree 1, NURBS circles are degree 2, and most free-form curves are degree 3 or 5. Control Points: The control points are alist of at least degree+4 points. One of the easiest ways to change the shape of a NURBS curve is to move its control points. Weight: Control points have an associated number called a weight . Weights are usually positive numbers. When a curve's control points all have the same weight (usually 1), the curves called non-rational, otherwise the curve is called rational Most NURBS curves are non-rational. A few NURBS curves, such as circles and. ellipses, are always rationalKnots: Knots are alist of (degree+N-1) numbers, where N is the number of, control points, Edit Points: Points on the curve evaluated at knot averages. Edit points are like control points except they are always lacated on the curve and maving one edit point generally changes the shape of the entire curve (moving ane control paint only changes the shape of the curve locally). Edit points are useful when you eed a point on the interior of a curve to pass exactly through a certain location. NURBS curve knotsas a result of varying degree: AD! NURES curvebehaves the same asa polvline. AD curve has aknot for every antral peint D?NURBS curves are typically only used te approximate arcs and circles. The spine intersects with the contrelplyzon halfway ‘ach segment. Ds the most commen typeof NURBS curve dandis the default in Rhino. You are probably ‘ery familiar with the visual progression of the spine, eventhough the knots appear to beinodd locations, F.3.0.1 GRASSHOPPER SPLINE COMPONENTS Grasshopper has a set of tools to express Rhino's more advanced curve types like purbs curves and poly curves. These tools can be found in the Curve/Splines tab, Nurbs Curve (Curve/Spline/Nurbs curve): The Nurbs Curve component constructs a NURBS curve from control points. The V input defines these points, which can be described implicitly by selecting points from within the Rhino aes v scene, or by inheriting volatile data from other components. The Nurbs Curve-D = em input sets the degree of the curve. pg Interpolate Curve (Curve/Spline/Interpolate): Interpolated curves behave slightly differently than NURBS curves, The V-input is for the component is similar to the NURBS component, in that it asks for a specific set of points to create the curve. However, with the Interpolated Curve method, the resultant curve will actually pass through these points, regardless of the curve degree. In the NURBS curve component, we could only achieve this when the curve degree was set to one. Also, ike the NURBS curve component, the D input defines the degree of the resultant curve. However, with this method, it only takes oddnumbered values for the degree input. Again, the P-input determines if the curve is Periodic. You will begin to see a bit of a pattern in the outputs for many of the curve components, in that, the C, L, and D outputs generally specify the resultant curve, the length, and the curve domain respectively. Kinky Curve (Curve/Spline/Kinky Curve): The kinky curve component allows you the ability to control a specific angle threshold, A, where the curve will transition from a kinked line, to a smooth, interpolated curve. It should be noted that the A-input requires an input in radians. Polyline (Curve/Spline/Polyline): A polyline is a collection of line segments connecting two or more points, the resultant line will always pass through its control points; similar to an Interpolated Curve. Like the curve types mentioned above, the V-input of the Polyline component specifies a set of points that will define the boundaries of each line segment that make up the polyline. The (C-input of the component defines whether or not the polyline is an open or closed curve. Ifthe first point location does not coincide with the last point location, a line segment will be created to close the loop. The output for the Polyline component is different than that of the previous examples, in that the only resultant is the curve itself. £3 Desierine With ListsEst What is a List? It’s helpful to think of Grasshopper in terms of flow, since the graphical interface is designed to have data flow into and out of specific types of components. However, itis the data that define the information flowing in and out of the components. Understanding how to manipulate list data is critical to understanding the Grasshopper plug-in. Grasshopper generally has two types of data: persistent and volatile. Even though the data types have different characteristics, typically Grasshopper stores this data in an array, a list of variables. When storing data in a lst, it’s helpful to know the position of each item in that list so that we can begin to access or manipulate certain items. The position of an item in the list is called its index number. List eine inde Te Ustitem 1B q2ac > Index 0 1 2 3 4 5 a5 42 SF The only thing that might seem odd at first is that the first index number of alist always 0; not 1. So, when we talk about the first item of alist, we actually mean the item that corresponds to index number 0. For example. if we were to count the number of fingers we have on our right Pons } hhand, chances are that you would have counted from 1 to 5. However. if this ae Notes. list had been stored in an array, then our list would have counted from 0 to 4. Autine Data Note, that we still have 5 items in the list;its just that the array is using a zero~ Virap tems based counting system. The items being stored in thelist don't just have to be mictaie 5 numbers. They can be any data type that Grasshopper supports, such as points, curves, surfaces, meshes, etc Ea Crow Pats Often times the easiest way to take a look at the type of data stored in alist Align tft is toconnect a Text Panel (Params/Input/Panel) to the output of a particular Align Center component. By default, the Text Panel automatically shows all index numbers A Align Right tothe left side of the panel and displays the data items on the right side of the panel. The index numbers will become a crucial element when we begin working with our lists. You can turn the index numbers on and off by right-clicking on the Text Panel and clicking on the “Draw Indices" item in the sub-menu. For now, let's leave the entry numbers turned on for all of our text panels. Font Setings F Coiou . Set Defou'tColnue ‘Siream Conenss Stresm Destination {Cops All Content Copy Data Only Pubich To Remoie Panel 2 bolF382 Data Stream Matching Data matching is a problem without a clean solution. It occurs when a component has access to differently sized inputs. Changing the data matching algorithm can lead to vastly different results. Imagine a component which creates line segments between points. It will have ‘two input parameters which both supply point coordinates (List A and List B): ° a 2 a 4 5 Lista oo 1 1 ste ooo 0 000 0 ° 1 2 3 4 5 6 7 ‘As you can see there are different ways in which we can draw lines between these sets of points. New to Grasshopper 0.9 are three components for data matching, found under the Sets/List panel: Shortest List, Longest List, and Cross Reference, These new components allow for greater flexibility within the three basic data matching algorithms. Right clicking each component allows you to select a data matching option from the menu, The simplest way is to connect the inputs one-on-one until one of the streams runs dry. This s called the "Shortest List” algorithm: ° 1 2 a 4 5 sta, Shortest List Uste Select amatchingalgerithm option from the component menuy right-clicking the ‘component \orable Parameters £3 Designing With ListsThe “Longest List” algorithm keeps connecting inputs until all streams run dry. This is the default behavior for components: Lista Longest List ste ° 1 a 3 4 5 é 7 Finally, the “Cross Reference” method makes all possible connections: Lista, Cross Reference List This is potentially dangerous since the amount of output can be humongous. The problem becomes more intricate as more input parameters are involved and when the volatile data inheritance starts to multiply data, but the logic remains the same. Let's look more closely at the Shortest List component: ey Here we have two input lists {A,B,C,D,E} and [X,Y,Z}. Using the Trim End option, the last two items in the first list are disregarded. so that the lists are of equal length.ne Using the Trim Start option, the first two itemsin the first list are disregarded., so that the lists are of equal length, The interpolate option skips the second and fourth items in the frst list Now let's look at the Cross Reference component: oA [ox ap [1x oT alc |2)/x qa 3A [3 ¥ Ae an q4y b = sc |5¥ 5A [62 ae TB 72 ac [ez Here we have two input lists {A,B,C} and {X.¥,Z]. Normally Grasshopper would iterate over these lists and only consider the combinations {A.X), {BY} and (C,2}, There are however six more combinations that are not typically considered, to wit: {A.Y],{4.Z},{B.24, (B.Z}, {C0 and {CY}. As you can see the output of the Cross Reference component is such that all nine permutations are indeed present. We can denote the behaviour of data cross referencing using.a table. The rows represent the first list of items, the columns the second. If we create all possible permutations, the table will have adot in every single cell, as every cell represents a unique combination of two source list indices. Designing With Lists ° 1 2 a 4 3Sometimes however you don't want al possible permutations. Sometimes you wish to exclude certain areas because they would result in meaningless or invalid computations. A common exclusion principle isto ignore all cells that are on the sgonal of the table, The image above shows a holistic’ matching, whereas the ‘diagonal’ option (available from the Cross ReferenceJcomponent menu has gaps for (0,0},{1,1, {2,2} and {3,3}. If we apply this to our {A,B,C}, (XY,Z} example, we should expect to not see the combinations for (AX), {BY} and (C,Z]: The rule that is applied to'diagonal’ matching is: “Skip all permutations where all items have the same list index’ Coincident’ matchings the same as diagonal’ matching in the case of two input lists, but the rule is subtly different: "Skip all permutations where any two items have the same list index’. The four remaining matching algorithms are all variations on the same theme. ‘Lower triangle’ matching applies the rule: "Skip all permutations where the index of an item is less than the index of the item in the next list’ resulting in an empty triangle but with items on the diagonal. ‘Lower triangle (strict)’ matching goes one step further and also eliminates the items on the diagonal: "Upper Triangle’ and ‘Upper Triangle (strict)’ are mirror images of the previous ‘two algorithms, resulting in empty triangles on the other side of the diagonal line.E&3 Creating Lists There are many different ways to generate lists in Grasshopper. Below, we'll look at a few different methods for generating lists and then look at how the data can be used to convey information in the viewport via a visualization. F3.3.0 MANUAL LIST CREATION Perhaps the easiest way to create a list (and one of the most over-looked methods) is to manually type in alist of values into a parameter. Using this, method puts added responsibility on the user because this method relies on direct user input (ie. persistent data) for the list creation. In order to change the list values, the user has to manually type in each individual valuewhich can be ifficult ifthe list has many entries. There are several ways to manually create t. One way is to use a Number paramter, Right click the Number parameter and select “Manage Number Collection @e Right click the number component to open the Number Collection Manager Click the Ade tem icon to de anumberto the ist Doubleclick the number to changeit value to manually enter the list items into a panel, Make sure that “Multiline Data" is deselected. F3.3.1 RANGE ‘The Range component, found under Sets/Sequence/Range, creates alist of evenly spaced numbers between a low and a high value called the Domain. A domain (also sometimes referred to as an interval) is every possible number between two numeric extremes. ‘ARange component divides a numeric domai into even segments and returns a Number of Steps = 10 Total Number of Points = 42 Designing With Lists‘A Range component divides a numeric domai list of values. into even segments and returns a In the example below, the numeric domain has been defined as every possible number between Oand 20. The Range component takes that domain and les it up by the number of steps (in this case 10).So, we have 10 even spaced segments. The Range component returns a list of values. Because it keeps the first and the last values in the list, the output of a Range component is always one more than the number of steps. In the example above, we created 10 steps, so the Range component returns 11 values. Create alist using the Range component by specifying = Domain and numberof steps You may have noticed somethinga little quirky about the setup we just made. We know that adomain is always defined by two values (a high and low value). Yet, in our definition we simply connected a single value to the domain input. In order to avoid errors, Grasshopper makes an assumption that you are trying, to define a domain between zero and some other number (our slider value). In order to create a range between two numbers that doesn't start at zero, we must Use the Construct Domain component to specify the domain. To create a Range froma domain that doos not start a zero, use the Corstruct Domain ‘componentF2.3.2 SERIES The Series component is similar to the Range component, in that, it also creates a list of numbers. However a Series component is different because it creates a set of discreet numbers based on a start value, step size, and the number of values in the series, ‘TheSeries component creates list based on start value, step value, and the number of Values nthe it F333 RANDOM ‘The Random Component (Sets/Sequence/Random) can be used to generate a list of pseudo random numbers. They are referred to as “pseudo” random because the number sequence is unique but stable for each seed value. Thus, you can generate an entirely new set of random numbers by changing the seed value (S-input). The domain, as in the previous example, is a defined interval between ‘two numeric extremes. ‘The Random component creates apseudo- random list of values, domain high 12.21488 2 9.340214 3 15.432082 a 0378 5 8.655652 a 9 7.08167 18.877246 2.025329 12.899011 #9 Designing with ListsF.3.4 List Visualization Understanding lists in Grasshopper can be difficult without being able to see the data flowing from one component to the next. There are several ways to visualize lists that can help to understand and manipulate data. There are many different ways to visualize a list of data. The most common way is tocreate some geometry with the list of data. By connecting the R output of the Range component to the Y input of the Construct Point component, we can see an array of points in the Y direction. ‘doimain high Lets look at some components that can help us understand the data. F3.40 THE POINT LIST COMPONENT The Point List component is an extremely useful tool for visualizing the order of a set of points in a list. Essentially, the Point List component places the index item number next to the point geometry in the viewport. You can also specify whether or not you want to draw the number tags, the connection lines, or the size of the text tags. You can visualize the arder ofa zetf points ‘using the Point List component. F.3.4.1 TEXT TAGS The text tag component allows you to draw little strings (astring is a set of ASCII characters] in the viewport as feedback items. Text and location are specified as input parameters. When text tags are baked into the scene, they turn into Text Dots. The other interesting thing about Text Tags is that they are viewport independent - meaning the tags always face the camera (including perspective views) and they always remain the same size on the screen regardless of your zoom settings. Youcan visualize any string informationin the viewport using the Text Tag.companent, Inthis setup wehave decided to dieplay the value of each point on top ofeach point location. We could have assignod any text to islamThe Text Tag 3d component works very similarly to the Text Tag component. They differ, in that, when Text Tag 3d objects are baked into the scene, they become Text objects in Rhino. The scale of the Text Tag 3d font can also be controlled via an input (which is inaccessible in the Text Tag component), You canuse 2 Tot Tas el component to visualize information much ikea Text objet inRhine, F242 COLOR One of the other things we can do to visualize the list datais to assign color to the geometry. Grasshopper has limited ‘rendering’ capabilities, but we can control simple Open GL settings like color, specular color, transparency, ete. ‘The LO value represents the low end (left side) of the gradient, whereas the L1 ——_thecystam Preview component can be value represents the upper end (right side). These values correspond to the start (sed to assign colo vals oa specific and end of our domain. The t-values are the elements in the list that will get seomelry, mapped somewhere within the LO and L1 range. The output of the gradient is a list of RGB color values which correspond to each point in our lst. Right-click on the Gradient to set one of the gradient presets, or define your own using the color node points. Points Pointist Text Te ‘Text Tae 30 Custom calor preview B88 Designing withListsESS: List Management One of the most powerful features of Grasshopper is the ability to quickly build and manipulate various lists of data. We can store many different types of data in alist (numbers, points, vectors, curves, surfaces, breps, etc.) and there are a number of useful tools found under the Sets/List subcategory. F350 LISTLENGTH The List Length component (Sets/List/List Length) essentially measures the length of the List. Because our lists always start at zero, the highest possible index in a list equals the length of the list minus one. In this example, we have connected our base List to the List Length-L input, showing that there are 6 values in the list. Point 4 e c > E F °. Qed QO: 2 Index 0 1 2 a 4 5 F3.5.1 LISTITEM Our Lists fed into a List Item component (Sets/List/List Item) in order to retrieve a specific data item from within a data set. When accessing individual items ina list, we have to specify the -input; which corresponds to the index number we would like to retrieve. We can feed a single integer or alist of integers into the i-input depending on how many items we would like to retrieve. The Linput defines the base list which we will be analyzing. In this example, we have set the -input to 5.0 so the List Item component returns the data item associated with the 5th entry number in our list. ’ Point 4 8 c . E F s °. o 0: o o 0 ° Index 9 2 a 4 5 6 F.3.5.2 REVERSE LIST ‘We can invert the order of our list by using a Reverse List component (Sets/ List/Reverse). Ifwe input an ascending list of numbers from 0.0 to 9.0 into the Reverse List component; the output returns adescending list from 9.0 to 0.0. Point c Db Index 0 2 2 a 4 53.5 SHIFTLIST The Shift List component (Sets/Sequence/Shift List) will either move the list up cor down a number of increments depending on the value of the shift offset. We have connected the List output into the Shift-L input, while also connecting a number to the Shift-S input. If we set the offset to~1, all values of the list will move down by one entry number. Likewise, if we change the offset to +4, all values of the list will move up by one entry number. I Wrap input equals True, then items that fall off the ends are re-appended to the beginning or end of the list. In this example, we have shift offset value set to +4, so that our list moves up by one entry number. Now, we have a decision to make on how we would like to treat the first value. If we set the Wrap value to False, the first entry will be shifted up and out of the list, essentially removing this value from the data set (so, the list length is one less than it was before). However, if we set the wrap value to True, the first entry will be moved to the bottom of the list Point. Index Point c ernie Index 0 1 2 3 4 5 3.5.4 INSERT ITEMS ‘The Insert Items component (Sets/Lists/Insert Items) enables youto insert a collection of items into alist. In order for this to work properly, you need to know the items you want to insert and the index position for each new item. In the example below, we will insert the letters A, B, and C into index position three. Point 4. e c e °. °- 2 o ° Index 9 1 2 a 4 5 Point a. ® < « ° e F Index 1 2 a 4 5 6 03 Designing with ListsF355 WEAVE The Weave component (Sets/Lists/Weave) merges two or more lists together based on a specified weave pattern (P input) When the pattern and the streams do not match perfectly, this component can either insert nulls into the output, streams or it can ignore streams which have already been depleted. Las usta use F356 CULL PATTERN The Cull component (Sets/Sequence/Cull Pattern) removes elements in a list using a repeating bit mask. The bit mask is defined as a list of Boolean (true or false) values. The bit mask is repeated until all elements in the data list have been, evaluated. a e Sy Index 0 1 Pattern Tue Fate Point e c > e F ° ©. ey © © Index 0 1 2 3 4 5 Pattern tue Fae © True, Falee True Point e ° ee 0 Index 0 2 Pattern Tus Fate Foe Thus FeeWorking with Lists Lets take a look aan example using the components from the previous section, In this example, we are creating a tile pattern by mapping geometry to a rectangular grid. The pattern is created by using the List Item component to retrieve the desired tile from alist of geometry. Geometry corresponding to index Rectangular gr ‘mapping pattern mapped geometry For this exercise we willbe referencing ‘eomety in Rhine, 01 Start a Rhinoceros File 02, Create two equally sized squares 02 Create different geometries in each square Wocreateda sine sutacowithatab The 04, Start anew definition, type Ctr+N (in Grasshopper) aredthe bases fileted to distinguish the B90 05 Params/Geometry/Geometry ~ Drag and drop two Geometry parameters. “=2™*t = onto the canvas 06. Right-Click the first Geometry Parameter and select set one Geometry. Set the first Geometry that you are referencing 07. Right-Click the second Geometry Parameter and select set one faces wienpe ner poral, Geometry Set the second Geometry that you are referencing 08. Params/Geometry/Curve ~ Drag and drop two Curve parameters onto the canvas 92. £9 Designing With List09, 10 a4 12, 13, 14, 16 17, 18, 19. 20. Right-Click the first Curve Parameter and select set one Curve. Set the first Square that you are referencing Right-Click the second Curve Parameter and select set one Curve. Set the second Square that you are referencing Vector/Grid/Rectangular ~ Drag and drop a Rectangular Grid component onto the canvas. Params/Input/Slider - Drag and drop three Numeric Sliders on the canvas Double-click an the first slider and set the following: Rounding: Integers Lower Limit: 0 Double-click an the second slider and set the following: Rounding: Integers Lower Limit: 0 Upper Limit: 10 Value: 10 Double-click on the third slider and set the following: Name: Extents X &Y Rounding: Integers Lower Limit: 0 Upper Limit: 10 Value: 10 Connect the first Number Slider to the Size X (Sx) input of the Rectangular Grid component Connect the second Number Slider to the Size ¥ (Sy) input of the Rectangular Grid component Connect the third Number Slider to the Extent X (Ex) input and the Extent Y (Ey) input of the Rectangular Grid component Sets/Tree/Merge ~ Drag and drap two Merge components onto the canvas Connect the first Geometry parameter to Data Stream 1 (D1) input of the first Merge component Connect the second Geometry parameter to Data Stream 2 (D2) input of the first Merge component Connect the first curve parameter to Data Stream 1 (D1) input of the second Merge component Connect the second curve parameter to Data Stream 1 (D2) input of the second Merge component Right-click the Cells (C) output of the Rectangular Grid component and select Flatten Sets/List/List Length ~ Drag and drop a List Length component onto the canvas Connect the Cells (C) output of the Rectangular Grid component to the List (L) input of the List Length component Sets/Sequence/Repeat Data ~ Drag and drop a Repeat Data component onto the canvas Connect the Length (L) output of the List Length component to the Length Bo suro thatthe geometry and the square that you are referencing correspon.(U input of the Repeat Data component 29. Params/Input/Panel - Drag and drop a panel onto the canvas 30, Double-click the panel. Deselect multiline data, wrap items, and special codes. Enter the following: 1 ° ° 31. Connect the panel to the Data (D) input of the Repeat Data component 32, Sets/List/List Item ~ Drag and drop two List Item components 23, Connect the Result (R) output of the first merge component to the List (L} input of the first List Item component. 34, Connect the Result (R) output of the second merge component to the List (L) input of the second List Item component. 35. Connect the Data (D) output of the Repeat data component to the Index. {) input of the first and second List Item components. 26. Transform/Affine/Rectangle Mapping - Drag and Drop the Rectangle Mapping component onto the canvas 27, Connect the Cells (C] output of the Rectangular Grid component to the ‘Target (T) input of the Rectangular Mapping Component 38. Connect the items (I) output of the first List item component to the Geometry (G) input of the Rectangular Mapping Component 39, Conneet the items (I) output of the second List item component to the Source (S) input of the Rectangular Mapping Component “Tiss the pattrn in which the geometries arebeing distributed. Ois calling out the first feferenced Geometry and 1 scaling outthe secondreferenced Gaometry. Changing the nummer sequence willchange the pattern, a= willchanging the extents ofthe grid CChnging the input geometry and the pattern will change the final tile pattern # ALA2 B1,B2 c1c2 Oo ZN HYBRID Bia wy 1,00...ANS BORD x ae \ eBF.4 DESIGNING WITH DATA TREES As your definitions increase in complexity, the amount of data flowing through also increases. In order to effectively use Grasshopper, it is important to understand how large quantities of data are stored, accessed, and manipulated.F.4.0 Surface Geometry NURBS (non-uniform rational B-splines) are mathematical representations that can accurately model any shape from a simple 2D line, circle, arc, or box to the most complex 3D free-form organic surface or solid. Because of their flexibility and accuracy, NURBS models can be used in any process from illustration and animation to manufacturing. Apart from a few primitive surface types such as spheres, cones, planes and cylinders, Rhino supports three kinds of freeform surface types, the most useful of which is the NURBS surface. Similar to curves, all possible surface shapes can be represented by a NURBS surface. and this is the default fall-back in Rhino. tis, also by far the most useful surface definition and the one we will be focusing on. Sphere Primitive Cinder Primitive Plane Primitive Cone Primitive Iolane, radius] [plane ras, height) [blane, with, holt) [olane, rads, height] F.40.0 NURBS SURFACES NURBS surfaces are very similar to NURBS curves. The same algorithms are used to calculate shape, normals, tangents, curvatures and other properties, but there are some distinct differences. For example, curves have tangent vectors and normal planes, whereas surfaces have normal vectors and tangent planes. This means that curves lack orientation while surfaces lack direction. In the case of NURBS surfaces, there are in fact two directions implied by the geometry, because NURBS surfaces are rectangular grids of {u} and {v} curves. And even, though these directions are often arbitrary, we end up using them anyway because they make life so much easier for us. Youean think of NURBS surfaces 2s grid of NURBS curves that goin twodirections Theshape of2 NURBS surfaceis defined by number of control points and thedegree ee ofthat surface in thew and velrections NURDS surfaces are efficent for storing and Surface Domain tepresenting freeform suraces with igh desree of acuracy. ‘Asurface domain is defined as the range of (uy) parameters that evaluate into a InGresshopper.t softer usefulto 3-D point on that surface. The domain ineach dimension (wor v) is usually reparameterze NURES surfcessothat the described as two real numbers (u_min tou_max) and (ymin tov.max) Changing 2nd domain bethrange from Oto 2 This a surface domain is referred to as reparameterizing the surface. thesurace nData TreesNote: Evaluating parameters at equal intervals inthe 2D parameter rectangle does not necessarily translate into equal intervals, 4 ingD space wd Surface evaluation Evaluating a surface at a parameter that is within the surface domain results ina point that is on the surface. Keep in mind that the middle of the domain (mid-u, mid-v) might not necessarily evaluate to the middle point of the 3D surface. Also, evaluating u- and v-values that are outside the surface domain will not give a useful result, Normal Vectors and Tangent Planes The tangent plane toa surface at a given point is the plane that touches the surface at that point. The z-direction of the tangent plane represents the normal direction of the surface at that point. Grasshopper handles NURBS surfaces similarly to the way that Rhino does because itis built on the same core of operations needed to generate the surface. However, because Grasshopper is displaying the surface on top of the Rhino viewport (which is why you car’t really select any of the geometry created through Grasshopper in the viewport until you bake the results into the scene) some of the mesh settings are slightly lower in order to keep the speed of the Grasshopper results fairly high. You may notice some faceting in your surface meshes, but this is to be expected and is only a result of Grasshopper's drawing settings. Any baked geometry will still use the higher mesh settings.F4.0.1 PROJECTING, MAPPING & MORPHING In the previous section, we explained that NURBS surfaces contain their own coordinate space desfined by u and v domains. This means that two dimensional geometry that is defined by x and y coordinates can be mapped onto the uv space of a surface. The geometry will stretch and change in response to the curvature of the surface. This is different from simply projecting 2d geometry ‘Youcan think of projection 25 geometry onto a surface, where vectors are drawn from the 2d geometry in a specified ‘casting a shadow ontoa surface, and mapping direction until they intersect with the surface. scheiieihimiaiaahinitiniadalial Mapped geometry dehned by uv coordinates Projecting geometry ontoa surface Just as 2d geometry can be projected onto the uv space of asurface, 3d geometry that is contained by a box can be mapped toa corresponding twisted box on a surface patch. This operation is called bax morphing and is useful for populating curved surfaces with three dimensional geometric components. a To array twisted boxes on a surface, the surface domain must be divided to create a grid of surface patches. The twisted boxes are created by drawing normal vectors at the corners of each patch to the desired height and creating box defined by the end points of those vectors and the corner points of the patch.F4.0.2 MORPHING DEFINITION Inthis example, we will use the box morph component to populate a NURBS: surface with a geometric component. 01 Starta new definition, type Ctrl+N (in Grasshopper) 02 Params/Geometry/Surface ~ Drag and drop a Surface parameter onto the canvas 03. Params/Geometry/Geometry ~ Drag a Geometry parameter to the 04 Right click the Surface Parameter and select "Set One Surface’ - select a surface to reference in the Rhino viewport (05. Right click the Geometry parameter and select “Set One Geometry" ~ select the your Rhino geometry (06. Maths/Domain/Divide Domain2 - Drag and drop the Divide Domain2 ‘component onto the canvas 07, Params/Input/Number Slider ~ Drag three Number sliders onto the canvas 08. Double click the first slider and set the following: Rounding: Integer Lower Limit:0 [NURBS surface populated with component ‘Original component in reference box Surface divided into patches Twisted boxes arrayed on surface .O | “Thisis the surface that we wil populate with geometric components “hiss tho component that willbe arrayed ‘over the surface 101Upper Limit: 10 Value: 5 09, Set the same values on the second and third sliders 10. Connect the output of the Surface parameter to the Domain ()input of. the Divide Domain2 component 11, Connect the first Number Slider to the U Count (U) input of the Divide Domain2 component 12, Connect the second Number Slider to the V Count (V) input of the Divide Domain2 component 13, Transform/Morph/Surface Box ~ Drag the Surface Box component to the qs canvas ———_______________________ qp @8) 14, Connect the output of the Surface parameter to the Surface (S) input of CH the Surface Box component 45, Connect the Segements (S) output of the Divide Domain2 component to tthe Domain (D) input of the Surface Box component You should see std of twisted boxes populating your referenced surface. Change the and V count sliders tochange the umber of bones, andusetreheight sir to adjust tele height 16 Connect the third Number Slider to the Height (H) input of the Surface Box component 17. Surface/Primitive/Bounding Box ~ Drag a Bounding Box component to the canvas 18 ‘Transform/Morph/Box Morph - Drag and drop the Box Morph. ‘component ono the anys, 19. Connect the output of the Geometry parameter to the Content (C) input of the Bounding Box component 20. Connect the output of the Geometry parameter to the Geometry (G) input of the Box Morph component 21. Connect the Box (B) output of the Bounding Box component to the Reference (R) input of the Box Morph component. 22 Connect the Twisted Box (B) output of the Surface Box component to the Target (7) input of the Box Morph component ‘You should nowsee your geometry populating your surface,COOBQOCECOOE COOLLECECOOE COOLKCEECECOE © OOeCeeceecee EH OOOLLEEEE &OOQHLEEER CEOEQQoneeeece = OOE0ekbEEEG OO COCCECEEeE OQ OoeLcEecbee OO OOCCOCEEE OOOLCECECCE OOQLececceoee QOoceceecocee @Ss EN OS ON ON On oa EeeF4.1 What is a Data Tree? A Data Tree is a hierarchical structure for storing data in nested lists. Data trees are created when a grasshopper component is structured to take in a data set and output multiple sets of data. Grasshopper handles this new data by nesting it in the form of sub-lists. These nested sub-lists work in the same way as folder structures on your computer in that accessing indexed items require moving through paths that are informed by their generation of parent lists and their own sub-index. It's possible to have multiple lists of data inside a single parameter. Since multiple lists are available, there needs to be a way to identify each individual list. A Data Tree is essentially alist of lists, or sometimes a list of lists of lists (and soon). st container Data tere leaves" Path Current“branch level Data withé branches (oo wes fon N=3 fo) Nao fo) Nat uw uvn 10:4) uae In the image above, there isa single master branch (you could call this a trunk, but since it’s possible to have multiple master branches, it might be a bit of a misnomer) at path (0), This path contains no data, but does have 6 sub-branches. Each of these sub-branches inherit the index of the parent branch {0} and add their own sub-index (0, 1, 2, 3,4, and 5 respectively). It would be wrong to call this an “index’, because that implies ust a ingle number. Itis probably better to refer to this asa path’, since it resembles a folder-structure on the disk. At each of these sub-branches, we encounter some data. Each data itemis thus part of one (and only one) branch in the tree, and each item has an index that specifies its location within the branch. Each branch has a path that specifies its location within the tree.“The image below illustrates the difference between alist and a data tree. On the left, an array of four columns of six points each is all contained in one list. The first column numbered 0-5, the second 6-11, and so on. On the right is the same array of points contained in a data tree. The data trees a list of four columns, and each colurnis.a lis of six points. The index of each point is (column number, row number). Ths is 2 much more useful way of organizing this data, because you can easily access and operate on all the points ina given row or column, delete every second row of points, connect alternating points, etc s@ @ @ ° so, 6 ok 6 ° sei oi oi 6 } 70 16 ie le ° 19 |e je fe ° , oe Uist o ° 6 ° a 8 F 4,10 DATA TREE VISUALIZATION Due to their complexity, Data Trees can be difficult to understand. Grasshopper has several tools to help visualize and understand the data stored in a tree. ‘The Param Viewer ‘The Param Viewer (Params/Util/Param Viewer) allows you to visualize data in text form and as a tree. Connect any output containing data to the input of the Param Viewer. To show the tree, right-click the Param Viewer and select “draw tree’ In this example, the Param Viewer is connected to the Points (P) autput of a Divide Curve component that divided 10 curves into 10 segements each. The ten branches correspond to the ten curves, each containing alist of 11 points which are the division points of the curve. Pathof each ist Number afters in each ist boca. Solect “Draw Treo" to splay the data tree 105Ifwe connect a panel to the same output, it displays ten lists of 11 items each. You can see that each item is a point defined by three coordinates. The path is displayed at the top of each list, and corresponds to the paths listed in the Param Viewer. Path LUstaf 11 ieme ‘Tree Statistics The Tree Statistics component (Sets/Tree/Tree Statistics) Returns some statistics of the Data Tree including P-Allthe paths of the tree L- The length of each branch in the tree C- Number of paths and branches in the tree Ifwe connect the Points output of the same Divide Curve component, we can play the paths, lengths, and the count in panels. This component is helpful because it separates the statistics into three outputs, allowing you to view only the one that is relevant. Both the Param Viewer and the Tree Statistics component are helpful for visualizing changes in the structure of the Data Tree. In the next section, we will look at some operations that can be performed to change this structure.F.4.3 Working with Data Trees Grasshopper contains tools for changing the structure of a data tree. Theese tools can help you access specific data within a tree, and change the way it is stored, ordered, and identified. Let's look at some data tree manipulati sand visualize how they affect the tree, F430 FLATTEN TREE Flattening removes all levels of a Data Tree, resulting in a single List. Using the Flatten component (Sets/Tree/Flatten) on the P output of our Divide Curve component, we can use the Param Viewer to visualize the new data structure. Inthe Param Viewer, we can see that we now only have 1 branch containing alistof 48 points: F.43.1 GRAFT TREE Gratting creates a new Branch for every Data Item. If we run the data through the Graft Tree component (Sets/Tree/Graft Tree), each division point now has its own individual branch, rather than sharing a branch with the other division points an the same curve. gra gas gun pas gia gas gas gre bow due'joncbon fouboasden fo 0 6am ten us ee bon) She eae Bae bua eas bus do0 Inthe Param Viewer, we can see that what ‘Was data with & branches of 6 items each, we nawhave @lbrancres with é sub-branches Containing 1 item each, 107F4.3.2 SIMPLIFY TREE Simplify removes overlapping Branches in a Data Tree. if we run the data through the Simplify Tree component (Sets/Tree/Simplity Tree], the first branch, containing no data, has been removed. Inthe Param Viewer, we till have 8 branches = ‘of 6itome each, but the fest branch hasbeen, Femowed. F433 FLIP MATRIX ‘The Flip Matrix component (Sets/Tree/Flip Matrix) Swaps the "Rows" and *Columns’ of a Data Tree with two Path In Foe po pos gas gins pas gan phe tee beactin ben bunds teaches tia fi tt tit fn 8 fo fen fos gra dua das dee die bea oe ben oma Seu Ona dma onw nour Param Viewer, wecan ses that what ‘was data with branches of 6 items each. we rowhave 6 branches with items each ‘The Flatten, Graft, and Simplify operations can be applied to the component iput or output itself, rather than feeding the data through a separate component. Just right-click the desired input or output and select Flatten, Graft, or Simplify from the menu. The component will display an icon to indicate that the tree is being modified. Keep in mind Grasshopper's program flow. If you flatten a component input, the data will be flattened before the component operation is performed. If you flatten a component output, the data will be flattened after the component performs its action. c P@ Divide Curve component with aflatened P ngt output kot Flatten Graft simplity Expression Help y— Divide Curve component with grafted P net pom FCP DR — inde cure componentwith asimoined P NST output 108 4 Designing ith Data TreesF4.3.4 THE PATH MAPPER The Path Mapper component (Sets/Tree/Path Mapper) allows you to perform lexical operations on data trees. Lexical operations are logical mappings between data paths and indices which are defined by textual (lexical) masks and patterns. toon daanganan gaan given an guanpecngnsndasn gen O20. O27 dion ga87 an diuan dian ors Guan ois Levical Mask 00.7 Ou:endo.2n S371 de-«ndwrende-sn om:67 acensincain ‘The Path Mapper component ‘Mapplng Ear. Create Nall Wepsing Create Fetien Mepaing Create Grate ping Create Ti Mapping Create Reverse Napping Right-click the Path Mapper component and (Get Remnbes Mag select a predefined mappingeption trom the menu. or open the mapping editor ‘The Mapping Editor A:B:C| ABiKC) ——___ canst to eat {ASBsCK) (ASIKS) DalhindorandtteJeredbeanchs "You can use the following constaris: tom_count= number of toms in tho eurentbranch Path count- number ofpate (branches) inthe ree: ath index index ofeurent path 109F4.3.5 WEAVING DEFINITION In this example, we will manipulate lists and data trees to weave lists of pc define a pattern, and create surtace geometry. NURBS curve ore “9 mg rag arg ob ng md rag md ose oo me 012345 67 ko" BO Al 81 A282 AS BS Aa 80 Al 81 A2 B2 AS BS Array curves Dispatch curves into lists A and 8, divide CCulpoints, weave, and revolve 01 Starta new definition, type Ctrl*N (in Grasshopper) 02 Curve/Primitive/Line SDL - Drag and drop the Line SDL component onto fhe canvas § 03. Vector/Point/Construct Point ~ Drag and drop the Construct ‘component onto the canvas. 04 Connect the Point (Pt) output of the Canstruct Point component to the Start (S) Input of the Line SDL component 05. Vector/Vector/Unit ¥ - Drag and drop the vector Unit Y component onto the canvas | 06. Connect the Unit Y component to the Direction (D) input of the Line SDL “The factor of Unit Vector components te 1.9 component bytefouit 07 Params/Input/Number Slider ~ Drag and drop the Number Slider ‘component onto the canvas 110 F4Designing uth Data Trees08, ov. 40. iL 13, 14, 45. 46. 17. 18, Double-click on the Number slider and set the following: Name: Length Rounding: Integer Lower 0 Upper Limit: 96 ‘Value: 96 ‘Connect the Number slider to the Length (L) input of the Line SDL component ‘Transform/Array/Linear Array ~ Drag and drop the Linear Array component ontothe canvas. ——————_¢6 1} Connect the Line (L) output of the Line SDL component to the Geometry qo {G) input of the Linear Array component Vector/Vector/Unit X- Drag and drop the Vector UnitX component onto ean — Params/Input/Number Slider ~ Drag and drop two Number Slider components onto the canvas Double-click on the first slider and set the following: Name: Offset Distance Rounding: Integer Lower Limit: 4 Upper Limit: 10 Value:4 Double-click on the second slider and set the following: Name: # of Offsets Rounding: Even Lower Limit: 2 Upper Limit: 20 Value: 20 Connect the Number Slider (Offset Distance) to the Factor (F) input of the Unit X component Connect the Vector (V) output of the Unit X component to the Direction {D) input of the Linear Array component Connect the Number Slider (# of Offsets) to the Count (N) input of the Linear Array component Rhino viewport. The threesliders allow Youtte change the length ofthe lines, their distance from exch other and the number of lina inthe array23, 24, 25, 26, 27. 8 ‘Sets/Lists/Dispatch - Drag and drop the component onto the canvas Connect the Geometry (G) output of the Linear Array component to the List (L) Input of the Dispatch component Params/Input/Panel ~ Drag and drop the component onto the canvas, Double-click the panel and enter the following: true false Connect the Panel to the Pattern (P) input of the Dispatch component Curve/Division/Divide Curve ~ Drag and drop two Divide Curve ‘components onto the canvas Connect the List A (A) output of the Dispatch component to the Curve (C) input of the First Divide Curve component Connect the List B (B) output of the Dispatch component to the Curve (C) input of the Second Divide Curve component Params/Input/Number Slider ~ Drag and drop the Number Slider ‘component onto the canvas Double-click on the Number slider and set the following: Name: Divisions Rounding: Integer Lower Limit: 0 Upper Limit: 20 Value: 20 Connect the Number Slider (Divisions) to the Count (N) input of both Divide Curve components. Thedispatch component sendsovery second The Divide Curve component divides the curvein the aray toaseparatelis curves nto the numbor of sagiants spectied by the slider. Adjust the sider tochange the number of points Besureto select: Multiline Data, Wrap Items, and Special Codes oP NgT Kt20, Sets/Sequence/Cull Pattern - Drag and drop two Cull Pattern components onto the canvas|§ 31, Connect the Points (P] output of the First Divide Curve component tothe List (L) input of the First Cull Pattern component 32, Connect the Points (P} output ofthe Second Divide Curve component to the List () input of the Second Cull Pattern component 23, Params/Input/Panel Drag and drop a Second Panel component onto the canvas 34, Double-click the Scond panel and deselect: Multiline Data, Wrap Items, and Special Codes, Then enter the following 1 1 ° 9 We are sing LandOinplace of rue and 35, Connect the Second Panel to the Pattern (P) input of the First Cull fale These ae the two syntane that tara corner Grosshopper acces for boolean values 36, Connect the Second Panel to the Pattern (P) input of the Second Cull Pattern component 87, Right-click on the Pattern () inputof the Second Cull Pattern component and select Invert 38, Sets/List/Weave - Drag and drop the Weave component onto the canvas 39. Connect the Second Panel to the Pattern (P) input of the Weave 0Ow component 1 40, Right-click the Pattern (P) input of the Weave component and select. 41, Connect the List (L) output of the First Cull Pattern component to the ‘Stream 0 0} input of the Weave component 42, Connect the List (L) output of the Second Cull Pattern component to the Stream 0 (0) input of the Weave component 43, Curve/Spline/Nurbs Curve - Drag and drop the Nurbs Curve component, font the canvas. $$ $$$ 44, Connect the Weave (W) output of the Weave component to the Vertices {V) input of the Nurbs Curve camponent: ‘Thiewill invert the Cull Pattern, a use trick tokeep definitions short.—<—s\ ek ‘The cullpatternsremove alternating points _ The weave component collects data from the from schist point lists according to acustom pattern. This datais fed into the intergolate component to createcurves, 45. Surface/Freeform/Revolution ~ Drag and drop two Revolution ‘components onto the canvas 46. Connect the Curve output of the Nurbs Curve component to the Profile Curve (P) input of both Revolution components. 47. Right Click on Axis (A) input of both Revolution components and select Graft. 48. Connect the List A (A) output of the Dispatch component to the Axis (A) input of the First Revolution component Selectallthe components except the two Revolution components ad turn the preview 45. Connect the List B (B) output of the Dispatch component to the Axis (A) Giltecetin ecto. input of the Second Revolution component recent geometry 114 F4Designing ith Data TreesF4.3.6 RAILINTERSECT DEFINITION In this example, we will use some of Grasshopper's tools for manipulating data trees to retreive, reorganize, and interpolate the desired points contained ina data tree and create a lattice of intersecting fins. Sweep with two rails to create a NURBS. Divide the surface into variable sized Flipthe Matrictochango the datastructure, surface segments extract vertices, Data comprised _Datacomprised of four lists each containing ‘fonelist with four items foreach sesment. _asinglecomer point of each sexment. Explode the tree to connect corner points Prunethe tree tocullbranches containing _—_—Extrude the curves to create intersecting fins and draw dlagona lines across each insutficlent points to construct a degree 3 Segment. NURBS curve and interpolate points 01 Start a new definition, type Ctrl#N (in Grasshopper) 02. Params/Geometry/Curve ~ Drag nd drop three curve parameters onto the canvas 03. Surface/Freeform/Sweep2 ~ Drag a Sweep? component onto the canvas 04 Right-click the first curve parameter and select “Set one curve. Select the first rail curve in the Rhino viewport 05. Right-click the second curve parameter and select “Set one curve. Select the second rail curve in the Rhino viewport 06. Right-click the third curve parameter and select "Set one curve. Select the section curve in the Rhino viewport 07. Connect the outputs of the curve parameters to the Rail 1 (R41), Rail 2 {R2), and Sections (S) inputs respectively 08. Params/Geometry/Surface ~ drag a surface parameter to the canvas 09 Connect the Brep (S) output of the Sweep2 component to the input ofthe W/* have lustereated’a NURBS surface surface parameter 116 F4Designing uth Data Trees410. it 12. 13, 14, 45, 16, 17, 48, 19, 20. 22. 23. 24, 25, 26. 27. 28 29. 30. BL Right-click the surface parameter and select “Reparameterize” Maths/Domain/Divide Domain2 - drag and drop a Divide Domain2 L. component onto the canvas Inthissten, were:mapped the wand v Params/Input/Number Slider ~ drag two number sliders onto the canvas fac mle inal oa Double click the first slider and set the following: Rounding: Integer Lower Limit: 1 Upper Limit: 40 Value: 20 Set the same values on the second slider Connect the output of the reparameterized surface parameter to the Domain (I) input of the Divicle Domain2 component Connect the first number slider to the U Count (U) input of the Divide Domain2 component Connect the second number slider to the V Count (V) input ofthe Divide Domain2 component Surface/Util/Isotrim - Drag and drop the Isotrim component onto the canvas Connect the Segments (S) output of the Divide Domain2 component to the Domain (D) input of the Isotrim component Connect the output of the surface parameter to the Surface (S) input of the Isotrim component We have nowdvided out surface into smaller, equally szad, surfaces. Adjust the U and V Count sliders tochange the number of divisions Lets add a Graph Mapper to give the segments variable size, Maths/Domain/Deconstruct Domain? - Drag a Deconstruct Domain? component onto the canvas Maths/Domain/Construct Domain2 - Drag a Construct Domain2 component to the canvas Params/Input/Graph Mapper ~ Drag a Graph Mapper to the canvas Sets/List/List Length - Drag aList Length component to the canvas Sets/Tree/Merge - Drag a Merge component to the canvas Sets/List/Split List - Drag.a Split List component to the canvas ‘Connect the U min (UO) and U max (U4) outputs of the Deconstruct, Domain2 component to the Data 1 (D1) and Data 2 (D2) inputs of the Merge component ‘Connect the Result (R) output of the Merge component to the input of the Graph Mapper Right-click the Graph Mapper and select “Bezier” under "Graph Types” Connect a second wire from the U max (U4) output of the Deconstruct Domain2 component to the List () input ofthe List Length component ‘Connect the Graph Mapper output to the List (L) Input of the Split List t “The Merge and Split components are used ‘component here so that thesame Graph Mapper could beused for both the Uminand U maxvalies ret82. Connect the Length (L) output of the List Length component to the Index 33. 34, 35. 36. 37. {i) input of the Split List component ‘Connect the List A (A) output of the Split List component to the U min (UO) input of the Construct Domain? component Connect the List B (B) output of the Split List component to the U max (U1) input of the Construct Domain2 component ‘Connect the V min (VO) output of the Deconstruct Domain? component to the V min (V1) input of the Construct Domain2. component ‘Connect the V max (V1) output of the Deconstruct Domain2 component to the V max (V1) input of the Construct Domain? component ‘Connect the 2D Domain (12) output of the Construct Domain2 ‘component to the Domain (D) input of the Isotrim component, replacing the existing connection a —_=—> 38, Surface/Analysis/Deconstruct Brep ~ Drag the deconstruct Brep 39, 40. AL. ue ‘component onto the canvas Sets/Tree/Flip Matrix ~ Drag the Flip Matrix Component to the canvas, Sets/Tree/Explode Tree - Drag the Explode Tree component to the canvas Connect the Surface (S) output of the Isotrim component to the Brep (B) input of the Deconstruct Brep component Connect the Vertices (V) output of the Deconstruct Brep component to the Data (D) input of the Flip Matrix component Connect the Data (D) output of the Flip Matrix component to the Data {D) input of the Explode Tree component pretiiieoas | Right-click the Explode Tree component and select “Match Outputs” Right-click the Data (D) input of the Explode Tree component and select, Hep .4Designing ith Data Trees oom (0000) (00002) > (0002) (00003) 10) @ @ a We have ust daconstructed the domaine ‘of each surface segment, remapped the Uvalues using a Graph Mapper, and reconstructed the domains. Adjust tho ‘sins of the Graph Mapper to change the dlstributionof the surface segments. Let's use Data Trees to manipulatethe surface divisions. ‘The DeconstructBrep companent deconstructs aBrep into Faces, Edges, and \Vertices Tiss helpful f you want to operate ‘ona specific constituent of thesurface Wo just changed the Data treestructure ‘rom one list of four vertices that define each surface. to four lists, each containing one vartexof each surface ach output ofthe Explode Tree component contain ist of one vertex ofeach surface. Inother words, one list with all the top ight ‘comers one lst with all the bottom right comers, one list of top lettcorners, and one listofbettom aft corners.47, 48. 49. 50, 5. 52, 53, 54, 56. 57. 58 59. 60. 61 62. simplify, Curve/Primitive/Line ~ Drag and drop two ine components onto the ‘Connect the Branch 0 {0} output of the Explode Tree component to the ‘Start Point (A) input of the first Line component ‘Connect the Branch 1 {1} output of the Explode Tree component to the ‘Start Point (A) input of the Second Line component Connect the Branch 2 (2} output of the Explode Tree component to the End Point (B) input of the first Line component ‘Connect the Branch 3 {3} output of the Explode Tree component to the End Point (B) input of the Second Line component Curve/Until/Join Curves - Drag and drop the Join Curves component to the canvas Curve/Analysis/Control Points - Drag a Control the canvas Curve/Spline/Interpolate ~ Drag and drop the Interpolate component onto the canvas Connect the Line (L) outputs of each Line component to the Curves (C) input of the Join Curves component Connect the Curves (C) output of the Join Curves component to the Curve (C) input of the Control Points component Connect the Points (P) output of the Control Points component to the its component onto Vertices (V) input of the Interpolate component. ‘Sets/Tree/Prune Tree ~ Drag and drop the Prune Tree component onto, the canvas Params/Input/Panel ~ Draga Panel onto the canvas Connect the Points (P) output of the Control Points component to the ‘Tree (T) input of the Prune Tree component Double click the Panel and enter 4, Connect the output of the Panel to the Minimum (NO) input of the Prune ‘Tree component Connect the Tree (T) output of the Prune Tree component to the Vertices (V) input of the Interpolate component We have now connected the corner points of ‘each surface diagonally with ines, Hold down the Shift key to connect multiple wires to asingle input We have nowr joined our Hines nto poltines and reconstructed them as NURBS curves byinterpolating their control points. Inthe Rhino viewport, youmishtnotice that the shorter curves are stllstraight ines This Ishecause you cannot make adegree tires NURDS curve with fewer than four control points Let'smanipulate the data treeto
you connect one Param Viewer tothe Points (P) outout ofthe Control Points component, and another to the Tree (M) ‘output ofthe Prune Irae component, youcan ‘se that the numberof branches nas been Feluced,68. Surface/Freeform/Extrude - Drag and drop the Extrude component onto tthe canvas, 64, Vector/Vector/Unit Y ~ Drag a Unit ¥ component onto the canvas, Youmay need tousea Unit X vector, 65, Params/Input/Number Slider ~ Drag a number slider onto the canvas dependingon the orientation of our 66. Double click the Number Slider and set the following: referenced geomedty stein Rounding: Integer Lower Limit: 1 Upper Limit: 5 Value: 3 67, Connect the Curve C) output of the Interpolate component to the Base {B) input of the Extrude component 8, Connect the Number Slider output to the Factor (F) input of the Unit ¥ sean Youshould nw see a diagonals of tins (a orfinsin the Rhino Viewsort dust the 69, Connect the Unit Vector (V) output of the Unit Y component tothe Factor sider to chnage the depth ofthe ns Direction (D) inputof the Extrude component i= ee) 120 4 Designing ith Data Trees[A.] APPENDIX The following section contains useful references including an index of all the components used in this primer, as well as additional resources to learn more about Grasshopper.AO Index This index provides additional information on all the components used in this primer, as well as other components you might find useful. This is just an introduction to over 500 components in the Grasshopper plugin. Parameters GEOMETRY PGCry Ps. Circle parameter Circle Represents a collection of Circle primitives, PGGeo Geometry Parameter Represents a collection of 3D Geometry, PG. Geometry Pipeline Pipeline Defines a geometry pipeline from Rhino to Grasshopper. PGPt Point Parameter Point parameters are capable of storing persistent data. You can set the persistent records through the parameter menu, PGSrf — Surface Parameter, <<< Represents a collection of Surface geometry. Surface geometry is, the common denominator of all surface types in Grasshopper. PRIMITIVE PPBool Boolean parameter —£@i—@@—-@$———— Represents a collection of Boolean (True/False) values. PPD Domain Parameter Represents a collection of one-dimensional Domains. Domains are typically used to represent curve fragments and continuous numeric ranges. A domain consists of twa numbers that indicate the limits of the domain, everything in between these numbers is part of the domain, PPD? Domain? Parameter. Curve Parameter Represents a collection of Curve geometry. Curve geometry is the ‘common denominator of all curve types in Grasshopper. Contains a collection of two-dimensional domains. 2D Domains are typically used to represent surface fragments. A two-dimensional domain consists of two one-dimensional domains. Pipeline Layer: pipelinePPID Ppint PENum PPPath INPUT P| Toggle Pl.Button Pi Swatch Pl.Grad Pl.Graph Guid Parameter Represents a collection of Globally Unique Identifiers. Gui parameters are capable of storing persistent data. You can set the persistent records through the parameter menu, Integer Parameter Represents a collection of Integer numeric values. Integer parameters are capable of storing persistent data. You can set the persistent records through the parameter menu, Number Parameter: Represents a collection of floating point values. Number parameters are capable of storing persistent data. You can set the Persistent records through the parameter menu, File Path Contains a collection of file paths. Boolean Toggle Boolean (true/false) toggle. Button Button object with two values. When pressed, the button object returns a true value and then resets to false. Color Swatch Aswatchis a special interface object that allows for quick setting of individual color values. You can change the color of a swatch through the context menu. Gradient Control Gradient controls allow you to define acolor gradient within a numeric domain, By default the unit domain (0.0 ~ 1.0) is used, but this can be adjusted via the LO and L1 input parameters. You can add color grips to the gradient object by dragging from the color wheel at the upper left and set color grips by right clicking them. Graph Mapper Graph mapper objects allow youto remap a set of numbers. By default the fx) and {y} domains of a graph function are unit domains (0.0 ~ 1.0), but these can be adjusted via the Graph Editor. Graph mappers can contain a single mapping function, which can be picked through the context menu. Graphs typically have grips {litte circles), which can be used to modify the variables that define the graph equation. By default, agraph mapper objects contains no graph and performs 1:1 mapping of values.P| Slider P| Panne! Pl.List UTILITIES PUCin PU.COut PUDem PUJump PU Viewer PUScrib- ble Maths DOMAIN MDBnd MD. Consec 126 Append Number Slider Aslideris a special interface object that allows for quick setting of individual numeric values. You can change the values and properties through the menu, or by double-clicking a slider object. Sliders can be made longer or shorter by dragging the rightmost, edge left or right. Note that sliders only have an output (ie. no input). Panel Apanel for custom notes and text values. Itis typically an inactive object that allows you to add remarks or explanations toa Document, Panels can also receive their information from elsewhere. If you plug an output parameter into Panel, you ccansee the contents of that parameter in real-time. All data in Grasshopper can be viewed in this way. Panels can also stream their content to a text file. Double click to edit panel content Value List Provides a list of preset values from which to choose, Cluster Input Represents a cluster input parameter. Cluster Output Represents a cluster input parameter. Delay data on its way through the document. oO oO Jump Jump between different locations. Param Viewer § Aviewer for data structures. Scribble Aauick note. Data Dam Doubleclick Me! Bounds Create a numeric domain which encompasses a list of numbers. ‘Consecutive omaiys, $$ {Rite > Create consecutive domains from a list of numbers.M.D.Dom Construct Domain Create a numeric domain from two numeric extremes. MD. DoméNum MD. Deconstruct Domain DeDomain Deconstruct a numeric domain into its component parts. MD Deconstruct Domai DeDom — Deconstruct a two-dimensional domain into four numbers. Num MD. Divide Domain? Divide Divides a two-dimensional domain into equal segments. MDinc Includes Test a numeric value to s MD. Remap Numbers ReMag — Remapnumbers into a new numeric domain, OPERATORS MOAdd Addition Mathematical addition, MOD Division Mathematical Mo. Equality Equals Test for (inequality of two numbers. MOAnd — Gate And Perform boolean conjunction (AND gate). Both inputs need to be: ‘True for the result to be True, MONot — Gate Not Perform boolean negation (NOT gate). MOOr Gate OF A Perform boolean disjunction (OR gatel. Only a single input has to be True for the result to be True. Mo. barge Dhar, Larger Larger than (or equal to) Mo. Multiplication Multiply Mathematical multiplication.Mo. ‘Smaller Than Smaller Larger than (or equal to) Mo. Similarity Similar Test for similarity of two numbers. MOSub | Subtraetion £§$Amii$ im ____________ Mathematical subtraction. SCRIPT F MSEval Evaluate «fe Evaluate an expression with a flexible number of variables. f MS. pression, aaa rrr, iy Expression Evaluate an expression. TRIG MTCes Cosine Compute the cosine of avalue. MRDeg | Degrees $a Convert an angle specified in radians to degrees MTRad — Radians Convert an angle specified in degrees to radians. MTSim Sige ‘Compute the sine of a value. UTILITIES MUAvr Average Solve the arithmetic average for a set of items. MUPhi Golden Ratio Returns a factor ofthe golden ratio (Phi). MURR BR Returns a factor of Pi Sets ust SL ‘Combine Data Combine Combine non-nullitems out of several inputs. 128 Appendsk CrossRef SL. Dispatch S.Lins SLitem S.Lung SiLLong SL. Replace sLRev SLShift S.LShort sLsit SL Sort 5LWeave Cross Reference Cross Reference data from multiple lists Dispatch Dispatch the items ina list into two target lists. List dispatch very similar to the [Cull Pattern] component, with the exception, that both lists are provided as outputs. Insert Items Insert acollection of items into a lst. List Item Retrieve a specific item from alist. List Length Measure the length of a list. Elements in alist are identified by their index. The first element is stored at index zera, the second element is stored at index one and so on and so forth. The highest possible index ina list equals the length of the list minus one. Longest List Grow a collection of lists to the longest length amongst them, Replace Items Replace certain items ina list. Reverse List Reverse the order of alist. The new index of each element will be N-iwhere Nis the highest index in the list and {is the old index of the element. Shift List (Offset all items ina list. Items in the list are offset (moved) towards the end of the list if the shift offset is positive. If Wrap ‘equals True, then items that fall off the ends are re-appended. Shortest List Shrink a collection of lists to the shortest length amongst them. sift Pattern Sift elements ina list using a repeating index pattern. Sort List Sorta list of numeric keys. In order for something to be sorted, it must first be comparable. Most types of data are nat comparable, Numbers and Strings being basically the sole exceptions. If you want to sort other types of data, such as curves, you'll need to create alist of keys first. Weave Weave a set of input data using a custom pattern. The pattern is specified as alist of index values (integers) that define the order in which input datais collected.SETS $S.Culli SSCull 5S.Dup sS.itter 58. Random SS.Range 5S.Repeat SSSeries TREE STExplode STFlatten 130 Append L Cull index 1 fet Cull (remove) indexed elements from alist. w CullPattern ————_______________ Lt go, Cll (remove) elements in a list using a repeating bit mask. The P bit mask is defined as a lst of Boolean values. The bit mask is, repeated until all elements in the data list have been evaluated. D Duplieate Data Duplicate data a predefined number of times. Datacan be NASD duplicated in two ways, either copies of the list are appended at 2 the end until the number of copies has been reached, or each item is duplicated a number of times before moving on to the next item. tov a Randomly shuffles alist of values. The input list is reordered sued based on random noise. Jitteringis a good way to get arancom set with a good distribution, The jitter parameter sets radius of the random noise. fitter equals 0.5, then each items allowed to reposition itself randomly to within half the span of the entire set. R Random qn dpe Generate alist of pseudo random numbers. The number sequence 5 is unique but stable for each seed value. If you donot like a random distribution, try different seed values. Range Create a range of numbers. The numbers are spaced equally inside a numeric domain. Use this component if you need to create numbers between extremes. If you need control over the interval between successive numbers, you should be using the [Series] component. Repeat Data Repeat a pattern untilit reaches a certain length. Series Create a series of numbers. The numbers are spaced according to the {Step} value. If you need to distribute numbers inside a fixed numeric range, consider using the [Range] component instead. Explode Tree Extract all the branches froma tree. Flatten Tree Flatten a data tree by removing all branching information.STFlip Flip Matrix Flip amatrix-like data tree by swapping rows and columns, STGraft Graft Tree ‘Typically, data items are stored in branches at specific index values (0 for the first item, 1 for the second item, and so on and so forth) and branches are stored in trees at specific branch paths, for example: {0:1}, which indicates the second sub-branch of the first main branch, Grafting creates a new branch for every single data item STMerge Merge Merge a bunch of data streams. STPath Path Mapper Perform lexical operations on data trees. Lexical operations are logical mappings between data paths and indices which are defined by textual lexical) masks and patterns. STPrune Prune Tree Removes all branches froma Tree that carry a special number of Data items. You can supply both a lower and an upper limit for branch pruning. STSimplify Simplify Tree Simplify a tree by removing the overlap shared amongst al branches. STTStat Tree Statistics Get some statistics regarding adata tree. ST Unflatten Tree UnflatienUnflatten adata tree by moving items back into branches. Vector GRID VG Hexagonal HexGrid 2D grid with hexagonal cells, VG. Rectangular RecGrid 2D grid with rectangular cells. VGSaGrid Square 2D grid with square cells. c s a, fy P sf 9H mp ey P st ° aePOINT x VPP Construct Point ye Construct a point from {xy2) coordinates. Es ve. Deconstruct x pDecon _Deconstruct a point into its component parts. ePAyY Zz VPDst Distance ‘Compute Euclidean distance between two point coordinates a — feeb 8 VECTOR Wx nt Pt Unit vector parallel to the world {x} axis. vy Bait ¥ $ADaO Unit vector parallel to the world {y} axis. AY Vvec2Pt Vector et $day Create a vector between two points. du’ t Curve DIVISION cP CDDivide Divide Curve NST Divide a curve into equal length segments. Kt PRIMITIVE A Create acircle defined by base plane and radius. BER Che 8 Papa Create acircle defined by three points. ce (he NAA AAA CirCNR Create acircle defined by center, normal and radius. CPline — LineSDL Create alline segment defined by start point, tangent and length, P ce Polygon ae Polygon Create a polygon with optional round edges. <2 132 AppendSPLINE CSintCrv Interpolate Create an interpolated curve through a set of points. cs. Kinky Curve KinkCry Construct an interpolated curve through a set of points with a kink angle threshold. CSNurbs Nurbs Curve Construct a nurbs curve from control paints. CSPLine PolyLine Vista) Create apolyline connecting a number of points. c ur, cu Explode coms Exolode Explode a curve into smaller segments. Rsly, CUOtfset Offset ¢ Offset a curve witha specified distance. D oe Surface ie ANALYSIS, F SA Deconstruct Brep BBE DeBrep —Deconstructa brep into its constituent parts. v FREEFORM SF Boundary Surfaces Boundary Create planar surfaces from collection of boundary edge curves. SFextr Extrude ome Extrude curves and surfaces along a vector. ° SFExtrPt Extrude Point Extrude curves and surfaces to point. Slot Loft a Create a lofted surface through a set of section curves. SFRevSrf Revolution As Create a surface of revolution. ° 2 Rt SFSwp2 Sweep2 Create a sweep surface with two rail curves.PRIMITIVE SPBBox — Bounding Box Solve oriented geometry bounding boxes. um SP SU. Divide Surface ugN SDivide Generate agrid of {uv} points on a surface. a S.USUbSIT Isotrim Stas Extract an isoparametric subset of a surface. ie Mesh TRIANGULATION P MT. Voronoi Voronoi Planar voronoi diagram for a collection of points, Transform AFFINE TA Rectangle Mapping RecMap Transform geometry from one rectangle into another. ARRAY TA Linear Array ArrLinear Create linear array of geometry. MORPH TM.Morph Box Morph Morph an abject into a twisted box. TMSEox Surface Box Create a twisted box ona surface patch. Display coLor DCHSL — Colour HSL: Create a colour from floating point {HSL} channels. 134 AppendDIMENSIONS du DOT, Text tags —__________________qyz ‘Atext tag component allows you to draw little Strings in the de viewport as feedback items. Text and location are specified as input parameters. When text tags are baked they turn into Text Dots. di tT DDTag3D Text Tag 30 ——___________________ qs .@ Represents alist of 3D text tags in a Rhino viewport. ec q PREVIEW pp, ‘Custom Preview Preview Allows for customized geometry previews. VECTOR DMPoints | Polit ist —$@$@iN Mm $$ Displays details about lists of points.Al Resources There are many resources available to learn more about Grasshopper and parametric design concepts. There are also over a hundred plugins and add-ons that extend Grasshopper’s functionality. Below are some of our favorites. PLUG-IN COMMUNITIES it, Oy ccasshopper Add-ons, Textures and Backgrounds, add ak foodeRtino WIP) is the new Plusin Community Service by MeN. As a user, fing the newest ino Pl ine your comments, ecuss about naw teal get incontact with the developers of these apolications, share your scripts, hte /mvonfoodiehinacom’ ADD-ONS WE LOVE DDIVA-for-Rhina allows users to entry out series of environmental performance evaluations of individual bulldings and urban landscapes tp /cverine cam: Feefty offers set of comprehensive software tools dedicated to bridging te gap between Grasshopper and the Arduino miero-controller hp /refyexperiments com GhPython isthe Python interpreter component for Grasshopper that allows youto execute dynamic Scripts of any type. Unllkeather scripting components, GhPython allows the use of rhinoscriptsyntax to start scripting without needing tobe a programmer hte /nvsufondtehinocomiprajetishoythen HAL is @ Grasshopper plugin for industria robots programming supporting ABB, KUKA and Universal Robats machines, ht “hate baultsehvart= com: Extends Grasshopper’ ability to create and reference seometry including lights, blocks, and text objects. Also Shables access to information about the active Rhino document, pertaining to materials, layers linetypes, and other settings. hp /mvonfoodiehinoc onvprojecthaman Kram is an interactive, parametric finite element rogram. itets you analyze te response of S-dimonsional beam and shel structures under arbitrary loads. hte /nvoukarambaSdcom Kongoroo isa Live Physics engine fr interactive simulation optinization and formefinding directly within Grasshopper. het /mwrnfoodsehinocombrojectikangeroo a Ra tc BR 2 &a ~ Grasshopper add-ons pase btt:/ivwegrasshopper elcom/pape/sddons-fr srasshopper Fold panels using curved folding and controtpanel istribution on surfaces with a range of attractor systems bit. /ivefoodtrhina con orojectrobefoldhinghore, LunchBox sa plug-in fr Grasshopper fr exploring ‘mathematical shapes, panolng, structures, and workflow, itpvivravifoodirhino com/eraectlunchbox Mesheditisa st of components which extend Grasshopper'sabiltytoworkzwith meshes. itp roe foodehina com/projectzmesheditools Parametrictools to create and manipulate rectangular aids attractors and suppert creative mocphing of parametriepatterns. itp re faodtrhino com/orojectbt-eh Platypusallows Grasshonper authors to stream geometry totheweb inreal time, Itworks like a chatroom for parametric geometry and allows for on-the-fly 3D med! ‘mashups in the web browser Fitpionwefoodtchina con projectplatypus ‘Tr Toolbox features a range af different tools that we fram the Core Studia at Thornton Tomasettl use ona regular basis, and we thought some of you might appreciate these itp noe toadtchina com/projectttsalbax \Weaverbirdie topological medaler that contains many ‘of the known subdivision and transformation operators, readily usable by designers. Ths plug-in reconstructs the shape subdlvies any mesh, even made by polylines, and helps prepating for fabrication. itp vr iopiacentina comieaverbieADDITIONAL PRIMERS The Firefly Primer This book is intended to teach the basics of electronics (using an Arduino) as well as various digital/physical prototyping techniques to people new to the field. It isnot a comprehensive book on electronics (as there are already a number of great resources already dedicated ta this topic). Instead, this book focuses on expediting the prototyping pracess. Written by Andrew Payne. http//freflyexperiments.com/resources/ Essential Mathematics Essential Mathematics uses Grasshopper to introduce design professionals to foundation mathematical concepts that are necessary for effective development of computational methods for 2D modeling and computer graphics. Written by Rajaa Issa http //mwarhinaSd.com/download/rhino/5.0/EssentialMathematicsThirdEdition’ Generative Algorithms A series of books which is aimed to develop different concepts in the field of Generative Algorithms and Parametric Design. Written by Zubin Khabazi http /Amwwe morphogenesism,com/mediahtm! Rhino Python Primer This primer is intended to teach programming to absolute beginners, people who have tinkered with programming a bit or expert programmers looking for a quick introduction to the methods in Rhino. Written by Skylar Tibbits. http/wewarhinoSd.com/download/IronPython/5.0/RhinoPython 101 FURTHER READING Burry, Jane, and Mark Burry. The New Mathematics of Architecture. London: Thames & Hudson, 2010. Burry, Mark. Scripting Cultures: Architectural Design and Programming. Chichester, UK: Wiley, 2011. Hensel, Michael, Achin Menges, and Michael Weinstock. Emergent Technologies and Design: Towards a Biological Paradigm for Architecture. Oxon: Routledge, 2010, Jabi, Wassim. Parametric Design for Architecture. Laurence King, 2013. Menges, Achim, and Sean Ahiquist. Computational Design Thinking. Chichester, UK: John Wiley & Sons, 2011. Menges, Achim. Material Computation: Higher Integration in Morphogenetic Design. Hoboken, NJ: Wiley, 2012. Peters, Brady, and Xavier De Kestelier. Computation Works: The Building of Algorithmic Thought. Wiley, 2013. Peters, Brady. Inside Smartgeometry: Expanding the Architectural Possibilities of Computational Design. Chichester: Wiley, 2013. Pott mann, Helmut, and Daril Bentley. Architectural Geometry. Exton, PA: Bentley Institute, 2007, Sakamoto, Tomoko, and Albert Ferré. From Control to Design: Parametric/ algorithmic Architecture. Barcelona: Actar-D, 2008. ‘Woodbury, Robert. Elements of Parametric Design. London: Routledge, 2010.198 Appendi«139140 Appendi«aaA3 About this Primer AUTHORS: x ~ MODELAB CONTRIBUTORS GILAKOS, MODE LAB Gil Akos is a founding partner and Director of Technology at Mode Lab, a ‘multidisciplinary design consultancy specializing.in technology-driven process innovation. He brings diverse professional experience, technical expertise in | platforms, and a passion for generative design to the service model of the studio. His personal interests surround the relationship between simulation and materialization and ways by which this connection can be made tangible. http //modelab is http //modelab is/education RONNIE PARSONS, MODE LAB Ronnie Parsons is a founding partner and Director of Education at Mode Lab, a multidisciplinary design consultancy specializing in technology driven process innovation. At Mode Lab, Ronnie identifies new ways to connect and configure client workflows by strategically aligning product vision with UX-centered technology platforms, Ronnie's expertise resides in the areas of advanced computational modeling, instructional design, and research and development. http //modelabis http //modelab is/education MODE LAB TEAM: Sharon Jamison Andrew Reitz ‘Armon Jahanshahi Luis Quinones Erick Katzenstein Kimberly Parsons Roberto Godinez ANDREW PAYNE, PRINCIPAL, LIFT ARCHITECTS: Andrew Payne is a registered architect who founded LIFT architects in 2007. Andrew's work explores embedded computation, intelligent buildings, and generative design and he has published papers and taught workshops throughout North America and Europe. In 2010, Andrew and Jason K. Johnson published Firefly - a comprehensive software plug-in dedicated to bridging the gap between Grasshopper, the Arduino microcontroller, the internet, audio/ visual tools, and more. http//mwwliftarchitects corn/‘This primer provides a comprehensive guide to the most current Grasshopper build, version 0.90076. highlighting what we feel are some of the most exciting feature updates. Itis our goal that this primer will serve as a field guide to new and existing users looking to navigate the ins and outs of using Grasshopper in their creative practice. © MODELAB Mode Lab is a multidisciplinary design consultancy specializing in technology-driven process innovation. From its inception, Mode Lab has been a space for experimenting with the methods and technology used to design and make the world around us. We are compelled to understand and improve upon the pracess of materializing ideas - this s a journey we undertake in collaboration with our clients. http/modelab is q MODELAB ‘Our Mode Lab Education brand provides blended learning solutions for ‘consumers and businesses looking to get ahead. We design and develop targeted learning experiences that keep the learner at the center of every technique and design method we share with our community. httoy/modelab.is/education McNeelis a software development company with worldwide sales, support, and training, Founded in 1980, McNeel is a privately-held, employee-owned ‘company with sales and support offices and affiliates in Seattle, Boston, Miami, Buenos Aires, Barcelona, Rome, Tokyo, Taipei, Seoul, Kuala Lumpur, and Shanghai with more than 700 resellers, distributors, OEMs, and training centers around the world, httoy/wnennameneel.corn/ For designers who are exploring new shapes using generative algorithms, Grasshopper isa graphical algorithm editor tightly integrated with Rhino's 3D modeling tools. Unlike RhinoScript, Grasshopper requires no knowledge of programming or scripting, but still allows designers to build form generators from the simple to the awe-inspiring. hittp:/ www grasshopper3d com/ LICENSING INFORMATION ‘The Grasshopper Primer is licensed under the Creative Commons Attribution” Nonommercal Sheredlike 30 Unperted licenge, The full ext ofthis license is avallable bera: hp ereativecommanserg/icences/by re-said Daslegakcode Under thislicense, you are free: TO SHARE- to copy distribute and transmit the werk TOREMIX-to adapt the werk Under the following conditions: ATTRIBUTION -You must attribute the workin the manner specified s"Mode Labs “Attribution” below, You cannot attribute the Workin any manner tat suagests that Mode Labendorses your your use of the werk. NONCOMMERCIAL -You may nature thie werk for commercial purposes SHARE ALIKE-Ifyoualter, transform or build ‘Upon this work, you may distribute the resulting work only under the same Creative Commons [Atribution-NonCommercial-ShareAlike 30 Unported license Please se the fll text f this icense (hep creshvscammons argiicances/ay-ne-22°29) Usilegalcode) to vewall rights and restrict associated with it. MODE LAB'S ATTRIBUTION: {©2034 Studie Mods, LLC. All rights reserved, ttp/mocelabs TRANSLATIONS: you create translated versions ofthis Primer Gincompiance with thie iene) pence notify ModeLabat helo@medelab's. Mode Lab may choose to distebute andr lnk to such trarslated versions (either as-is, or a further rmodited by Mode Lab)N@)B) = LAB
You might also like
Grasshopper Visual Scripting For Rhinoceros 3D by Bachman, David PDF
PDF
No ratings yet
Grasshopper Visual Scripting For Rhinoceros 3D by Bachman, David PDF
289 pages
Manual Grasshopper
PDF
100% (3)
Manual Grasshopper
163 pages
AAD Algorithms-Aided Design Parametric Strategies Using Grasshopper (Arturo Tedeschi) (Z-Library) - Compressed-Compressed
PDF
No ratings yet
AAD Algorithms-Aided Design Parametric Strategies Using Grasshopper (Arturo Tedeschi) (Z-Library) - Compressed-Compressed
498 pages
D02S06 Tower Guide
PDF
No ratings yet
D02S06 Tower Guide
50 pages
Mode Lab Grasshopper Primer Third Edition - Web - 96 PDF
PDF
No ratings yet
Mode Lab Grasshopper Primer Third Edition - Web - 96 PDF
145 pages
Rhino Modeling Workflows in Architecture
PDF
No ratings yet
Rhino Modeling Workflows in Architecture
115 pages
Grasshopper Tutorial
PDF
100% (2)
Grasshopper Tutorial
97 pages
W9 Grasshopper
PDF
No ratings yet
W9 Grasshopper
43 pages
Rhinoceros Guide
PDF
100% (2)
Rhinoceros Guide
244 pages
Grasshopper Tutorial
PDF
No ratings yet
Grasshopper Tutorial
20 pages
C#ScriptingForGrasshopper 1stedition 20200318
PDF
100% (1)
C#ScriptingForGrasshopper 1stedition 20200318
109 pages
Grasshopper Primer - 090121
PDF
100% (4)
Grasshopper Primer - 090121
80 pages
Master in Parametric Design 400H. 2017
PDF
100% (1)
Master in Parametric Design 400H. 2017
159 pages
Algorithmic Modelling
PDF
100% (1)
Algorithmic Modelling
180 pages
Workshop+2+ +Bonus+Resources
PDF
No ratings yet
Workshop+2+ +Bonus+Resources
9 pages
Generative Algorithms
PDF
100% (1)
Generative Algorithms
179 pages
GrasshopperPrimer V3-3 ES
PDF
No ratings yet
GrasshopperPrimer V3-3 ES
242 pages
Grasshopper VB Scripting
PDF
No ratings yet
Grasshopper VB Scripting
28 pages
5 - Steps To Learn Parametric Design PDF
PDF
50% (2)
5 - Steps To Learn Parametric Design PDF
17 pages
Grasshopper Components
PDF
100% (1)
Grasshopper Components
12 pages
Simply Rhino Grasshopper Level 1 Online Evening Class
PDF
No ratings yet
Simply Rhino Grasshopper Level 1 Online Evening Class
7 pages
Grasshopper Primer Second Edition 090323
PDF
No ratings yet
Grasshopper Primer Second Edition 090323
17 pages
Simply Rhino Grasshopper Level 1 Course Outline
PDF
100% (1)
Simply Rhino Grasshopper Level 1 Course Outline
7 pages
Grasshopper Vicente Soler
PDF
100% (1)
Grasshopper Vicente Soler
45 pages
Algorithmic Sketchbook-W3 - Nicola Leong
PDF
100% (2)
Algorithmic Sketchbook-W3 - Nicola Leong
71 pages
5 Steps: To Learn Grasshopper
PDF
100% (1)
5 Steps: To Learn Grasshopper
21 pages
Bolinao
PDF
100% (1)
Bolinao
36 pages
Rhino Grasshopper 101 Course Structure
PDF
100% (1)
Rhino Grasshopper 101 Course Structure
23 pages
1 Grasshopper Architecture Introduction m1 Slides
PDF
No ratings yet
1 Grasshopper Architecture Introduction m1 Slides
4 pages
To Learn Grasshopper: 5 Steps
PDF
No ratings yet
To Learn Grasshopper: 5 Steps
20 pages
TheEssentialMathematicsForComputationalDesign 4thedition2019 PDF
PDF
No ratings yet
TheEssentialMathematicsForComputationalDesign 4thedition2019 PDF
95 pages
mp2030 Full en PDF
PDF
No ratings yet
mp2030 Full en PDF
64 pages
Simply Rhino Architecture Training PDF
PDF
No ratings yet
Simply Rhino Architecture Training PDF
7 pages
Architectural Modeling Rhino
PDF
100% (4)
Architectural Modeling Rhino
56 pages
1.1 - Rhino-Grasshopper Introduction For Basic Operation
PDF
No ratings yet
1.1 - Rhino-Grasshopper Introduction For Basic Operation
20 pages
EssentialMathematicsForComputationalDesign ThirdEdition Rev3 PDF
PDF
No ratings yet
EssentialMathematicsForComputationalDesign ThirdEdition Rev3 PDF
79 pages
Parametric Design System
PDF
No ratings yet
Parametric Design System
20 pages
Grasshopper Tutorialwoojsung Com
PDF
90% (10)
Grasshopper Tutorialwoojsung Com
28 pages
Grasshopper 140529
PDF
100% (5)
Grasshopper 140529
45 pages
Grasshopper 3d Component List
PDF
No ratings yet
Grasshopper 3d Component List
95 pages
Grasshopper Workshop Syracuse Woojae Sung Part2
PDF
No ratings yet
Grasshopper Workshop Syracuse Woojae Sung Part2
13 pages
1 - Rhino Grasshopper Workflow
PDF
No ratings yet
1 - Rhino Grasshopper Workflow
8 pages
Grasshopper Getting Started Guide v.1.1 PDF
PDF
No ratings yet
Grasshopper Getting Started Guide v.1.1 PDF
10 pages
Croma Campus - Rhinoceros & Grasshopper Training Curriculum
PDF
No ratings yet
Croma Campus - Rhinoceros & Grasshopper Training Curriculum
6 pages
DAY01
PDF
No ratings yet
DAY01
5 pages
Firefly Primer 1.003
PDF
No ratings yet
Firefly Primer 1.003
37 pages
Simply Rhino Grasshopper Level 2
PDF
0% (1)
Simply Rhino Grasshopper Level 2
7 pages
Rhino Grasshopper Tutorial: - . Ws92@cornell - Edu Woo Jae Sung
PDF
100% (3)
Rhino Grasshopper Tutorial: - . Ws92@cornell - Edu Woo Jae Sung
47 pages
Grasshopper Workshop at Cornell Woojsung Com
PDF
67% (3)
Grasshopper Workshop at Cornell Woojsung Com
13 pages
RHINO GRASSHOPPER. WWW - Woojsung.com TUTORIAL Woo Jae Sung
PDF
50% (4)
RHINO GRASSHOPPER. WWW - Woojsung.com TUTORIAL Woo Jae Sung
12 pages
Masterclass 02 - Bonus Resource
PDF
No ratings yet
Masterclass 02 - Bonus Resource
9 pages
Tutorial Grasshopper
PDF
100% (1)
Tutorial Grasshopper
46 pages
Kangaroo Manual Grasshopper Version
PDF
100% (2)
Kangaroo Manual Grasshopper Version
17 pages
PanelingToolsForGrasshopperPrimer Feb2014
PDF
100% (2)
PanelingToolsForGrasshopperPrimer Feb2014
101 pages
AD
PDF
0% (1)
AD
5 pages
Simply Rhino Grasshopper Level 2 Evening Class
PDF
No ratings yet
Simply Rhino Grasshopper Level 2 Evening Class
7 pages
Building Classifications: Division 1 - Residential Building/structure For Exclusive Use of Single Family
PDF
No ratings yet
Building Classifications: Division 1 - Residential Building/structure For Exclusive Use of Single Family
4 pages
Grasshopper 01
PDF
No ratings yet
Grasshopper 01
12 pages
Scope and Delimitation
PDF
No ratings yet
Scope and Delimitation
3 pages
Parametric Space Frame Tutorial Using Paneling Tools
PDF
No ratings yet
Parametric Space Frame Tutorial Using Paneling Tools
4 pages
Background of The Study
PDF
No ratings yet
Background of The Study
1 page
Michelle C. Villacencio: Professional Statement
PDF
No ratings yet
Michelle C. Villacencio: Professional Statement
1 page
IPPressRelease Grasshopper March2016Revised Optimized
PDF
No ratings yet
IPPressRelease Grasshopper March2016Revised Optimized
2 pages
Sasa Zivkovic Grasshopper Tutorial 02
PDF
100% (1)
Sasa Zivkovic Grasshopper Tutorial 02
1 page
Simply Rhino Grasshopper Training
PDF
No ratings yet
Simply Rhino Grasshopper Training
2 pages
Rear Elevation: Adamson University Delos Satos, Maria Siena
PDF
No ratings yet
Rear Elevation: Adamson University Delos Satos, Maria Siena
1 page
Sasa Zivkovic Grasshopper Tutorial 03
PDF
No ratings yet
Sasa Zivkovic Grasshopper Tutorial 03
2 pages