From f218d3c18705f206922340da335f16788084970e Mon Sep 17 00:00:00 2001 From: Philip Belesky Date: Tue, 1 May 2018 16:44:16 +1000 Subject: [PATCH] Correct ATX headings According to markdown specs ATX style '#' headings must be followed up a space; otherwise the #'s are escaped in many common renderers --- .../1-6/2_Understanding Topology.md | 2 +- de/appendix/A-2/0_resources.md | 2 +- en/0-about/1-grasshopper-an-overview.md | 4 +- .../1_installing-and-launching-grasshopper.md | 10 +-- en/1-foundations/1-1/2_the-grasshopper-ui.md | 24 +++---- en/1-foundations/1-1/3_talking-to-rhino.md | 20 +++--- .../0_anatomy-of-a-grasshopper-definition.md | 2 +- .../1-2/1_grasshopper-object-types.md | 8 +-- .../1-2/2_grasshopper-component-parts.md | 12 ++-- en/1-foundations/1-2/3_data-types.md | 8 +-- en/1-foundations/1-2/4_wiring-components.md | 8 +-- .../1-2/5_the-grasshopper-definition.md | 6 +- .../1-3/0_building-blocks-of-algorithms.md | 2 +- .../1-3/1_points-planes-vectors.md | 10 +-- .../1-3/2_working-with-attractors.md | 4 +- .../3_mathematics-expressions-conditionals.md | 12 ++-- en/1-foundations/1-3/4_domains-color.md | 4 +- .../1-3/5_booleans-logical-operators.md | 6 +- .../1-4/0_designing-with-lists.md | 2 +- en/1-foundations/1-4/1_curve-geometry.md | 6 +- en/1-foundations/1-4/2_what-is-a-list.md | 2 +- .../1-4/3_data-stream-matching.md | 2 +- en/1-foundations/1-4/4_creating-lists.md | 10 +-- en/1-foundations/1-4/5_list-visualization.md | 8 +-- en/1-foundations/1-4/6_list-management.md | 16 ++--- .../1-5/0_designing-with-data-trees.md | 4 +- en/1-foundations/1-5/1_surface-geometry.md | 10 +-- en/1-foundations/1-5/2_what-is-a-data-tree.md | 4 +- en/1-foundations/1-5/3_creating-data-trees.md | 14 ++-- .../1-6/0_Getting Started with Meshes.md | 2 +- en/1-foundations/1-6/1_What is a Mesh.md | 10 +-- .../1-6/2_Understanding Topology.md | 8 +-- en/1-foundations/1-6/3_Creating Meshes.md | 10 +-- en/1-foundations/1-6/4_Mesh Operations.md | 10 +-- en/1-foundations/1-6/5_Mesh Interactions.md | 8 +-- .../1-6/6_Working with Mesh Geometry.md | 2 +- en/2-extensions/2-1/2_HalfEdge_Data.md | 6 +- en/2-extensions/2-1/3_Components.md | 16 ++--- en/2-extensions/2-1/4_Exercise.md | 4 +- .../2-1/5_Architectural Case Study.md | 8 +-- en/README.md | 10 +-- en/appendix/A-1/0_index-of-components.md | 66 +++++++++---------- en/appendix/A-2/0_resources.md | 14 ++-- en/appendix/A-2/1_gh-files.md | 4 +- en/appendix/A-3/0_about-this-primer.md | 16 ++--- es/0-about/1-grasshopper-an-overview.md | 4 +- .../1_installing-and-launching-grasshopper.md | 10 +-- es/1-foundations/1-1/2_the-grasshopper-ui.md | 24 +++---- es/1-foundations/1-1/3_talking-to-rhino.md | 20 +++--- .../0_anatomy-of-a-grasshopper-definition.md | 2 +- .../1-2/1_grasshopper-object-types.md | 8 +-- .../1-2/2_grasshopper-component-parts.md | 12 ++-- es/1-foundations/1-2/3_data-types.md | 8 +-- es/1-foundations/1-2/4_wiring-components.md | 8 +-- .../1-2/5_the-grasshopper-definition.md | 6 +- .../1-3/0_building-blocks-of-algorithms.md | 2 +- .../1-3/1_points-planes-vectors.md | 10 +-- .../1-3/2_working-with-attractors.md | 4 +- .../3_mathematics-expressions-conditionals.md | 12 ++-- es/1-foundations/1-3/4_domains-color.md | 4 +- .../1-3/5_booleans-logical-operators.md | 6 +- .../1-4/0_designing-with-lists.md | 2 +- es/1-foundations/1-4/1_curve-geometry.md | 6 +- es/1-foundations/1-4/2_what-is-a-list.md | 2 +- .../1-4/3_data-stream-matching.md | 2 +- es/1-foundations/1-4/4_creating-lists.md | 10 +-- es/1-foundations/1-4/5_list-visualization.md | 8 +-- es/1-foundations/1-4/6_list-management.md | 16 ++--- .../1-5/0_designing-with-data-trees.md | 4 +- es/1-foundations/1-5/1_surface-geometry.md | 10 +-- es/1-foundations/1-5/2_what-is-a-data-tree.md | 4 +- es/1-foundations/1-5/3_creating-data-trees.md | 14 ++-- .../1-6/0_Getting Started with Meshes.md | 2 +- es/1-foundations/1-6/1_What is a Mesh.md | 10 +-- .../1-6/2_Understanding Topology.md | 8 +-- es/1-foundations/1-6/3_Creating Meshes.md | 10 +-- es/1-foundations/1-6/4_Mesh Operations.md | 10 +-- es/1-foundations/1-6/5_Mesh Interactions.md | 8 +-- .../1-6/6_Working with Mesh Geometry.md | 2 +- es/2-extensions/2-1/2_HalfEdge_Data.md | 6 +- es/2-extensions/2-1/3_Components.md | 16 ++--- es/2-extensions/2-1/4_Exercise.md | 4 +- .../2-1/5_Architectural Case Study.md | 8 +-- es/README.md | 10 +-- es/SUMMARY.md | 2 +- es/appendix/A-1/0_index-of-components.md | 66 +++++++++---------- es/appendix/A-2/0_resources.md | 14 ++-- es/appendix/A-2/1_gh-files.md | 4 +- es/appendix/A-3/0_about-this-primer.md | 16 ++--- pt/0-about/1-grasshopper-an-overview.md | 4 +- .../1_installing-and-launching-grasshopper.md | 10 +-- pt/1-foundations/1-1/2_the-grasshopper-ui.md | 24 +++---- pt/1-foundations/1-1/3_talking-to-rhino.md | 20 +++--- .../0_anatomy-of-a-grasshopper-definition.md | 2 +- .../1-2/1_grasshopper-object-types.md | 8 +-- .../1-2/2_grasshopper-component-parts.md | 12 ++-- pt/1-foundations/1-2/3_data-types.md | 8 +-- pt/1-foundations/1-2/4_wiring-components.md | 8 +-- .../1-2/5_the-grasshopper-definition.md | 6 +- .../1-3/0_building-blocks-of-algorithms.md | 2 +- .../1-3/1_points-planes-vectors.md | 10 +-- .../1-3/2_working-with-attractors.md | 4 +- .../3_mathematics-expressions-conditionals.md | 12 ++-- pt/1-foundations/1-3/4_domains-color.md | 4 +- .../1-3/5_booleans-logical-operators.md | 6 +- .../1-4/0_designing-with-lists.md | 2 +- pt/1-foundations/1-4/1_curve-geometry.md | 6 +- pt/1-foundations/1-4/2_what-is-a-list.md | 2 +- .../1-4/3_data-stream-matching.md | 2 +- pt/1-foundations/1-4/4_creating-lists.md | 10 +-- pt/1-foundations/1-4/5_list-visualization.md | 8 +-- pt/1-foundations/1-4/6_list-management.md | 16 ++--- .../1-5/0_designing-with-data-trees.md | 4 +- pt/1-foundations/1-5/1_surface-geometry.md | 10 +-- pt/1-foundations/1-5/2_what-is-a-data-tree.md | 4 +- pt/1-foundations/1-5/3_creating-data-trees.md | 14 ++-- .../1-6/0_Getting Started with Meshes.md | 2 +- pt/1-foundations/1-6/1_What is a Mesh.md | 10 +-- .../1-6/2_Understanding Topology.md | 8 +-- pt/1-foundations/1-6/3_Creating Meshes.md | 10 +-- pt/1-foundations/1-6/4_Mesh Operations.md | 10 +-- pt/1-foundations/1-6/5_Mesh Interactions.md | 8 +-- .../1-6/6_Working with Mesh Geometry.md | 2 +- pt/2-extensions/2-1/2_HalfEdge_Data.md | 6 +- pt/2-extensions/2-1/3_Components.md | 16 ++--- pt/2-extensions/2-1/4_Exercise.md | 4 +- .../2-1/5_Architectural Case Study.md | 8 +-- pt/README.md | 10 +-- pt/SUMMARY.md | 2 +- pt/appendix/A-1/0_index-of-components.md | 66 +++++++++---------- pt/appendix/A-2/0_resources.md | 14 ++-- pt/appendix/A-2/1_gh-files.md | 4 +- pt/appendix/A-3/0_about-this-primer.md | 16 ++--- ru/0-about/1-grasshopper-an-overview.md | 4 +- .../1_installing-and-launching-grasshopper.md | 10 +-- ru/1-foundations/1-1/2_the-grasshopper-ui.md | 24 +++---- ru/1-foundations/1-1/3_talking-to-rhino.md | 20 +++--- .../0_anatomy-of-a-grasshopper-definition.md | 2 +- .../1-2/1_grasshopper-object-types.md | 8 +-- .../1-2/2_grasshopper-component-parts.md | 12 ++-- ru/1-foundations/1-2/3_data-types.md | 8 +-- ru/1-foundations/1-2/4_wiring-components.md | 8 +-- .../1-2/5_the-grasshopper-definition.md | 6 +- .../1-3/0_building-blocks-of-algorithms.md | 2 +- .../1-3/1_points-planes-vectors.md | 10 +-- .../1-3/2_working-with-attractors.md | 4 +- .../3_mathematics-expressions-conditionals.md | 12 ++-- ru/1-foundations/1-3/4_domains-color.md | 4 +- .../1-3/5_booleans-logical-operators.md | 6 +- .../1-4/0_designing-with-lists.md | 2 +- ru/1-foundations/1-4/1_curve-geometry.md | 6 +- ru/1-foundations/1-4/2_what-is-a-list.md | 2 +- .../1-4/3_data-stream-matching.md | 2 +- ru/1-foundations/1-4/4_creating-lists.md | 10 +-- ru/1-foundations/1-4/5_list-visualization.md | 8 +-- ru/1-foundations/1-4/6_list-management.md | 16 ++--- .../1-5/0_designing-with-data-trees.md | 4 +- ru/1-foundations/1-5/1_surface-geometry.md | 10 +-- ru/1-foundations/1-5/2_what-is-a-data-tree.md | 4 +- ru/1-foundations/1-5/3_creating-data-trees.md | 14 ++-- .../1-6/0_Getting Started with Meshes.md | 2 +- ru/1-foundations/1-6/1_What is a Mesh.md | 10 +-- .../1-6/2_Understanding Topology.md | 8 +-- ru/1-foundations/1-6/3_Creating Meshes.md | 10 +-- ru/1-foundations/1-6/4_Mesh Operations.md | 10 +-- ru/1-foundations/1-6/5_Mesh Interactions.md | 8 +-- .../1-6/6_Working with Mesh Geometry.md | 2 +- ru/2-extensions/2-1/2_HalfEdge_Data.md | 6 +- ru/2-extensions/2-1/3_Components.md | 16 ++--- ru/2-extensions/2-1/4_Exercise.md | 4 +- .../2-1/5_Architectural Case Study.md | 8 +-- ru/README.md | 10 +-- ru/SUMMARY.md | 2 +- ru/appendix/A-1/0_index-of-components.md | 66 +++++++++---------- ru/appendix/A-2/0_resources.md | 14 ++-- ru/appendix/A-2/1_gh-files.md | 4 +- ru/appendix/A-3/0_about-this-primer.md | 16 ++--- 177 files changed, 829 insertions(+), 829 deletions(-) diff --git a/de/1-foundations/1-6/2_Understanding Topology.md b/de/1-foundations/1-6/2_Understanding Topology.md index 24613ad..4d73e85 100644 --- a/de/1-foundations/1-6/2_Understanding Topology.md +++ b/de/1-foundations/1-6/2_Understanding Topology.md @@ -64,7 +64,7 @@ Nicht-mannigfaltige Geometrien sind essentielle Geometrien, die nicht in der "re Inwiefern sind Polygonnetzgeometrien unterschiedlich von NURBS Geometrien? Wann ist es besser die eine oder die andere zu nutzen? -#####Parametrisierung +##### Parametrisierung In einem früheren Kapitel haben wir gesehen, dass NURBS Flächen durch eine Serie von NURBS Kurven in beiden Richtungen definiert sind. Diese Richtungen sind mit U und V benannt und ermöglichen eine NURBS Fläche entsprechend einer zweidimensionalen Domäne zu parametrisieren. Die Kurven selbst werden als Gleichungen im Computer gespeichert, wodurch die resultierende Fläche mit beliebiger Präzision berechnet werden kann. Das Verbinden zweier NURBS Flächen wird in einer Polyfläche resultieren, in der verschiedene Schnitte der Geometrie verschiedene UV Parameter und Kurvendefinitionen haben werden. Polygonnetze auf der anderen Seite werden durch eine konkrete Anzahl von genau definierten Eckpunkten und Netzflächen bestimmt. Das Netzwerk von Eckpunkten wird generell nicht mit einfachen UV Koordinaten beschrieben werden können. Die Darstellungspräzision kann nun nur durch Verfeinerung des Polygonnetzes oder das Hinzufügen weiterer Netzflächen verbessert werden, weil die Netzflächen die Darstellungspräzision durch ihre Darstellung klar definieren. Das Fehlen von UV Koordinaten jedoch ermöglicht es, Polygonnetze komplizierterer Geometrie flexibel in einem Polygonnetz handzuhaben, statt wie beim Fall der NURBS Darstellung auf eine Polyfläche zurückgreifen zu müssen. diff --git a/de/appendix/A-2/0_resources.md b/de/appendix/A-2/0_resources.md index 836a97e..7abba0a 100644 --- a/de/appendix/A-2/0_resources.md +++ b/de/appendix/A-2/0_resources.md @@ -82,7 +82,7 @@ http://www.giuliopiacentino.com/weaverbird/ -###Additional Primers +### Additional Primers **The Firefly Primer** Dieses Buch möchte die Grundlagen der Elektronik (durch Arduino) lehren und verschiedene digitale/physische Techniken für Prototypen vorstellen. Es ist kein umfangreiches Buch über Elektronik (da es bereits eine Anzahl großartiger Ressourcen zu diesem Thema gibt). Stattdessen fokusiert sich das Buch auf die Erkundung der Produktentwicklung. Geschrieben von Andrew Payne. http://fireflyexperiments.com/resources/ diff --git a/en/0-about/1-grasshopper-an-overview.md b/en/0-about/1-grasshopper-an-overview.md index 0a7cb49..164e3fb 100644 --- a/en/0-about/1-grasshopper-an-overview.md +++ b/en/0-about/1-grasshopper-an-overview.md @@ -1,6 +1,6 @@ ## 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. +##### 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 @@ -68,7 +68,7 @@ prevent many unwanted headaches. ![IMAGE](images/flow.png) >Program flow from left to right -####THINGS TO REMEMBER +#### 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. diff --git a/en/1-foundations/1-1/1_installing-and-launching-grasshopper.md b/en/1-foundations/1-1/1_installing-and-launching-grasshopper.md index c6c7eb3..242ac3e 100644 --- a/en/1-foundations/1-1/1_installing-and-launching-grasshopper.md +++ b/en/1-foundations/1-1/1_installing-and-launching-grasshopper.md @@ -1,10 +1,10 @@ ### 1.1.1. INSTALLING AND 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. +##### 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. -####1.1.1.1. DOWNLOADING +#### 1.1.1.1. 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. ![](images/1-1-1/1-1-1_001-downloading.png) @@ -12,13 +12,13 @@ To download the Grasshopper plug-in, visit the Grasshopper web site. Click on th >Download Grasshopper from the [grasshopper3d.com](http://grasshopper3d.com) website. -####1.1.1.2. INSTALLING +#### 1.1.1.2. INSTALLING Select Run from the download dialog box follow the installer instructions. (note: you must have Rhino 5 already installed on your computer for the plug-in to install properly). ![IMAGE](images/1-1-1/1-1-1_002-installing.png) >Follow the steps in the Installation wizard. -####1.1.1.3. LAUNCHING +#### 1.1.1.3. 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. ![IMAGE](images/1-1-1/1-1-1_003-launching-a.png) diff --git a/en/1-foundations/1-1/2_the-grasshopper-ui.md b/en/1-foundations/1-1/2_the-grasshopper-ui.md index 0ee10a7..42ce3fa 100644 --- a/en/1-foundations/1-1/2_the-grasshopper-ui.md +++ b/en/1-foundations/1-1/2_the-grasshopper-ui.md @@ -1,6 +1,6 @@ ### 1.1.2. 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. +##### 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 UI. Grasshopper is a visual programming application where you are able to create programs, called @@ -25,7 +25,7 @@ will be very familiar to Rhino users. Let’s look at a few features of the inte 8. The status bar tells you what version of Grasshopper is currently installed on your machine. If a newer version is available, a pop-up menu will appear in your tray providing instructions on how to download the latest version. -####1.1.2.1. THE WINDOWS TITLE BAR +#### 1.1.2.1. 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 @@ -39,7 +39,7 @@ This is because once it is launched from the command prompt, your session of Grasshopper stays active until that instance of Rhino is closed. -####1.1.2.2. MAIN MENU BAR +#### 1.1.2.2. MAIN MENU BAR 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 @@ -62,7 +62,7 @@ and third-party plugins which can extend functionality. ![IMAGE](images/1-1-2/1-1-2_002-settings.png) >The Preferences dialog allows you to set many of Grasshopper’s application settings. -####1.1.2.3. FILE BROWSER CONTROL +#### 1.1.2.3. 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 @@ -109,7 +109,7 @@ any Grasshopper files that were open when Rhino was shut down. ![IMAGE](images/1-1-2/1-1-2_003-autosave.png) >Drag and Drop Files onto the Canvas. -####1.1.2.4. COMPONENT PALETTES +#### 1.1.2.4. 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 to a certain category. These categories have been labeled @@ -138,12 +138,12 @@ provides access to all components in that sub-category. 4. Drop-down menu. -####1.1.2.5. THE CANVAS +#### 1.1.2.5. THE CANVAS The canvas is the primary workspace for creating Grasshopper definitions. It is here where you interact with the elements of your visual program. You can start working in the canvas by placing components and connecting wires. -####1.1.2.6. GROUPING +#### 1.1.2.6. 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 @@ -163,7 +163,7 @@ outline type can be defined by right-clicking on any group object. ![IMAGE](images/1-1-2/1-1-2_008-grouping3.png) >Two groups are nested inside one another. The color (light blue) has been changed on the outer group to help visually identify one group from the other. Groups are drawn “behind” the components within them and, in cases such as this, there is a depth order to the two groups. To change this, go to Edit > Arrange in the main menu bar. -####1.1.1.7. WIDGETS +#### 1.1.1.7. 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 @@ -208,7 +208,7 @@ other corners of the canvas or to hide it completely. -####1.1.2.8. USING THE SEARCH FEATURE +#### 1.1.2.8. USING THE SEARCH FEATURE Although a lot of thought has gone into the placement of each component on the component panel to make it intuitive for new users, people sometimes find it difficult to locate a specific component that might be buried deep inside one @@ -227,7 +227,7 @@ you will see a list of parameters or components that match your request. 3. Divide Domain2 component. -####1.1.2.9. THE FIND FEATURE +#### 1.1.2.9. 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 @@ -266,7 +266,7 @@ canvas) next to the Find dialog box. -####1.1.2.10. USING THE RADIAL MENU +#### 1.1.2.10. USING THE RADIAL MENU 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 @@ -282,7 +282,7 @@ dramatically increase the speed at which you create Grasshopper documents. ![IMAGE](images/1-1-2/1-1-2_016-radial-menu.png) >The Radial UI menu allows you to quickly access frequently used menu items. -####1.1.2.11. THE CANVAS TOOLBAR +#### 1.1.2.11. 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 diff --git a/en/1-foundations/1-1/3_talking-to-rhino.md b/en/1-foundations/1-1/3_talking-to-rhino.md index 145e330..4f6bde8 100644 --- a/en/1-foundations/1-1/3_talking-to-rhino.md +++ b/en/1-foundations/1-1/3_talking-to-rhino.md @@ -1,6 +1,6 @@ -###1.1.3. TALKING TO RHINO +### 1.1.3. TALKING TO RHINO -#####Unlike a Rhino document, a Grasshopper definition does not contain any actual objectsor geometry. Instead, a Grasshopper definition represents a set of rules & instructions for how Rhino can automate tasks. +##### Unlike a Rhino document, a Grasshopper definition does not contain any actual objectsor geometry. Instead, a Grasshopper definition represents a set of rules & instructions for how Rhino can automate tasks. ![IMAGE](images/1-1-3/1-1-3_001-talking-to-rhino.png) >1. Grasshopper preview geometry. @@ -10,7 +10,7 @@ -####1.1.3.1. VIEWPORT FEEDBACK +#### 1.1.3.1. 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 @@ -27,13 +27,13 @@ provide visual feedback. The image below outlines the default color scheme. 3. Point geometry is drawn as a cross rather than a rectangle to distinguish it from other Rhino point objects. 4. Blue feedback means you are currently making a selection in the Rhino Viewport. -####1.1.3.2. LIVE WIRES +#### 1.1.3.2. LIVE WIRES Grasshopper is a dynamic environment. Changes that are made are live and their preview display is updated in the Rhino viewport. ![IMAGE](images/1-1-3/1-1-3_003-live-wires.png) -####1.1.3.3. GUMBALL WIDGET +#### 1.1.3.3. 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, geometry @@ -43,7 +43,7 @@ to during). ![IMAGE](images/1-1-3/1-1-3_004-gumball.png) -####1.1.3.4. BAKING GEOMETRY +#### 1.1.3.4. 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 @@ -56,7 +56,7 @@ bake. 3. Grouping your baked geometry is a convenient way to manage the instantiated Rhino geometry, particularly if you are creating many objects with Grasshopper. -####1.1.3.5. UNITS & TOLERANCES +#### 1.1.3.5. UNITS & TOLERANCES Grasshopper inherits units and tolerances from Rhino. To change the units, type Document Properties in the Rhino command line to access the Document Properties menu. Select Units to change the units and tolerances. @@ -64,7 +64,7 @@ Properties menu. Select Units to change the units and tolerances. ![IMAGE](images/1-1-3/1-1-3_006-units.png) >Change the units and tolerances in the Rhino Document Properties menu. -####1.1.3.6. REMOTE CONTROL PANEL +#### 1.1.3.6. 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 a single screen then you may have already @@ -110,7 +110,7 @@ to switch back to the standard Working Mode. -####1.1.3.7. FILE MANAGEMENT +#### 1.1.3.7. FILE MANAGEMENT If 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. @@ -120,7 +120,7 @@ Grasshopper and Rhino files in the same folder, and giving them related names. 2. Rhino file. 3. Grasshopper file. -####1.1.3.8. TEMPLATES +#### 1.1.3.8. TEMPLATES Creating and specifiying a template file in your Grasshopper preferences is convenient way to set up every new Grasshopper definition you create. The template can include Grasshopper components as well as panels and sketch diff --git a/en/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md b/en/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md index f6e1387..e2d2340 100644 --- a/en/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md +++ b/en/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md @@ -1,5 +1,5 @@ ## 1.2. ANATOMY OF A GRASSHOPPER DEFINTION -####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 and how to interact with them to start building definitions. +#### 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 and how to interact with them to start building definitions. ![IMAGE](images/1-2/1-2_001-anatomy-of-definition.png) diff --git a/en/1-foundations/1-2/1_grasshopper-object-types.md b/en/1-foundations/1-2/1_grasshopper-object-types.md index d539348..1911198 100644 --- a/en/1-foundations/1-2/1_grasshopper-object-types.md +++ b/en/1-foundations/1-2/1_grasshopper-object-types.md @@ -1,8 +1,8 @@ ### 1.2.1. GRASSHOPPER OBJECT TYPES -#####Grasshopper consists of two primary types of user objects: parameters andcomponents. Parameters store data, whereas components perform actions that resultin data. The most basic way to understand Grasshopper is to remember that we willuse data to define the inputs of actions (which will result in new data that we cancontinue to use). +##### Grasshopper consists of two primary types of user objects: parameters andcomponents. Parameters store data, whereas components perform actions that resultin data. The most basic way to understand Grasshopper is to remember that we willuse data to define the inputs of actions (which will result in new data that we cancontinue to use). -####1.2.1.1. PARAMETERS +#### 1.2.1.1. 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 with a 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 from other components. The point and curve objects are both geometry parameters. @@ -13,7 +13,7 @@ Input parameters are dynamic interface objects that allow you to interact with y ![IMAGE](images/1-2-1/1-2-1_002-input-parameters.png) -####1.2.1.2. COMPONENTS +#### 1.2.1.2. COMPONENTS Components perform actions based on the inputs they receive. There are manytypes of components for different tasks. ![IMAGE](images/1-2-1/1-2-1_003-components.png) @@ -24,7 +24,7 @@ segments. 3. The Circle CNR component constructs a circle geometry from input data; a center point, normal vector, and radius. 4. The Loft component constructs a surface by lofting curves. -####1.2.1.3. OBJECT COLORS +#### 1.2.1.3. 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. A parameter which contains neither warnings nor errors is shown in light diff --git a/en/1-foundations/1-2/2_grasshopper-component-parts.md b/en/1-foundations/1-2/2_grasshopper-component-parts.md index f779b34..34998ae 100644 --- a/en/1-foundations/1-2/2_grasshopper-component-parts.md +++ b/en/1-foundations/1-2/2_grasshopper-component-parts.md @@ -1,6 +1,6 @@ ### 1.2.2. GRASSHOPPER COMPONENT PARTS -#####Components are the objects you place on the canvas and connect together with Wiresto form a visual program. Components can represent Rhino Geometry or operationslike Math Functions. Components have inputs and outputs. +##### Components are the objects you place on the canvas and connect together with Wiresto form a visual program. Components can represent Rhino Geometry or operationslike Math Functions. Components have inputs and outputs. ![IMAGE](images/1-2-2/1-2-2_001-component-parts.png) >1. The three input parameters of the Circle CNR component. @@ -13,7 +13,7 @@ There are a few Grasshopper components that have inputs but no outputs, or vice ![IMAGE](images/1-2-2/1-2-2_002-components-without-outputs.png) -####1.2.2.1. LABEL VS ICON DISPLAY +#### 1.2.2.1. LABEL VS ICON DISPLAY Every Grasshopper object has a unique icon. These icons are displayed in the center area of the object and correspond to 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. @@ -37,14 +37,14 @@ components in the palettes is holding down Ctrl + Alt and clicking on an existin ![IMAGE](images/1-2-2/1-2-2_006-reveal-location.png) -####1.2.2.2. COMPONENT HELP +#### 1.2.2.2. COMPONENT HELP Right clicking an object and selecting “Help” from the drop-down menu will open a Grasshopper help window. The help window contains a more detailled description of the object, a list of inputs and outputs, as well as remarks. ![IMAGE](images/1-2-2/1-2-2_007-component-help.png) >1. Grasshopper help window for the Point parameter 2. The remarks in the help window give additional insight about the point parameter. -####1.2.2.3. TOOL TIPS +#### 1.2.2.3. TOOL TIPS Component inputs are expecting to receive certain types of data, for example a 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. ![IMAGE](images/1-2-2/1-2-2_008-tool-tips.png) @@ -54,7 +54,7 @@ Component inputs are expecting to receive certain types of data, for example a C 4. The header of the output tooltip provides the same detail os for inputs, but for the corresponding output. 5. The result of the component's action. -####1.2.2.4. CONTEXT POPUP MENUS +#### 1.2.2.4. CONTEXT POPUP MENUS All objects 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. @@ -71,7 +71,7 @@ settings and details. You can access this context menu by right-clicking on the 4. Add item to collection. 5. Delete selection. -####1.2.2.5. ZOOMABLE USER INTERFACE +#### 1.2.2.5. 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. ![IMAGE](images/1-2-2/1-2-2_011-zoomable-ui.png) diff --git a/en/1-foundations/1-2/3_data-types.md b/en/1-foundations/1-2/3_data-types.md index d3ba36c..6cdfae8 100644 --- a/en/1-foundations/1-2/3_data-types.md +++ b/en/1-foundations/1-2/3_data-types.md @@ -1,8 +1,8 @@ ### 1.2.3. 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. +##### 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. -####1.2.3.1. PERSISTENT DATA +#### 1.2.3.1. PERSISTENT DATA Persistent data is accessed through the menu, and depending on the kind of parameter has a different manager. A Point parameter for example allows you to set one or more points through its menu. But, let’s back up a few steps and see how a Point Parameter behaves. 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 outcome 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. @@ -16,7 +16,7 @@ Once you have defined all the points you can press Enter and they will become pa 2. Once the parameter contains some persistent data, the component will turn from orange to grey. 3. The tooltip for the point parameter shows the persistent data (a collection of referenced points) that is stored. -####1.2.3.2. VOLATILE DATA +#### 1.2.3.2. 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 it is a decimal number) into an integer source and it will take care of the conversion. @@ -29,7 +29,7 @@ If you want the data to become volatile again, simply reconnect the wires to the ![IMAGE](images/1-2-3/1-2-3_003-right-click.png) -####1.2.3.3. INPUT PARAMETERS +#### 1.2.3.3. 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** diff --git a/en/1-foundations/1-2/4_wiring-components.md b/en/1-foundations/1-2/4_wiring-components.md index e924805..a720805 100644 --- a/en/1-foundations/1-2/4_wiring-components.md +++ b/en/1-foundations/1-2/4_wiring-components.md @@ -1,8 +1,8 @@ ### 1.2.4. 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. +##### 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. -####1.2.4.1. CONNECTION MANAGEMENT +#### 1.2.4.1. 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 a permanent 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. ![IMAGE](images/1-2-4/1-2-4_001a.png) @@ -21,7 +21,7 @@ To connect components, click and drag near the circle on the output side of an o 7. If there are multiple connections, select the one you want to disconnect from the list. 8. When you hover over an item, the wire will be highlighted in red. -####1.2.4.2. FANCY WIRES +#### 1.2.4.2. 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, simply click on the Display 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. ![IMAGE](images/1-2-4/1-2-4_002-fancy-wires.png) @@ -31,7 +31,7 @@ Wires represent the connections as well as the flow of data within the graph in 4. Single Item – The data flowing out of any parameter that contains a single item will be shown with a solid grey line. 5. Tree – Information transferred between components which contain a data structure will be shown in a grey double-line-dash wire type. -####1.2.4.3. WIRE DISPLAY +#### 1.2.4.3. WIRE DISPLAY If you have spent any great deal of time working on a single Grasshopper definition, you may have realized that the canvas can get cluttered with a nest of wires quite quickly. Fortunately, we have the ability to manage the wire displays for each input of a component. 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. diff --git a/en/1-foundations/1-2/5_the-grasshopper-definition.md b/en/1-foundations/1-2/5_the-grasshopper-definition.md index a54bb5e..c7af836 100644 --- a/en/1-foundations/1-2/5_the-grasshopper-definition.md +++ b/en/1-foundations/1-2/5_the-grasshopper-definition.md @@ -5,15 +5,15 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.2.5_the grasshopper definition.gh) {% endif %} -#####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. +##### 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. -####1.2.5.1. PROGRAM FLOW +#### 1.2.5.1. 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. ![IMAGE](images/1-2-5/1-2-5_001-program-flow.png) >Directionality of data is left to right. -####1.2.5.2. THE LOGICAL PATH +#### 1.2.5.2. THE LOGICAL PATH All of 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. ![IMAGE](images/1-2-5/1-2-5_002-logical-graph.png) diff --git a/en/1-foundations/1-3/0_building-blocks-of-algorithms.md b/en/1-foundations/1-3/0_building-blocks-of-algorithms.md index bfedfb0..0dc3ff8 100644 --- a/en/1-foundations/1-3/0_building-blocks-of-algorithms.md +++ b/en/1-foundations/1-3/0_building-blocks-of-algorithms.md @@ -1,5 +1,5 @@ ## 1.3. Building Blocks of Algorithms -####This chapter will introduce you to basic geometric and mathematical concepts and how they are implemented and manipulated in Grasshopper. +#### This chapter will introduce you to basic geometric and mathematical concepts and how they are implemented and manipulated in Grasshopper. ![Building Blocks of Algorithms](images/1-3/1-3_001.png) diff --git a/en/1-foundations/1-3/1_points-planes-vectors.md b/en/1-foundations/1-3/1_points-planes-vectors.md index 257be50..362d874 100644 --- a/en/1-foundations/1-3/1_points-planes-vectors.md +++ b/en/1-foundations/1-3/1_points-planes-vectors.md @@ -1,10 +1,10 @@ -###1.3.1. Points, Planes & Vectors +### 1.3.1. 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. +##### 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. ![Points, Vectors, and Planes](images/1-3-1/1-3-1_001-intro.png) -####1.3.1.1 POINTS +#### 1.3.1.1 POINTS Points in 3D space have three coordinates, usually referred to as [x,y,z]. Points in 2D space have only two coordinates which are either called [x,y] or [u,v] depending on what kind of two dimensional space we’re talking about. 2D parameter space is bound to a finite surface. It is still continuous, I.e. 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. @@ -14,7 +14,7 @@ Since the surface which defines this particular parameter space resides in regul If this is a hard concept to grasp, it might help to think of yourself and your position in space. We tend to use local coordinate systems to describe our whereabouts; “I’m sitting in the third seat on the seventh row in the movie theatre”, “I’m in the back seat”. If the car you’re in is on the road, your position in global coordinates is changing all the time, even though you remain in the same back seat ‘coordinate’. -####1.3.1.2. VECTORS +#### 1.3.1.2. VECTORS A vector is a geometric quantity describing Direction and Magnitude. Vectors are abstract; ie. they represent a quantity, not a geometrical element. @@ -22,7 +22,7 @@ Vectors are indistinguishable from points. That is, they are both lists of three ![Vectors](images/1-3-1/1-3-1_003-vectors.png) -####1.3.1.3. PLANES +#### 1.3.1.3. 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. ![Planes](images/1-3-1/1-3-1_004-planes.png) diff --git a/en/1-foundations/1-3/2_working-with-attractors.md b/en/1-foundations/1-3/2_working-with-attractors.md index 11dc164..32b985c 100644 --- a/en/1-foundations/1-3/2_working-with-attractors.md +++ b/en/1-foundations/1-3/2_working-with-attractors.md @@ -6,7 +6,7 @@ thead {display: none} ### 1.3.2. 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 withinGrasshopper 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. +##### Attractors are points that act like virtual magnets - either attracting or repelling other objects. In Grasshopper, any geometry referenced from Rhino or created withinGrasshopper 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. ![Overview](images/1-3-2/1-3-2_001-attractor-overview.png) >1. Attractor point @@ -22,7 +22,7 @@ the length of each vector to scale the radius of each circle. ![Examples](images/1-3-2/1-3-2_002-attractor-examples.png) -####1.3.2.1. ATTRACTOR DEFINITION +#### 1.3.2.1. ATTRACTOR DEFINITION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/en/1-foundations/1-3/3_mathematics-expressions-conditionals.md b/en/1-foundations/1-3/3_mathematics-expressions-conditionals.md index bf20802..0aa742c 100644 --- a/en/1-foundations/1-3/3_mathematics-expressions-conditionals.md +++ b/en/1-foundations/1-3/3_mathematics-expressions-conditionals.md @@ -7,7 +7,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.3_operators and conditionals.gh) {% endif %} -#####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. +##### 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: @@ -20,7 +20,7 @@ distinction between Integral types (integers) and Floating types (real numbers) this chapter, we’re going to explore different methods for working with and evaluating various sets of numbers. -####1.3.3.1. THE MATH TAB +#### 1.3.3.1. THE 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: ![](images/1-3-3/1-3-3_01-the-math-tab.png) @@ -34,7 +34,7 @@ Most of the components that deal with mathematical operations and functions can 7. The time subcategory has a number of components which allow you to construct instances of dates and times. 8. The utility subcategory is a ‘grab bag’ of useful components that canbe used in various mathematical equations. Check here if you’re trying find the maximum or minimum values between two lists of numbers; or average a group of numbers. -####1.3.3.2. OPERATORS +#### 1.3.3.2. 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. @@ -45,7 +45,7 @@ various data types, including points and vectors. ![](images/1-3-3/1-3-3_02-operators.png) -####1.3.3.3. CONDITIONAL OPERATORS +#### 1.3.3.3. 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 @@ -99,7 +99,7 @@ equal to (<=) condition. ![](images/1-3-3/1-3-3_06-smaller-than.png) -####1.3.3.4. TRIGONOMETRY COMPONENTS +#### 1.3.3.4. TRIGONOMETRY COMPONENTS {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} @@ -195,7 +195,7 @@ thead {display: none} ![](images/1-3-3/1-3-3_21-spiral.png) -####1.3.3.5. EXPRESSIONS +#### 1.3.3.5. EXPRESSIONS {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/en/1-foundations/1-3/4_domains-color.md b/en/1-foundations/1-3/4_domains-color.md index 1723d74..47281c1 100644 --- a/en/1-foundations/1-3/4_domains-color.md +++ b/en/1-foundations/1-3/4_domains-color.md @@ -4,7 +4,7 @@ td:nth-child(3) {font-size: 70%;width: 15%;} td {background-color: #F9F9F9;} thead {display: none} -###1.3.4. Domains & Color +### 1.3.4. Domains & Color {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -12,7 +12,7 @@ thead {display: none} >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.4_domains and color.gh) {% endif %} -#####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). +##### 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). ![](images/1-3-4/1-3-4_01-color-wheel.png) >In the color wheel, hue corresponds to the angle. Grasshopper has taken this 0-360 domainand remapped it between zero and one. diff --git a/en/1-foundations/1-3/5_booleans-logical-operators.md b/en/1-foundations/1-3/5_booleans-logical-operators.md index f2ef12c..77e2364 100644 --- a/en/1-foundations/1-3/5_booleans-logical-operators.md +++ b/en/1-foundations/1-3/5_booleans-logical-operators.md @@ -1,11 +1,11 @@ -###1.3.5. Booleans & Logical Operators +### 1.3.5. Booleans & Logical Operators {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.5_booleans and logical operators.gh) {% endif %} -####1.3.5.1. BOOLEANS +#### 1.3.5.1. BOOLEANS Numeric variables can store a whole range of different numbers. Boolean variables can only store two values referred to as Yes or No, True or False, 1 or 0. Obviously we never use booleans to perform calculations because of their limited range. We use booleans to evaluate conditions. @@ -22,7 +22,7 @@ Grasshopper also has objects that test conditions and output boolean values. For ![](images/1-3-5/1-3-5_003-includes.png) >The Includes component is testing whether the number 6.8 is included in the domain from 0 to 10. It returns a boolean value of True. -####1.3.5.2. LOGICAL OPERATORS +#### 1.3.5.2. LOGICAL OPERATORS Logical operators 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: diff --git a/en/1-foundations/1-4/0_designing-with-lists.md b/en/1-foundations/1-4/0_designing-with-lists.md index d2b563a..da03293 100644 --- a/en/1-foundations/1-4/0_designing-with-lists.md +++ b/en/1-foundations/1-4/0_designing-with-lists.md @@ -1,5 +1,5 @@ ## 1.4. 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. +#### 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. ![IMAGE](images/1-4/1-4_001-designing-with-lists.png) diff --git a/en/1-foundations/1-4/1_curve-geometry.md b/en/1-foundations/1-4/1_curve-geometry.md index dcf06c3..1c5c3a6 100644 --- a/en/1-foundations/1-4/1_curve-geometry.md +++ b/en/1-foundations/1-4/1_curve-geometry.md @@ -1,6 +1,6 @@ ### 1.4.1. 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. +##### 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 has a 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 control-points, if all 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’s Primitive Curve Components such as: lines, circles, ellipses, and arcs. @@ -19,7 +19,7 @@ example, planarity is a global property while tangent vectors are a local proper 2. Edit Point 3. Control Point -####1.4.1.1. NURBS CURVES +#### 1.4.1.1. NURBS CURVES **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 a list of at least degree+1 points. One of the easiest ways to change the shape of a NURBS curve is to move its control points. @@ -41,7 +41,7 @@ NURBS curve knots as a result of varying degree: ![IMAGE](images/1-4-1/1-4-1_005-degree-three.png) >D3 is the most common type of NURBS curve and is the default in Rhino. You are probably very familiar with the visual progression of the spline, even though the knots appear to be in odd locations. -####1.4.1.2. GRASSHOPPER SPLINE COMPONENTS +#### 1.4.1.2. GRASSHOPPER SPLINE COMPONENTS {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/en/1-foundations/1-4/2_what-is-a-list.md b/en/1-foundations/1-4/2_what-is-a-list.md index e0867ec..a8801a3 100644 --- a/en/1-foundations/1-4/2_what-is-a-list.md +++ b/en/1-foundations/1-4/2_what-is-a-list.md @@ -1,6 +1,6 @@ ### 1.4.2. 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, it is 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. +##### 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, it is 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. diff --git a/en/1-foundations/1-4/3_data-stream-matching.md b/en/1-foundations/1-4/3_data-stream-matching.md index 92e81ac..006c717 100644 --- a/en/1-foundations/1-4/3_data-stream-matching.md +++ b/en/1-foundations/1-4/3_data-stream-matching.md @@ -5,7 +5,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.3_data matching.gh) {% endif %} -#####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. +##### 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): diff --git a/en/1-foundations/1-4/4_creating-lists.md b/en/1-foundations/1-4/4_creating-lists.md index bd1247b..11466f4 100644 --- a/en/1-foundations/1-4/4_creating-lists.md +++ b/en/1-foundations/1-4/4_creating-lists.md @@ -5,9 +5,9 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.4_list creation.gh) {% endif %} -#####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. +##### 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. -####1.4.4.1. MANUAL LIST CREATION +#### 1.4.4.1. MANUAL LIST CREATION Perhaps the easiest way to create a list (and one of the most over-looked methods) is to manually type in a list 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 difficult if the list has many entries. There are several ways to manually create a list. One way is to use a Number paramter. Right click the Number parameter and select “Manage Number Collection.” @@ -20,7 +20,7 @@ Another method is to manually enter the list items into a panel. Make sure that ![IMAGE](images/1-4-4/1-4-4_002-panel.png) -####1.4.4.2. RANGE +#### 1.4.4.2. RANGE The Range component, found under Sets/Sequence/Range, creates a list 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. @@ -43,13 +43,13 @@ You may have noticed something a little quirky about the setup we just made. We ![IMAGE](images/1-4-4/1-4-4_005-construct-domain.png) >To create a Range from a domain that does not start at zero, use the Construct Domain component. -####1.4.4.3. SERIES +#### 1.4.4.3. 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. ![IMAGE](images/1-4-4/1-4-4_006-series.png) >The Series component creates a list based on a start value, step value, and the number of values in the list. -###1.4.4.4. RANDOM +### 1.4.4.4. 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. ![IMAGE](images/1-4-4/1-4-4_007-random.png) diff --git a/en/1-foundations/1-4/5_list-visualization.md b/en/1-foundations/1-4/5_list-visualization.md index 00cd3c2..09fd157 100644 --- a/en/1-foundations/1-4/5_list-visualization.md +++ b/en/1-foundations/1-4/5_list-visualization.md @@ -5,7 +5,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.5_list visualization.gh) {% endif %} -#####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. +##### 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 to create 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. @@ -13,13 +13,13 @@ There are many different ways to visualize a list of data. The most common way i Lets look at some components that can help us understand the data. -####1.4.5.1. THE POINT LIST COMPONENT +#### 1.4.5.1. 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. ![IMAGE](images/1-4-5/1-4-5_002-point-list.png) >You can visualize the order of a set of points using the Point List component. -####1.4.5.2. TEXT TAGS +#### 1.4.5.2. TEXT TAGS The text tag component allows you to draw little strings (a string 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. ![IMAGE](images/1-4-5/1-4-5_003-text-tags.png) @@ -31,7 +31,7 @@ They differ, in that, when Text Tag 3d objects are baked into the scene, they be ![IMAGE](images/1-4-5/1-4-5_004-text-tag-3d.png) >You can use a Text Tag 3d component to visualize information like a Text object in Rhino. -####1.4.5.3. COLOR +#### 1.4.5.3. COLOR One of the other things we can do to visualize the list data is to assign color to the geometry. Grasshopper has limited ‘rendering’ capabilities, but we can control simple Open GL settings like color, specular color, transparency, etc. The L0 value represents the low end (left side) of the gradient, whereas the L1 value represents the upper end (right side). These values correspond to the start and end of our domain. The t-values are the elements in the list that will get mapped somewhere within the L0 and L1 range. The output of the gradient is a list of RGB color values which correspond to each point in our list. Right-click on the Gradient to set one of the gradient presets, or define your own using the color node points. ![IMAGE](images/1-4-5/1-4-5_005-custom-preview.png) diff --git a/en/1-foundations/1-4/6_list-management.md b/en/1-foundations/1-4/6_list-management.md index fc2c8d3..ea6872c 100644 --- a/en/1-foundations/1-4/6_list-management.md +++ b/en/1-foundations/1-4/6_list-management.md @@ -5,41 +5,41 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.6_list management.gh) {% endif %} -#####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 a list (numbers, points, vectors, curves, surfaces, breps, etc.) and there are a number of useful tools found under the Sets/List subcategory. +##### 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 a list (numbers, points, vectors, curves, surfaces, breps, etc.) and there are a number of useful tools found under the Sets/List subcategory. -####1.4.6.1. LIST LENGTH +#### 1.4.6.1. LIST LENGTH 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. ![IMAGE](images/1-4-6/1-4-6_001-list-length.png) -####1.4.6.2. LIST ITEM +#### 1.4.6.2. LIST ITEM Our List is 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 in a list, we have to specify the i-input; which corresponds to the index number we would like to retrieve. We can feed a single integer or a list of integers into the i-input depending on how many items we would like to retrieve.The L-input defines the base list which we will be analyzing. In this example, we have set the i-input to 2 so the List Item component returns the data item associated with the 3rd entry number in our list. ![IMAGE](images/1-4-6/1-4-6_002-list-item.png) -####1.4.6.3. REVERSE LIST +#### 1.4.6.3. REVERSE LIST We can invert the order of our list by using a Reverse List component (Sets/List/Reverse). If we input an ascending list of numbers from 0.0 to 50.0 into the Reverse List component; the output returns a descending list from 50.0 to 0.0. ![IMAGE](images/1-4-6/1-4-6_003-reverse-list.png) -####1.4.6.4. SHIFT LIST +#### 1.4.6.4. SHIFT LIST The Shift List component (Sets/Sequence/Shift List) will either move the list up or 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 +1, all values of the list will move up by one entry number. If 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 a shift offset value set to +1, 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 ![IMAGE](images/1-4-6/1-4-6_004-shift-list.png) -####1.4.6.5. INSERT ITEMS +#### 1.4.6.5. INSERT ITEMS The Insert Items component (Sets/Lists/Insert Items) enables you to insert a collection of items into a list. 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. ![IMAGE](images/1-4-6/1-4-6_005-insert-item.png) -####1.4.6.6. WEAVE +#### 1.4.6.6. 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. ![IMAGE](images/1-4-6/1-4-6_006-weave.png) -####1.4.6.7. CULL PATTERN +#### 1.4.6.7. 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. ![IMAGE](images/1-4-6/1-4-6_007-cull-pattern.png) diff --git a/en/1-foundations/1-5/0_designing-with-data-trees.md b/en/1-foundations/1-5/0_designing-with-data-trees.md index fc7111a..f90681b 100644 --- a/en/1-foundations/1-5/0_designing-with-data-trees.md +++ b/en/1-foundations/1-5/0_designing-with-data-trees.md @@ -1,5 +1,5 @@ -##1.5. DESIGNING WITH DATA TREES +## 1.5. 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. +#### 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. ![IMAGE](images/1-5/1-5_001-designing-with-data-trees.png) diff --git a/en/1-foundations/1-5/1_surface-geometry.md b/en/1-foundations/1-5/1_surface-geometry.md index bcc199e..0da1cd7 100644 --- a/en/1-foundations/1-5/1_surface-geometry.md +++ b/en/1-foundations/1-5/1_surface-geometry.md @@ -1,6 +1,6 @@ -###1.5.1. Surface Geometry +### 1.5.1. 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. +##### 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. It is also by far the most useful surface definition and the one we will be focusing on. @@ -10,7 +10,7 @@ Apart from a few primitive surface types such as spheres, cones, planes and cyli 3. Plane Primitive [plane, width, height] 4. Cone Primitive [plane, radius, height] -####1.5.1.1. NURBS SURFACES +#### 1.5.1.1. 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. @@ -50,7 +50,7 @@ some of the mesh settings are slightly lower in order to keep the speed of the G 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. -####1.5.1.2. PROJECTING SURFACES +#### 1.5.1.2. PROJECTING SURFACES 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 onto a surface, where vectors are drawn from the 2d geometry in a specified direction until they intersect with the surface. ![IMAGE](images/1-5-1/1-5-1_005-surface-mapping.png) @@ -71,7 +71,7 @@ normal vectors at the corners of each patch to the desired height and creating a box defined by the end points of those vectors and the corner points of the patch. -####1.5.1.3. MORPHING DEFINITION +#### 1.5.1.3. MORPHING DEFINITION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/en/1-foundations/1-5/2_what-is-a-data-tree.md b/en/1-foundations/1-5/2_what-is-a-data-tree.md index 8a50e9b..52d840f 100644 --- a/en/1-foundations/1-5/2_what-is-a-data-tree.md +++ b/en/1-foundations/1-5/2_what-is-a-data-tree.md @@ -1,6 +1,6 @@ ### 1.5.2. 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. +##### 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 a list of lists, or sometimes a list of lists of lists (and so on). @@ -13,7 +13,7 @@ The image below illustrates the difference between a list and a data tree. On th ![IMAGE](images/1-5-2/1-5-2_002-list-data-tree.png) -####1.5.2.1. DATA TREE VISUALIZATION +#### 1.5.2.1. DATA TREE VISUALIZATION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/en/1-foundations/1-5/3_creating-data-trees.md b/en/1-foundations/1-5/3_creating-data-trees.md index 3d4595d..6a29bbb 100644 --- a/en/1-foundations/1-5/3_creating-data-trees.md +++ b/en/1-foundations/1-5/3_creating-data-trees.md @@ -6,29 +6,29 @@ {% endif %} -#####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. +##### 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 manipulations and visualize how they affect the tree. -####1.5.3.1. FLATTEN +#### 1.5.3.1. FLATTEN 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. ![IMAGE](images/1-5-3/1-5-3_001-flatten.png) >In the Param Viewer, we can see that we now only have 1 branch containing a list of 48 points. -####1.5.3.2. GRAFT TREE +#### 1.5.3.2. GRAFT TREE Grafting 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 on the same curve. ![IMAGE](images/1-5-3/1-5-3_002-graft.png) >In the Param Viewer, we can see that what was data with 8 branches of 6 items each, we now have 8 branches with 6 sub-branches containing 1 item each. -####1.5.3.3. SIMPLIFY TREE +#### 1.5.3.3. SIMPLIFY TREE Simplify removes overlapping Branches in a Data Tree. If we run the data through the Simplify Tree component (Sets/Tree/Simplify Tree), the first branch, containing no data, has been removed. ![IMAGE](images/1-5-3/1-5-3_003-simplify.png) >In the Param Viewer, we still have 8 branches of 6 items each, but the first branch has been removed. -####1.5.3.4. FLIP MATRIX +#### 1.5.3.4. FLIP MATRIX The Flip Matrix component (Sets/Tree/Flip Matrix) Swaps the “Rows” and “Columns” of a Data Tree with two Path Indices. ![IMAGE](images/1-5-3/1-5-3_004-flip-matrix.png) @@ -42,7 +42,7 @@ operation is performed. If you flatten a component output, the data will be flat 2. Grafted output P 3. Simplified output P -####1.5.3.5. THE PATH MAPPER +#### 1.5.3.5. 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. ![IMAGE](images/1-5-3/1-5-3_006-path-mapper-a.png) @@ -52,7 +52,7 @@ The Path Mapper component (Sets/Tree/Path Mapper) allows you to perform lexical 3. The Mapping Editor 4. You can modify a data tree by re-mapping the path index and the desired branch -####1.5.3.6. WEAVING DEFINITION +#### 1.5.3.6. WEAVING DEFINITION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/en/1-foundations/1-6/0_Getting Started with Meshes.md b/en/1-foundations/1-6/0_Getting Started with Meshes.md index 1e4801f..0d22de7 100644 --- a/en/1-foundations/1-6/0_Getting Started with Meshes.md +++ b/en/1-foundations/1-6/0_Getting Started with Meshes.md @@ -1,5 +1,5 @@ ## 1.6. Getting Started with Meshes -####In the field of computational modeling, meshes are one of the most pervasive forms of representing 3D geometry. Mesh geometry can be a light-weight and flexible alternative to working with NURBS, and are used in everything from rendering and visualizations to digital fabrication and 3D printing. This chapter will provide an introduction to how mesh geometry is handled in Grasshopper. +#### In the field of computational modeling, meshes are one of the most pervasive forms of representing 3D geometry. Mesh geometry can be a light-weight and flexible alternative to working with NURBS, and are used in everything from rendering and visualizations to digital fabrication and 3D printing. This chapter will provide an introduction to how mesh geometry is handled in Grasshopper. ![IMAGE](images/cover.png) diff --git a/en/1-foundations/1-6/1_What is a Mesh.md b/en/1-foundations/1-6/1_What is a Mesh.md index a0908e1..55cd689 100644 --- a/en/1-foundations/1-6/1_What is a Mesh.md +++ b/en/1-foundations/1-6/1_What is a Mesh.md @@ -1,13 +1,13 @@ ### 1.6.1 What is a Mesh? -#####A Mesh is a collection of quadrilaterals and triangles that represents a surface or solid geometry. This section discusses the structure of a mesh object, which includes vertices, edges, and faces, as well as additional mesh properties such as colors and normals. +##### A Mesh is a collection of quadrilaterals and triangles that represents a surface or solid geometry. This section discusses the structure of a mesh object, which includes vertices, edges, and faces, as well as additional mesh properties such as colors and normals. ![IMAGE](images/1-6-1/01_mesh-structure.png) >1. Mesh vertices 2. Mesh edges 3. Mesh faces -####1.6.1.1 Basic Anatomy of a Mesh +#### 1.6.1.1 Basic Anatomy of a Mesh Grasshopper defines meshes using a Face-Vertex data structure. At its most basic, this structure is simply a collection of points which are grouped into polygons. The points of a mesh are called *vertices*, while the polygons are called *faces*. To create a mesh we need a list of vertices and a system of grouping those vertices into faces. @@ -61,7 +61,7 @@ It is extremely important to pay attention to the order of the indices when cons >1. A quad face with indices 0,1,2,3 2. A quad with indicies 0,3,1,2 -####1.6.1.2 Implicit Mesh Data +#### 1.6.1.2 Implicit Mesh Data In addition to faces and vertices, there is other information about a mesh that we will want to use. In a Face-Vertex based mesh, data such as *edges* and *normals* are calculated implicitly based on the given faces and vertices. This section describes ways to query this information. @@ -108,7 +108,7 @@ While less intuitive than face normals, vertex normals are important for smooth >1. Normals set according to the face normal results in discrete polygonal shading 2. Adjancent face normals are averaged together to create vertex normals, resulting in smooth shading across faces -####1.6.1.3 Mesh Attributes +#### 1.6.1.3 Mesh Attributes Meshes can also be assigned additional attributes to either vertices or faces. The simplest of these is vertex color, which is described below, but other attributes exist such as texture UV coordinates. (Some programs even allow vertex normals to be assigned as attributes instead of being derived from the faces and vertices, which can provide even more flexibility in rendered surface appearance.) @@ -125,7 +125,7 @@ While the above examples colored the entire mesh, color data are actually assign >1. Red, green, and blue are assigned to the three vertices of a mesh 2. The resulting mesh interpolates the colors of the vertices -####1.6.1.4 Exercise +#### 1.6.1.4 Exercise {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/en/1-foundations/1-6/2_Understanding Topology.md b/en/1-foundations/1-6/2_Understanding Topology.md index 0ef1539..11c23e8 100644 --- a/en/1-foundations/1-6/2_Understanding Topology.md +++ b/en/1-foundations/1-6/2_Understanding Topology.md @@ -1,6 +1,6 @@ ### 1.6.2 Understanding Topology -#####While the vertices of a mesh contain position information, it is really the connections between the vertices that give a mesh geometry its unique structure and flexibility. +##### While the vertices of a mesh contain position information, it is really the connections between the vertices that give a mesh geometry its unique structure and flexibility. ![IMAGE](images/1-6-2/01_meshMorph2.png) @@ -30,7 +30,7 @@ It is possible for two distinct mesh shapes to be topologically identical. All t >A topologically equivalent mug and donut -####1.6.2.2 Mesh Characteristics +#### 1.6.2.2 Mesh Characteristics **Orientable** @@ -66,7 +66,7 @@ Non-manifold geometry is essentially geometry that cannot exist in the "real wor How is mesh geometry different from NURBS geometry? When might you want to use one instead of the other? -#####Parameterization +##### Parameterization In a previous chapter, we saw that NURBS surfaces are defined by a series of NURBS curves going in two directions. These directions are labeled U and V, and allow a NURBs surface to be parameterized according to a two-dimensional surface domain. The curves themselves are stored as equations in the computer, allowing the resulting surfaces to be calculated to an arbitarily small degree of precision. It can be difficult, however, to combine multiple NURBS surfaces together. Joining two NURBS surfaces will result in a polysurface, where different sections of the geometry will have different UV parameters and curve definitions. Meshes, on the other hand, are comprised of a discrete number of exactly defined vertices and faces. The network of vertices generally cannot be defined by simple UV coordinates, and because the faces are discrete the amount of precision is built into the mesh and can only be changed by refining the mesh and added more faces. The lack of UV coordinates, however, allows meshes the flexibility to handle more complicated geometry with a single mesh, instead of resorting to a polysurface in the case of NURBS. @@ -74,7 +74,7 @@ Meshes, on the other hand, are comprised of a discrete number of exactly defined >Note - While a mesh does not have implicit UV parameterization, it is sometimes useful to assign such a parameterization in order to map a texture or image file onto mesh geometry for rendering. Some modeling software therefore treats the UV coordinates of a mesh vertex as an *attribute* (like vertex color) which can be manipulated and changed. These are usually assigned and not completely defined by the mesh itself. -#####Local vs Global Influence +##### Local vs Global Influence Another important difference is the extent to which a local change in mesh or NURBS geometry affects the entire form. Mesh geometry is completely local. Moving one vertex affects only the faces that are adjacent to that vertex. In NURBS surfaces, the extent of the influence is more complicated and depends on the degree of the surface as well as the weights and knots of the control points. In general, however, moving a single control point in a NURBS surface creates a more global change in geometry. diff --git a/en/1-foundations/1-6/3_Creating Meshes.md b/en/1-foundations/1-6/3_Creating Meshes.md index 93a1015..9498672 100644 --- a/en/1-foundations/1-6/3_Creating Meshes.md +++ b/en/1-foundations/1-6/3_Creating Meshes.md @@ -1,13 +1,13 @@ ### 1.6.3 Creating Meshes -#####In the last section, we looked at the basic structure of meshes. In this section, we give a brief introduction to different ways of generating mesh geometry. +##### In the last section, we looked at the basic structure of meshes. In this section, we give a brief introduction to different ways of generating mesh geometry. There are three fundamental ways of creating mesh geometry in Grasshopper: 1. Starting with a mesh primitive 2. Manually constructing a mesh from faces and vertices 3. Converting NURBS geometry into a mesh -####1.6.3.1 Primitive +#### 1.6.3.1 Primitive Grasshopper comes with a few simple mesh primitive components: @@ -17,13 +17,13 @@ Grasshopper comes with a few simple mesh primitive components: 3. **Mesh Sphere** - This primitive requires a base plane to determine the center and orientation of the sphere, a radius for the size, and U and V values to determine the number of faces. 4. **Mesh Sphere Ex** - Also known as a Quadball, this primitive creates a sphere composed of six patches, which are subdivided according to the C input. A quadball is topologically equivalent to a cube, even though it is geometrically spherical. -####1.6.3.2 Construct Mesh +#### 1.6.3.2 Construct Mesh ![IMAGE](images/1-6-3/construct-mesh.png) As we saw in the previous section, the **Construct Mesh** component can be used to directly create a mesh from a list of vertices and a list of faces (and an optional list of vertex colors). Constructing an entire mesh manually can be extremely tedious, so this component is more often used with an existing list of faces and vertices which have been extracted using a **Deconstruct Mesh** component on an existing mesh. -####1.6.3.3 NURBS to Mesh +#### 1.6.3.3 NURBS to Mesh Perhaps the most common method of creating a complex mesh is to generate one based off of NURBS geometry. Individual NURBS surfaces can be converted to a mesh using the **Mesh Surface** component, which simply subdivides the surface along its UV coordinates and creates quad faces. This component allows you to enter the number of U and V divisions for the resultant mesh. @@ -35,7 +35,7 @@ More complex polysurfaces can be converted to a single mesh with the **Mesh Brep NOTE: it is generally much easier to convert from a NURBS geometry to a mesh object rather than the other way around. While the UV coordinates of a NURBS surface are straightforward to convert to quad faces of a mesh, the opposite is not necessarily true, since a mesh might contain a combination of triangles and quads in a way that is not simple to extract a UV coordinate system out of. -####1.6.3.4 Exercise +#### 1.6.3.4 Exercise In this exercise, we use a basic Mesh primitive, perform a transformation on the vertices, and then assign a color based on the normal vectors to approximate the rendering process. diff --git a/en/1-foundations/1-6/4_Mesh Operations.md b/en/1-foundations/1-6/4_Mesh Operations.md index e62b007..7e4a909 100644 --- a/en/1-foundations/1-6/4_Mesh Operations.md +++ b/en/1-foundations/1-6/4_Mesh Operations.md @@ -1,8 +1,8 @@ ### 1.6.4 Mesh Operations -#####In the last section, we looked at the basic structure of a mesh. In this section, we will look at ways to manipulate mesh geometry. +##### In the last section, we looked at the basic structure of a mesh. In this section, we will look at ways to manipulate mesh geometry. -####1.6.4.1 Smooth +#### 1.6.4.1 Smooth ![IMAGE](images/1-6-4/smooth.png) @@ -17,7 +17,7 @@ Attaching a boolean value to the input N provides option to skip naked vertices. 4. 25 iterations 5. 50 iterations -####1.6.4.2 Blur +#### 1.6.4.2 Blur ![IMAGE](images/1-6-4/blur.png) @@ -30,7 +30,7 @@ The **Blur** component acts in a similar way as smooth, except it only affect th 4. 12 iterations 5. 20 iterations -####1.6.4.3 Triangulate +#### 1.6.4.3 Triangulate ![IMAGE](images/1-6-4/triangulate.png) @@ -41,7 +41,7 @@ In order to ensure each face is planar, or to export a mesh to a different softw 2. Added edges according to shortest distance across quads 3. Triangulated resultant mesh -####1.6.4.4 Weld +#### 1.6.4.4 Weld ![IMAGE](images/1-6-4/weld.png) diff --git a/en/1-foundations/1-6/5_Mesh Interactions.md b/en/1-foundations/1-6/5_Mesh Interactions.md index 5ad3bea..02a239b 100644 --- a/en/1-foundations/1-6/5_Mesh Interactions.md +++ b/en/1-foundations/1-6/5_Mesh Interactions.md @@ -1,9 +1,9 @@ ### 1.6.5 Mesh Interactions -#####This section looks at ways in which Mesh Objects can interact with other objects, such as evaluating nearest points or combining multiple meshes together. +##### This section looks at ways in which Mesh Objects can interact with other objects, such as evaluating nearest points or combining multiple meshes together. -####1.6.5.1 Mesh Geometry and Points +#### 1.6.5.1 Mesh Geometry and Points **Inclusion** @@ -37,7 +37,7 @@ The following four numbers define the *barycentric* coordinates of the point wit The **Mesh Eval** component uses a mesh parameter as an input and returns the referenced point, as well as the normal and color at that point. The color and normal are calculated as interpolations of the vertex colors and vertex normals, using the same barycentric coordinates as the mesh parameter. -####1.6.5.2 Combining Mesh Geometry +#### 1.6.5.2 Combining Mesh Geometry **Mesh Join** @@ -58,7 +58,7 @@ Meshes in Grasshopper have a set of boolean operations similar to boolean operat 4. Mesh Union -####1.6.5.3 Intersections and Occlusions +#### 1.6.5.3 Intersections and Occlusions **Intersect** diff --git a/en/1-foundations/1-6/6_Working with Mesh Geometry.md b/en/1-foundations/1-6/6_Working with Mesh Geometry.md index 25e3e29..cf0f49b 100644 --- a/en/1-foundations/1-6/6_Working with Mesh Geometry.md +++ b/en/1-foundations/1-6/6_Working with Mesh Geometry.md @@ -1,6 +1,6 @@ ### 1.6.6 Working with Mesh Geometry -#####In this section, we will work through an exercise file for producing a complete mesh solid. By the end of this exercise, we will have a dynamic definition to produce custom vases that can be 3D printed. +##### In this section, we will work through an exercise file for producing a complete mesh solid. By the end of this exercise, we will have a dynamic definition to produce custom vases that can be 3D printed. {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/en/2-extensions/2-1/2_HalfEdge_Data.md b/en/2-extensions/2-1/2_HalfEdge_Data.md index c0b29d2..2a44ef7 100644 --- a/en/2-extensions/2-1/2_HalfEdge_Data.md +++ b/en/2-extensions/2-1/2_HalfEdge_Data.md @@ -1,4 +1,4 @@ -###2.1.2. Half Edge Data +### 2.1.2. Half Edge Data In the Grasshopper primer, we looked at how Grasshopper defines a mesh using a Face-Vertex data structure. This is a relatively simple data structure and is widely used in applications that use meshes, but can be computationally inefficient for more advanced algorithms. The Element\* add-on restructures the mesh using Half-Edge data, an edge-centered data structure, which allows for efficient queries of adjacent vertices, faces, and edges, which can vastly improve on algorithm speed and performance. This structure is capable of maintaining incidence information of vertices, edges and faces. This method facilitates the creation of new patterns and geometries all based on the topological relationship of the base geometry. @@ -6,10 +6,10 @@ The half-edge data structure is a representation for a mesh in which each edge i ![IMAGE](images/2-1-2/2-1-2_001_Half-Edge.png) -####2.1.2.1 Half-Edge Connectivity +#### 2.1.2.1 Half-Edge Connectivity The half-edge highlighted in blue explicitly stores indices to its termination point, adjacent half-edges, and the face it belongs to. The other information (gray) can be accessed implicitly. ![IMAGE](images/2-1-2/2-1-2_002_Half-Edge.png) -####2.1.2.2 Vertex Connectivity +#### 2.1.2.2 Vertex Connectivity The vertex highlighted in blue explicitly stores an index to one of its outgoing half-edges. The other information (gray) can be accessed implicitly. ![IMAGE](images/2-1-2/2-1-2_003_Half-Edge.png) diff --git a/en/2-extensions/2-1/3_Components.md b/en/2-extensions/2-1/3_Components.md index d0fb5bb..35e033a 100644 --- a/en/2-extensions/2-1/3_Components.md +++ b/en/2-extensions/2-1/3_Components.md @@ -1,8 +1,8 @@ -###2.1.3. Element* Components +### 2.1.3. Element* Components ![IMAGE](images/2-1-3/2-1-3_001_Components-Tabs.png) -####2.1.3.1 Analyse +#### 2.1.3.1 Analyse ![IMAGE](images/2-1-3/2-1-3_002_Analyse-Components.png) >1. Mesh Closest Point @@ -25,7 +25,7 @@ This component is used to quickly extract color information from a mesh. It retu -####2.1.3.2 Data +#### 2.1.3.2 Data ![IMAGE](images/2-1-3/2-1-3_003_Data-Components.png) >1. Data Visualizer @@ -59,7 +59,7 @@ This component outputs the mesh vertices, neighboring vertices (arranged in cloc ![IMAGE](images/2-1-3/2-1-3_006_Vertex-Neighbors.png) > **Vertex Neighbors** - Vertices, neighbouring vertices, neighbouring edges, neighbouring face centers -####2.1.3.3 Primitives +#### 2.1.3.3 Primitives Element\* provides four additional mesh primitives: the Dodecahedron, Tetrahedron, Octahedron, and Icosahedron. These components take a single number as input for the radius, and produce meshes centered at the origin, and composed of one face per side. With the addition of the Cube, which is already availible through Grasshopper's built-in primitives, these make up the five Platonic solids. @@ -69,13 +69,13 @@ Element\* provides four additional mesh primitives: the Dodecahedron, Tetrahedro 3. Octahedron 4. Icosahedron -####2.1.3.4 Smooth +#### 2.1.3.4 Smooth **Element\* Smooth** provides an optimized smoothing algorithm that is more efficient than Grasshopper's **Smooth Mesh** for large datasets. It makes use of the Lapacian Smoothing algorithm for Half-Edge structured meshes. It does not change the topology or vertex count of welded meshes, but will combine identical vertices if there are any duplicates caused by an unwelded mesh. We can specify the smoothing strength, boundary condition, boundary tolerance as well as the number of iterations. ![IMAGE](images/2-1-3/2-1-3_008_Smooth.png) -####2.1.3.5 Subdivide +#### 2.1.3.5 Subdivide **Element\* Catmull Clark Subdivision** @@ -90,7 +90,7 @@ This subdivison component will create an all quad mesh by adding a face for each >1. Constant Quad subdivision 2. Catmull Clark subdivision -####2.1.3.6 Transform +#### 2.1.3.6 Transform ![IMAGE](images/2-1-3/2-1-3_010_Transform-Components.png) >1. Mesh Windown @@ -127,7 +127,7 @@ For example, a four-sided polygon (quad) is split into 4 three-sided polygons wi 2. Mesh Frame 3. Icosohedron transformed with mesh frame, then thickend and subdivided -####2.1.3.7 Utility +#### 2.1.3.7 Utility ![IMAGE](images/2-1-3/2-1-3_012_Utility-Component.png) >1. Mesh Combine & Clean diff --git a/en/2-extensions/2-1/4_Exercise.md b/en/2-extensions/2-1/4_Exercise.md index 0c9271a..bec7c1f 100644 --- a/en/2-extensions/2-1/4_Exercise.md +++ b/en/2-extensions/2-1/4_Exercise.md @@ -1,6 +1,6 @@ -###2.1.4. Exercise +### 2.1.4. Exercise -#####In this section, we will work through a simple exercise using the Element* primitives as a base. We will incorporate the half-edge data structure as well using both features of the transform components (uniform and per vertex) +##### In this section, we will work through a simple exercise using the Element* primitives as a base. We will incorporate the half-edge data structure as well using both features of the transform components (uniform and per vertex) ![IMAGE](images/2-1-4/2-1-4_000_Cover.png) {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} diff --git a/en/2-extensions/2-1/5_Architectural Case Study.md b/en/2-extensions/2-1/5_Architectural Case Study.md index 600a37a..9477e55 100644 --- a/en/2-extensions/2-1/5_Architectural Case Study.md +++ b/en/2-extensions/2-1/5_Architectural Case Study.md @@ -1,11 +1,11 @@ -###2.1.5. Element* Architectural Case Study +### 2.1.5. Element* Architectural Case Study -#####In this section, we will work through a simple exercise file that is meant as an introduction to working with Element tools. We will explore some patterning and facade treatments in the field of Architecture which will incorporate Half Edge data structures along with basic Element components without the use of per vertex features. +##### In this section, we will work through a simple exercise file that is meant as an introduction to working with Element tools. We will explore some patterning and facade treatments in the field of Architecture which will incorporate Half Edge data structures along with basic Element components without the use of per vertex features. ![IMAGE](images/2-1-5/2-1-5_001_Main-Render.jpg) -####2.1.5.1 Example 1 +#### 2.1.5.1 Example 1 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -87,7 +87,7 @@ thead {display: none} ![IMAGE](images/2-1-5/2-1-5_022_Definition.png) --- -####2.1.5.2 Example 2 +#### 2.1.5.2 Example 2 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/en/README.md b/en/README.md index fa48e9f..9331656 100644 --- a/en/README.md +++ b/en/README.md @@ -1,12 +1,12 @@ -#The Grasshopper Primer (EN) -##Third Edition V3.3 +# The Grasshopper Primer (EN) +## Third Edition V3.3 ![Primer Release Cover](0-about/images/GHP3_5Pages.png) > Grasshopper is a graphical algorithm editor tightly integrated with Rhino’s 3-D modeling tools, allowing designers to build form generators from the simple to the awe-inspiring. -###WELCOME +### 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 Rhino4 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, *and now web-based*, 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](http://modelab.is) 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. It is our goal that this primer will serve as a field guide to new and existing users looking @@ -66,7 +66,7 @@ form generators from the simple to the awe inspiring. http://www.grasshopper3d.com/page/download-1 -###FORUMS +### 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 & @@ -84,5 +84,5 @@ McNeel Forum powered by Discourse. http://discourse.mcneel.com/ -###LICENSING INFORMATION +### LICENSING INFORMATION The Grasshopper Primer is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license. The full text of this license is available here: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode diff --git a/en/appendix/A-1/0_index-of-components.md b/en/appendix/A-1/0_index-of-components.md index 3a22f41..360ed22 100644 --- a/en/appendix/A-1/0_index-of-components.md +++ b/en/appendix/A-1/0_index-of-components.md @@ -19,12 +19,12 @@ thead {display: none} ## 2.1. 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. +##### 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 +#### Geometry |||| |--|--|--| |P.G.Crv|Curve Parameter
Represents a collection of Curve geometry. Curve geometry is the common denominator of all curve types in Grasshopper.|![IMAGE](images/PGCrv.png)| @@ -34,7 +34,7 @@ Parameters |P.G.Pt|Point Parameter
Point parameters are capable of storing persistent data. You can set the persistent records through the parameter menu.|![IMAGE](images/PGPt.png)| |P.G.Srf|Surface Parameter
Represents a collection of Surface geometry. Surface geometry is the common denominator of all surface types in Grasshopper.|![IMAGE](images/PGSrf.png)| -####Primitive +#### Primitive |||| |--|--|--| |P.P.Bool|Boolean Parameter
Represents a collection of Boolean (True/False) values.|![IMAGE](images/PPBool.png)| @@ -45,7 +45,7 @@ Parameters |P.P.Num|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.|![IMAGE](images/PPNum.png)| |P.P.Path|File Path
Contains a collection of file paths.|![IMAGE](images/PPPath.png)| -####Input +#### Input |||| |--|--|--| |P.I.Toggle|Boolean Toggle
Boolean (true/false) toggle.|![IMAGE](images/PIToggle.png)| @@ -57,7 +57,7 @@ Parameters |P.I.Panel|Panel
A panel for custom notes and text values. It is typically an inactive object that allows you to add remarks or explanations to a Document. Panels can also receive their information from elsewhere. If you plug an output parameter into a Panel, you can see 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.|![IMAGE](images/PIPanel.png)| |P.I.List|Value List
Provides a list of preset values from which to choose.|![IMAGE](images/PIList.png)| -####Utilities +#### Utilities |||| |--|--|--| |P.U.Cin|Cluster Input
Represents a cluster input parameter.|![IMAGE](images/PUCin.png)| @@ -70,7 +70,7 @@ Parameters Maths -- -####Domain +#### Domain |||| |--|--|--| |M.D.Bnd|Bounds
Create a numeric domain which encompasses a list of numbers.|![IMAGE](images/MDBnd.png)| @@ -84,7 +84,7 @@ Maths |M.D.ReMap|Remap Numbers
Remap numbers into a new numeric domain.|![IMAGE](images/MDReMap.png)| -####Operators +#### Operators |||| |--|--|--| |M.O.Add|Addition
Mathematical addition.|![IMAGE](images/MOAdd.png)| @@ -99,13 +99,13 @@ Maths |M.O.Similar|Similarity
Test for similarity of two numbers.|![IMAGE](images/MOSimilar.png)| |M.O.Sub|Subtraction
Mathematical subtraction.|![IMAGE](images/MOSub.png)| -####Script +#### Script |||| |--|--|--| |M.S.Eval|Evaluate
Evaluate an expression with a flexible number of variables.|![IMAGE](images/MSEval.png)| |M.S.Expression|Expression
Evaluate an expression.|![IMAGE](images/MSExpression.png)| -####Trig +#### Trig |||| |--|--|--| |M.T.Cos|Cosine
Compute the cosine of a value.|![IMAGE](images/MTCos.png)| @@ -113,7 +113,7 @@ Maths |M.T.Rad|Radians
Convert an angle specified in degrees to radians.|![IMAGE](images/MTRad.png)| |M.T.Sin|Sine
Compute the sine of a value.|![IMAGE](images/MTSin.png)| -####Utilities +#### Utilities |||| |--|--|--| |M.U.Avr|Average
Solve the arithmetic average for a set of items.|![IMAGE](images/MUAvr.png)| @@ -123,7 +123,7 @@ Maths Sets -- -####List +#### List |||| |--|--|--| |S.L.Combine|Combine Data
Combine non-null items out of several inputs.|![IMAGE](images/SLCombine.png)| @@ -142,7 +142,7 @@ Sets |S.L.Sort|Sort List
Sort a list of numeric keys. In order for something to be sorted, it must first be comparable. Most types of data are not 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 a list of keys first.|![IMAGE](images/SLSort.png)| |S.L.Weave|Weave
Weave a set of input data using a custom pattern. The pattern is specified as a list of index values (integers) that define the order in which input data is collected.|![IMAGE](images/SLWeave.png)| -####Sets +#### Sets |||| |--|--|--| |S.S.Culli|Cull Index
Cull (remove) indexed elements from a list.|![IMAGE](images/SSCulli.png)| @@ -154,7 +154,7 @@ Sets |S.S.Repeat|Repeat Data
Repeat a pattern until it reaches a certain length.|![IMAGE](images/SSRepeat.png)| |S.S.Series|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.|![IMAGE](images/SSSeries.png)| -####Tree +#### Tree |||| |--|--|--| |S.T.Explode|Explode Tree
Extract all the branches from a tree.|![IMAGE](images/STExplode.png)| @@ -171,21 +171,21 @@ Sets Vector -- -####Grid +#### Grid |||| |--|--|--| |V.G.HexGrid|Hexagonal
2D grid with hexagonal cells.|![IMAGE](images/VGHexGrid.png)| |V.G.RecGrid|Rectangular
2D grid with rectangular cells.|![IMAGE](images/VGRecGrid.png)| |V.G.SqGrid|Square
2D grid with square cells|![IMAGE](images/VGSqGrid.png)| -####Point +#### Point |||| |--|--|--| |V.P.Pt|Construct Point
Construct a point from {xyz} coordinates.|![IMAGE](images/VPPt.png)| |V.P.pDecon|Deconstruct
Deconstruct a point into its component parts.|![IMAGE](images/VPpDecon.png)| |V.P.Dist|Distance
Compute Euclidean distance between two point coordinates.|![IMAGE](images/VPDist.png)| -####Vector +#### Vector |||| |--|--|--| |V.V.X|Unit X
Unit vector parallel to the world {x} axis.|![IMAGE](images/VVX.png)| @@ -195,17 +195,17 @@ Vector Curve -- -####Analysis +#### Analysis |||| |--|--|--| |C.A.CP|Control Points
Extract the nurbs control points and knots of a curve.|![IMAGE](images/CACP.png)| -####Division +#### Division |||| |--|--|--| |C.D.Divide|Divide Curve
Divide a curve into equal length segments.|![IMAGE](images/CDDivide.png)| -####Primitive +#### Primitive |||| |--|--|--| |C.P.Cir|Circle
Create a circle defined by base plane and radius.|![IMAGE](images/CPCir.png)| @@ -214,7 +214,7 @@ Curve |C.P.Line|Line SDL
Create a line segment defined by start point, tangent and length.|![IMAGE](images/CPLine.png)| |C.P.Polygon|Polygon
Create a polygon with optional round edges.|![IMAGE](images/CPPolygon.png)| -####Spline +#### Spline |||| |--|--|--| |C.S.IntCrv|Interpolate
Create an interpolated curve through a set of points.|![IMAGE](images/CSIntCrv.png)| @@ -222,7 +222,7 @@ Curve |C.S.Nurbs|Nurbs Curve
Construct a nurbs curve from control points.|![IMAGE](images/CSNurbs.png)| |C.S.PLine|PolyLine
Create a polyline connecting a number of points.|![IMAGE](images/CSPLine.png)| -####Util +#### Util |||| |--|--|--| |C.U.Explode|Explode
Explode a curve into smaller segments.|![IMAGE](images/CUExplode.png)| @@ -232,12 +232,12 @@ Curve Surface -- -####Analysis +#### Analysis |||| |--|--|--| |S.A.DeBrep|Deconstruct Brep
Deconstruct a brep into its constituent parts.|![IMAGE](images/SADeBrep.png)| -####Freeform +#### Freeform |||| |--|--|--| |S.F.Boundary|Boundary Surfaces
Create planar surfaces from a collection of boundary edge curves.|![IMAGE](images/SFBoundary.png)| @@ -247,12 +247,12 @@ Surface |S.F.RevSrf|Revolution
Create a surface of revolution.|![IMAGE](images/SFRevSrf.png)| |S.F.Swp2|Sweep2
Create a sweep surface with two rail curves.|![IMAGE](images/SFSwp2.png)| -####Primitive +#### Primitive |||| |--|--|--| |S.P.BBox|Bounding Box
Solve oriented geometry bounding boxes.|![IMAGE](images/SPBBox.png)| -####Util +#### Util |||| |--|--|--| |S.U.SDivide|Divide Surface
Generate a grid of {uv} points on a surface.|![IMAGE](images/SUSDivide.png)| @@ -261,7 +261,7 @@ Surface Mesh -- -####Triangulation +#### Triangulation |||| |--|--|--| |M.T.Voronoi|Voronoi
Planar voronoi diagram for a collection of points.|![IMAGE](images/MTVoronoi.png)| @@ -269,17 +269,17 @@ Mesh Transform -- -####Affine +#### Affine |||| |--|--|--| |T.A.RecMap|Rectangle Mapping
Transform geometry from one rectangle into another.|![IMAGE](images/TARecMap.png)| -####Array +#### Array |||| |--|--|--| |T.A.ArrLinear|Linear Array
Create a linear array of geometry.|![IMAGE](images/TAArrLinear.png)| -####Morph +#### Morph |||| |--|--|--| |T.M.Morph|Box Morph
Morph an object into a twisted box.|![IMAGE](images/TMMorph.png)| @@ -288,23 +288,23 @@ Transform Display -- -####Color +#### Color |||| |--|--|--| |D.C.HSL|Colour HSL
Create a colour from floating point {HSL} channels.|![IMAGE](images/DCHSL.png)| -####Dimensions +#### Dimensions |||| |--|--|--| |D.D.Tag|Text tags
A text tag component allows you to draw little Strings in the viewport as feedback items. Text and location are specified as input parameters. When text tags are baked they turn into Text Dots.|![IMAGE](images/DDTag.png)| |D.D.Tag3D|Text Tag 3D
Represents a list of 3D text tags in a Rhino viewport|![IMAGE](images/DDTag3D.png)| -####Preview +#### Preview |||| |--|--|--| |D.P.Preview|Custom Preview
Allows for customized geometry previews.|![IMAGE](images/DPPreview.png)| -####Vector +#### Vector |||| |--|--|--| |D.V.Points|Point List
Displays details about lists of points.|![IMAGE](images/DVPoints.png)| diff --git a/en/appendix/A-2/0_resources.md b/en/appendix/A-2/0_resources.md index b31f582..78a7d94 100644 --- a/en/appendix/A-2/0_resources.md +++ b/en/appendix/A-2/0_resources.md @@ -1,8 +1,8 @@ -##2.3. Resources +## 2.3. 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. +##### 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 +### Plug-in Communities -##About This Primer +## About This Primer -###Authors +### Authors ![IMAGE](images/akos.png) -#####Gil Akos, Mode Lab +##### Gil Akos, 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 @@ -27,7 +27,7 @@ http://modelab.is/education ![IMAGE](images/parsons.png) -#####Ronnie Parsons, Mode Lab +##### 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 @@ -39,7 +39,7 @@ http://modelab.is/education ![IMAGE](images/modelab.png) -#####Mode Lab Team: +##### Mode Lab Team: -###Contributors +### Contributors ![IMAGE](images/payne.png) -#####Andrew Payne, Principal, Lift Architects +##### 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 @@ -85,7 +85,7 @@ http://www.grasshopper3d.com/ -###LICENSING INFORMATION +### LICENSING INFORMATION The Grasshopper Primer is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license. The full text of this license is available here: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode Under this license, you are free: diff --git a/es/0-about/1-grasshopper-an-overview.md b/es/0-about/1-grasshopper-an-overview.md index 04d90de..10f57ba 100644 --- a/es/0-about/1-grasshopper-an-overview.md +++ b/es/0-about/1-grasshopper-an-overview.md @@ -1,6 +1,6 @@ ## Grasshopper - Los Orígenes -#####Grasshopper es un editor de programación visual desarrollado por David Rutten en Robert McNeel & Associates. Como un plug-in para Rhino3D, Grasshopper está embebido en el robusto y versátil entorno de modelación utilizado por profesionales de diversas y variadas industrias creativas, tales como arquitectura, ingeniería, diseño de producto y otras más. En conjunto, Grasshopper y Rhino nos ofrecen la oportunidad de definir control paramétrico preciso sobre nuestros modelos, la capacidad de explorar workflows de diseño generativo, así como una plataforma para desarrollar una lógica de programación de alto nivel - ¡Todo a través una interfaz gráfica e intuitiva! +##### Grasshopper es un editor de programación visual desarrollado por David Rutten en Robert McNeel & Associates. Como un plug-in para Rhino3D, Grasshopper está embebido en el robusto y versátil entorno de modelación utilizado por profesionales de diversas y variadas industrias creativas, tales como arquitectura, ingeniería, diseño de producto y otras más. En conjunto, Grasshopper y Rhino nos ofrecen la oportunidad de definir control paramétrico preciso sobre nuestros modelos, la capacidad de explorar workflows de diseño generativo, así como una plataforma para desarrollar una lógica de programación de alto nivel - ¡Todo a través una interfaz gráfica e intuitiva! Los orígenes de Grasshopper pueden ser atribuidos a la funcionalidad del botón "Record History" contenida en la versión 4 de Rhino3d. Esta característica @@ -42,7 +42,7 @@ Una vez que hayamos comenzado a desarrollar una definición en Grasshopper y hay ![IMAGE](images/flow.png) >Flujo del programa: de izquierda a derecha. -####PARA RECORDAR +#### PARA RECORDAR * Grasshopper es un editor gráfico de algoritmos que se integrá con las herramientas de modelado de Rhino3D. * Los algoritmos son procedimientos paso a paso diseñados con el fin de desempeñar una operación específica. * Grasshopper es utilizado para diseñar algoritmos que posteriormente automatizan tareas en Rhino3D. diff --git a/es/1-foundations/1-1/1_installing-and-launching-grasshopper.md b/es/1-foundations/1-1/1_installing-and-launching-grasshopper.md index d60ac68..60f8baa 100644 --- a/es/1-foundations/1-1/1_installing-and-launching-grasshopper.md +++ b/es/1-foundations/1-1/1_installing-and-launching-grasshopper.md @@ -1,10 +1,10 @@ ### 1.1.1. INSTALLING AND 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. +##### 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. -####1.1.1.1. DOWNLOADING +#### 1.1.1.1. 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. ![](images/1-1-1/1-1-1_001-downloading.png) @@ -12,13 +12,13 @@ To download the Grasshopper plug-in, visit the Grasshopper web site. Click on th >Download Grasshopper from the [grasshopper3d.com](http://grasshopper3d.com) website. -####1.1.1.2. INSTALLING +#### 1.1.1.2. INSTALLING Select Run from the download dialog box follow the installer instructions. (note: you must have Rhino 5 already installed on your computer for the plug-in to install properly). ![IMAGE](images/1-1-1/1-1-1_002-installing.png) >Follow the steps in the Installation wizard. -####1.1.1.3. LAUNCHING +#### 1.1.1.3. 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. ![IMAGE](images/1-1-1/1-1-1_003-launching-a.png) diff --git a/es/1-foundations/1-1/2_the-grasshopper-ui.md b/es/1-foundations/1-1/2_the-grasshopper-ui.md index 0ee10a7..42ce3fa 100644 --- a/es/1-foundations/1-1/2_the-grasshopper-ui.md +++ b/es/1-foundations/1-1/2_the-grasshopper-ui.md @@ -1,6 +1,6 @@ ### 1.1.2. 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. +##### 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 UI. Grasshopper is a visual programming application where you are able to create programs, called @@ -25,7 +25,7 @@ will be very familiar to Rhino users. Let’s look at a few features of the inte 8. The status bar tells you what version of Grasshopper is currently installed on your machine. If a newer version is available, a pop-up menu will appear in your tray providing instructions on how to download the latest version. -####1.1.2.1. THE WINDOWS TITLE BAR +#### 1.1.2.1. 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 @@ -39,7 +39,7 @@ This is because once it is launched from the command prompt, your session of Grasshopper stays active until that instance of Rhino is closed. -####1.1.2.2. MAIN MENU BAR +#### 1.1.2.2. MAIN MENU BAR 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 @@ -62,7 +62,7 @@ and third-party plugins which can extend functionality. ![IMAGE](images/1-1-2/1-1-2_002-settings.png) >The Preferences dialog allows you to set many of Grasshopper’s application settings. -####1.1.2.3. FILE BROWSER CONTROL +#### 1.1.2.3. 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 @@ -109,7 +109,7 @@ any Grasshopper files that were open when Rhino was shut down. ![IMAGE](images/1-1-2/1-1-2_003-autosave.png) >Drag and Drop Files onto the Canvas. -####1.1.2.4. COMPONENT PALETTES +#### 1.1.2.4. 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 to a certain category. These categories have been labeled @@ -138,12 +138,12 @@ provides access to all components in that sub-category. 4. Drop-down menu. -####1.1.2.5. THE CANVAS +#### 1.1.2.5. THE CANVAS The canvas is the primary workspace for creating Grasshopper definitions. It is here where you interact with the elements of your visual program. You can start working in the canvas by placing components and connecting wires. -####1.1.2.6. GROUPING +#### 1.1.2.6. 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 @@ -163,7 +163,7 @@ outline type can be defined by right-clicking on any group object. ![IMAGE](images/1-1-2/1-1-2_008-grouping3.png) >Two groups are nested inside one another. The color (light blue) has been changed on the outer group to help visually identify one group from the other. Groups are drawn “behind” the components within them and, in cases such as this, there is a depth order to the two groups. To change this, go to Edit > Arrange in the main menu bar. -####1.1.1.7. WIDGETS +#### 1.1.1.7. 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 @@ -208,7 +208,7 @@ other corners of the canvas or to hide it completely. -####1.1.2.8. USING THE SEARCH FEATURE +#### 1.1.2.8. USING THE SEARCH FEATURE Although a lot of thought has gone into the placement of each component on the component panel to make it intuitive for new users, people sometimes find it difficult to locate a specific component that might be buried deep inside one @@ -227,7 +227,7 @@ you will see a list of parameters or components that match your request. 3. Divide Domain2 component. -####1.1.2.9. THE FIND FEATURE +#### 1.1.2.9. 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 @@ -266,7 +266,7 @@ canvas) next to the Find dialog box. -####1.1.2.10. USING THE RADIAL MENU +#### 1.1.2.10. USING THE RADIAL MENU 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 @@ -282,7 +282,7 @@ dramatically increase the speed at which you create Grasshopper documents. ![IMAGE](images/1-1-2/1-1-2_016-radial-menu.png) >The Radial UI menu allows you to quickly access frequently used menu items. -####1.1.2.11. THE CANVAS TOOLBAR +#### 1.1.2.11. 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 diff --git a/es/1-foundations/1-1/3_talking-to-rhino.md b/es/1-foundations/1-1/3_talking-to-rhino.md index 145e330..4f6bde8 100644 --- a/es/1-foundations/1-1/3_talking-to-rhino.md +++ b/es/1-foundations/1-1/3_talking-to-rhino.md @@ -1,6 +1,6 @@ -###1.1.3. TALKING TO RHINO +### 1.1.3. TALKING TO RHINO -#####Unlike a Rhino document, a Grasshopper definition does not contain any actual objectsor geometry. Instead, a Grasshopper definition represents a set of rules & instructions for how Rhino can automate tasks. +##### Unlike a Rhino document, a Grasshopper definition does not contain any actual objectsor geometry. Instead, a Grasshopper definition represents a set of rules & instructions for how Rhino can automate tasks. ![IMAGE](images/1-1-3/1-1-3_001-talking-to-rhino.png) >1. Grasshopper preview geometry. @@ -10,7 +10,7 @@ -####1.1.3.1. VIEWPORT FEEDBACK +#### 1.1.3.1. 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 @@ -27,13 +27,13 @@ provide visual feedback. The image below outlines the default color scheme. 3. Point geometry is drawn as a cross rather than a rectangle to distinguish it from other Rhino point objects. 4. Blue feedback means you are currently making a selection in the Rhino Viewport. -####1.1.3.2. LIVE WIRES +#### 1.1.3.2. LIVE WIRES Grasshopper is a dynamic environment. Changes that are made are live and their preview display is updated in the Rhino viewport. ![IMAGE](images/1-1-3/1-1-3_003-live-wires.png) -####1.1.3.3. GUMBALL WIDGET +#### 1.1.3.3. 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, geometry @@ -43,7 +43,7 @@ to during). ![IMAGE](images/1-1-3/1-1-3_004-gumball.png) -####1.1.3.4. BAKING GEOMETRY +#### 1.1.3.4. 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 @@ -56,7 +56,7 @@ bake. 3. Grouping your baked geometry is a convenient way to manage the instantiated Rhino geometry, particularly if you are creating many objects with Grasshopper. -####1.1.3.5. UNITS & TOLERANCES +#### 1.1.3.5. UNITS & TOLERANCES Grasshopper inherits units and tolerances from Rhino. To change the units, type Document Properties in the Rhino command line to access the Document Properties menu. Select Units to change the units and tolerances. @@ -64,7 +64,7 @@ Properties menu. Select Units to change the units and tolerances. ![IMAGE](images/1-1-3/1-1-3_006-units.png) >Change the units and tolerances in the Rhino Document Properties menu. -####1.1.3.6. REMOTE CONTROL PANEL +#### 1.1.3.6. 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 a single screen then you may have already @@ -110,7 +110,7 @@ to switch back to the standard Working Mode. -####1.1.3.7. FILE MANAGEMENT +#### 1.1.3.7. FILE MANAGEMENT If 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. @@ -120,7 +120,7 @@ Grasshopper and Rhino files in the same folder, and giving them related names. 2. Rhino file. 3. Grasshopper file. -####1.1.3.8. TEMPLATES +#### 1.1.3.8. TEMPLATES Creating and specifiying a template file in your Grasshopper preferences is convenient way to set up every new Grasshopper definition you create. The template can include Grasshopper components as well as panels and sketch diff --git a/es/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md b/es/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md index fae6e2a..0b8c99b 100644 --- a/es/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md +++ b/es/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md @@ -1,6 +1,6 @@ ## 1.2. ANATOMY OF A GRASSHOPPER DEFINTION -####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 and how to interact with them to start building definitions. +#### 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 and how to interact with them to start building definitions. ![IMAGE](images/1-2/1-2_001-anatomy-of-definition.png) diff --git a/es/1-foundations/1-2/1_grasshopper-object-types.md b/es/1-foundations/1-2/1_grasshopper-object-types.md index 53eb05f..2b3e09d 100644 --- a/es/1-foundations/1-2/1_grasshopper-object-types.md +++ b/es/1-foundations/1-2/1_grasshopper-object-types.md @@ -1,8 +1,8 @@ ### 1.2.1. GRASSHOPPER OBJECT TYPES -#####Grasshopper consists of two primary types of user objects: parameters andcomponents. Parameters store data, whereas components perform actions that resultin data. The most basic way to understand Grasshopper is to remember that we willuse data to define the inputs of actions (which will result in new data that we cancontinue to use). +##### Grasshopper consists of two primary types of user objects: parameters andcomponents. Parameters store data, whereas components perform actions that resultin data. The most basic way to understand Grasshopper is to remember that we willuse data to define the inputs of actions (which will result in new data that we cancontinue to use). -####1.2.1.1. PARAMETERS +#### 1.2.1.1. 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 with a 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 from other components. The point and curve objects are both geometry parameters. @@ -13,7 +13,7 @@ Input parameters are dynamic interface objects that allow you to interact with y ![IMAGE](images/1-2-1/1-2-1_002-input-parameters.png) -####1.2.1.2. COMPONENTS +#### 1.2.1.2. COMPONENTS Components perform actions based on the inputs they receive. There are manytypes of components for different tasks. ![IMAGE](images/1-2-1/1-2-1_003-components.png) @@ -24,7 +24,7 @@ segments. 3. The Circle CNR component constructs a circle geometry from input data; a center point, normal vector, and radius. 4. The Loft component constructs a surface by lofting curves. -####1.2.1.3. OBJECT COLORS +#### 1.2.1.3. 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. A parameter which contains neither warnings nor errors is shown in light diff --git a/es/1-foundations/1-2/2_grasshopper-component-parts.md b/es/1-foundations/1-2/2_grasshopper-component-parts.md index f779b34..34998ae 100644 --- a/es/1-foundations/1-2/2_grasshopper-component-parts.md +++ b/es/1-foundations/1-2/2_grasshopper-component-parts.md @@ -1,6 +1,6 @@ ### 1.2.2. GRASSHOPPER COMPONENT PARTS -#####Components are the objects you place on the canvas and connect together with Wiresto form a visual program. Components can represent Rhino Geometry or operationslike Math Functions. Components have inputs and outputs. +##### Components are the objects you place on the canvas and connect together with Wiresto form a visual program. Components can represent Rhino Geometry or operationslike Math Functions. Components have inputs and outputs. ![IMAGE](images/1-2-2/1-2-2_001-component-parts.png) >1. The three input parameters of the Circle CNR component. @@ -13,7 +13,7 @@ There are a few Grasshopper components that have inputs but no outputs, or vice ![IMAGE](images/1-2-2/1-2-2_002-components-without-outputs.png) -####1.2.2.1. LABEL VS ICON DISPLAY +#### 1.2.2.1. LABEL VS ICON DISPLAY Every Grasshopper object has a unique icon. These icons are displayed in the center area of the object and correspond to 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. @@ -37,14 +37,14 @@ components in the palettes is holding down Ctrl + Alt and clicking on an existin ![IMAGE](images/1-2-2/1-2-2_006-reveal-location.png) -####1.2.2.2. COMPONENT HELP +#### 1.2.2.2. COMPONENT HELP Right clicking an object and selecting “Help” from the drop-down menu will open a Grasshopper help window. The help window contains a more detailled description of the object, a list of inputs and outputs, as well as remarks. ![IMAGE](images/1-2-2/1-2-2_007-component-help.png) >1. Grasshopper help window for the Point parameter 2. The remarks in the help window give additional insight about the point parameter. -####1.2.2.3. TOOL TIPS +#### 1.2.2.3. TOOL TIPS Component inputs are expecting to receive certain types of data, for example a 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. ![IMAGE](images/1-2-2/1-2-2_008-tool-tips.png) @@ -54,7 +54,7 @@ Component inputs are expecting to receive certain types of data, for example a C 4. The header of the output tooltip provides the same detail os for inputs, but for the corresponding output. 5. The result of the component's action. -####1.2.2.4. CONTEXT POPUP MENUS +#### 1.2.2.4. CONTEXT POPUP MENUS All objects 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. @@ -71,7 +71,7 @@ settings and details. You can access this context menu by right-clicking on the 4. Add item to collection. 5. Delete selection. -####1.2.2.5. ZOOMABLE USER INTERFACE +#### 1.2.2.5. 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. ![IMAGE](images/1-2-2/1-2-2_011-zoomable-ui.png) diff --git a/es/1-foundations/1-2/3_data-types.md b/es/1-foundations/1-2/3_data-types.md index d3ba36c..6cdfae8 100644 --- a/es/1-foundations/1-2/3_data-types.md +++ b/es/1-foundations/1-2/3_data-types.md @@ -1,8 +1,8 @@ ### 1.2.3. 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. +##### 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. -####1.2.3.1. PERSISTENT DATA +#### 1.2.3.1. PERSISTENT DATA Persistent data is accessed through the menu, and depending on the kind of parameter has a different manager. A Point parameter for example allows you to set one or more points through its menu. But, let’s back up a few steps and see how a Point Parameter behaves. 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 outcome 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. @@ -16,7 +16,7 @@ Once you have defined all the points you can press Enter and they will become pa 2. Once the parameter contains some persistent data, the component will turn from orange to grey. 3. The tooltip for the point parameter shows the persistent data (a collection of referenced points) that is stored. -####1.2.3.2. VOLATILE DATA +#### 1.2.3.2. 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 it is a decimal number) into an integer source and it will take care of the conversion. @@ -29,7 +29,7 @@ If you want the data to become volatile again, simply reconnect the wires to the ![IMAGE](images/1-2-3/1-2-3_003-right-click.png) -####1.2.3.3. INPUT PARAMETERS +#### 1.2.3.3. 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** diff --git a/es/1-foundations/1-2/4_wiring-components.md b/es/1-foundations/1-2/4_wiring-components.md index e924805..a720805 100644 --- a/es/1-foundations/1-2/4_wiring-components.md +++ b/es/1-foundations/1-2/4_wiring-components.md @@ -1,8 +1,8 @@ ### 1.2.4. 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. +##### 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. -####1.2.4.1. CONNECTION MANAGEMENT +#### 1.2.4.1. 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 a permanent 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. ![IMAGE](images/1-2-4/1-2-4_001a.png) @@ -21,7 +21,7 @@ To connect components, click and drag near the circle on the output side of an o 7. If there are multiple connections, select the one you want to disconnect from the list. 8. When you hover over an item, the wire will be highlighted in red. -####1.2.4.2. FANCY WIRES +#### 1.2.4.2. 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, simply click on the Display 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. ![IMAGE](images/1-2-4/1-2-4_002-fancy-wires.png) @@ -31,7 +31,7 @@ Wires represent the connections as well as the flow of data within the graph in 4. Single Item – The data flowing out of any parameter that contains a single item will be shown with a solid grey line. 5. Tree – Information transferred between components which contain a data structure will be shown in a grey double-line-dash wire type. -####1.2.4.3. WIRE DISPLAY +#### 1.2.4.3. WIRE DISPLAY If you have spent any great deal of time working on a single Grasshopper definition, you may have realized that the canvas can get cluttered with a nest of wires quite quickly. Fortunately, we have the ability to manage the wire displays for each input of a component. 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. diff --git a/es/1-foundations/1-2/5_the-grasshopper-definition.md b/es/1-foundations/1-2/5_the-grasshopper-definition.md index 7f4a9ad..7a53cd6 100644 --- a/es/1-foundations/1-2/5_the-grasshopper-definition.md +++ b/es/1-foundations/1-2/5_the-grasshopper-definition.md @@ -5,15 +5,15 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.2.5_the grasshopper definition.gh) {% endif %} -#####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. +##### 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. -####1.2.5.1. PROGRAM FLOW +#### 1.2.5.1. 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. ![IMAGE](images/1-2-5/1-2-5_001-program-flow.png) >Directionality of data is left to right. -####1.2.5.2. THE LOGICAL PATH +#### 1.2.5.2. THE LOGICAL PATH All of 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. ![IMAGE](images/1-2-5/1-2-5_002-logical-graph.png) diff --git a/es/1-foundations/1-3/0_building-blocks-of-algorithms.md b/es/1-foundations/1-3/0_building-blocks-of-algorithms.md index bfedfb0..0dc3ff8 100644 --- a/es/1-foundations/1-3/0_building-blocks-of-algorithms.md +++ b/es/1-foundations/1-3/0_building-blocks-of-algorithms.md @@ -1,5 +1,5 @@ ## 1.3. Building Blocks of Algorithms -####This chapter will introduce you to basic geometric and mathematical concepts and how they are implemented and manipulated in Grasshopper. +#### This chapter will introduce you to basic geometric and mathematical concepts and how they are implemented and manipulated in Grasshopper. ![Building Blocks of Algorithms](images/1-3/1-3_001.png) diff --git a/es/1-foundations/1-3/1_points-planes-vectors.md b/es/1-foundations/1-3/1_points-planes-vectors.md index 257be50..362d874 100644 --- a/es/1-foundations/1-3/1_points-planes-vectors.md +++ b/es/1-foundations/1-3/1_points-planes-vectors.md @@ -1,10 +1,10 @@ -###1.3.1. Points, Planes & Vectors +### 1.3.1. 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. +##### 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. ![Points, Vectors, and Planes](images/1-3-1/1-3-1_001-intro.png) -####1.3.1.1 POINTS +#### 1.3.1.1 POINTS Points in 3D space have three coordinates, usually referred to as [x,y,z]. Points in 2D space have only two coordinates which are either called [x,y] or [u,v] depending on what kind of two dimensional space we’re talking about. 2D parameter space is bound to a finite surface. It is still continuous, I.e. 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. @@ -14,7 +14,7 @@ Since the surface which defines this particular parameter space resides in regul If this is a hard concept to grasp, it might help to think of yourself and your position in space. We tend to use local coordinate systems to describe our whereabouts; “I’m sitting in the third seat on the seventh row in the movie theatre”, “I’m in the back seat”. If the car you’re in is on the road, your position in global coordinates is changing all the time, even though you remain in the same back seat ‘coordinate’. -####1.3.1.2. VECTORS +#### 1.3.1.2. VECTORS A vector is a geometric quantity describing Direction and Magnitude. Vectors are abstract; ie. they represent a quantity, not a geometrical element. @@ -22,7 +22,7 @@ Vectors are indistinguishable from points. That is, they are both lists of three ![Vectors](images/1-3-1/1-3-1_003-vectors.png) -####1.3.1.3. PLANES +#### 1.3.1.3. 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. ![Planes](images/1-3-1/1-3-1_004-planes.png) diff --git a/es/1-foundations/1-3/2_working-with-attractors.md b/es/1-foundations/1-3/2_working-with-attractors.md index 035719b..893e222 100644 --- a/es/1-foundations/1-3/2_working-with-attractors.md +++ b/es/1-foundations/1-3/2_working-with-attractors.md @@ -6,7 +6,7 @@ thead {display: none} ### 1.3.2. 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 withinGrasshopper 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. +##### Attractors are points that act like virtual magnets - either attracting or repelling other objects. In Grasshopper, any geometry referenced from Rhino or created withinGrasshopper 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. ![Overview](images/1-3-2/1-3-2_001-attractor-overview.png) >1. Attractor point @@ -22,7 +22,7 @@ the length of each vector to scale the radius of each circle. ![Examples](images/1-3-2/1-3-2_002-attractor-examples.png) -####1.3.2.1. ATTRACTOR DEFINITION +#### 1.3.2.1. ATTRACTOR DEFINITION {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/es/1-foundations/1-3/3_mathematics-expressions-conditionals.md b/es/1-foundations/1-3/3_mathematics-expressions-conditionals.md index 52ddf3d..e516161 100644 --- a/es/1-foundations/1-3/3_mathematics-expressions-conditionals.md +++ b/es/1-foundations/1-3/3_mathematics-expressions-conditionals.md @@ -7,7 +7,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.3_operators and conditionals.gh) {% endif %} -#####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. +##### 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: @@ -20,7 +20,7 @@ distinction between Integral types (integers) and Floating types (real numbers) this chapter, we’re going to explore different methods for working with and evaluating various sets of numbers. -####1.3.3.1. THE MATH TAB +#### 1.3.3.1. THE 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: ![](images/1-3-3/1-3-3_01-the-math-tab.png) @@ -34,7 +34,7 @@ Most of the components that deal with mathematical operations and functions can 7. The time subcategory has a number of components which allow you to construct instances of dates and times. 8. The utility subcategory is a ‘grab bag’ of useful components that canbe used in various mathematical equations. Check here if you’re trying find the maximum or minimum values between two lists of numbers; or average a group of numbers. -####1.3.3.2. OPERATORS +#### 1.3.3.2. 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. @@ -45,7 +45,7 @@ various data types, including points and vectors. ![](images/1-3-3/1-3-3_02-operators.png) -####1.3.3.3. CONDITIONAL OPERATORS +#### 1.3.3.3. 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 @@ -99,7 +99,7 @@ equal to (<=) condition. ![](images/1-3-3/1-3-3_06-smaller-than.png) -####1.3.3.4. TRIGONOMETRY COMPONENTS +#### 1.3.3.4. TRIGONOMETRY COMPONENTS {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} @@ -195,7 +195,7 @@ thead {display: none} ![](images/1-3-3/1-3-3_21-spiral.png) -####1.3.3.5. EXPRESSIONS +#### 1.3.3.5. EXPRESSIONS {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/es/1-foundations/1-3/4_domains-color.md b/es/1-foundations/1-3/4_domains-color.md index 9925235..ff0536a 100644 --- a/es/1-foundations/1-3/4_domains-color.md +++ b/es/1-foundations/1-3/4_domains-color.md @@ -4,7 +4,7 @@ td:nth-child(3) {font-size: 70%;width: 15%;} td {background-color: #F9F9F9;} thead {display: none} -###1.3.4. Domains & Color +### 1.3.4. Domains & Color {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -12,7 +12,7 @@ thead {display: none} >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.4_domains and color.gh) {% endif %} -#####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). +##### 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). ![](images/1-3-4/1-3-4_01-color-wheel.png) >In the color wheel, hue corresponds to the angle. Grasshopper has taken this 0-360 domainand remapped it between zero and one. diff --git a/es/1-foundations/1-3/5_booleans-logical-operators.md b/es/1-foundations/1-3/5_booleans-logical-operators.md index 460a756..ee28c64 100644 --- a/es/1-foundations/1-3/5_booleans-logical-operators.md +++ b/es/1-foundations/1-3/5_booleans-logical-operators.md @@ -1,11 +1,11 @@ -###1.3.5. Booleans & Logical Operators +### 1.3.5. Booleans & Logical Operators {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.5_booleans and logical operators.gh) {% endif %} -####1.3.5.1. BOOLEANS +#### 1.3.5.1. BOOLEANS Numeric variables can store a whole range of different numbers. Boolean variables can only store two values referred to as Yes or No, True or False, 1 or 0. Obviously we never use booleans to perform calculations because of their limited range. We use booleans to evaluate conditions. @@ -22,7 +22,7 @@ Grasshopper also has objects that test conditions and output boolean values. For ![](images/1-3-5/1-3-5_003-includes.png) >The Includes component is testing whether the number 6.8 is included in the domain from 0 to 10. It returns a boolean value of True. -####1.3.5.2. LOGICAL OPERATORS +#### 1.3.5.2. LOGICAL OPERATORS Logical operators 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: diff --git a/es/1-foundations/1-4/0_designing-with-lists.md b/es/1-foundations/1-4/0_designing-with-lists.md index d2b563a..da03293 100644 --- a/es/1-foundations/1-4/0_designing-with-lists.md +++ b/es/1-foundations/1-4/0_designing-with-lists.md @@ -1,5 +1,5 @@ ## 1.4. 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. +#### 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. ![IMAGE](images/1-4/1-4_001-designing-with-lists.png) diff --git a/es/1-foundations/1-4/1_curve-geometry.md b/es/1-foundations/1-4/1_curve-geometry.md index b51c8b7..a959ffe 100644 --- a/es/1-foundations/1-4/1_curve-geometry.md +++ b/es/1-foundations/1-4/1_curve-geometry.md @@ -1,6 +1,6 @@ ### 1.4.1. 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. +##### 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 has a 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 control-points, if all 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’s Primitive Curve Components such as: lines, circles, ellipses, and arcs. @@ -19,7 +19,7 @@ example, planarity is a global property while tangent vectors are a local proper 2. Edit Point 3. Control Point -####1.4.1.1. NURBS CURVES +#### 1.4.1.1. NURBS CURVES **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 a list of at least degree+1 points. One of the easiest ways to change the shape of a NURBS curve is to move its control points. @@ -41,7 +41,7 @@ NURBS curve knots as a result of varying degree: ![IMAGE](images/1-4-1/1-4-1_005-degree-three.png) >D3 is the most common type of NURBS curve and is the default in Rhino. You are probably very familiar with the visual progression of the spline, even though the knots appear to be in odd locations. -####1.4.1.2. GRASSHOPPER SPLINE COMPONENTS +#### 1.4.1.2. GRASSHOPPER SPLINE COMPONENTS {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/es/1-foundations/1-4/2_what-is-a-list.md b/es/1-foundations/1-4/2_what-is-a-list.md index e0867ec..a8801a3 100644 --- a/es/1-foundations/1-4/2_what-is-a-list.md +++ b/es/1-foundations/1-4/2_what-is-a-list.md @@ -1,6 +1,6 @@ ### 1.4.2. 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, it is 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. +##### 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, it is 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. diff --git a/es/1-foundations/1-4/3_data-stream-matching.md b/es/1-foundations/1-4/3_data-stream-matching.md index 2c24aa0..0c8410a 100644 --- a/es/1-foundations/1-4/3_data-stream-matching.md +++ b/es/1-foundations/1-4/3_data-stream-matching.md @@ -5,7 +5,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.3_data matching.gh) {% endif %} -#####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. +##### 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): diff --git a/es/1-foundations/1-4/4_creating-lists.md b/es/1-foundations/1-4/4_creating-lists.md index 843772e..91c04c0 100644 --- a/es/1-foundations/1-4/4_creating-lists.md +++ b/es/1-foundations/1-4/4_creating-lists.md @@ -5,9 +5,9 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.4_list creation.gh) {% endif %} -#####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. +##### 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. -####1.4.4.1. MANUAL LIST CREATION +#### 1.4.4.1. MANUAL LIST CREATION Perhaps the easiest way to create a list (and one of the most over-looked methods) is to manually type in a list 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 difficult if the list has many entries. There are several ways to manually create a list. One way is to use a Number paramter. Right click the Number parameter and select “Manage Number Collection.” @@ -20,7 +20,7 @@ Another method is to manually enter the list items into a panel. Make sure that ![IMAGE](images/1-4-4/1-4-4_002-panel.png) -####1.4.4.2. RANGE +#### 1.4.4.2. RANGE The Range component, found under Sets/Sequence/Range, creates a list 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. @@ -43,13 +43,13 @@ You may have noticed something a little quirky about the setup we just made. We ![IMAGE](images/1-4-4/1-4-4_005-construct-domain.png) >To create a Range from a domain that does not start at zero, use the Construct Domain component. -####1.4.4.3. SERIES +#### 1.4.4.3. 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. ![IMAGE](images/1-4-4/1-4-4_006-series.png) >The Series component creates a list based on a start value, step value, and the number of values in the list. -###1.4.4.4. RANDOM +### 1.4.4.4. 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. ![IMAGE](images/1-4-4/1-4-4_007-random.png) diff --git a/es/1-foundations/1-4/5_list-visualization.md b/es/1-foundations/1-4/5_list-visualization.md index 1917ebb..d3647d4 100644 --- a/es/1-foundations/1-4/5_list-visualization.md +++ b/es/1-foundations/1-4/5_list-visualization.md @@ -5,7 +5,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.5_list visualization.gh) {% endif %} -#####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. +##### 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 to create 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. @@ -13,13 +13,13 @@ There are many different ways to visualize a list of data. The most common way i Lets look at some components that can help us understand the data. -####1.4.5.1. THE POINT LIST COMPONENT +#### 1.4.5.1. 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. ![IMAGE](images/1-4-5/1-4-5_002-point-list.png) >You can visualize the order of a set of points using the Point List component. -####1.4.5.2. TEXT TAGS +#### 1.4.5.2. TEXT TAGS The text tag component allows you to draw little strings (a string 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. ![IMAGE](images/1-4-5/1-4-5_003-text-tags.png) @@ -31,7 +31,7 @@ They differ, in that, when Text Tag 3d objects are baked into the scene, they be ![IMAGE](images/1-4-5/1-4-5_004-text-tag-3d.png) >You can use a Text Tag 3d component to visualize information like a Text object in Rhino. -####1.4.5.3. COLOR +#### 1.4.5.3. COLOR One of the other things we can do to visualize the list data is to assign color to the geometry. Grasshopper has limited ‘rendering’ capabilities, but we can control simple Open GL settings like color, specular color, transparency, etc. The L0 value represents the low end (left side) of the gradient, whereas the L1 value represents the upper end (right side). These values correspond to the start and end of our domain. The t-values are the elements in the list that will get mapped somewhere within the L0 and L1 range. The output of the gradient is a list of RGB color values which correspond to each point in our list. Right-click on the Gradient to set one of the gradient presets, or define your own using the color node points. ![IMAGE](images/1-4-5/1-4-5_005-custom-preview.png) diff --git a/es/1-foundations/1-4/6_list-management.md b/es/1-foundations/1-4/6_list-management.md index d258090..627d851 100644 --- a/es/1-foundations/1-4/6_list-management.md +++ b/es/1-foundations/1-4/6_list-management.md @@ -5,41 +5,41 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.6_list management.gh) {% endif %} -#####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 a list (numbers, points, vectors, curves, surfaces, breps, etc.) and there are a number of useful tools found under the Sets/List subcategory. +##### 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 a list (numbers, points, vectors, curves, surfaces, breps, etc.) and there are a number of useful tools found under the Sets/List subcategory. -####1.4.6.1. LIST LENGTH +#### 1.4.6.1. LIST LENGTH 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. ![IMAGE](images/1-4-6/1-4-6_001-list-length.png) -####1.4.6.2. LIST ITEM +#### 1.4.6.2. LIST ITEM Our List is 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 in a list, we have to specify the i-input; which corresponds to the index number we would like to retrieve. We can feed a single integer or a list of integers into the i-input depending on how many items we would like to retrieve.The L-input defines the base list which we will be analyzing. In this example, we have set the i-input to 2 so the List Item component returns the data item associated with the 3rd entry number in our list. ![IMAGE](images/1-4-6/1-4-6_002-list-item.png) -####1.4.6.3. REVERSE LIST +#### 1.4.6.3. REVERSE LIST We can invert the order of our list by using a Reverse List component (Sets/List/Reverse). If we input an ascending list of numbers from 0.0 to 50.0 into the Reverse List component; the output returns a descending list from 50.0 to 0.0. ![IMAGE](images/1-4-6/1-4-6_003-reverse-list.png) -####1.4.6.4. SHIFT LIST +#### 1.4.6.4. SHIFT LIST The Shift List component (Sets/Sequence/Shift List) will either move the list up or 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 +1, all values of the list will move up by one entry number. If 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 a shift offset value set to +1, 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 ![IMAGE](images/1-4-6/1-4-6_004-shift-list.png) -####1.4.6.5. INSERT ITEMS +#### 1.4.6.5. INSERT ITEMS The Insert Items component (Sets/Lists/Insert Items) enables you to insert a collection of items into a list. 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. ![IMAGE](images/1-4-6/1-4-6_005-insert-item.png) -####1.4.6.6. WEAVE +#### 1.4.6.6. 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. ![IMAGE](images/1-4-6/1-4-6_006-weave.png) -####1.4.6.7. CULL PATTERN +#### 1.4.6.7. 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. ![IMAGE](images/1-4-6/1-4-6_007-cull-pattern.png) diff --git a/es/1-foundations/1-5/0_designing-with-data-trees.md b/es/1-foundations/1-5/0_designing-with-data-trees.md index fc7111a..f90681b 100644 --- a/es/1-foundations/1-5/0_designing-with-data-trees.md +++ b/es/1-foundations/1-5/0_designing-with-data-trees.md @@ -1,5 +1,5 @@ -##1.5. DESIGNING WITH DATA TREES +## 1.5. 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. +#### 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. ![IMAGE](images/1-5/1-5_001-designing-with-data-trees.png) diff --git a/es/1-foundations/1-5/1_surface-geometry.md b/es/1-foundations/1-5/1_surface-geometry.md index bafb7bf..1d487fe 100644 --- a/es/1-foundations/1-5/1_surface-geometry.md +++ b/es/1-foundations/1-5/1_surface-geometry.md @@ -1,6 +1,6 @@ -###1.5.1. Surface Geometry +### 1.5.1. 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. +##### 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. It is also by far the most useful surface definition and the one we will be focusing on. @@ -10,7 +10,7 @@ Apart from a few primitive surface types such as spheres, cones, planes and cyli 3. Plane Primitive [plane, width, height] 4. Cone Primitive [plane, radius, height] -####1.5.1.1. NURBS SURFACES +#### 1.5.1.1. 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. @@ -50,7 +50,7 @@ some of the mesh settings are slightly lower in order to keep the speed of the G 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. -####1.5.1.2. PROJECTING SURFACES +#### 1.5.1.2. PROJECTING SURFACES 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 onto a surface, where vectors are drawn from the 2d geometry in a specified direction until they intersect with the surface. ![IMAGE](images/1-5-1/1-5-1_005-surface-mapping.png) @@ -71,7 +71,7 @@ normal vectors at the corners of each patch to the desired height and creating a box defined by the end points of those vectors and the corner points of the patch. -####1.5.1.3. MORPHING DEFINITION +#### 1.5.1.3. MORPHING DEFINITION {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/es/1-foundations/1-5/2_what-is-a-data-tree.md b/es/1-foundations/1-5/2_what-is-a-data-tree.md index e1978be..a3602d2 100644 --- a/es/1-foundations/1-5/2_what-is-a-data-tree.md +++ b/es/1-foundations/1-5/2_what-is-a-data-tree.md @@ -1,6 +1,6 @@ ### 1.5.2. 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. +##### 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 a list of lists, or sometimes a list of lists of lists (and so on). @@ -13,7 +13,7 @@ The image below illustrates the difference between a list and a data tree. On th ![IMAGE](images/1-5-2/1-5-2_002-list-data-tree.png) -####1.5.2.1. DATA TREE VISUALIZATION +#### 1.5.2.1. DATA TREE VISUALIZATION {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/es/1-foundations/1-5/3_creating-data-trees.md b/es/1-foundations/1-5/3_creating-data-trees.md index d572d2a..64e3101 100644 --- a/es/1-foundations/1-5/3_creating-data-trees.md +++ b/es/1-foundations/1-5/3_creating-data-trees.md @@ -6,29 +6,29 @@ {% endif %} -#####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. +##### 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 manipulations and visualize how they affect the tree. -####1.5.3.1. FLATTEN +#### 1.5.3.1. FLATTEN 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. ![IMAGE](images/1-5-3/1-5-3_001-flatten.png) >In the Param Viewer, we can see that we now only have 1 branch containing a list of 48 points. -####1.5.3.2. GRAFT TREE +#### 1.5.3.2. GRAFT TREE Grafting 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 on the same curve. ![IMAGE](images/1-5-3/1-5-3_002-graft.png) >In the Param Viewer, we can see that what was data with 8 branches of 6 items each, we now have 8 branches with 6 sub-branches containing 1 item each. -####1.5.3.3. SIMPLIFY TREE +#### 1.5.3.3. SIMPLIFY TREE Simplify removes overlapping Branches in a Data Tree. If we run the data through the Simplify Tree component (Sets/Tree/Simplify Tree), the first branch, containing no data, has been removed. ![IMAGE](images/1-5-3/1-5-3_003-simplify.png) >In the Param Viewer, we still have 8 branches of 6 items each, but the first branch has been removed. -####1.5.3.4. FLIP MATRIX +#### 1.5.3.4. FLIP MATRIX The Flip Matrix component (Sets/Tree/Flip Matrix) Swaps the “Rows” and “Columns” of a Data Tree with two Path Indices. ![IMAGE](images/1-5-3/1-5-3_004-flip-matrix.png) @@ -42,7 +42,7 @@ operation is performed. If you flatten a component output, the data will be flat 2. Grafted output P 3. Simplified output P -####1.5.3.5. THE PATH MAPPER +#### 1.5.3.5. 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. ![IMAGE](images/1-5-3/1-5-3_006-path-mapper-a.png) @@ -52,7 +52,7 @@ The Path Mapper component (Sets/Tree/Path Mapper) allows you to perform lexical 3. The Mapping Editor 4. You can modify a data tree by re-mapping the path index and the desired branch -####1.5.3.6. WEAVING DEFINITION +#### 1.5.3.6. WEAVING DEFINITION {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/es/1-foundations/1-6/0_Getting Started with Meshes.md b/es/1-foundations/1-6/0_Getting Started with Meshes.md index 1e4801f..0d22de7 100644 --- a/es/1-foundations/1-6/0_Getting Started with Meshes.md +++ b/es/1-foundations/1-6/0_Getting Started with Meshes.md @@ -1,5 +1,5 @@ ## 1.6. Getting Started with Meshes -####In the field of computational modeling, meshes are one of the most pervasive forms of representing 3D geometry. Mesh geometry can be a light-weight and flexible alternative to working with NURBS, and are used in everything from rendering and visualizations to digital fabrication and 3D printing. This chapter will provide an introduction to how mesh geometry is handled in Grasshopper. +#### In the field of computational modeling, meshes are one of the most pervasive forms of representing 3D geometry. Mesh geometry can be a light-weight and flexible alternative to working with NURBS, and are used in everything from rendering and visualizations to digital fabrication and 3D printing. This chapter will provide an introduction to how mesh geometry is handled in Grasshopper. ![IMAGE](images/cover.png) diff --git a/es/1-foundations/1-6/1_What is a Mesh.md b/es/1-foundations/1-6/1_What is a Mesh.md index a0908e1..55cd689 100644 --- a/es/1-foundations/1-6/1_What is a Mesh.md +++ b/es/1-foundations/1-6/1_What is a Mesh.md @@ -1,13 +1,13 @@ ### 1.6.1 What is a Mesh? -#####A Mesh is a collection of quadrilaterals and triangles that represents a surface or solid geometry. This section discusses the structure of a mesh object, which includes vertices, edges, and faces, as well as additional mesh properties such as colors and normals. +##### A Mesh is a collection of quadrilaterals and triangles that represents a surface or solid geometry. This section discusses the structure of a mesh object, which includes vertices, edges, and faces, as well as additional mesh properties such as colors and normals. ![IMAGE](images/1-6-1/01_mesh-structure.png) >1. Mesh vertices 2. Mesh edges 3. Mesh faces -####1.6.1.1 Basic Anatomy of a Mesh +#### 1.6.1.1 Basic Anatomy of a Mesh Grasshopper defines meshes using a Face-Vertex data structure. At its most basic, this structure is simply a collection of points which are grouped into polygons. The points of a mesh are called *vertices*, while the polygons are called *faces*. To create a mesh we need a list of vertices and a system of grouping those vertices into faces. @@ -61,7 +61,7 @@ It is extremely important to pay attention to the order of the indices when cons >1. A quad face with indices 0,1,2,3 2. A quad with indicies 0,3,1,2 -####1.6.1.2 Implicit Mesh Data +#### 1.6.1.2 Implicit Mesh Data In addition to faces and vertices, there is other information about a mesh that we will want to use. In a Face-Vertex based mesh, data such as *edges* and *normals* are calculated implicitly based on the given faces and vertices. This section describes ways to query this information. @@ -108,7 +108,7 @@ While less intuitive than face normals, vertex normals are important for smooth >1. Normals set according to the face normal results in discrete polygonal shading 2. Adjancent face normals are averaged together to create vertex normals, resulting in smooth shading across faces -####1.6.1.3 Mesh Attributes +#### 1.6.1.3 Mesh Attributes Meshes can also be assigned additional attributes to either vertices or faces. The simplest of these is vertex color, which is described below, but other attributes exist such as texture UV coordinates. (Some programs even allow vertex normals to be assigned as attributes instead of being derived from the faces and vertices, which can provide even more flexibility in rendered surface appearance.) @@ -125,7 +125,7 @@ While the above examples colored the entire mesh, color data are actually assign >1. Red, green, and blue are assigned to the three vertices of a mesh 2. The resulting mesh interpolates the colors of the vertices -####1.6.1.4 Exercise +#### 1.6.1.4 Exercise {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/es/1-foundations/1-6/2_Understanding Topology.md b/es/1-foundations/1-6/2_Understanding Topology.md index 0ef1539..11c23e8 100644 --- a/es/1-foundations/1-6/2_Understanding Topology.md +++ b/es/1-foundations/1-6/2_Understanding Topology.md @@ -1,6 +1,6 @@ ### 1.6.2 Understanding Topology -#####While the vertices of a mesh contain position information, it is really the connections between the vertices that give a mesh geometry its unique structure and flexibility. +##### While the vertices of a mesh contain position information, it is really the connections between the vertices that give a mesh geometry its unique structure and flexibility. ![IMAGE](images/1-6-2/01_meshMorph2.png) @@ -30,7 +30,7 @@ It is possible for two distinct mesh shapes to be topologically identical. All t >A topologically equivalent mug and donut -####1.6.2.2 Mesh Characteristics +#### 1.6.2.2 Mesh Characteristics **Orientable** @@ -66,7 +66,7 @@ Non-manifold geometry is essentially geometry that cannot exist in the "real wor How is mesh geometry different from NURBS geometry? When might you want to use one instead of the other? -#####Parameterization +##### Parameterization In a previous chapter, we saw that NURBS surfaces are defined by a series of NURBS curves going in two directions. These directions are labeled U and V, and allow a NURBs surface to be parameterized according to a two-dimensional surface domain. The curves themselves are stored as equations in the computer, allowing the resulting surfaces to be calculated to an arbitarily small degree of precision. It can be difficult, however, to combine multiple NURBS surfaces together. Joining two NURBS surfaces will result in a polysurface, where different sections of the geometry will have different UV parameters and curve definitions. Meshes, on the other hand, are comprised of a discrete number of exactly defined vertices and faces. The network of vertices generally cannot be defined by simple UV coordinates, and because the faces are discrete the amount of precision is built into the mesh and can only be changed by refining the mesh and added more faces. The lack of UV coordinates, however, allows meshes the flexibility to handle more complicated geometry with a single mesh, instead of resorting to a polysurface in the case of NURBS. @@ -74,7 +74,7 @@ Meshes, on the other hand, are comprised of a discrete number of exactly defined >Note - While a mesh does not have implicit UV parameterization, it is sometimes useful to assign such a parameterization in order to map a texture or image file onto mesh geometry for rendering. Some modeling software therefore treats the UV coordinates of a mesh vertex as an *attribute* (like vertex color) which can be manipulated and changed. These are usually assigned and not completely defined by the mesh itself. -#####Local vs Global Influence +##### Local vs Global Influence Another important difference is the extent to which a local change in mesh or NURBS geometry affects the entire form. Mesh geometry is completely local. Moving one vertex affects only the faces that are adjacent to that vertex. In NURBS surfaces, the extent of the influence is more complicated and depends on the degree of the surface as well as the weights and knots of the control points. In general, however, moving a single control point in a NURBS surface creates a more global change in geometry. diff --git a/es/1-foundations/1-6/3_Creating Meshes.md b/es/1-foundations/1-6/3_Creating Meshes.md index 93a1015..9498672 100644 --- a/es/1-foundations/1-6/3_Creating Meshes.md +++ b/es/1-foundations/1-6/3_Creating Meshes.md @@ -1,13 +1,13 @@ ### 1.6.3 Creating Meshes -#####In the last section, we looked at the basic structure of meshes. In this section, we give a brief introduction to different ways of generating mesh geometry. +##### In the last section, we looked at the basic structure of meshes. In this section, we give a brief introduction to different ways of generating mesh geometry. There are three fundamental ways of creating mesh geometry in Grasshopper: 1. Starting with a mesh primitive 2. Manually constructing a mesh from faces and vertices 3. Converting NURBS geometry into a mesh -####1.6.3.1 Primitive +#### 1.6.3.1 Primitive Grasshopper comes with a few simple mesh primitive components: @@ -17,13 +17,13 @@ Grasshopper comes with a few simple mesh primitive components: 3. **Mesh Sphere** - This primitive requires a base plane to determine the center and orientation of the sphere, a radius for the size, and U and V values to determine the number of faces. 4. **Mesh Sphere Ex** - Also known as a Quadball, this primitive creates a sphere composed of six patches, which are subdivided according to the C input. A quadball is topologically equivalent to a cube, even though it is geometrically spherical. -####1.6.3.2 Construct Mesh +#### 1.6.3.2 Construct Mesh ![IMAGE](images/1-6-3/construct-mesh.png) As we saw in the previous section, the **Construct Mesh** component can be used to directly create a mesh from a list of vertices and a list of faces (and an optional list of vertex colors). Constructing an entire mesh manually can be extremely tedious, so this component is more often used with an existing list of faces and vertices which have been extracted using a **Deconstruct Mesh** component on an existing mesh. -####1.6.3.3 NURBS to Mesh +#### 1.6.3.3 NURBS to Mesh Perhaps the most common method of creating a complex mesh is to generate one based off of NURBS geometry. Individual NURBS surfaces can be converted to a mesh using the **Mesh Surface** component, which simply subdivides the surface along its UV coordinates and creates quad faces. This component allows you to enter the number of U and V divisions for the resultant mesh. @@ -35,7 +35,7 @@ More complex polysurfaces can be converted to a single mesh with the **Mesh Brep NOTE: it is generally much easier to convert from a NURBS geometry to a mesh object rather than the other way around. While the UV coordinates of a NURBS surface are straightforward to convert to quad faces of a mesh, the opposite is not necessarily true, since a mesh might contain a combination of triangles and quads in a way that is not simple to extract a UV coordinate system out of. -####1.6.3.4 Exercise +#### 1.6.3.4 Exercise In this exercise, we use a basic Mesh primitive, perform a transformation on the vertices, and then assign a color based on the normal vectors to approximate the rendering process. diff --git a/es/1-foundations/1-6/4_Mesh Operations.md b/es/1-foundations/1-6/4_Mesh Operations.md index e62b007..7e4a909 100644 --- a/es/1-foundations/1-6/4_Mesh Operations.md +++ b/es/1-foundations/1-6/4_Mesh Operations.md @@ -1,8 +1,8 @@ ### 1.6.4 Mesh Operations -#####In the last section, we looked at the basic structure of a mesh. In this section, we will look at ways to manipulate mesh geometry. +##### In the last section, we looked at the basic structure of a mesh. In this section, we will look at ways to manipulate mesh geometry. -####1.6.4.1 Smooth +#### 1.6.4.1 Smooth ![IMAGE](images/1-6-4/smooth.png) @@ -17,7 +17,7 @@ Attaching a boolean value to the input N provides option to skip naked vertices. 4. 25 iterations 5. 50 iterations -####1.6.4.2 Blur +#### 1.6.4.2 Blur ![IMAGE](images/1-6-4/blur.png) @@ -30,7 +30,7 @@ The **Blur** component acts in a similar way as smooth, except it only affect th 4. 12 iterations 5. 20 iterations -####1.6.4.3 Triangulate +#### 1.6.4.3 Triangulate ![IMAGE](images/1-6-4/triangulate.png) @@ -41,7 +41,7 @@ In order to ensure each face is planar, or to export a mesh to a different softw 2. Added edges according to shortest distance across quads 3. Triangulated resultant mesh -####1.6.4.4 Weld +#### 1.6.4.4 Weld ![IMAGE](images/1-6-4/weld.png) diff --git a/es/1-foundations/1-6/5_Mesh Interactions.md b/es/1-foundations/1-6/5_Mesh Interactions.md index 5ad3bea..02a239b 100644 --- a/es/1-foundations/1-6/5_Mesh Interactions.md +++ b/es/1-foundations/1-6/5_Mesh Interactions.md @@ -1,9 +1,9 @@ ### 1.6.5 Mesh Interactions -#####This section looks at ways in which Mesh Objects can interact with other objects, such as evaluating nearest points or combining multiple meshes together. +##### This section looks at ways in which Mesh Objects can interact with other objects, such as evaluating nearest points or combining multiple meshes together. -####1.6.5.1 Mesh Geometry and Points +#### 1.6.5.1 Mesh Geometry and Points **Inclusion** @@ -37,7 +37,7 @@ The following four numbers define the *barycentric* coordinates of the point wit The **Mesh Eval** component uses a mesh parameter as an input and returns the referenced point, as well as the normal and color at that point. The color and normal are calculated as interpolations of the vertex colors and vertex normals, using the same barycentric coordinates as the mesh parameter. -####1.6.5.2 Combining Mesh Geometry +#### 1.6.5.2 Combining Mesh Geometry **Mesh Join** @@ -58,7 +58,7 @@ Meshes in Grasshopper have a set of boolean operations similar to boolean operat 4. Mesh Union -####1.6.5.3 Intersections and Occlusions +#### 1.6.5.3 Intersections and Occlusions **Intersect** diff --git a/es/1-foundations/1-6/6_Working with Mesh Geometry.md b/es/1-foundations/1-6/6_Working with Mesh Geometry.md index 25e3e29..cf0f49b 100644 --- a/es/1-foundations/1-6/6_Working with Mesh Geometry.md +++ b/es/1-foundations/1-6/6_Working with Mesh Geometry.md @@ -1,6 +1,6 @@ ### 1.6.6 Working with Mesh Geometry -#####In this section, we will work through an exercise file for producing a complete mesh solid. By the end of this exercise, we will have a dynamic definition to produce custom vases that can be 3D printed. +##### In this section, we will work through an exercise file for producing a complete mesh solid. By the end of this exercise, we will have a dynamic definition to produce custom vases that can be 3D printed. {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/es/2-extensions/2-1/2_HalfEdge_Data.md b/es/2-extensions/2-1/2_HalfEdge_Data.md index c0b29d2..2a44ef7 100644 --- a/es/2-extensions/2-1/2_HalfEdge_Data.md +++ b/es/2-extensions/2-1/2_HalfEdge_Data.md @@ -1,4 +1,4 @@ -###2.1.2. Half Edge Data +### 2.1.2. Half Edge Data In the Grasshopper primer, we looked at how Grasshopper defines a mesh using a Face-Vertex data structure. This is a relatively simple data structure and is widely used in applications that use meshes, but can be computationally inefficient for more advanced algorithms. The Element\* add-on restructures the mesh using Half-Edge data, an edge-centered data structure, which allows for efficient queries of adjacent vertices, faces, and edges, which can vastly improve on algorithm speed and performance. This structure is capable of maintaining incidence information of vertices, edges and faces. This method facilitates the creation of new patterns and geometries all based on the topological relationship of the base geometry. @@ -6,10 +6,10 @@ The half-edge data structure is a representation for a mesh in which each edge i ![IMAGE](images/2-1-2/2-1-2_001_Half-Edge.png) -####2.1.2.1 Half-Edge Connectivity +#### 2.1.2.1 Half-Edge Connectivity The half-edge highlighted in blue explicitly stores indices to its termination point, adjacent half-edges, and the face it belongs to. The other information (gray) can be accessed implicitly. ![IMAGE](images/2-1-2/2-1-2_002_Half-Edge.png) -####2.1.2.2 Vertex Connectivity +#### 2.1.2.2 Vertex Connectivity The vertex highlighted in blue explicitly stores an index to one of its outgoing half-edges. The other information (gray) can be accessed implicitly. ![IMAGE](images/2-1-2/2-1-2_003_Half-Edge.png) diff --git a/es/2-extensions/2-1/3_Components.md b/es/2-extensions/2-1/3_Components.md index d0fb5bb..35e033a 100644 --- a/es/2-extensions/2-1/3_Components.md +++ b/es/2-extensions/2-1/3_Components.md @@ -1,8 +1,8 @@ -###2.1.3. Element* Components +### 2.1.3. Element* Components ![IMAGE](images/2-1-3/2-1-3_001_Components-Tabs.png) -####2.1.3.1 Analyse +#### 2.1.3.1 Analyse ![IMAGE](images/2-1-3/2-1-3_002_Analyse-Components.png) >1. Mesh Closest Point @@ -25,7 +25,7 @@ This component is used to quickly extract color information from a mesh. It retu -####2.1.3.2 Data +#### 2.1.3.2 Data ![IMAGE](images/2-1-3/2-1-3_003_Data-Components.png) >1. Data Visualizer @@ -59,7 +59,7 @@ This component outputs the mesh vertices, neighboring vertices (arranged in cloc ![IMAGE](images/2-1-3/2-1-3_006_Vertex-Neighbors.png) > **Vertex Neighbors** - Vertices, neighbouring vertices, neighbouring edges, neighbouring face centers -####2.1.3.3 Primitives +#### 2.1.3.3 Primitives Element\* provides four additional mesh primitives: the Dodecahedron, Tetrahedron, Octahedron, and Icosahedron. These components take a single number as input for the radius, and produce meshes centered at the origin, and composed of one face per side. With the addition of the Cube, which is already availible through Grasshopper's built-in primitives, these make up the five Platonic solids. @@ -69,13 +69,13 @@ Element\* provides four additional mesh primitives: the Dodecahedron, Tetrahedro 3. Octahedron 4. Icosahedron -####2.1.3.4 Smooth +#### 2.1.3.4 Smooth **Element\* Smooth** provides an optimized smoothing algorithm that is more efficient than Grasshopper's **Smooth Mesh** for large datasets. It makes use of the Lapacian Smoothing algorithm for Half-Edge structured meshes. It does not change the topology or vertex count of welded meshes, but will combine identical vertices if there are any duplicates caused by an unwelded mesh. We can specify the smoothing strength, boundary condition, boundary tolerance as well as the number of iterations. ![IMAGE](images/2-1-3/2-1-3_008_Smooth.png) -####2.1.3.5 Subdivide +#### 2.1.3.5 Subdivide **Element\* Catmull Clark Subdivision** @@ -90,7 +90,7 @@ This subdivison component will create an all quad mesh by adding a face for each >1. Constant Quad subdivision 2. Catmull Clark subdivision -####2.1.3.6 Transform +#### 2.1.3.6 Transform ![IMAGE](images/2-1-3/2-1-3_010_Transform-Components.png) >1. Mesh Windown @@ -127,7 +127,7 @@ For example, a four-sided polygon (quad) is split into 4 three-sided polygons wi 2. Mesh Frame 3. Icosohedron transformed with mesh frame, then thickend and subdivided -####2.1.3.7 Utility +#### 2.1.3.7 Utility ![IMAGE](images/2-1-3/2-1-3_012_Utility-Component.png) >1. Mesh Combine & Clean diff --git a/es/2-extensions/2-1/4_Exercise.md b/es/2-extensions/2-1/4_Exercise.md index 0c9271a..bec7c1f 100644 --- a/es/2-extensions/2-1/4_Exercise.md +++ b/es/2-extensions/2-1/4_Exercise.md @@ -1,6 +1,6 @@ -###2.1.4. Exercise +### 2.1.4. Exercise -#####In this section, we will work through a simple exercise using the Element* primitives as a base. We will incorporate the half-edge data structure as well using both features of the transform components (uniform and per vertex) +##### In this section, we will work through a simple exercise using the Element* primitives as a base. We will incorporate the half-edge data structure as well using both features of the transform components (uniform and per vertex) ![IMAGE](images/2-1-4/2-1-4_000_Cover.png) {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} diff --git a/es/2-extensions/2-1/5_Architectural Case Study.md b/es/2-extensions/2-1/5_Architectural Case Study.md index 600a37a..9477e55 100644 --- a/es/2-extensions/2-1/5_Architectural Case Study.md +++ b/es/2-extensions/2-1/5_Architectural Case Study.md @@ -1,11 +1,11 @@ -###2.1.5. Element* Architectural Case Study +### 2.1.5. Element* Architectural Case Study -#####In this section, we will work through a simple exercise file that is meant as an introduction to working with Element tools. We will explore some patterning and facade treatments in the field of Architecture which will incorporate Half Edge data structures along with basic Element components without the use of per vertex features. +##### In this section, we will work through a simple exercise file that is meant as an introduction to working with Element tools. We will explore some patterning and facade treatments in the field of Architecture which will incorporate Half Edge data structures along with basic Element components without the use of per vertex features. ![IMAGE](images/2-1-5/2-1-5_001_Main-Render.jpg) -####2.1.5.1 Example 1 +#### 2.1.5.1 Example 1 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -87,7 +87,7 @@ thead {display: none} ![IMAGE](images/2-1-5/2-1-5_022_Definition.png) --- -####2.1.5.2 Example 2 +#### 2.1.5.2 Example 2 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/es/README.md b/es/README.md index 6c0af7c..343d166 100644 --- a/es/README.md +++ b/es/README.md @@ -1,11 +1,11 @@ -#The Grasshopper Primer (ES) -##Third Edition V3.3 +# The Grasshopper Primer (ES) +## Third Edition V3.3 ![Primer Release Cover](0-about/images/GHP3_5Pages.png) > Grasshopper is a graphical algorithm editor tightly integrated with Rhino’s 3-D modeling tools, allowing designers to build form generators from the simple to the awe-inspiring. -###WELCOME +### 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 Rhino4 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, *and now web-based*, 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](http://modelab.is) 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. It is our goal that this primer will serve as a field guide to new and existing users looking @@ -65,7 +65,7 @@ form generators from the simple to the awe inspiring. http://www.grasshopper3d.com/page/download-1 -###FORUMS +### 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 & @@ -83,5 +83,5 @@ McNeel Forum powered by Discourse. http://discourse.mcneel.com/ -###LICENSING INFORMATION +### LICENSING INFORMATION The Grasshopper Primer is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license. The full text of this license is available here: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode diff --git a/es/SUMMARY.md b/es/SUMMARY.md index 160af29..dc00ae3 100644 --- a/es/SUMMARY.md +++ b/es/SUMMARY.md @@ -40,7 +40,7 @@ * [Mesh Operations](1-foundations/1-6/4_Mesh Operations.md) * [Mesh Interactions](1-foundations/1-6/5_Mesh Interactions.md) * [Working with Mesh Geometry](1-foundations/1-6/6_Working with Mesh Geometry.md) -#BOOK 2 - Extensions +# BOOK 2 - Extensions * [Extensions](2-extensions/2-extensions.md) * [Element*](2-extensions/2-1/0_Element.md) * [Introduction](2-extensions/2-1/1_Element_Intro.md) diff --git a/es/appendix/A-1/0_index-of-components.md b/es/appendix/A-1/0_index-of-components.md index 3a22f41..360ed22 100644 --- a/es/appendix/A-1/0_index-of-components.md +++ b/es/appendix/A-1/0_index-of-components.md @@ -19,12 +19,12 @@ thead {display: none} ## 2.1. 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. +##### 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 +#### Geometry |||| |--|--|--| |P.G.Crv|Curve Parameter
Represents a collection of Curve geometry. Curve geometry is the common denominator of all curve types in Grasshopper.|![IMAGE](images/PGCrv.png)| @@ -34,7 +34,7 @@ Parameters |P.G.Pt|Point Parameter
Point parameters are capable of storing persistent data. You can set the persistent records through the parameter menu.|![IMAGE](images/PGPt.png)| |P.G.Srf|Surface Parameter
Represents a collection of Surface geometry. Surface geometry is the common denominator of all surface types in Grasshopper.|![IMAGE](images/PGSrf.png)| -####Primitive +#### Primitive |||| |--|--|--| |P.P.Bool|Boolean Parameter
Represents a collection of Boolean (True/False) values.|![IMAGE](images/PPBool.png)| @@ -45,7 +45,7 @@ Parameters |P.P.Num|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.|![IMAGE](images/PPNum.png)| |P.P.Path|File Path
Contains a collection of file paths.|![IMAGE](images/PPPath.png)| -####Input +#### Input |||| |--|--|--| |P.I.Toggle|Boolean Toggle
Boolean (true/false) toggle.|![IMAGE](images/PIToggle.png)| @@ -57,7 +57,7 @@ Parameters |P.I.Panel|Panel
A panel for custom notes and text values. It is typically an inactive object that allows you to add remarks or explanations to a Document. Panels can also receive their information from elsewhere. If you plug an output parameter into a Panel, you can see 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.|![IMAGE](images/PIPanel.png)| |P.I.List|Value List
Provides a list of preset values from which to choose.|![IMAGE](images/PIList.png)| -####Utilities +#### Utilities |||| |--|--|--| |P.U.Cin|Cluster Input
Represents a cluster input parameter.|![IMAGE](images/PUCin.png)| @@ -70,7 +70,7 @@ Parameters Maths -- -####Domain +#### Domain |||| |--|--|--| |M.D.Bnd|Bounds
Create a numeric domain which encompasses a list of numbers.|![IMAGE](images/MDBnd.png)| @@ -84,7 +84,7 @@ Maths |M.D.ReMap|Remap Numbers
Remap numbers into a new numeric domain.|![IMAGE](images/MDReMap.png)| -####Operators +#### Operators |||| |--|--|--| |M.O.Add|Addition
Mathematical addition.|![IMAGE](images/MOAdd.png)| @@ -99,13 +99,13 @@ Maths |M.O.Similar|Similarity
Test for similarity of two numbers.|![IMAGE](images/MOSimilar.png)| |M.O.Sub|Subtraction
Mathematical subtraction.|![IMAGE](images/MOSub.png)| -####Script +#### Script |||| |--|--|--| |M.S.Eval|Evaluate
Evaluate an expression with a flexible number of variables.|![IMAGE](images/MSEval.png)| |M.S.Expression|Expression
Evaluate an expression.|![IMAGE](images/MSExpression.png)| -####Trig +#### Trig |||| |--|--|--| |M.T.Cos|Cosine
Compute the cosine of a value.|![IMAGE](images/MTCos.png)| @@ -113,7 +113,7 @@ Maths |M.T.Rad|Radians
Convert an angle specified in degrees to radians.|![IMAGE](images/MTRad.png)| |M.T.Sin|Sine
Compute the sine of a value.|![IMAGE](images/MTSin.png)| -####Utilities +#### Utilities |||| |--|--|--| |M.U.Avr|Average
Solve the arithmetic average for a set of items.|![IMAGE](images/MUAvr.png)| @@ -123,7 +123,7 @@ Maths Sets -- -####List +#### List |||| |--|--|--| |S.L.Combine|Combine Data
Combine non-null items out of several inputs.|![IMAGE](images/SLCombine.png)| @@ -142,7 +142,7 @@ Sets |S.L.Sort|Sort List
Sort a list of numeric keys. In order for something to be sorted, it must first be comparable. Most types of data are not 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 a list of keys first.|![IMAGE](images/SLSort.png)| |S.L.Weave|Weave
Weave a set of input data using a custom pattern. The pattern is specified as a list of index values (integers) that define the order in which input data is collected.|![IMAGE](images/SLWeave.png)| -####Sets +#### Sets |||| |--|--|--| |S.S.Culli|Cull Index
Cull (remove) indexed elements from a list.|![IMAGE](images/SSCulli.png)| @@ -154,7 +154,7 @@ Sets |S.S.Repeat|Repeat Data
Repeat a pattern until it reaches a certain length.|![IMAGE](images/SSRepeat.png)| |S.S.Series|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.|![IMAGE](images/SSSeries.png)| -####Tree +#### Tree |||| |--|--|--| |S.T.Explode|Explode Tree
Extract all the branches from a tree.|![IMAGE](images/STExplode.png)| @@ -171,21 +171,21 @@ Sets Vector -- -####Grid +#### Grid |||| |--|--|--| |V.G.HexGrid|Hexagonal
2D grid with hexagonal cells.|![IMAGE](images/VGHexGrid.png)| |V.G.RecGrid|Rectangular
2D grid with rectangular cells.|![IMAGE](images/VGRecGrid.png)| |V.G.SqGrid|Square
2D grid with square cells|![IMAGE](images/VGSqGrid.png)| -####Point +#### Point |||| |--|--|--| |V.P.Pt|Construct Point
Construct a point from {xyz} coordinates.|![IMAGE](images/VPPt.png)| |V.P.pDecon|Deconstruct
Deconstruct a point into its component parts.|![IMAGE](images/VPpDecon.png)| |V.P.Dist|Distance
Compute Euclidean distance between two point coordinates.|![IMAGE](images/VPDist.png)| -####Vector +#### Vector |||| |--|--|--| |V.V.X|Unit X
Unit vector parallel to the world {x} axis.|![IMAGE](images/VVX.png)| @@ -195,17 +195,17 @@ Vector Curve -- -####Analysis +#### Analysis |||| |--|--|--| |C.A.CP|Control Points
Extract the nurbs control points and knots of a curve.|![IMAGE](images/CACP.png)| -####Division +#### Division |||| |--|--|--| |C.D.Divide|Divide Curve
Divide a curve into equal length segments.|![IMAGE](images/CDDivide.png)| -####Primitive +#### Primitive |||| |--|--|--| |C.P.Cir|Circle
Create a circle defined by base plane and radius.|![IMAGE](images/CPCir.png)| @@ -214,7 +214,7 @@ Curve |C.P.Line|Line SDL
Create a line segment defined by start point, tangent and length.|![IMAGE](images/CPLine.png)| |C.P.Polygon|Polygon
Create a polygon with optional round edges.|![IMAGE](images/CPPolygon.png)| -####Spline +#### Spline |||| |--|--|--| |C.S.IntCrv|Interpolate
Create an interpolated curve through a set of points.|![IMAGE](images/CSIntCrv.png)| @@ -222,7 +222,7 @@ Curve |C.S.Nurbs|Nurbs Curve
Construct a nurbs curve from control points.|![IMAGE](images/CSNurbs.png)| |C.S.PLine|PolyLine
Create a polyline connecting a number of points.|![IMAGE](images/CSPLine.png)| -####Util +#### Util |||| |--|--|--| |C.U.Explode|Explode
Explode a curve into smaller segments.|![IMAGE](images/CUExplode.png)| @@ -232,12 +232,12 @@ Curve Surface -- -####Analysis +#### Analysis |||| |--|--|--| |S.A.DeBrep|Deconstruct Brep
Deconstruct a brep into its constituent parts.|![IMAGE](images/SADeBrep.png)| -####Freeform +#### Freeform |||| |--|--|--| |S.F.Boundary|Boundary Surfaces
Create planar surfaces from a collection of boundary edge curves.|![IMAGE](images/SFBoundary.png)| @@ -247,12 +247,12 @@ Surface |S.F.RevSrf|Revolution
Create a surface of revolution.|![IMAGE](images/SFRevSrf.png)| |S.F.Swp2|Sweep2
Create a sweep surface with two rail curves.|![IMAGE](images/SFSwp2.png)| -####Primitive +#### Primitive |||| |--|--|--| |S.P.BBox|Bounding Box
Solve oriented geometry bounding boxes.|![IMAGE](images/SPBBox.png)| -####Util +#### Util |||| |--|--|--| |S.U.SDivide|Divide Surface
Generate a grid of {uv} points on a surface.|![IMAGE](images/SUSDivide.png)| @@ -261,7 +261,7 @@ Surface Mesh -- -####Triangulation +#### Triangulation |||| |--|--|--| |M.T.Voronoi|Voronoi
Planar voronoi diagram for a collection of points.|![IMAGE](images/MTVoronoi.png)| @@ -269,17 +269,17 @@ Mesh Transform -- -####Affine +#### Affine |||| |--|--|--| |T.A.RecMap|Rectangle Mapping
Transform geometry from one rectangle into another.|![IMAGE](images/TARecMap.png)| -####Array +#### Array |||| |--|--|--| |T.A.ArrLinear|Linear Array
Create a linear array of geometry.|![IMAGE](images/TAArrLinear.png)| -####Morph +#### Morph |||| |--|--|--| |T.M.Morph|Box Morph
Morph an object into a twisted box.|![IMAGE](images/TMMorph.png)| @@ -288,23 +288,23 @@ Transform Display -- -####Color +#### Color |||| |--|--|--| |D.C.HSL|Colour HSL
Create a colour from floating point {HSL} channels.|![IMAGE](images/DCHSL.png)| -####Dimensions +#### Dimensions |||| |--|--|--| |D.D.Tag|Text tags
A text tag component allows you to draw little Strings in the viewport as feedback items. Text and location are specified as input parameters. When text tags are baked they turn into Text Dots.|![IMAGE](images/DDTag.png)| |D.D.Tag3D|Text Tag 3D
Represents a list of 3D text tags in a Rhino viewport|![IMAGE](images/DDTag3D.png)| -####Preview +#### Preview |||| |--|--|--| |D.P.Preview|Custom Preview
Allows for customized geometry previews.|![IMAGE](images/DPPreview.png)| -####Vector +#### Vector |||| |--|--|--| |D.V.Points|Point List
Displays details about lists of points.|![IMAGE](images/DVPoints.png)| diff --git a/es/appendix/A-2/0_resources.md b/es/appendix/A-2/0_resources.md index b31f582..78a7d94 100644 --- a/es/appendix/A-2/0_resources.md +++ b/es/appendix/A-2/0_resources.md @@ -1,8 +1,8 @@ -##2.3. Resources +## 2.3. 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. +##### 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 +### Plug-in Communities -##About This Primer +## About This Primer -###Authors +### Authors ![IMAGE](images/akos.png) -#####Gil Akos, Mode Lab +##### Gil Akos, 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 @@ -27,7 +27,7 @@ http://modelab.is/education ![IMAGE](images/parsons.png) -#####Ronnie Parsons, Mode Lab +##### 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 @@ -39,7 +39,7 @@ http://modelab.is/education ![IMAGE](images/modelab.png) -#####Mode Lab Team: +##### Mode Lab Team: -###Contributors +### Contributors ![IMAGE](images/payne.png) -#####Andrew Payne, Principal, Lift Architects +##### 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 @@ -85,7 +85,7 @@ http://www.grasshopper3d.com/ -###LICENSING INFORMATION +### LICENSING INFORMATION The Grasshopper Primer is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license. The full text of this license is available here: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode Under this license, you are free: diff --git a/pt/0-about/1-grasshopper-an-overview.md b/pt/0-about/1-grasshopper-an-overview.md index 0a7cb49..164e3fb 100644 --- a/pt/0-about/1-grasshopper-an-overview.md +++ b/pt/0-about/1-grasshopper-an-overview.md @@ -1,6 +1,6 @@ ## 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. +##### 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 @@ -68,7 +68,7 @@ prevent many unwanted headaches. ![IMAGE](images/flow.png) >Program flow from left to right -####THINGS TO REMEMBER +#### 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. diff --git a/pt/1-foundations/1-1/1_installing-and-launching-grasshopper.md b/pt/1-foundations/1-1/1_installing-and-launching-grasshopper.md index c6c7eb3..242ac3e 100644 --- a/pt/1-foundations/1-1/1_installing-and-launching-grasshopper.md +++ b/pt/1-foundations/1-1/1_installing-and-launching-grasshopper.md @@ -1,10 +1,10 @@ ### 1.1.1. INSTALLING AND 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. +##### 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. -####1.1.1.1. DOWNLOADING +#### 1.1.1.1. 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. ![](images/1-1-1/1-1-1_001-downloading.png) @@ -12,13 +12,13 @@ To download the Grasshopper plug-in, visit the Grasshopper web site. Click on th >Download Grasshopper from the [grasshopper3d.com](http://grasshopper3d.com) website. -####1.1.1.2. INSTALLING +#### 1.1.1.2. INSTALLING Select Run from the download dialog box follow the installer instructions. (note: you must have Rhino 5 already installed on your computer for the plug-in to install properly). ![IMAGE](images/1-1-1/1-1-1_002-installing.png) >Follow the steps in the Installation wizard. -####1.1.1.3. LAUNCHING +#### 1.1.1.3. 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. ![IMAGE](images/1-1-1/1-1-1_003-launching-a.png) diff --git a/pt/1-foundations/1-1/2_the-grasshopper-ui.md b/pt/1-foundations/1-1/2_the-grasshopper-ui.md index 0ee10a7..42ce3fa 100644 --- a/pt/1-foundations/1-1/2_the-grasshopper-ui.md +++ b/pt/1-foundations/1-1/2_the-grasshopper-ui.md @@ -1,6 +1,6 @@ ### 1.1.2. 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. +##### 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 UI. Grasshopper is a visual programming application where you are able to create programs, called @@ -25,7 +25,7 @@ will be very familiar to Rhino users. Let’s look at a few features of the inte 8. The status bar tells you what version of Grasshopper is currently installed on your machine. If a newer version is available, a pop-up menu will appear in your tray providing instructions on how to download the latest version. -####1.1.2.1. THE WINDOWS TITLE BAR +#### 1.1.2.1. 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 @@ -39,7 +39,7 @@ This is because once it is launched from the command prompt, your session of Grasshopper stays active until that instance of Rhino is closed. -####1.1.2.2. MAIN MENU BAR +#### 1.1.2.2. MAIN MENU BAR 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 @@ -62,7 +62,7 @@ and third-party plugins which can extend functionality. ![IMAGE](images/1-1-2/1-1-2_002-settings.png) >The Preferences dialog allows you to set many of Grasshopper’s application settings. -####1.1.2.3. FILE BROWSER CONTROL +#### 1.1.2.3. 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 @@ -109,7 +109,7 @@ any Grasshopper files that were open when Rhino was shut down. ![IMAGE](images/1-1-2/1-1-2_003-autosave.png) >Drag and Drop Files onto the Canvas. -####1.1.2.4. COMPONENT PALETTES +#### 1.1.2.4. 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 to a certain category. These categories have been labeled @@ -138,12 +138,12 @@ provides access to all components in that sub-category. 4. Drop-down menu. -####1.1.2.5. THE CANVAS +#### 1.1.2.5. THE CANVAS The canvas is the primary workspace for creating Grasshopper definitions. It is here where you interact with the elements of your visual program. You can start working in the canvas by placing components and connecting wires. -####1.1.2.6. GROUPING +#### 1.1.2.6. 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 @@ -163,7 +163,7 @@ outline type can be defined by right-clicking on any group object. ![IMAGE](images/1-1-2/1-1-2_008-grouping3.png) >Two groups are nested inside one another. The color (light blue) has been changed on the outer group to help visually identify one group from the other. Groups are drawn “behind” the components within them and, in cases such as this, there is a depth order to the two groups. To change this, go to Edit > Arrange in the main menu bar. -####1.1.1.7. WIDGETS +#### 1.1.1.7. 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 @@ -208,7 +208,7 @@ other corners of the canvas or to hide it completely. -####1.1.2.8. USING THE SEARCH FEATURE +#### 1.1.2.8. USING THE SEARCH FEATURE Although a lot of thought has gone into the placement of each component on the component panel to make it intuitive for new users, people sometimes find it difficult to locate a specific component that might be buried deep inside one @@ -227,7 +227,7 @@ you will see a list of parameters or components that match your request. 3. Divide Domain2 component. -####1.1.2.9. THE FIND FEATURE +#### 1.1.2.9. 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 @@ -266,7 +266,7 @@ canvas) next to the Find dialog box. -####1.1.2.10. USING THE RADIAL MENU +#### 1.1.2.10. USING THE RADIAL MENU 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 @@ -282,7 +282,7 @@ dramatically increase the speed at which you create Grasshopper documents. ![IMAGE](images/1-1-2/1-1-2_016-radial-menu.png) >The Radial UI menu allows you to quickly access frequently used menu items. -####1.1.2.11. THE CANVAS TOOLBAR +#### 1.1.2.11. 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 diff --git a/pt/1-foundations/1-1/3_talking-to-rhino.md b/pt/1-foundations/1-1/3_talking-to-rhino.md index 145e330..4f6bde8 100644 --- a/pt/1-foundations/1-1/3_talking-to-rhino.md +++ b/pt/1-foundations/1-1/3_talking-to-rhino.md @@ -1,6 +1,6 @@ -###1.1.3. TALKING TO RHINO +### 1.1.3. TALKING TO RHINO -#####Unlike a Rhino document, a Grasshopper definition does not contain any actual objectsor geometry. Instead, a Grasshopper definition represents a set of rules & instructions for how Rhino can automate tasks. +##### Unlike a Rhino document, a Grasshopper definition does not contain any actual objectsor geometry. Instead, a Grasshopper definition represents a set of rules & instructions for how Rhino can automate tasks. ![IMAGE](images/1-1-3/1-1-3_001-talking-to-rhino.png) >1. Grasshopper preview geometry. @@ -10,7 +10,7 @@ -####1.1.3.1. VIEWPORT FEEDBACK +#### 1.1.3.1. 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 @@ -27,13 +27,13 @@ provide visual feedback. The image below outlines the default color scheme. 3. Point geometry is drawn as a cross rather than a rectangle to distinguish it from other Rhino point objects. 4. Blue feedback means you are currently making a selection in the Rhino Viewport. -####1.1.3.2. LIVE WIRES +#### 1.1.3.2. LIVE WIRES Grasshopper is a dynamic environment. Changes that are made are live and their preview display is updated in the Rhino viewport. ![IMAGE](images/1-1-3/1-1-3_003-live-wires.png) -####1.1.3.3. GUMBALL WIDGET +#### 1.1.3.3. 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, geometry @@ -43,7 +43,7 @@ to during). ![IMAGE](images/1-1-3/1-1-3_004-gumball.png) -####1.1.3.4. BAKING GEOMETRY +#### 1.1.3.4. 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 @@ -56,7 +56,7 @@ bake. 3. Grouping your baked geometry is a convenient way to manage the instantiated Rhino geometry, particularly if you are creating many objects with Grasshopper. -####1.1.3.5. UNITS & TOLERANCES +#### 1.1.3.5. UNITS & TOLERANCES Grasshopper inherits units and tolerances from Rhino. To change the units, type Document Properties in the Rhino command line to access the Document Properties menu. Select Units to change the units and tolerances. @@ -64,7 +64,7 @@ Properties menu. Select Units to change the units and tolerances. ![IMAGE](images/1-1-3/1-1-3_006-units.png) >Change the units and tolerances in the Rhino Document Properties menu. -####1.1.3.6. REMOTE CONTROL PANEL +#### 1.1.3.6. 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 a single screen then you may have already @@ -110,7 +110,7 @@ to switch back to the standard Working Mode. -####1.1.3.7. FILE MANAGEMENT +#### 1.1.3.7. FILE MANAGEMENT If 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. @@ -120,7 +120,7 @@ Grasshopper and Rhino files in the same folder, and giving them related names. 2. Rhino file. 3. Grasshopper file. -####1.1.3.8. TEMPLATES +#### 1.1.3.8. TEMPLATES Creating and specifiying a template file in your Grasshopper preferences is convenient way to set up every new Grasshopper definition you create. The template can include Grasshopper components as well as panels and sketch diff --git a/pt/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md b/pt/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md index f6e1387..e2d2340 100644 --- a/pt/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md +++ b/pt/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md @@ -1,5 +1,5 @@ ## 1.2. ANATOMY OF A GRASSHOPPER DEFINTION -####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 and how to interact with them to start building definitions. +#### 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 and how to interact with them to start building definitions. ![IMAGE](images/1-2/1-2_001-anatomy-of-definition.png) diff --git a/pt/1-foundations/1-2/1_grasshopper-object-types.md b/pt/1-foundations/1-2/1_grasshopper-object-types.md index d539348..1911198 100644 --- a/pt/1-foundations/1-2/1_grasshopper-object-types.md +++ b/pt/1-foundations/1-2/1_grasshopper-object-types.md @@ -1,8 +1,8 @@ ### 1.2.1. GRASSHOPPER OBJECT TYPES -#####Grasshopper consists of two primary types of user objects: parameters andcomponents. Parameters store data, whereas components perform actions that resultin data. The most basic way to understand Grasshopper is to remember that we willuse data to define the inputs of actions (which will result in new data that we cancontinue to use). +##### Grasshopper consists of two primary types of user objects: parameters andcomponents. Parameters store data, whereas components perform actions that resultin data. The most basic way to understand Grasshopper is to remember that we willuse data to define the inputs of actions (which will result in new data that we cancontinue to use). -####1.2.1.1. PARAMETERS +#### 1.2.1.1. 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 with a 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 from other components. The point and curve objects are both geometry parameters. @@ -13,7 +13,7 @@ Input parameters are dynamic interface objects that allow you to interact with y ![IMAGE](images/1-2-1/1-2-1_002-input-parameters.png) -####1.2.1.2. COMPONENTS +#### 1.2.1.2. COMPONENTS Components perform actions based on the inputs they receive. There are manytypes of components for different tasks. ![IMAGE](images/1-2-1/1-2-1_003-components.png) @@ -24,7 +24,7 @@ segments. 3. The Circle CNR component constructs a circle geometry from input data; a center point, normal vector, and radius. 4. The Loft component constructs a surface by lofting curves. -####1.2.1.3. OBJECT COLORS +#### 1.2.1.3. 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. A parameter which contains neither warnings nor errors is shown in light diff --git a/pt/1-foundations/1-2/2_grasshopper-component-parts.md b/pt/1-foundations/1-2/2_grasshopper-component-parts.md index f779b34..34998ae 100644 --- a/pt/1-foundations/1-2/2_grasshopper-component-parts.md +++ b/pt/1-foundations/1-2/2_grasshopper-component-parts.md @@ -1,6 +1,6 @@ ### 1.2.2. GRASSHOPPER COMPONENT PARTS -#####Components are the objects you place on the canvas and connect together with Wiresto form a visual program. Components can represent Rhino Geometry or operationslike Math Functions. Components have inputs and outputs. +##### Components are the objects you place on the canvas and connect together with Wiresto form a visual program. Components can represent Rhino Geometry or operationslike Math Functions. Components have inputs and outputs. ![IMAGE](images/1-2-2/1-2-2_001-component-parts.png) >1. The three input parameters of the Circle CNR component. @@ -13,7 +13,7 @@ There are a few Grasshopper components that have inputs but no outputs, or vice ![IMAGE](images/1-2-2/1-2-2_002-components-without-outputs.png) -####1.2.2.1. LABEL VS ICON DISPLAY +#### 1.2.2.1. LABEL VS ICON DISPLAY Every Grasshopper object has a unique icon. These icons are displayed in the center area of the object and correspond to 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. @@ -37,14 +37,14 @@ components in the palettes is holding down Ctrl + Alt and clicking on an existin ![IMAGE](images/1-2-2/1-2-2_006-reveal-location.png) -####1.2.2.2. COMPONENT HELP +#### 1.2.2.2. COMPONENT HELP Right clicking an object and selecting “Help” from the drop-down menu will open a Grasshopper help window. The help window contains a more detailled description of the object, a list of inputs and outputs, as well as remarks. ![IMAGE](images/1-2-2/1-2-2_007-component-help.png) >1. Grasshopper help window for the Point parameter 2. The remarks in the help window give additional insight about the point parameter. -####1.2.2.3. TOOL TIPS +#### 1.2.2.3. TOOL TIPS Component inputs are expecting to receive certain types of data, for example a 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. ![IMAGE](images/1-2-2/1-2-2_008-tool-tips.png) @@ -54,7 +54,7 @@ Component inputs are expecting to receive certain types of data, for example a C 4. The header of the output tooltip provides the same detail os for inputs, but for the corresponding output. 5. The result of the component's action. -####1.2.2.4. CONTEXT POPUP MENUS +#### 1.2.2.4. CONTEXT POPUP MENUS All objects 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. @@ -71,7 +71,7 @@ settings and details. You can access this context menu by right-clicking on the 4. Add item to collection. 5. Delete selection. -####1.2.2.5. ZOOMABLE USER INTERFACE +#### 1.2.2.5. 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. ![IMAGE](images/1-2-2/1-2-2_011-zoomable-ui.png) diff --git a/pt/1-foundations/1-2/3_data-types.md b/pt/1-foundations/1-2/3_data-types.md index d3ba36c..6cdfae8 100644 --- a/pt/1-foundations/1-2/3_data-types.md +++ b/pt/1-foundations/1-2/3_data-types.md @@ -1,8 +1,8 @@ ### 1.2.3. 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. +##### 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. -####1.2.3.1. PERSISTENT DATA +#### 1.2.3.1. PERSISTENT DATA Persistent data is accessed through the menu, and depending on the kind of parameter has a different manager. A Point parameter for example allows you to set one or more points through its menu. But, let’s back up a few steps and see how a Point Parameter behaves. 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 outcome 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. @@ -16,7 +16,7 @@ Once you have defined all the points you can press Enter and they will become pa 2. Once the parameter contains some persistent data, the component will turn from orange to grey. 3. The tooltip for the point parameter shows the persistent data (a collection of referenced points) that is stored. -####1.2.3.2. VOLATILE DATA +#### 1.2.3.2. 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 it is a decimal number) into an integer source and it will take care of the conversion. @@ -29,7 +29,7 @@ If you want the data to become volatile again, simply reconnect the wires to the ![IMAGE](images/1-2-3/1-2-3_003-right-click.png) -####1.2.3.3. INPUT PARAMETERS +#### 1.2.3.3. 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** diff --git a/pt/1-foundations/1-2/4_wiring-components.md b/pt/1-foundations/1-2/4_wiring-components.md index e924805..a720805 100644 --- a/pt/1-foundations/1-2/4_wiring-components.md +++ b/pt/1-foundations/1-2/4_wiring-components.md @@ -1,8 +1,8 @@ ### 1.2.4. 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. +##### 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. -####1.2.4.1. CONNECTION MANAGEMENT +#### 1.2.4.1. 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 a permanent 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. ![IMAGE](images/1-2-4/1-2-4_001a.png) @@ -21,7 +21,7 @@ To connect components, click and drag near the circle on the output side of an o 7. If there are multiple connections, select the one you want to disconnect from the list. 8. When you hover over an item, the wire will be highlighted in red. -####1.2.4.2. FANCY WIRES +#### 1.2.4.2. 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, simply click on the Display 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. ![IMAGE](images/1-2-4/1-2-4_002-fancy-wires.png) @@ -31,7 +31,7 @@ Wires represent the connections as well as the flow of data within the graph in 4. Single Item – The data flowing out of any parameter that contains a single item will be shown with a solid grey line. 5. Tree – Information transferred between components which contain a data structure will be shown in a grey double-line-dash wire type. -####1.2.4.3. WIRE DISPLAY +#### 1.2.4.3. WIRE DISPLAY If you have spent any great deal of time working on a single Grasshopper definition, you may have realized that the canvas can get cluttered with a nest of wires quite quickly. Fortunately, we have the ability to manage the wire displays for each input of a component. 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. diff --git a/pt/1-foundations/1-2/5_the-grasshopper-definition.md b/pt/1-foundations/1-2/5_the-grasshopper-definition.md index a54bb5e..c7af836 100644 --- a/pt/1-foundations/1-2/5_the-grasshopper-definition.md +++ b/pt/1-foundations/1-2/5_the-grasshopper-definition.md @@ -5,15 +5,15 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.2.5_the grasshopper definition.gh) {% endif %} -#####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. +##### 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. -####1.2.5.1. PROGRAM FLOW +#### 1.2.5.1. 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. ![IMAGE](images/1-2-5/1-2-5_001-program-flow.png) >Directionality of data is left to right. -####1.2.5.2. THE LOGICAL PATH +#### 1.2.5.2. THE LOGICAL PATH All of 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. ![IMAGE](images/1-2-5/1-2-5_002-logical-graph.png) diff --git a/pt/1-foundations/1-3/0_building-blocks-of-algorithms.md b/pt/1-foundations/1-3/0_building-blocks-of-algorithms.md index bfedfb0..0dc3ff8 100644 --- a/pt/1-foundations/1-3/0_building-blocks-of-algorithms.md +++ b/pt/1-foundations/1-3/0_building-blocks-of-algorithms.md @@ -1,5 +1,5 @@ ## 1.3. Building Blocks of Algorithms -####This chapter will introduce you to basic geometric and mathematical concepts and how they are implemented and manipulated in Grasshopper. +#### This chapter will introduce you to basic geometric and mathematical concepts and how they are implemented and manipulated in Grasshopper. ![Building Blocks of Algorithms](images/1-3/1-3_001.png) diff --git a/pt/1-foundations/1-3/1_points-planes-vectors.md b/pt/1-foundations/1-3/1_points-planes-vectors.md index 257be50..362d874 100644 --- a/pt/1-foundations/1-3/1_points-planes-vectors.md +++ b/pt/1-foundations/1-3/1_points-planes-vectors.md @@ -1,10 +1,10 @@ -###1.3.1. Points, Planes & Vectors +### 1.3.1. 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. +##### 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. ![Points, Vectors, and Planes](images/1-3-1/1-3-1_001-intro.png) -####1.3.1.1 POINTS +#### 1.3.1.1 POINTS Points in 3D space have three coordinates, usually referred to as [x,y,z]. Points in 2D space have only two coordinates which are either called [x,y] or [u,v] depending on what kind of two dimensional space we’re talking about. 2D parameter space is bound to a finite surface. It is still continuous, I.e. 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. @@ -14,7 +14,7 @@ Since the surface which defines this particular parameter space resides in regul If this is a hard concept to grasp, it might help to think of yourself and your position in space. We tend to use local coordinate systems to describe our whereabouts; “I’m sitting in the third seat on the seventh row in the movie theatre”, “I’m in the back seat”. If the car you’re in is on the road, your position in global coordinates is changing all the time, even though you remain in the same back seat ‘coordinate’. -####1.3.1.2. VECTORS +#### 1.3.1.2. VECTORS A vector is a geometric quantity describing Direction and Magnitude. Vectors are abstract; ie. they represent a quantity, not a geometrical element. @@ -22,7 +22,7 @@ Vectors are indistinguishable from points. That is, they are both lists of three ![Vectors](images/1-3-1/1-3-1_003-vectors.png) -####1.3.1.3. PLANES +#### 1.3.1.3. 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. ![Planes](images/1-3-1/1-3-1_004-planes.png) diff --git a/pt/1-foundations/1-3/2_working-with-attractors.md b/pt/1-foundations/1-3/2_working-with-attractors.md index 11dc164..32b985c 100644 --- a/pt/1-foundations/1-3/2_working-with-attractors.md +++ b/pt/1-foundations/1-3/2_working-with-attractors.md @@ -6,7 +6,7 @@ thead {display: none} ### 1.3.2. 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 withinGrasshopper 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. +##### Attractors are points that act like virtual magnets - either attracting or repelling other objects. In Grasshopper, any geometry referenced from Rhino or created withinGrasshopper 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. ![Overview](images/1-3-2/1-3-2_001-attractor-overview.png) >1. Attractor point @@ -22,7 +22,7 @@ the length of each vector to scale the radius of each circle. ![Examples](images/1-3-2/1-3-2_002-attractor-examples.png) -####1.3.2.1. ATTRACTOR DEFINITION +#### 1.3.2.1. ATTRACTOR DEFINITION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/pt/1-foundations/1-3/3_mathematics-expressions-conditionals.md b/pt/1-foundations/1-3/3_mathematics-expressions-conditionals.md index bf20802..0aa742c 100644 --- a/pt/1-foundations/1-3/3_mathematics-expressions-conditionals.md +++ b/pt/1-foundations/1-3/3_mathematics-expressions-conditionals.md @@ -7,7 +7,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.3_operators and conditionals.gh) {% endif %} -#####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. +##### 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: @@ -20,7 +20,7 @@ distinction between Integral types (integers) and Floating types (real numbers) this chapter, we’re going to explore different methods for working with and evaluating various sets of numbers. -####1.3.3.1. THE MATH TAB +#### 1.3.3.1. THE 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: ![](images/1-3-3/1-3-3_01-the-math-tab.png) @@ -34,7 +34,7 @@ Most of the components that deal with mathematical operations and functions can 7. The time subcategory has a number of components which allow you to construct instances of dates and times. 8. The utility subcategory is a ‘grab bag’ of useful components that canbe used in various mathematical equations. Check here if you’re trying find the maximum or minimum values between two lists of numbers; or average a group of numbers. -####1.3.3.2. OPERATORS +#### 1.3.3.2. 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. @@ -45,7 +45,7 @@ various data types, including points and vectors. ![](images/1-3-3/1-3-3_02-operators.png) -####1.3.3.3. CONDITIONAL OPERATORS +#### 1.3.3.3. 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 @@ -99,7 +99,7 @@ equal to (<=) condition. ![](images/1-3-3/1-3-3_06-smaller-than.png) -####1.3.3.4. TRIGONOMETRY COMPONENTS +#### 1.3.3.4. TRIGONOMETRY COMPONENTS {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} @@ -195,7 +195,7 @@ thead {display: none} ![](images/1-3-3/1-3-3_21-spiral.png) -####1.3.3.5. EXPRESSIONS +#### 1.3.3.5. EXPRESSIONS {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/pt/1-foundations/1-3/4_domains-color.md b/pt/1-foundations/1-3/4_domains-color.md index 1723d74..47281c1 100644 --- a/pt/1-foundations/1-3/4_domains-color.md +++ b/pt/1-foundations/1-3/4_domains-color.md @@ -4,7 +4,7 @@ td:nth-child(3) {font-size: 70%;width: 15%;} td {background-color: #F9F9F9;} thead {display: none} -###1.3.4. Domains & Color +### 1.3.4. Domains & Color {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -12,7 +12,7 @@ thead {display: none} >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.4_domains and color.gh) {% endif %} -#####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). +##### 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). ![](images/1-3-4/1-3-4_01-color-wheel.png) >In the color wheel, hue corresponds to the angle. Grasshopper has taken this 0-360 domainand remapped it between zero and one. diff --git a/pt/1-foundations/1-3/5_booleans-logical-operators.md b/pt/1-foundations/1-3/5_booleans-logical-operators.md index f2ef12c..77e2364 100644 --- a/pt/1-foundations/1-3/5_booleans-logical-operators.md +++ b/pt/1-foundations/1-3/5_booleans-logical-operators.md @@ -1,11 +1,11 @@ -###1.3.5. Booleans & Logical Operators +### 1.3.5. Booleans & Logical Operators {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.3.5_booleans and logical operators.gh) {% endif %} -####1.3.5.1. BOOLEANS +#### 1.3.5.1. BOOLEANS Numeric variables can store a whole range of different numbers. Boolean variables can only store two values referred to as Yes or No, True or False, 1 or 0. Obviously we never use booleans to perform calculations because of their limited range. We use booleans to evaluate conditions. @@ -22,7 +22,7 @@ Grasshopper also has objects that test conditions and output boolean values. For ![](images/1-3-5/1-3-5_003-includes.png) >The Includes component is testing whether the number 6.8 is included in the domain from 0 to 10. It returns a boolean value of True. -####1.3.5.2. LOGICAL OPERATORS +#### 1.3.5.2. LOGICAL OPERATORS Logical operators 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: diff --git a/pt/1-foundations/1-4/0_designing-with-lists.md b/pt/1-foundations/1-4/0_designing-with-lists.md index d2b563a..da03293 100644 --- a/pt/1-foundations/1-4/0_designing-with-lists.md +++ b/pt/1-foundations/1-4/0_designing-with-lists.md @@ -1,5 +1,5 @@ ## 1.4. 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. +#### 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. ![IMAGE](images/1-4/1-4_001-designing-with-lists.png) diff --git a/pt/1-foundations/1-4/1_curve-geometry.md b/pt/1-foundations/1-4/1_curve-geometry.md index dcf06c3..1c5c3a6 100644 --- a/pt/1-foundations/1-4/1_curve-geometry.md +++ b/pt/1-foundations/1-4/1_curve-geometry.md @@ -1,6 +1,6 @@ ### 1.4.1. 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. +##### 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 has a 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 control-points, if all 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’s Primitive Curve Components such as: lines, circles, ellipses, and arcs. @@ -19,7 +19,7 @@ example, planarity is a global property while tangent vectors are a local proper 2. Edit Point 3. Control Point -####1.4.1.1. NURBS CURVES +#### 1.4.1.1. NURBS CURVES **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 a list of at least degree+1 points. One of the easiest ways to change the shape of a NURBS curve is to move its control points. @@ -41,7 +41,7 @@ NURBS curve knots as a result of varying degree: ![IMAGE](images/1-4-1/1-4-1_005-degree-three.png) >D3 is the most common type of NURBS curve and is the default in Rhino. You are probably very familiar with the visual progression of the spline, even though the knots appear to be in odd locations. -####1.4.1.2. GRASSHOPPER SPLINE COMPONENTS +#### 1.4.1.2. GRASSHOPPER SPLINE COMPONENTS {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/pt/1-foundations/1-4/2_what-is-a-list.md b/pt/1-foundations/1-4/2_what-is-a-list.md index e0867ec..a8801a3 100644 --- a/pt/1-foundations/1-4/2_what-is-a-list.md +++ b/pt/1-foundations/1-4/2_what-is-a-list.md @@ -1,6 +1,6 @@ ### 1.4.2. 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, it is 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. +##### 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, it is 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. diff --git a/pt/1-foundations/1-4/3_data-stream-matching.md b/pt/1-foundations/1-4/3_data-stream-matching.md index 92e81ac..006c717 100644 --- a/pt/1-foundations/1-4/3_data-stream-matching.md +++ b/pt/1-foundations/1-4/3_data-stream-matching.md @@ -5,7 +5,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.3_data matching.gh) {% endif %} -#####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. +##### 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): diff --git a/pt/1-foundations/1-4/4_creating-lists.md b/pt/1-foundations/1-4/4_creating-lists.md index bd1247b..11466f4 100644 --- a/pt/1-foundations/1-4/4_creating-lists.md +++ b/pt/1-foundations/1-4/4_creating-lists.md @@ -5,9 +5,9 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.4_list creation.gh) {% endif %} -#####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. +##### 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. -####1.4.4.1. MANUAL LIST CREATION +#### 1.4.4.1. MANUAL LIST CREATION Perhaps the easiest way to create a list (and one of the most over-looked methods) is to manually type in a list 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 difficult if the list has many entries. There are several ways to manually create a list. One way is to use a Number paramter. Right click the Number parameter and select “Manage Number Collection.” @@ -20,7 +20,7 @@ Another method is to manually enter the list items into a panel. Make sure that ![IMAGE](images/1-4-4/1-4-4_002-panel.png) -####1.4.4.2. RANGE +#### 1.4.4.2. RANGE The Range component, found under Sets/Sequence/Range, creates a list 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. @@ -43,13 +43,13 @@ You may have noticed something a little quirky about the setup we just made. We ![IMAGE](images/1-4-4/1-4-4_005-construct-domain.png) >To create a Range from a domain that does not start at zero, use the Construct Domain component. -####1.4.4.3. SERIES +#### 1.4.4.3. 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. ![IMAGE](images/1-4-4/1-4-4_006-series.png) >The Series component creates a list based on a start value, step value, and the number of values in the list. -###1.4.4.4. RANDOM +### 1.4.4.4. 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. ![IMAGE](images/1-4-4/1-4-4_007-random.png) diff --git a/pt/1-foundations/1-4/5_list-visualization.md b/pt/1-foundations/1-4/5_list-visualization.md index 00cd3c2..09fd157 100644 --- a/pt/1-foundations/1-4/5_list-visualization.md +++ b/pt/1-foundations/1-4/5_list-visualization.md @@ -5,7 +5,7 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.5_list visualization.gh) {% endif %} -#####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. +##### 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 to create 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. @@ -13,13 +13,13 @@ There are many different ways to visualize a list of data. The most common way i Lets look at some components that can help us understand the data. -####1.4.5.1. THE POINT LIST COMPONENT +#### 1.4.5.1. 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. ![IMAGE](images/1-4-5/1-4-5_002-point-list.png) >You can visualize the order of a set of points using the Point List component. -####1.4.5.2. TEXT TAGS +#### 1.4.5.2. TEXT TAGS The text tag component allows you to draw little strings (a string 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. ![IMAGE](images/1-4-5/1-4-5_003-text-tags.png) @@ -31,7 +31,7 @@ They differ, in that, when Text Tag 3d objects are baked into the scene, they be ![IMAGE](images/1-4-5/1-4-5_004-text-tag-3d.png) >You can use a Text Tag 3d component to visualize information like a Text object in Rhino. -####1.4.5.3. COLOR +#### 1.4.5.3. COLOR One of the other things we can do to visualize the list data is to assign color to the geometry. Grasshopper has limited ‘rendering’ capabilities, but we can control simple Open GL settings like color, specular color, transparency, etc. The L0 value represents the low end (left side) of the gradient, whereas the L1 value represents the upper end (right side). These values correspond to the start and end of our domain. The t-values are the elements in the list that will get mapped somewhere within the L0 and L1 range. The output of the gradient is a list of RGB color values which correspond to each point in our list. Right-click on the Gradient to set one of the gradient presets, or define your own using the color node points. ![IMAGE](images/1-4-5/1-4-5_005-custom-preview.png) diff --git a/pt/1-foundations/1-4/6_list-management.md b/pt/1-foundations/1-4/6_list-management.md index fc2c8d3..ea6872c 100644 --- a/pt/1-foundations/1-4/6_list-management.md +++ b/pt/1-foundations/1-4/6_list-management.md @@ -5,41 +5,41 @@ >Example files that accompany this section: [Download](../../appendix/A-2/gh-files/1.4.6_list management.gh) {% endif %} -#####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 a list (numbers, points, vectors, curves, surfaces, breps, etc.) and there are a number of useful tools found under the Sets/List subcategory. +##### 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 a list (numbers, points, vectors, curves, surfaces, breps, etc.) and there are a number of useful tools found under the Sets/List subcategory. -####1.4.6.1. LIST LENGTH +#### 1.4.6.1. LIST LENGTH 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. ![IMAGE](images/1-4-6/1-4-6_001-list-length.png) -####1.4.6.2. LIST ITEM +#### 1.4.6.2. LIST ITEM Our List is 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 in a list, we have to specify the i-input; which corresponds to the index number we would like to retrieve. We can feed a single integer or a list of integers into the i-input depending on how many items we would like to retrieve.The L-input defines the base list which we will be analyzing. In this example, we have set the i-input to 2 so the List Item component returns the data item associated with the 3rd entry number in our list. ![IMAGE](images/1-4-6/1-4-6_002-list-item.png) -####1.4.6.3. REVERSE LIST +#### 1.4.6.3. REVERSE LIST We can invert the order of our list by using a Reverse List component (Sets/List/Reverse). If we input an ascending list of numbers from 0.0 to 50.0 into the Reverse List component; the output returns a descending list from 50.0 to 0.0. ![IMAGE](images/1-4-6/1-4-6_003-reverse-list.png) -####1.4.6.4. SHIFT LIST +#### 1.4.6.4. SHIFT LIST The Shift List component (Sets/Sequence/Shift List) will either move the list up or 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 +1, all values of the list will move up by one entry number. If 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 a shift offset value set to +1, 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 ![IMAGE](images/1-4-6/1-4-6_004-shift-list.png) -####1.4.6.5. INSERT ITEMS +#### 1.4.6.5. INSERT ITEMS The Insert Items component (Sets/Lists/Insert Items) enables you to insert a collection of items into a list. 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. ![IMAGE](images/1-4-6/1-4-6_005-insert-item.png) -####1.4.6.6. WEAVE +#### 1.4.6.6. 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. ![IMAGE](images/1-4-6/1-4-6_006-weave.png) -####1.4.6.7. CULL PATTERN +#### 1.4.6.7. 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. ![IMAGE](images/1-4-6/1-4-6_007-cull-pattern.png) diff --git a/pt/1-foundations/1-5/0_designing-with-data-trees.md b/pt/1-foundations/1-5/0_designing-with-data-trees.md index fc7111a..f90681b 100644 --- a/pt/1-foundations/1-5/0_designing-with-data-trees.md +++ b/pt/1-foundations/1-5/0_designing-with-data-trees.md @@ -1,5 +1,5 @@ -##1.5. DESIGNING WITH DATA TREES +## 1.5. 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. +#### 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. ![IMAGE](images/1-5/1-5_001-designing-with-data-trees.png) diff --git a/pt/1-foundations/1-5/1_surface-geometry.md b/pt/1-foundations/1-5/1_surface-geometry.md index bcc199e..0da1cd7 100644 --- a/pt/1-foundations/1-5/1_surface-geometry.md +++ b/pt/1-foundations/1-5/1_surface-geometry.md @@ -1,6 +1,6 @@ -###1.5.1. Surface Geometry +### 1.5.1. 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. +##### 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. It is also by far the most useful surface definition and the one we will be focusing on. @@ -10,7 +10,7 @@ Apart from a few primitive surface types such as spheres, cones, planes and cyli 3. Plane Primitive [plane, width, height] 4. Cone Primitive [plane, radius, height] -####1.5.1.1. NURBS SURFACES +#### 1.5.1.1. 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. @@ -50,7 +50,7 @@ some of the mesh settings are slightly lower in order to keep the speed of the G 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. -####1.5.1.2. PROJECTING SURFACES +#### 1.5.1.2. PROJECTING SURFACES 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 onto a surface, where vectors are drawn from the 2d geometry in a specified direction until they intersect with the surface. ![IMAGE](images/1-5-1/1-5-1_005-surface-mapping.png) @@ -71,7 +71,7 @@ normal vectors at the corners of each patch to the desired height and creating a box defined by the end points of those vectors and the corner points of the patch. -####1.5.1.3. MORPHING DEFINITION +#### 1.5.1.3. MORPHING DEFINITION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/pt/1-foundations/1-5/2_what-is-a-data-tree.md b/pt/1-foundations/1-5/2_what-is-a-data-tree.md index 8a50e9b..52d840f 100644 --- a/pt/1-foundations/1-5/2_what-is-a-data-tree.md +++ b/pt/1-foundations/1-5/2_what-is-a-data-tree.md @@ -1,6 +1,6 @@ ### 1.5.2. 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. +##### 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 a list of lists, or sometimes a list of lists of lists (and so on). @@ -13,7 +13,7 @@ The image below illustrates the difference between a list and a data tree. On th ![IMAGE](images/1-5-2/1-5-2_002-list-data-tree.png) -####1.5.2.1. DATA TREE VISUALIZATION +#### 1.5.2.1. DATA TREE VISUALIZATION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/pt/1-foundations/1-5/3_creating-data-trees.md b/pt/1-foundations/1-5/3_creating-data-trees.md index 3d4595d..6a29bbb 100644 --- a/pt/1-foundations/1-5/3_creating-data-trees.md +++ b/pt/1-foundations/1-5/3_creating-data-trees.md @@ -6,29 +6,29 @@ {% endif %} -#####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. +##### 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 manipulations and visualize how they affect the tree. -####1.5.3.1. FLATTEN +#### 1.5.3.1. FLATTEN 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. ![IMAGE](images/1-5-3/1-5-3_001-flatten.png) >In the Param Viewer, we can see that we now only have 1 branch containing a list of 48 points. -####1.5.3.2. GRAFT TREE +#### 1.5.3.2. GRAFT TREE Grafting 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 on the same curve. ![IMAGE](images/1-5-3/1-5-3_002-graft.png) >In the Param Viewer, we can see that what was data with 8 branches of 6 items each, we now have 8 branches with 6 sub-branches containing 1 item each. -####1.5.3.3. SIMPLIFY TREE +#### 1.5.3.3. SIMPLIFY TREE Simplify removes overlapping Branches in a Data Tree. If we run the data through the Simplify Tree component (Sets/Tree/Simplify Tree), the first branch, containing no data, has been removed. ![IMAGE](images/1-5-3/1-5-3_003-simplify.png) >In the Param Viewer, we still have 8 branches of 6 items each, but the first branch has been removed. -####1.5.3.4. FLIP MATRIX +#### 1.5.3.4. FLIP MATRIX The Flip Matrix component (Sets/Tree/Flip Matrix) Swaps the “Rows” and “Columns” of a Data Tree with two Path Indices. ![IMAGE](images/1-5-3/1-5-3_004-flip-matrix.png) @@ -42,7 +42,7 @@ operation is performed. If you flatten a component output, the data will be flat 2. Grafted output P 3. Simplified output P -####1.5.3.5. THE PATH MAPPER +#### 1.5.3.5. 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. ![IMAGE](images/1-5-3/1-5-3_006-path-mapper-a.png) @@ -52,7 +52,7 @@ The Path Mapper component (Sets/Tree/Path Mapper) allows you to perform lexical 3. The Mapping Editor 4. You can modify a data tree by re-mapping the path index and the desired branch -####1.5.3.6. WEAVING DEFINITION +#### 1.5.3.6. WEAVING DEFINITION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/pt/1-foundations/1-6/0_Getting Started with Meshes.md b/pt/1-foundations/1-6/0_Getting Started with Meshes.md index 1e4801f..0d22de7 100644 --- a/pt/1-foundations/1-6/0_Getting Started with Meshes.md +++ b/pt/1-foundations/1-6/0_Getting Started with Meshes.md @@ -1,5 +1,5 @@ ## 1.6. Getting Started with Meshes -####In the field of computational modeling, meshes are one of the most pervasive forms of representing 3D geometry. Mesh geometry can be a light-weight and flexible alternative to working with NURBS, and are used in everything from rendering and visualizations to digital fabrication and 3D printing. This chapter will provide an introduction to how mesh geometry is handled in Grasshopper. +#### In the field of computational modeling, meshes are one of the most pervasive forms of representing 3D geometry. Mesh geometry can be a light-weight and flexible alternative to working with NURBS, and are used in everything from rendering and visualizations to digital fabrication and 3D printing. This chapter will provide an introduction to how mesh geometry is handled in Grasshopper. ![IMAGE](images/cover.png) diff --git a/pt/1-foundations/1-6/1_What is a Mesh.md b/pt/1-foundations/1-6/1_What is a Mesh.md index a0908e1..55cd689 100644 --- a/pt/1-foundations/1-6/1_What is a Mesh.md +++ b/pt/1-foundations/1-6/1_What is a Mesh.md @@ -1,13 +1,13 @@ ### 1.6.1 What is a Mesh? -#####A Mesh is a collection of quadrilaterals and triangles that represents a surface or solid geometry. This section discusses the structure of a mesh object, which includes vertices, edges, and faces, as well as additional mesh properties such as colors and normals. +##### A Mesh is a collection of quadrilaterals and triangles that represents a surface or solid geometry. This section discusses the structure of a mesh object, which includes vertices, edges, and faces, as well as additional mesh properties such as colors and normals. ![IMAGE](images/1-6-1/01_mesh-structure.png) >1. Mesh vertices 2. Mesh edges 3. Mesh faces -####1.6.1.1 Basic Anatomy of a Mesh +#### 1.6.1.1 Basic Anatomy of a Mesh Grasshopper defines meshes using a Face-Vertex data structure. At its most basic, this structure is simply a collection of points which are grouped into polygons. The points of a mesh are called *vertices*, while the polygons are called *faces*. To create a mesh we need a list of vertices and a system of grouping those vertices into faces. @@ -61,7 +61,7 @@ It is extremely important to pay attention to the order of the indices when cons >1. A quad face with indices 0,1,2,3 2. A quad with indicies 0,3,1,2 -####1.6.1.2 Implicit Mesh Data +#### 1.6.1.2 Implicit Mesh Data In addition to faces and vertices, there is other information about a mesh that we will want to use. In a Face-Vertex based mesh, data such as *edges* and *normals* are calculated implicitly based on the given faces and vertices. This section describes ways to query this information. @@ -108,7 +108,7 @@ While less intuitive than face normals, vertex normals are important for smooth >1. Normals set according to the face normal results in discrete polygonal shading 2. Adjancent face normals are averaged together to create vertex normals, resulting in smooth shading across faces -####1.6.1.3 Mesh Attributes +#### 1.6.1.3 Mesh Attributes Meshes can also be assigned additional attributes to either vertices or faces. The simplest of these is vertex color, which is described below, but other attributes exist such as texture UV coordinates. (Some programs even allow vertex normals to be assigned as attributes instead of being derived from the faces and vertices, which can provide even more flexibility in rendered surface appearance.) @@ -125,7 +125,7 @@ While the above examples colored the entire mesh, color data are actually assign >1. Red, green, and blue are assigned to the three vertices of a mesh 2. The resulting mesh interpolates the colors of the vertices -####1.6.1.4 Exercise +#### 1.6.1.4 Exercise {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/pt/1-foundations/1-6/2_Understanding Topology.md b/pt/1-foundations/1-6/2_Understanding Topology.md index 0ef1539..11c23e8 100644 --- a/pt/1-foundations/1-6/2_Understanding Topology.md +++ b/pt/1-foundations/1-6/2_Understanding Topology.md @@ -1,6 +1,6 @@ ### 1.6.2 Understanding Topology -#####While the vertices of a mesh contain position information, it is really the connections between the vertices that give a mesh geometry its unique structure and flexibility. +##### While the vertices of a mesh contain position information, it is really the connections between the vertices that give a mesh geometry its unique structure and flexibility. ![IMAGE](images/1-6-2/01_meshMorph2.png) @@ -30,7 +30,7 @@ It is possible for two distinct mesh shapes to be topologically identical. All t >A topologically equivalent mug and donut -####1.6.2.2 Mesh Characteristics +#### 1.6.2.2 Mesh Characteristics **Orientable** @@ -66,7 +66,7 @@ Non-manifold geometry is essentially geometry that cannot exist in the "real wor How is mesh geometry different from NURBS geometry? When might you want to use one instead of the other? -#####Parameterization +##### Parameterization In a previous chapter, we saw that NURBS surfaces are defined by a series of NURBS curves going in two directions. These directions are labeled U and V, and allow a NURBs surface to be parameterized according to a two-dimensional surface domain. The curves themselves are stored as equations in the computer, allowing the resulting surfaces to be calculated to an arbitarily small degree of precision. It can be difficult, however, to combine multiple NURBS surfaces together. Joining two NURBS surfaces will result in a polysurface, where different sections of the geometry will have different UV parameters and curve definitions. Meshes, on the other hand, are comprised of a discrete number of exactly defined vertices and faces. The network of vertices generally cannot be defined by simple UV coordinates, and because the faces are discrete the amount of precision is built into the mesh and can only be changed by refining the mesh and added more faces. The lack of UV coordinates, however, allows meshes the flexibility to handle more complicated geometry with a single mesh, instead of resorting to a polysurface in the case of NURBS. @@ -74,7 +74,7 @@ Meshes, on the other hand, are comprised of a discrete number of exactly defined >Note - While a mesh does not have implicit UV parameterization, it is sometimes useful to assign such a parameterization in order to map a texture or image file onto mesh geometry for rendering. Some modeling software therefore treats the UV coordinates of a mesh vertex as an *attribute* (like vertex color) which can be manipulated and changed. These are usually assigned and not completely defined by the mesh itself. -#####Local vs Global Influence +##### Local vs Global Influence Another important difference is the extent to which a local change in mesh or NURBS geometry affects the entire form. Mesh geometry is completely local. Moving one vertex affects only the faces that are adjacent to that vertex. In NURBS surfaces, the extent of the influence is more complicated and depends on the degree of the surface as well as the weights and knots of the control points. In general, however, moving a single control point in a NURBS surface creates a more global change in geometry. diff --git a/pt/1-foundations/1-6/3_Creating Meshes.md b/pt/1-foundations/1-6/3_Creating Meshes.md index 93a1015..9498672 100644 --- a/pt/1-foundations/1-6/3_Creating Meshes.md +++ b/pt/1-foundations/1-6/3_Creating Meshes.md @@ -1,13 +1,13 @@ ### 1.6.3 Creating Meshes -#####In the last section, we looked at the basic structure of meshes. In this section, we give a brief introduction to different ways of generating mesh geometry. +##### In the last section, we looked at the basic structure of meshes. In this section, we give a brief introduction to different ways of generating mesh geometry. There are three fundamental ways of creating mesh geometry in Grasshopper: 1. Starting with a mesh primitive 2. Manually constructing a mesh from faces and vertices 3. Converting NURBS geometry into a mesh -####1.6.3.1 Primitive +#### 1.6.3.1 Primitive Grasshopper comes with a few simple mesh primitive components: @@ -17,13 +17,13 @@ Grasshopper comes with a few simple mesh primitive components: 3. **Mesh Sphere** - This primitive requires a base plane to determine the center and orientation of the sphere, a radius for the size, and U and V values to determine the number of faces. 4. **Mesh Sphere Ex** - Also known as a Quadball, this primitive creates a sphere composed of six patches, which are subdivided according to the C input. A quadball is topologically equivalent to a cube, even though it is geometrically spherical. -####1.6.3.2 Construct Mesh +#### 1.6.3.2 Construct Mesh ![IMAGE](images/1-6-3/construct-mesh.png) As we saw in the previous section, the **Construct Mesh** component can be used to directly create a mesh from a list of vertices and a list of faces (and an optional list of vertex colors). Constructing an entire mesh manually can be extremely tedious, so this component is more often used with an existing list of faces and vertices which have been extracted using a **Deconstruct Mesh** component on an existing mesh. -####1.6.3.3 NURBS to Mesh +#### 1.6.3.3 NURBS to Mesh Perhaps the most common method of creating a complex mesh is to generate one based off of NURBS geometry. Individual NURBS surfaces can be converted to a mesh using the **Mesh Surface** component, which simply subdivides the surface along its UV coordinates and creates quad faces. This component allows you to enter the number of U and V divisions for the resultant mesh. @@ -35,7 +35,7 @@ More complex polysurfaces can be converted to a single mesh with the **Mesh Brep NOTE: it is generally much easier to convert from a NURBS geometry to a mesh object rather than the other way around. While the UV coordinates of a NURBS surface are straightforward to convert to quad faces of a mesh, the opposite is not necessarily true, since a mesh might contain a combination of triangles and quads in a way that is not simple to extract a UV coordinate system out of. -####1.6.3.4 Exercise +#### 1.6.3.4 Exercise In this exercise, we use a basic Mesh primitive, perform a transformation on the vertices, and then assign a color based on the normal vectors to approximate the rendering process. diff --git a/pt/1-foundations/1-6/4_Mesh Operations.md b/pt/1-foundations/1-6/4_Mesh Operations.md index e62b007..7e4a909 100644 --- a/pt/1-foundations/1-6/4_Mesh Operations.md +++ b/pt/1-foundations/1-6/4_Mesh Operations.md @@ -1,8 +1,8 @@ ### 1.6.4 Mesh Operations -#####In the last section, we looked at the basic structure of a mesh. In this section, we will look at ways to manipulate mesh geometry. +##### In the last section, we looked at the basic structure of a mesh. In this section, we will look at ways to manipulate mesh geometry. -####1.6.4.1 Smooth +#### 1.6.4.1 Smooth ![IMAGE](images/1-6-4/smooth.png) @@ -17,7 +17,7 @@ Attaching a boolean value to the input N provides option to skip naked vertices. 4. 25 iterations 5. 50 iterations -####1.6.4.2 Blur +#### 1.6.4.2 Blur ![IMAGE](images/1-6-4/blur.png) @@ -30,7 +30,7 @@ The **Blur** component acts in a similar way as smooth, except it only affect th 4. 12 iterations 5. 20 iterations -####1.6.4.3 Triangulate +#### 1.6.4.3 Triangulate ![IMAGE](images/1-6-4/triangulate.png) @@ -41,7 +41,7 @@ In order to ensure each face is planar, or to export a mesh to a different softw 2. Added edges according to shortest distance across quads 3. Triangulated resultant mesh -####1.6.4.4 Weld +#### 1.6.4.4 Weld ![IMAGE](images/1-6-4/weld.png) diff --git a/pt/1-foundations/1-6/5_Mesh Interactions.md b/pt/1-foundations/1-6/5_Mesh Interactions.md index 5ad3bea..02a239b 100644 --- a/pt/1-foundations/1-6/5_Mesh Interactions.md +++ b/pt/1-foundations/1-6/5_Mesh Interactions.md @@ -1,9 +1,9 @@ ### 1.6.5 Mesh Interactions -#####This section looks at ways in which Mesh Objects can interact with other objects, such as evaluating nearest points or combining multiple meshes together. +##### This section looks at ways in which Mesh Objects can interact with other objects, such as evaluating nearest points or combining multiple meshes together. -####1.6.5.1 Mesh Geometry and Points +#### 1.6.5.1 Mesh Geometry and Points **Inclusion** @@ -37,7 +37,7 @@ The following four numbers define the *barycentric* coordinates of the point wit The **Mesh Eval** component uses a mesh parameter as an input and returns the referenced point, as well as the normal and color at that point. The color and normal are calculated as interpolations of the vertex colors and vertex normals, using the same barycentric coordinates as the mesh parameter. -####1.6.5.2 Combining Mesh Geometry +#### 1.6.5.2 Combining Mesh Geometry **Mesh Join** @@ -58,7 +58,7 @@ Meshes in Grasshopper have a set of boolean operations similar to boolean operat 4. Mesh Union -####1.6.5.3 Intersections and Occlusions +#### 1.6.5.3 Intersections and Occlusions **Intersect** diff --git a/pt/1-foundations/1-6/6_Working with Mesh Geometry.md b/pt/1-foundations/1-6/6_Working with Mesh Geometry.md index 25e3e29..cf0f49b 100644 --- a/pt/1-foundations/1-6/6_Working with Mesh Geometry.md +++ b/pt/1-foundations/1-6/6_Working with Mesh Geometry.md @@ -1,6 +1,6 @@ ### 1.6.6 Working with Mesh Geometry -#####In this section, we will work through an exercise file for producing a complete mesh solid. By the end of this exercise, we will have a dynamic definition to produce custom vases that can be 3D printed. +##### In this section, we will work through an exercise file for producing a complete mesh solid. By the end of this exercise, we will have a dynamic definition to produce custom vases that can be 3D printed. {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/pt/2-extensions/2-1/2_HalfEdge_Data.md b/pt/2-extensions/2-1/2_HalfEdge_Data.md index c0b29d2..2a44ef7 100644 --- a/pt/2-extensions/2-1/2_HalfEdge_Data.md +++ b/pt/2-extensions/2-1/2_HalfEdge_Data.md @@ -1,4 +1,4 @@ -###2.1.2. Half Edge Data +### 2.1.2. Half Edge Data In the Grasshopper primer, we looked at how Grasshopper defines a mesh using a Face-Vertex data structure. This is a relatively simple data structure and is widely used in applications that use meshes, but can be computationally inefficient for more advanced algorithms. The Element\* add-on restructures the mesh using Half-Edge data, an edge-centered data structure, which allows for efficient queries of adjacent vertices, faces, and edges, which can vastly improve on algorithm speed and performance. This structure is capable of maintaining incidence information of vertices, edges and faces. This method facilitates the creation of new patterns and geometries all based on the topological relationship of the base geometry. @@ -6,10 +6,10 @@ The half-edge data structure is a representation for a mesh in which each edge i ![IMAGE](images/2-1-2/2-1-2_001_Half-Edge.png) -####2.1.2.1 Half-Edge Connectivity +#### 2.1.2.1 Half-Edge Connectivity The half-edge highlighted in blue explicitly stores indices to its termination point, adjacent half-edges, and the face it belongs to. The other information (gray) can be accessed implicitly. ![IMAGE](images/2-1-2/2-1-2_002_Half-Edge.png) -####2.1.2.2 Vertex Connectivity +#### 2.1.2.2 Vertex Connectivity The vertex highlighted in blue explicitly stores an index to one of its outgoing half-edges. The other information (gray) can be accessed implicitly. ![IMAGE](images/2-1-2/2-1-2_003_Half-Edge.png) diff --git a/pt/2-extensions/2-1/3_Components.md b/pt/2-extensions/2-1/3_Components.md index d0fb5bb..35e033a 100644 --- a/pt/2-extensions/2-1/3_Components.md +++ b/pt/2-extensions/2-1/3_Components.md @@ -1,8 +1,8 @@ -###2.1.3. Element* Components +### 2.1.3. Element* Components ![IMAGE](images/2-1-3/2-1-3_001_Components-Tabs.png) -####2.1.3.1 Analyse +#### 2.1.3.1 Analyse ![IMAGE](images/2-1-3/2-1-3_002_Analyse-Components.png) >1. Mesh Closest Point @@ -25,7 +25,7 @@ This component is used to quickly extract color information from a mesh. It retu -####2.1.3.2 Data +#### 2.1.3.2 Data ![IMAGE](images/2-1-3/2-1-3_003_Data-Components.png) >1. Data Visualizer @@ -59,7 +59,7 @@ This component outputs the mesh vertices, neighboring vertices (arranged in cloc ![IMAGE](images/2-1-3/2-1-3_006_Vertex-Neighbors.png) > **Vertex Neighbors** - Vertices, neighbouring vertices, neighbouring edges, neighbouring face centers -####2.1.3.3 Primitives +#### 2.1.3.3 Primitives Element\* provides four additional mesh primitives: the Dodecahedron, Tetrahedron, Octahedron, and Icosahedron. These components take a single number as input for the radius, and produce meshes centered at the origin, and composed of one face per side. With the addition of the Cube, which is already availible through Grasshopper's built-in primitives, these make up the five Platonic solids. @@ -69,13 +69,13 @@ Element\* provides four additional mesh primitives: the Dodecahedron, Tetrahedro 3. Octahedron 4. Icosahedron -####2.1.3.4 Smooth +#### 2.1.3.4 Smooth **Element\* Smooth** provides an optimized smoothing algorithm that is more efficient than Grasshopper's **Smooth Mesh** for large datasets. It makes use of the Lapacian Smoothing algorithm for Half-Edge structured meshes. It does not change the topology or vertex count of welded meshes, but will combine identical vertices if there are any duplicates caused by an unwelded mesh. We can specify the smoothing strength, boundary condition, boundary tolerance as well as the number of iterations. ![IMAGE](images/2-1-3/2-1-3_008_Smooth.png) -####2.1.3.5 Subdivide +#### 2.1.3.5 Subdivide **Element\* Catmull Clark Subdivision** @@ -90,7 +90,7 @@ This subdivison component will create an all quad mesh by adding a face for each >1. Constant Quad subdivision 2. Catmull Clark subdivision -####2.1.3.6 Transform +#### 2.1.3.6 Transform ![IMAGE](images/2-1-3/2-1-3_010_Transform-Components.png) >1. Mesh Windown @@ -127,7 +127,7 @@ For example, a four-sided polygon (quad) is split into 4 three-sided polygons wi 2. Mesh Frame 3. Icosohedron transformed with mesh frame, then thickend and subdivided -####2.1.3.7 Utility +#### 2.1.3.7 Utility ![IMAGE](images/2-1-3/2-1-3_012_Utility-Component.png) >1. Mesh Combine & Clean diff --git a/pt/2-extensions/2-1/4_Exercise.md b/pt/2-extensions/2-1/4_Exercise.md index 0c9271a..bec7c1f 100644 --- a/pt/2-extensions/2-1/4_Exercise.md +++ b/pt/2-extensions/2-1/4_Exercise.md @@ -1,6 +1,6 @@ -###2.1.4. Exercise +### 2.1.4. Exercise -#####In this section, we will work through a simple exercise using the Element* primitives as a base. We will incorporate the half-edge data structure as well using both features of the transform components (uniform and per vertex) +##### In this section, we will work through a simple exercise using the Element* primitives as a base. We will incorporate the half-edge data structure as well using both features of the transform components (uniform and per vertex) ![IMAGE](images/2-1-4/2-1-4_000_Cover.png) {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} diff --git a/pt/2-extensions/2-1/5_Architectural Case Study.md b/pt/2-extensions/2-1/5_Architectural Case Study.md index 600a37a..9477e55 100644 --- a/pt/2-extensions/2-1/5_Architectural Case Study.md +++ b/pt/2-extensions/2-1/5_Architectural Case Study.md @@ -1,11 +1,11 @@ -###2.1.5. Element* Architectural Case Study +### 2.1.5. Element* Architectural Case Study -#####In this section, we will work through a simple exercise file that is meant as an introduction to working with Element tools. We will explore some patterning and facade treatments in the field of Architecture which will incorporate Half Edge data structures along with basic Element components without the use of per vertex features. +##### In this section, we will work through a simple exercise file that is meant as an introduction to working with Element tools. We will explore some patterning and facade treatments in the field of Architecture which will incorporate Half Edge data structures along with basic Element components without the use of per vertex features. ![IMAGE](images/2-1-5/2-1-5_001_Main-Render.jpg) -####2.1.5.1 Example 1 +#### 2.1.5.1 Example 1 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -87,7 +87,7 @@ thead {display: none} ![IMAGE](images/2-1-5/2-1-5_022_Definition.png) --- -####2.1.5.2 Example 2 +#### 2.1.5.2 Example 2 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Example files that accompany this section: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/pt/README.md b/pt/README.md index fa48e9f..9331656 100644 --- a/pt/README.md +++ b/pt/README.md @@ -1,12 +1,12 @@ -#The Grasshopper Primer (EN) -##Third Edition V3.3 +# The Grasshopper Primer (EN) +## Third Edition V3.3 ![Primer Release Cover](0-about/images/GHP3_5Pages.png) > Grasshopper is a graphical algorithm editor tightly integrated with Rhino’s 3-D modeling tools, allowing designers to build form generators from the simple to the awe-inspiring. -###WELCOME +### 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 Rhino4 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, *and now web-based*, 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](http://modelab.is) 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. It is our goal that this primer will serve as a field guide to new and existing users looking @@ -66,7 +66,7 @@ form generators from the simple to the awe inspiring. http://www.grasshopper3d.com/page/download-1 -###FORUMS +### 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 & @@ -84,5 +84,5 @@ McNeel Forum powered by Discourse. http://discourse.mcneel.com/ -###LICENSING INFORMATION +### LICENSING INFORMATION The Grasshopper Primer is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license. The full text of this license is available here: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode diff --git a/pt/SUMMARY.md b/pt/SUMMARY.md index 160af29..dc00ae3 100644 --- a/pt/SUMMARY.md +++ b/pt/SUMMARY.md @@ -40,7 +40,7 @@ * [Mesh Operations](1-foundations/1-6/4_Mesh Operations.md) * [Mesh Interactions](1-foundations/1-6/5_Mesh Interactions.md) * [Working with Mesh Geometry](1-foundations/1-6/6_Working with Mesh Geometry.md) -#BOOK 2 - Extensions +# BOOK 2 - Extensions * [Extensions](2-extensions/2-extensions.md) * [Element*](2-extensions/2-1/0_Element.md) * [Introduction](2-extensions/2-1/1_Element_Intro.md) diff --git a/pt/appendix/A-1/0_index-of-components.md b/pt/appendix/A-1/0_index-of-components.md index 3a22f41..360ed22 100644 --- a/pt/appendix/A-1/0_index-of-components.md +++ b/pt/appendix/A-1/0_index-of-components.md @@ -19,12 +19,12 @@ thead {display: none} ## 2.1. 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. +##### 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 +#### Geometry |||| |--|--|--| |P.G.Crv|Curve Parameter
Represents a collection of Curve geometry. Curve geometry is the common denominator of all curve types in Grasshopper.|![IMAGE](images/PGCrv.png)| @@ -34,7 +34,7 @@ Parameters |P.G.Pt|Point Parameter
Point parameters are capable of storing persistent data. You can set the persistent records through the parameter menu.|![IMAGE](images/PGPt.png)| |P.G.Srf|Surface Parameter
Represents a collection of Surface geometry. Surface geometry is the common denominator of all surface types in Grasshopper.|![IMAGE](images/PGSrf.png)| -####Primitive +#### Primitive |||| |--|--|--| |P.P.Bool|Boolean Parameter
Represents a collection of Boolean (True/False) values.|![IMAGE](images/PPBool.png)| @@ -45,7 +45,7 @@ Parameters |P.P.Num|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.|![IMAGE](images/PPNum.png)| |P.P.Path|File Path
Contains a collection of file paths.|![IMAGE](images/PPPath.png)| -####Input +#### Input |||| |--|--|--| |P.I.Toggle|Boolean Toggle
Boolean (true/false) toggle.|![IMAGE](images/PIToggle.png)| @@ -57,7 +57,7 @@ Parameters |P.I.Panel|Panel
A panel for custom notes and text values. It is typically an inactive object that allows you to add remarks or explanations to a Document. Panels can also receive their information from elsewhere. If you plug an output parameter into a Panel, you can see 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.|![IMAGE](images/PIPanel.png)| |P.I.List|Value List
Provides a list of preset values from which to choose.|![IMAGE](images/PIList.png)| -####Utilities +#### Utilities |||| |--|--|--| |P.U.Cin|Cluster Input
Represents a cluster input parameter.|![IMAGE](images/PUCin.png)| @@ -70,7 +70,7 @@ Parameters Maths -- -####Domain +#### Domain |||| |--|--|--| |M.D.Bnd|Bounds
Create a numeric domain which encompasses a list of numbers.|![IMAGE](images/MDBnd.png)| @@ -84,7 +84,7 @@ Maths |M.D.ReMap|Remap Numbers
Remap numbers into a new numeric domain.|![IMAGE](images/MDReMap.png)| -####Operators +#### Operators |||| |--|--|--| |M.O.Add|Addition
Mathematical addition.|![IMAGE](images/MOAdd.png)| @@ -99,13 +99,13 @@ Maths |M.O.Similar|Similarity
Test for similarity of two numbers.|![IMAGE](images/MOSimilar.png)| |M.O.Sub|Subtraction
Mathematical subtraction.|![IMAGE](images/MOSub.png)| -####Script +#### Script |||| |--|--|--| |M.S.Eval|Evaluate
Evaluate an expression with a flexible number of variables.|![IMAGE](images/MSEval.png)| |M.S.Expression|Expression
Evaluate an expression.|![IMAGE](images/MSExpression.png)| -####Trig +#### Trig |||| |--|--|--| |M.T.Cos|Cosine
Compute the cosine of a value.|![IMAGE](images/MTCos.png)| @@ -113,7 +113,7 @@ Maths |M.T.Rad|Radians
Convert an angle specified in degrees to radians.|![IMAGE](images/MTRad.png)| |M.T.Sin|Sine
Compute the sine of a value.|![IMAGE](images/MTSin.png)| -####Utilities +#### Utilities |||| |--|--|--| |M.U.Avr|Average
Solve the arithmetic average for a set of items.|![IMAGE](images/MUAvr.png)| @@ -123,7 +123,7 @@ Maths Sets -- -####List +#### List |||| |--|--|--| |S.L.Combine|Combine Data
Combine non-null items out of several inputs.|![IMAGE](images/SLCombine.png)| @@ -142,7 +142,7 @@ Sets |S.L.Sort|Sort List
Sort a list of numeric keys. In order for something to be sorted, it must first be comparable. Most types of data are not 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 a list of keys first.|![IMAGE](images/SLSort.png)| |S.L.Weave|Weave
Weave a set of input data using a custom pattern. The pattern is specified as a list of index values (integers) that define the order in which input data is collected.|![IMAGE](images/SLWeave.png)| -####Sets +#### Sets |||| |--|--|--| |S.S.Culli|Cull Index
Cull (remove) indexed elements from a list.|![IMAGE](images/SSCulli.png)| @@ -154,7 +154,7 @@ Sets |S.S.Repeat|Repeat Data
Repeat a pattern until it reaches a certain length.|![IMAGE](images/SSRepeat.png)| |S.S.Series|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.|![IMAGE](images/SSSeries.png)| -####Tree +#### Tree |||| |--|--|--| |S.T.Explode|Explode Tree
Extract all the branches from a tree.|![IMAGE](images/STExplode.png)| @@ -171,21 +171,21 @@ Sets Vector -- -####Grid +#### Grid |||| |--|--|--| |V.G.HexGrid|Hexagonal
2D grid with hexagonal cells.|![IMAGE](images/VGHexGrid.png)| |V.G.RecGrid|Rectangular
2D grid with rectangular cells.|![IMAGE](images/VGRecGrid.png)| |V.G.SqGrid|Square
2D grid with square cells|![IMAGE](images/VGSqGrid.png)| -####Point +#### Point |||| |--|--|--| |V.P.Pt|Construct Point
Construct a point from {xyz} coordinates.|![IMAGE](images/VPPt.png)| |V.P.pDecon|Deconstruct
Deconstruct a point into its component parts.|![IMAGE](images/VPpDecon.png)| |V.P.Dist|Distance
Compute Euclidean distance between two point coordinates.|![IMAGE](images/VPDist.png)| -####Vector +#### Vector |||| |--|--|--| |V.V.X|Unit X
Unit vector parallel to the world {x} axis.|![IMAGE](images/VVX.png)| @@ -195,17 +195,17 @@ Vector Curve -- -####Analysis +#### Analysis |||| |--|--|--| |C.A.CP|Control Points
Extract the nurbs control points and knots of a curve.|![IMAGE](images/CACP.png)| -####Division +#### Division |||| |--|--|--| |C.D.Divide|Divide Curve
Divide a curve into equal length segments.|![IMAGE](images/CDDivide.png)| -####Primitive +#### Primitive |||| |--|--|--| |C.P.Cir|Circle
Create a circle defined by base plane and radius.|![IMAGE](images/CPCir.png)| @@ -214,7 +214,7 @@ Curve |C.P.Line|Line SDL
Create a line segment defined by start point, tangent and length.|![IMAGE](images/CPLine.png)| |C.P.Polygon|Polygon
Create a polygon with optional round edges.|![IMAGE](images/CPPolygon.png)| -####Spline +#### Spline |||| |--|--|--| |C.S.IntCrv|Interpolate
Create an interpolated curve through a set of points.|![IMAGE](images/CSIntCrv.png)| @@ -222,7 +222,7 @@ Curve |C.S.Nurbs|Nurbs Curve
Construct a nurbs curve from control points.|![IMAGE](images/CSNurbs.png)| |C.S.PLine|PolyLine
Create a polyline connecting a number of points.|![IMAGE](images/CSPLine.png)| -####Util +#### Util |||| |--|--|--| |C.U.Explode|Explode
Explode a curve into smaller segments.|![IMAGE](images/CUExplode.png)| @@ -232,12 +232,12 @@ Curve Surface -- -####Analysis +#### Analysis |||| |--|--|--| |S.A.DeBrep|Deconstruct Brep
Deconstruct a brep into its constituent parts.|![IMAGE](images/SADeBrep.png)| -####Freeform +#### Freeform |||| |--|--|--| |S.F.Boundary|Boundary Surfaces
Create planar surfaces from a collection of boundary edge curves.|![IMAGE](images/SFBoundary.png)| @@ -247,12 +247,12 @@ Surface |S.F.RevSrf|Revolution
Create a surface of revolution.|![IMAGE](images/SFRevSrf.png)| |S.F.Swp2|Sweep2
Create a sweep surface with two rail curves.|![IMAGE](images/SFSwp2.png)| -####Primitive +#### Primitive |||| |--|--|--| |S.P.BBox|Bounding Box
Solve oriented geometry bounding boxes.|![IMAGE](images/SPBBox.png)| -####Util +#### Util |||| |--|--|--| |S.U.SDivide|Divide Surface
Generate a grid of {uv} points on a surface.|![IMAGE](images/SUSDivide.png)| @@ -261,7 +261,7 @@ Surface Mesh -- -####Triangulation +#### Triangulation |||| |--|--|--| |M.T.Voronoi|Voronoi
Planar voronoi diagram for a collection of points.|![IMAGE](images/MTVoronoi.png)| @@ -269,17 +269,17 @@ Mesh Transform -- -####Affine +#### Affine |||| |--|--|--| |T.A.RecMap|Rectangle Mapping
Transform geometry from one rectangle into another.|![IMAGE](images/TARecMap.png)| -####Array +#### Array |||| |--|--|--| |T.A.ArrLinear|Linear Array
Create a linear array of geometry.|![IMAGE](images/TAArrLinear.png)| -####Morph +#### Morph |||| |--|--|--| |T.M.Morph|Box Morph
Morph an object into a twisted box.|![IMAGE](images/TMMorph.png)| @@ -288,23 +288,23 @@ Transform Display -- -####Color +#### Color |||| |--|--|--| |D.C.HSL|Colour HSL
Create a colour from floating point {HSL} channels.|![IMAGE](images/DCHSL.png)| -####Dimensions +#### Dimensions |||| |--|--|--| |D.D.Tag|Text tags
A text tag component allows you to draw little Strings in the viewport as feedback items. Text and location are specified as input parameters. When text tags are baked they turn into Text Dots.|![IMAGE](images/DDTag.png)| |D.D.Tag3D|Text Tag 3D
Represents a list of 3D text tags in a Rhino viewport|![IMAGE](images/DDTag3D.png)| -####Preview +#### Preview |||| |--|--|--| |D.P.Preview|Custom Preview
Allows for customized geometry previews.|![IMAGE](images/DPPreview.png)| -####Vector +#### Vector |||| |--|--|--| |D.V.Points|Point List
Displays details about lists of points.|![IMAGE](images/DVPoints.png)| diff --git a/pt/appendix/A-2/0_resources.md b/pt/appendix/A-2/0_resources.md index b31f582..78a7d94 100644 --- a/pt/appendix/A-2/0_resources.md +++ b/pt/appendix/A-2/0_resources.md @@ -1,8 +1,8 @@ -##2.3. Resources +## 2.3. 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. +##### 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 +### Plug-in Communities -##About This Primer +## About This Primer -###Authors +### Authors ![IMAGE](images/akos.png) -#####Gil Akos, Mode Lab +##### Gil Akos, 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 @@ -27,7 +27,7 @@ http://modelab.is/education ![IMAGE](images/parsons.png) -#####Ronnie Parsons, Mode Lab +##### 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 @@ -39,7 +39,7 @@ http://modelab.is/education ![IMAGE](images/modelab.png) -#####Mode Lab Team: +##### Mode Lab Team: -###Contributors +### Contributors ![IMAGE](images/payne.png) -#####Andrew Payne, Principal, Lift Architects +##### 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 @@ -85,7 +85,7 @@ http://www.grasshopper3d.com/ -###LICENSING INFORMATION +### LICENSING INFORMATION The Grasshopper Primer is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license. The full text of this license is available here: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode Under this license, you are free: diff --git a/ru/0-about/1-grasshopper-an-overview.md b/ru/0-about/1-grasshopper-an-overview.md index da11f90..316f813 100644 --- a/ru/0-about/1-grasshopper-an-overview.md +++ b/ru/0-about/1-grasshopper-an-overview.md @@ -1,6 +1,6 @@ ## Grasshopper - Обзор -#####Grasshopper - это редактор визуального программирования, разработанный Дэвидом Руттеном в Robert McNeel & Associates. Будучи плагином для Rhino3D, Grasshopper интегрирован с мощной и многофункциональной моделирующей средой, которая используется творческими профессионалами в широком диапазоне областей, включая архитектуру, проектирование, дизайн продукта и др. В тандеме, Grasshopper и Rhino предлагают нам возможность установить точный параметрический контроль за моделями, способность исследовать генеративный процесс проектирования, а также платформу для развития логики программирования высокого уровня - и все это при помощи интуитивно-понятного графического интерфейса. +##### Grasshopper - это редактор визуального программирования, разработанный Дэвидом Руттеном в Robert McNeel & Associates. Будучи плагином для Rhino3D, Grasshopper интегрирован с мощной и многофункциональной моделирующей средой, которая используется творческими профессионалами в широком диапазоне областей, включая архитектуру, проектирование, дизайн продукта и др. В тандеме, Grasshopper и Rhino предлагают нам возможность установить точный параметрический контроль за моделями, способность исследовать генеративный процесс проектирования, а также платформу для развития логики программирования высокого уровня - и все это при помощи интуитивно-понятного графического интерфейса. Grasshopper берет свое начало в функционале кнопки "Record History" в Rhino3D версия 4. Данная встроенная функция давала пользователям @@ -76,7 +76,7 @@ Grasshopper, а также о "live" характеристиках - обрат ![IMAGE](images/flow.png) >Программа работает слева направо -####НЕОБХОДИМО ЗАПОМНИТЬ +#### НЕОБХОДИМО ЗАПОМНИТЬ * Grasshopper - это редактор графических алгоритмов, интегрированный с 3D моделирующими инструментами Rhino. * Алгоритмы - это пошаговые процедуры, спроектированные для выполнения diff --git a/ru/1-foundations/1-1/1_installing-and-launching-grasshopper.md b/ru/1-foundations/1-1/1_installing-and-launching-grasshopper.md index 5dfeac1..c713974 100644 --- a/ru/1-foundations/1-1/1_installing-and-launching-grasshopper.md +++ b/ru/1-foundations/1-1/1_installing-and-launching-grasshopper.md @@ -1,10 +1,10 @@ ### 1.1.1. УСТАНОВКА И ЗАПУСК GRASSHOPPER -#####Плагин Grasshopper часто обновляется, убедитесь, что у вас последняя версия. -#####Обратите внимание, что на данный момент версии Grasshopper для Mac не сущетсвует. +##### Плагин Grasshopper часто обновляется, убедитесь, что у вас последняя версия. +##### Обратите внимание, что на данный момент версии Grasshopper для Mac не сущетсвует. -####1.1.1.1. СКАЧИВАНИЕ +#### 1.1.1.1. СКАЧИВАНИЕ Чтобы скачать плагин Grasshopper, зайдите на сайт Grasshopper. Нажмите на вкладку Download вверху страницы, когда появится подсказка на экране, введите ваш email адрес. Затем, кликните правой клавишей по ссылке скачивания и выберите Save Target as из меню. Выберите расположение на вашем жестком диске (внимание файл не может быть загружен через сетевое подключение, поэтому файл должен быть сохранен на жесткий диск вашего компьютера) и сохраните исполняемый файл по этому адресу. ![](images/1-1-1/1-1-1_001-downloading.png) @@ -12,13 +12,13 @@ >Скачайте Grasshopper с сайта [grasshopper3d.com](http://grasshopper3d.com). -####1.1.1.2. УСТАНОВКА +#### 1.1.1.2. УСТАНОВКА Выберите Run из диалогового окна установки и следуйте инструкциям по установке. (примечание: чтобы плагин установился корректно, у вас уже должен быть установлен Rhino 5). ![IMAGE](images/1-1-1/1-1-1_002-installing.png) >Следуйте пошагово за Мастером Установки. -####1.1.1.3. ЗАПУСК +#### 1.1.1.3. ЗАПУСК Чтобы запустить Grasshopper, наберите Grasshopper в командной строке Rhino. При запуске Grasshopper, первое, что вы увидите, это новое окно, всплывшее перед окном Rhino. Внутри этого окна вы можете создавать программы, основанные на нодах, для автоматизации различных типов функциональности в Rhino. Лучшей всего, расположить окна так, чтобы они не накладывались друг на друга, чтобы окно Grasshopper не заслоняло видовое окно Rhino. ![IMAGE](images/1-1-1/1-1-1_003-launching-a.png) diff --git a/ru/1-foundations/1-1/2_the-grasshopper-ui.md b/ru/1-foundations/1-1/2_the-grasshopper-ui.md index f485cb3..d198d67 100644 --- a/ru/1-foundations/1-1/2_the-grasshopper-ui.md +++ b/ru/1-foundations/1-1/2_the-grasshopper-ui.md @@ -1,6 +1,6 @@ ### 1.1.2. ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС GRASSHOPPER -#####Визуальный стиль Grasshopper "plug-and-play" дает дизайнерам возможность сочетать творческое решение вопросов с инновационными системами правил посредством использования потокового графического интерфейса. +##### Визуальный стиль Grasshopper "plug-and-play" дает дизайнерам возможность сочетать творческое решение вопросов с инновационными системами правил посредством использования потокового графического интерфейса. Давайте начнем знакомство с Grasshopper с пользовательского интерфейса UI. Grasshopper - это приложение визуального программирования, где вы можете создавать программы, называемые @@ -22,7 +22,7 @@ definition (определение) или documents (документы), пу 8. Строка состояния сообщает вам о том, какая версия Grasshopper установлена в текущий момент на вашем компьютере. При наличии более новой версии, выпадает меню с инструкциями, как скачать последнюю версию. -####1.1.2.1. СТРОКА ЗАГОЛОВКА ОКНА +#### 1.1.2.1. СТРОКА ЗАГОЛОВКА ОКНА Редактор строки заголовка окна ведет себя по-разному в отличие от большинства других диалоговых окон в Microsoft Windows. Если окно находится не в уменьшенном или увеличенном размере, двойной клик @@ -39,7 +39,7 @@ Grasshopper остается активной до тех пор, пока Rhino -####1.1.2.2. СТРОКА ГЛАВНОГО МЕНЮ +#### 1.1.2.2. СТРОКА ГЛАВНОГО МЕНЮ Эта строка похожа на обычное меню Windows, за исключением контроля диспетчера файла справа (см.следующий раздел). Меню файла предоставляет стандартные функции (например, New File (новый документ), Open (открыть), Save (сохранить) и т.д.) в @@ -66,7 +66,7 @@ Author (Автор) позволяет настраивать персональ ![IMAGE](images/1-1-2/1-1-2_002-settings.png) >Окно Preferences позволяет настроить большинство из настроек приложения Grasshopper. -####1.1.2.3. УПРАВЛЕНИЕ ДИСПЕТЧЕРОМ ФАЙЛОВ +#### 1.1.2.3. УПРАВЛЕНИЕ ДИСПЕТЧЕРОМ ФАЙЛОВ Диспетчер файлов позволяет быстро переключаться между различными загруженными файлами, выбирая их через выпадающий список. Получив доступ к вашим открытым файлам через выпадающий список диспетчера файлов, вы сможете быстро копировать @@ -115,7 +115,7 @@ Grasshopper также обладает функцией Автосохране ![IMAGE](images/1-1-2/1-1-2_003-autosave.png) >Файлы, которые перетащили на холст. -####1.1.2.4. ПАНЕЛИ КОМПОНЕНТОВ +#### 1.1.2.4. ПАНЕЛИ КОМПОНЕНТОВ В этой области размещены компоненты, которые разделены на категории и свитки. Категории отображаются как вкладки, свитки отображаются как выпадающие панели. Все компоненты принадлежат к определенной категории. Эти категории были разбиты @@ -143,12 +143,12 @@ Grasshopper также обладает функцией Автосохране 5. Выпадающее меню. -####1.1.2.5. ХОЛСТ +#### 1.1.2.5. ХОЛСТ Холст - это основное рабочее пространство для создания определения Grasshopper. Здесь вы можете взаимодействовать с элементами вашего визуального программирования. Вы можете начать работать на холсте, размещая компоненты и соединяя их связями. -####1.1.2.6. ГРУППИРОВАНИЕ +#### 1.1.2.6. ГРУППИРОВАНИЕ Группирование компонентов вместе на холсте может быть особенно полезно для разборчивости и доступности для восприятия. Группирование позволяет вам быстро выбирать и передвигать множество компонентов по холсту. Вы можете создать группу, @@ -168,7 +168,7 @@ Grasshopper также обладает функцией Автосохране ![IMAGE](images/1-1-2/1-1-2_008-grouping3.png) >Две группы расположены одна внутри другой. Цвет (светло-голубой) был изменен у внешней группы для лучшей визуальной идентификации одной группы от другой. Группы начерчены "позади" компонентов и включают их, в таких случаях как этот, присутствует глубина цвета в соответствии и порядком двух групп. Чтобы изменить это, нажмите Edit>Arrange в строке главного меню. -####1.1.1.7. ВИДЖЕТЫ +#### 1.1.1.7. ВИДЖЕТЫ В Grasshopper доступны несколько виджетов, которые могут помочь вам выполнять полезные действия. Вы можете включить/выключить любые из этих виджетов под меню Display (дисплей/отображение) на Строке главного меню. Ниже мы познакомимся @@ -215,7 +215,7 @@ Grasshopper также обладает функцией Автосохране -####1.1.2.8. ИСПОЛЬЗОВАНИЕ ФУНКЦИИ ПОИСКА +#### 1.1.2.8. ИСПОЛЬЗОВАНИЕ ФУНКЦИИ ПОИСКА Несмотря на то, что было много размышлений насчет того, как лучше расположить каждый компонент на панели, чтобы это было интуитивно легко для новых пользователей, им все равно иногда трудно найти определенный компонент, который может быть @@ -234,7 +234,7 @@ Grasshopper также обладает функцией Автосохране 3. Компонент Divide Domain2. -####1.1.2.9. ФУНКЦИЯ ПОИСКА +#### 1.1.2.9. ФУНКЦИЯ ПОИСКА Существуют, в буквальном смысле, сотни (если не тысячи) компонентов Grasshopper, которые вы можете использовать, и вас, как новичка, может испугать поиск определенного компонента на Панели Компонентов. Быстрое решение - это @@ -273,7 +273,7 @@ Grasshopper также обладает функцией Автосохране -####1.1.2.10. ИСПОЛЬЗОВАНИЕ РАДИАЛЬНОГО МЕНЮ +#### 1.1.2.10. ИСПОЛЬЗОВАНИЕ РАДИАЛЬНОГО МЕНЮ По мере того, как вы будете становиться большими профессионалами в использовании интерфейса Grasshopper, вы будете находить способы ускорить вашу работу. Один из таких способов - это использование быстрых клавиш. Также существует и @@ -290,7 +290,7 @@ Grasshopper также обладает функцией Автосохране ![IMAGE](images/1-1-2/1-1-2_016-radial-menu.png) >UI радиального меню позволит быстро получить доступ к часто используемым пунктам меню. -####1.1.2.11. ПАНЕЛЬ ИНСТРУМЕНТОВ ХОЛСТА +#### 1.1.2.11. ПАНЕЛЬ ИНСТРУМЕНТОВ ХОЛСТА Панель инструментов холста предоставляет быстрый доступ к часто используемым компонентам Grasshopper. Все инструменты доступны через меню, вы можете спрятать панель инструментов, если захотите. Панель инструментов можно редактировать во diff --git a/ru/1-foundations/1-1/3_talking-to-rhino.md b/ru/1-foundations/1-1/3_talking-to-rhino.md index 071d506..b20f2a1 100644 --- a/ru/1-foundations/1-1/3_talking-to-rhino.md +++ b/ru/1-foundations/1-1/3_talking-to-rhino.md @@ -1,6 +1,6 @@ -###1.1.3. ВЗАИМОДЕЙСТВИЕ С RHINO +### 1.1.3. ВЗАИМОДЕЙСТВИЕ С RHINO -#####В отличие от документа Rhino, определение Grasshopper не содержит реального объекта или геометрии. Вместо этого, определение Grasshopper представляет собой набор правил и инструкций о том, как Rhino может автоматизировать задачи. +##### В отличие от документа Rhino, определение Grasshopper не содержит реального объекта или геометрии. Вместо этого, определение Grasshopper представляет собой набор правил и инструкций о том, как Rhino может автоматизировать задачи. ![IMAGE](images/1-1-3/1-1-3_001-talking-to-rhino.png) >1. Предпросмотр геометрии Grasshopper. @@ -10,7 +10,7 @@ -####1.1.3.1. ОБРАТНАЯ СВЯЗЬ С ВИДОВЫМ ОКНОМ +#### 1.1.3.1. ОБРАТНАЯ СВЯЗЬ С ВИДОВЫМ ОКНОМ Вся геометрия, которая генерируется при использовании различных компонентов Grasshopper, будет отображаться (по умолчанию) в видовом окне Rhino. Этот предпросмотр является, всего лишь, Open GL апроксимацией действительной геометрии @@ -28,13 +28,13 @@ Grasshopper, будет отображаться (по умолчанию) в в 3. Геометрия точек отображается в виде крестов, а не прямоугольников, для отличия ее от других точечных объектов Rhino. 4. Голубой цвет означает, что в данный момент вы выбираете объект в видовом окне Rhino. -####1.1.3.2. СВЯЗИ +#### 1.1.3.2. СВЯЗИ Grasshopper - это динамическая среда. Изменения, которые происходят в реальном времени и их предпросмотр, обновляются в видовом окне Rhino. ![IMAGE](images/1-1-3/1-1-3_003-live-wires.png) -####1.1.3.3. ВИДЖЕТ GUMBALL +#### 1.1.3.3. ВИДЖЕТ GUMBALL При сохранении геометрии как внутренней в параметре Grasshopper, Gumball позволяет вам взаимодействовать с геометрией в видовом окне Rhino. При манипулировании Gumball, обновление будет происходить сразу же. Напротив, геометрия, @@ -43,7 +43,7 @@ Grasshopper - это динамическая среда. Изменения, к ![IMAGE](images/1-1-3/1-1-3_004-gumball.png) -####1.1.3.4. "ЗАПЕКАНИЕ" ГЕОМЕТРИИ +#### 1.1.3.4. "ЗАПЕКАНИЕ" ГЕОМЕТРИИ Для того, чтобы работать с геометрией в Rhino (выбрать, редактировать, изменять и т.д.), которая была создана в Grasshopper, вы должны "запечь" ее. "Запекание" создает новую геометрию в Rhino, берущей за основу текущее состояние из Grasshopper. Больше геометрия @@ -55,7 +55,7 @@ Grasshopper - это динамическая среда. Изменения, к 3. Группирование "запеченой" геометрии является удобным способом управления созданной в Rhino геометрией, особенно, если вы создаете много объектов в Grasshopper. -####1.1.3.5. ЕДИНИЦЫ ИЗМЕРЕНИЯ И ТОЧНОСТЬ +#### 1.1.3.5. ЕДИНИЦЫ ИЗМЕРЕНИЯ И ТОЧНОСТЬ Grasshopper наследует единицы измерения и точность от Rhino. Чтобы изменить единицы измерения, впишите в командную строку Rhino Document Properties, чтобы зайти в меню Document Properties. Выберите Units, чтобы изменить @@ -64,7 +64,7 @@ Grasshopper наследует единицы измерения и точнос ![IMAGE](images/1-1-3/1-1-3_006-units.png) >Измените единицы измерения и точность в Rhino в меню Document Properties. -####1.1.3.6. ПАНЕЛЬ ДИСТАНЦИОННОГО УПРАВЛЕНИЯ +#### 1.1.3.6. ПАНЕЛЬ ДИСТАНЦИОННОГО УПРАВЛЕНИЯ Как только вы научитесь использовать ее, вы убедитесь, что Grasshopper - это невероятно мощный и гибкий инструмент, который позволяет исследовать итерации проектирования, используя графический интерфейс. Тем не менее, если вы работаете @@ -108,7 +108,7 @@ UI, просто перетащите элемент за границы RCP. В -####1.1.3.7. УПРАВЛЕНИЕ ФАЙЛАМИ +#### 1.1.3.7. УПРАВЛЕНИЕ ФАЙЛАМИ Если ваш файл Grasshopper берет начальную геометрию из Rhino, вам следует открыть тот же самый файл. Храните файлы Rhino и Grasshopper организованно в одной папке с одинаковыми именами файлов. @@ -118,7 +118,7 @@ UI, просто перетащите элемент за границы RCP. В 2. Файл Rhino. 3. Файл Grasshopper. -####1.1.3.8. ШАБЛОНЫ +#### 1.1.3.8. ШАБЛОНЫ Создавая и устанавливая файл шаблон в настройках, Grasshopper создает удобный способ создания каждого нового определения Grasshopper. Шаблон может включать компоненты Grasshopper также как панели и скетч-объекты diff --git a/ru/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md b/ru/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md index 439005d..9ac2602 100644 --- a/ru/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md +++ b/ru/1-foundations/1-2/0_anatomy-of-a-grasshopper-definition.md @@ -1,5 +1,5 @@ ## 1.2. СТРУКТУРА ОПРЕДЕЛЕНИЯ GRASSHOPPER -####Grasshopper дает возможность создавать визуальные программы, которые называются определениями. Эти определения состоят из нодов, объединенных связями. В следующей главе рассказывается об объектах Grasshopper и как с ним взаимодействовать, чтобы начать создавать определение. +#### Grasshopper дает возможность создавать визуальные программы, которые называются определениями. Эти определения состоят из нодов, объединенных связями. В следующей главе рассказывается об объектах Grasshopper и как с ним взаимодействовать, чтобы начать создавать определение. ![IMAGE](images/1-2/1-2_001-anatomy-of-definition.png) diff --git a/ru/1-foundations/1-2/1_grasshopper-object-types.md b/ru/1-foundations/1-2/1_grasshopper-object-types.md index ae4a09e..21f0ae3 100644 --- a/ru/1-foundations/1-2/1_grasshopper-object-types.md +++ b/ru/1-foundations/1-2/1_grasshopper-object-types.md @@ -1,8 +1,8 @@ ### 1.2.1. ТИПЫ ОБЪЕКТОВ GRASSHOPPER -#####Grasshopper состоит из двух основных типов пользовательских объектов: параметров и компонентов. Параметры хранят данные, а компоненты выполняют действия, которые превращаются в данные. Самый основной способ понять Grasshopper - это помнить о том, что мы будем использовать данные для определения вводных параметров действий (что в итоге превратится в новые данные, которые мы сможем продолжить использовать). +##### Grasshopper состоит из двух основных типов пользовательских объектов: параметров и компонентов. Параметры хранят данные, а компоненты выполняют действия, которые превращаются в данные. Самый основной способ понять Grasshopper - это помнить о том, что мы будем использовать данные для определения вводных параметров действий (что в итоге превратится в новые данные, которые мы сможем продолжить использовать). -####1.2.1.1. ПАРАМЕТРЫ +#### 1.2.1.1. ПАРАМЕТРЫ Параметры хранят данные - числа, цвета, геометрию и т.д - которые мы передаем посредством схемы в нашем определении. Параметры - это такие контейнеры, которые обычно выглядят как небольшие прямоугольники с одним входом и одним выходом. Мы также понимаем, что это параметры, исходя из формы их иконки. У всех параметров вокруг их иконки есть шестиугольная рамка. Геометрические параметры могут ссылаться на геометрию из Rhino или наследовать геометрию от других компонентов. Точка и кривая - это геометрические параметры. @@ -13,7 +13,7 @@ ![IMAGE](images/1-2-1/1-2-1_002-input-parameters.png) -####1.2.1.2. КОМПОНЕНТЫ +#### 1.2.1.2. КОМПОНЕНТЫ Компоненты выполняют действия, основываясь на вводных параметрах, которые они получили. Имеется много типов компонентов для различных задач. ![IMAGE](images/1-2-1/1-2-1_003-components.png) @@ -23,7 +23,7 @@ 3. Компонент Circle CNR создает геометрию круга из вводных данных: точка начала координат, вектор нормали и радиус. 4. Компонент Loft создает поверхность посредством кривых. -####1.2.1.3. ЦВЕТА ОБЪЕКТОВ +#### 1.2.1.3. ЦВЕТА ОБЪЕКТОВ Мы можем почерпнуть информацию о состоянии каждого объекта, основываясь на их цветах. Давайте посмотрим на цветовую кодовую систему Grasshopper по умолчанию. Параметр, который не содержит ни предупреждений ни ошибок, светло-серого цвета. diff --git a/ru/1-foundations/1-2/2_grasshopper-component-parts.md b/ru/1-foundations/1-2/2_grasshopper-component-parts.md index 748bb77..dd19a0e 100644 --- a/ru/1-foundations/1-2/2_grasshopper-component-parts.md +++ b/ru/1-foundations/1-2/2_grasshopper-component-parts.md @@ -1,6 +1,6 @@ ### 1.2.2. ЧАСТИ КОМПОНЕНТА GRASSHOPPER -#####Компоненты - это объекты, которые размещают на холсте и соединяют друг с другом связями, чтобы создать визуальную программу. Компоненты могут представлять Rhino геометрию или такие операции как Math Functions. У компонентов имеются входы и выходы. +##### Компоненты - это объекты, которые размещают на холсте и соединяют друг с другом связями, чтобы создать визуальную программу. Компоненты могут представлять Rhino геометрию или такие операции как Math Functions. У компонентов имеются входы и выходы. ![IMAGE](images/1-2-2/1-2-2_001-component-parts.png) >1. Три параметра ввода компонента Circle CNR. @@ -13,7 +13,7 @@ ![IMAGE](images/1-2-2/1-2-2_002-components-without-outputs.png) -####1.2.2.1. ОТОБРАЖЕНИЕ ЛЕЙБЛОВ И ИКОНОК +#### 1.2.2.1. ОТОБРАЖЕНИЕ ЛЕЙБЛОВ И ИКОНОК У каждого объекта Grasshopper уникальная иконка. Эти иконки располагаются в центральной области объекта и соответствуют иконкам, расположенным на Палитре Компонентов. Объекты также могут отображаться в виде текстовых ярлыков. Чтобы переключиться между отображением в виде иконки и ярлыка, выберите Draw Icons в меню Display. Вы также можете выбрать Draw Full Names, чтобы отобразить полное имя каждого объекта, а также его входы и выходы. ![IMAGE](images/1-2-2/1-2-2_003-label-icon-screenshot.png) @@ -35,14 +35,14 @@ ![IMAGE](images/1-2-2/1-2-2_006-reveal-location.png) -####1.2.2.2. ПОМОЩЬ ПО КОМПОНЕНТАМ +#### 1.2.2.2. ПОМОЩЬ ПО КОМПОНЕНТАМ Кликните правой клавишей мыши по объекту и выберите "Help" из выпадающего меню, чтобы открыть справочное окно Grasshopper. Справочное окно содержит более подробное описание объекта, список вводов и выводов и замечания. ![IMAGE](images/1-2-2/1-2-2_007-component-help.png) >1. Справочное окно Grasshopper для параметра Point. 2. Замечания в справочном окне дают дополнительные сведения о параметре Point. -####1.2.2.3. ПОДСКАЗКИ ПО ИНСТРУМЕНТАМ +#### 1.2.2.3. ПОДСКАЗКИ ПО ИНСТРУМЕНТАМ Входы компонента ожидают получения определенного типа данных, например, компонент может показывать, что вы должны подсоединить точку или плоскость к его входу. При наведении мышки на отдельные части компонента, вы увидите разные подсказки, которые отображают определенный тип объекта, находящийся под мышкой. Подсказки довольно информативны, так как они сообщают тип и данные индивидуальных параметров. ![IMAGE](images/1-2-2/1-2-2_008-tool-tips.png) @@ -52,7 +52,7 @@ 4. Заголовок выхода подсказки по инструментам предоставляет те же самые данные как для входов, но для соответствующего выхода. 5. Результат действий компонента. -####1.2.2.4. КОНТЕКСТНЫЕ ВЫПАДАЮЩИЕ МЕНЮ +#### 1.2.2.4. КОНТЕКСТНЫЕ ВЫПАДАЮЩИЕ МЕНЮ Все объекты на холсте имеют свое контекстное меню, которое раскрывает их настройки и подробные данные. Кликните правой клавишей мыши по центру компонента, и вы вызовете контекстное меню. И вход, и выход имеют свои контекстные меню, которые можно посмотреть тем же способом. ![IMAGE](images/1-2-2/1-2-2_009-context-menus-a.png) @@ -68,7 +68,7 @@ 4. Добавить элемент в набор. 5. Удалить выбранное. -####1.2.2.5. МАСШТАБИРУЕМЫЙ ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС +#### 1.2.2.5. МАСШТАБИРУЕМЫЙ ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС У некоторых компонентов может быть увеличено число входов или выходов посредством Масштабируемого Пользовательского Интерфейса (ZUI). Увеличивая компонент на холсте, появится дополнительный набор опций, которые позволят вам добавить или удалить входы или выходы у данного компонента. Компонент Addition позволяет вам добавлять входы, предоставляя дополнительные элементы для дополнительных операций. ![IMAGE](images/1-2-2/1-2-2_011-zoomable-ui.png) diff --git a/ru/1-foundations/1-2/3_data-types.md b/ru/1-foundations/1-2/3_data-types.md index 469f834..5c6b113 100644 --- a/ru/1-foundations/1-2/3_data-types.md +++ b/ru/1-foundations/1-2/3_data-types.md @@ -1,8 +1,8 @@ ### 1.2.3. ТИПЫ ДАННЫХ -#####Большинство параметров хранят два различных типа данных: изменяемые и постоянные. Изменяемые данные наследуются из одного или более ресурсов и разрушаются (т.е. собираются заново) всякий раз, когда начинается новое решение. Постоянные данные - это данные, которые были специально введены пользователем. +##### Большинство параметров хранят два различных типа данных: изменяемые и постоянные. Изменяемые данные наследуются из одного или более ресурсов и разрушаются (т.е. собираются заново) всякий раз, когда начинается новое решение. Постоянные данные - это данные, которые были специально введены пользователем. -####1.2.3.1. ПОСТОЯННЫЕ ДАННЫЕ +#### 1.2.3.1. ПОСТОЯННЫЕ ДАННЫЕ Постоянные данные доступны через меню и, в зависимости от типа параметра, имеют разных управляющих. Параметр Point, например, позволяет вам настроить одну или больше точек через меню. Но, давайте вернемся на несколько шагов назад и посмотрим, как ведет себя параметр Point. Когда вы перетащили параметр Point из Params/Geometry Panel на холст, параметр оранжевого цвета, сигнализируя о наличии предупреждения. Это не очень страшно, предупреждение просто информирует вас о том, что параметр пустой (не содержит постоянных записей и не может собрать изменяемые данные) и, таким образом, не влияет на результат решения. Контекстное меню параметра предлагает два способа настройки постоянных данных: один и множество. Кликните правой клавишй мыши по параметру, чтобы установить Multiple Points. Когда вы кликнете по какому-либо из этих элементов меню, окно Grasshopper закроется и программа попросит вас выбрать точку в одном из видовых окон Rhino. @@ -16,7 +16,7 @@ 2. Как только параметр содержит какие-либо постоянные данные, компонент из оранжевого превращается в серый. 3. Подсказка по инструменту для параметра Point отображает постоянные данные (набор исходных точек), которые он хранит. -####1.2.3.2. ИЗМЕНЯЕМЫЕ ДАННЫЕ +#### 1.2.3.2. ИЗМЕНЯЕМЫЕ ДАННЫЕ Изменяемые данные, как подразумевает название, не постоянные и будут уничтожаться каждый раз, когда срабатывает решение. Тем не менее, это будет также часто запускать событие для перестроения решения и обновления сцены. Говоря в целом, большая часть данных, сгенерированных "на лету", считается изменяемой. Как упоминалось раньше, данные Grasshopper хранятся в разделе Параметры (либо в Изменяемой или Постоянной форме) и используются в различных Компонентах. Когда данные не хранятся в постоянном месте записи в Параметрах, появляется необходимость взять их откуда-то. Каждый Параметр (за исключением параметров выхода) сам определяет, откуда он получает свои данные, и большинство Параметров не очень точно определяют это. Вы можете подключить числовой Параметр (тот, который определяет, что это десятичное число) в целый источник и он возьмет на себя обязанность произвести конвертацию. @@ -29,7 +29,7 @@ ![IMAGE](images/1-2-3/1-2-3_003-right-click.png) -####1.2.3.3. ВВОДНЫЕ ПАРАМЕТРЫ +#### 1.2.3.3. ВВОДНЫЕ ПАРАМЕТРЫ У Grasshopper есть разнообразные параметры, которые дают возможность взаимодействовать с данными, которые поставляются во входы компонента и, таким образом, контролируют изменение результата вашего определения. Из-за того, что параметры меняются с входом, они генерируют изменяемые данные. **Number Slider** diff --git a/ru/1-foundations/1-2/4_wiring-components.md b/ru/1-foundations/1-2/4_wiring-components.md index acaabd9..77f6dd2 100644 --- a/ru/1-foundations/1-2/4_wiring-components.md +++ b/ru/1-foundations/1-2/4_wiring-components.md @@ -1,8 +1,8 @@ ### 1.2.4. КОМПОНЕНТЫ СВЯЗИ -#####Когда данные не хранятся в постоянном месте записи в Параметрах, появляется необходимость взять их откуда-то. Данные передаются из одного компонента в другой посредством связей. Можете представить их себе, буквально, электрическими цепями, которые переносят сигналы данных из одного объекта в следующий объект. +##### Когда данные не хранятся в постоянном месте записи в Параметрах, появляется необходимость взять их откуда-то. Данные передаются из одного компонента в другой посредством связей. Можете представить их себе, буквально, электрическими цепями, которые переносят сигналы данных из одного объекта в следующий объект. -####1.2.4.1. УПРАВЛЕНИЕ СВЯЗЯМИ +#### 1.2.4.1. УПРАВЛЕНИЕ СВЯЗЯМИ Для того, чтобы соединить компоненты, кликните и перетащите рядом с кругом на сторону выхода объекта. Соединительная связь прикрепится к мышке. Как только мышка будет наведена над потенциальным входом, связь подсоединится и станет прочной. Это не постоянная связь, пока вы не отпустите кнопку мыши. Не имеет значения, как мы осуществим подключения - слева-направо или справа-налево. ![IMAGE](images/1-2-4/1-2-4_001a.png) @@ -21,7 +21,7 @@ 7. При наличии нескольких соединений, выберите одно, которое вы хотите отсоединить от списка. 8. При наведении мышки на элемент, связь подсветиться красным. -####1.2.4.2. FANCY СВЯЗИ +#### 1.2.4.2. FANCY СВЯЗИ Связи представляют соединения так же как поток данных внутри графика в нашем определении. Grasshopper может также давать нам визуальные подсказки о том, что протекает через связи. Настройки по умолчанию, так называемые, "fancy wires" отключены, поэтому вам необходимо включить их до того как вы сможете просматривать различные типы линий для соединительных связей. Чтобы выполнить это, просто кликните на Display Tab в Строке основного меню и выберите кнопку "Draw Fancy Wires.” Fancy wires могут поведать много информации о том, какой тип информации протекает из одного компонента в другой. ![IMAGE](images/1-2-4/1-2-4_002-fancy-wires.png) @@ -31,7 +31,7 @@ 4. Single Item - поток данных из любого параметра, который содержит один элемент, будет показан цельной серой линией. 5. Tree (дерево) - информация, передающаяся между компонентами, которые содержат структуры данных, отображается связью серой двойной линией с точками. -####1.2.4.3. ОТОБРАЖЕНИЕ СВЯЗЕЙ +#### 1.2.4.3. ОТОБРАЖЕНИЕ СВЯЗЕЙ Если вы уже провели достаточно много времени работая над одним определением Grasshopper, вы уже столкнулись с тем, что холст сильно и быстро захламляется "гнездами" связей. К счастью, у нас есть возможность управлять отображением связей для каждого входа компонента. Существуют три вида отображения связей: Default Display (по умолчанию), Faint Display (исчезающее отображение), and Hidden Display (скрытое отображение). Чтобы изменить отображение связи, просто кликните правой клавишей мыши на любом входе компонента и выберите один из видов, доступных под Wire Display в выпадающем меню. diff --git a/ru/1-foundations/1-2/5_the-grasshopper-definition.md b/ru/1-foundations/1-2/5_the-grasshopper-definition.md index 88847d7..69e97eb 100644 --- a/ru/1-foundations/1-2/5_the-grasshopper-definition.md +++ b/ru/1-foundations/1-2/5_the-grasshopper-definition.md @@ -5,15 +5,15 @@ >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.2.5_the grasshopper definition.gh) {% endif %} -#####У определений Grasshopper есть процесс работы программы, который отображает, где начать выполнение программы, что делать в середине и как узнать, когда выполнение программы закончено. +##### У определений Grasshopper есть процесс работы программы, который отображает, где начать выполнение программы, что делать в середине и как узнать, когда выполнение программы закончено. -####1.2.5.1. ПРОЦЕСС РАБОТЫ ПРОГРАММЫ +#### 1.2.5.1. ПРОЦЕСС РАБОТЫ ПРОГРАММЫ Визуальные программы Grasshopper выполняются слева направо. Чтение графика, связанного с соединениями связей из upstream с downstream, предоставляет понимание о процессе работы программы. ![IMAGE](images/1-2-5/1-2-5_001-program-flow.png) >Направление данных слева направо. -####1.2.5.2. ЛОГИЧЕСКИЙ ГРАФИК +#### 1.2.5.2. ЛОГИЧЕСКИЙ ГРАФИК Все объекты и связи, соединяющие объекты, представляют логический график нашей программы. Этот график показывает поток данных, взаимозависимости каждого входа от подключенного выхода. Каждый раз когда график изменяется, иногда в связи с "загрязненностью", каждое соединение downstream и объект будут обновляться. ![IMAGE](images/1-2-5/1-2-5_002-logical-graph.png) diff --git a/ru/1-foundations/1-3/0_building-blocks-of-algorithms.md b/ru/1-foundations/1-3/0_building-blocks-of-algorithms.md index 165290f..e36c12b 100644 --- a/ru/1-foundations/1-3/0_building-blocks-of-algorithms.md +++ b/ru/1-foundations/1-3/0_building-blocks-of-algorithms.md @@ -1,5 +1,5 @@ ## 1.3. Построение блоков алгоритмов -####Эта глава расскажет вам о базовой геометрии и математических концептах, и о том, как они применяются и используются в Grasshopper. +#### Эта глава расскажет вам о базовой геометрии и математических концептах, и о том, как они применяются и используются в Grasshopper. ![Building Blocks of Algorithms](images/1-3/1-3_001.png) diff --git a/ru/1-foundations/1-3/1_points-planes-vectors.md b/ru/1-foundations/1-3/1_points-planes-vectors.md index 74d8d85..d9592ff 100644 --- a/ru/1-foundations/1-3/1_points-planes-vectors.md +++ b/ru/1-foundations/1-3/1_points-planes-vectors.md @@ -1,10 +1,10 @@ -###1.3.1. Точки, плоскости и векторы +### 1.3.1. Точки, плоскости и векторы -#####Все начинается с точки. Точка - это ничего более, чем одно или несколько значений, называемых координатами. Число значений координат соответствует числу измерений пространства, в котором оно располагается. Точки, плоскости и векторы - это основа для создания и трансформации геометрии в Grasshopper. +##### Все начинается с точки. Точка - это ничего более, чем одно или несколько значений, называемых координатами. Число значений координат соответствует числу измерений пространства, в котором оно располагается. Точки, плоскости и векторы - это основа для создания и трансформации геометрии в Grasshopper. ![Points, Vectors, and Planes](images/1-3-1/1-3-1_001-intro.png) -####1.3.1.1 ТОЧКИ +#### 1.3.1.1 ТОЧКИ Точки в пространстве 3D имеют три координаты - обычно их обозначают [x,y,z]. Точки в пространстве 2D имеет только две координаты, которые обозначают либо [x,y] либо [u,v], в зависимости от того, о каком двухмерном пространстве мы говорим. 2D параметрическое пространство ограничено конечной поверхностью. Тем не менее, она все-таки непрерывная, т.е. гипотетически существует бесконечное число точек на поверхности, но максимальное расстояние между этими точками очень сильно ограничено. 2D параметрические координаты действительны, только если они не превышают определенный диапазон. На примере показано, что диапазон был установлен от 0.0 до 1.0 для обоих направлений [u] и [v], но также это может быть и любой конечный диапазон. Точка с координатами [1.5, 0.6] будет находиться где-то снаружи поверхности и, поэтому, не будет работать. Так как поверхность, которая определяет это параметрическое пространство находится в правильном 3D пространстве, мы всегда можем переместить параметрическую координату в координату 3D пространства. Точка [0.2, 0.5] на поверхности, например, такая же как точка [1.8, 2.0, 4.1] в мировых координатах. Как только мы изменили поверхность, 3D координаты, которые связаны с [0.2, 0.5] будут меняться. @@ -13,7 +13,7 @@ Если это сложная идея для понимания, то вам может помочь следующее - представить себя и свое положение в пространстве. Мы обычно используем местную систему координат, чтобы описать наше положение: "Я сижу на третьем месте седьмого ряда в кинотеатре", "Я на заднем сидении". Если вы находитесь в автомобиле, едущем по дороге, ваше положение в системе глобальных координат будет меняться все время, даже если вы остаетесь сидеть в том же самом кресле. -####1.3.1.2. ВЕКТОРЫ +#### 1.3.1.2. ВЕКТОРЫ Вектор - это геометрическая величина, описывающая Направление и Амплитуду. Векторы абстрактны, т.е. они представляют величину, а не геометрический элемент. @@ -21,7 +21,7 @@ ![Vectors](images/1-3-1/1-3-1_003-vectors.png) -####1.3.1.3. ПЛОСКОСТИ +#### 1.3.1.3. ПЛОСКОСТИ Плоскости - "плоские" и вытягиваются бесконечно в двух направлениях, определяя локальную систему координат. Плоскости не подлинные объекты в Rhino, они используются для определения системы координат 3D пространстве. На деле, лучше думать о плоскостях как о векторах, т.к. это просто математические структуры. ![Planes](images/1-3-1/1-3-1_004-planes.png) diff --git a/ru/1-foundations/1-3/2_working-with-attractors.md b/ru/1-foundations/1-3/2_working-with-attractors.md index 8fe14f6..4f3b71b 100644 --- a/ru/1-foundations/1-3/2_working-with-attractors.md +++ b/ru/1-foundations/1-3/2_working-with-attractors.md @@ -6,7 +6,7 @@ thead {display: none} ### 1.3.2. Работая с аттракторами -#####Аттракторы - это точки, которые ведут себя как виртуальные магниты - либо притягивают либо отталкивают другие объекты. В Grasshopper, любая геометрия, взятая из Rhino или созданная в Grasshopper, может быть использована как аттрактор. Аттракторы могут влиять на любое число параметров окружающих объектов включая масштаб, вращение, цвет и положение. Эти параметры изменяются на основе их отношений с геометрией аттрактора. +##### Аттракторы - это точки, которые ведут себя как виртуальные магниты - либо притягивают либо отталкивают другие объекты. В Grasshopper, любая геометрия, взятая из Rhino или созданная в Grasshopper, может быть использована как аттрактор. Аттракторы могут влиять на любое число параметров окружающих объектов включая масштаб, вращение, цвет и положение. Эти параметры изменяются на основе их отношений с геометрией аттрактора. ![Overview](images/1-3-2/1-3-2_001-attractor-overview.png) >1. Точка аттрактора @@ -22,7 +22,7 @@ thead {display: none} ![Examples](images/1-3-2/1-3-2_002-attractor-examples.png) -####1.3.2.1. ОПРЕДЕЛЕНИЕ АТТРАКТОРА +#### 1.3.2.1. ОПРЕДЕЛЕНИЕ АТТРАКТОРА {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/ru/1-foundations/1-3/3_mathematics-expressions-conditionals.md b/ru/1-foundations/1-3/3_mathematics-expressions-conditionals.md index db123b0..5c3d9e3 100644 --- a/ru/1-foundations/1-3/3_mathematics-expressions-conditionals.md +++ b/ru/1-foundations/1-3/3_mathematics-expressions-conditionals.md @@ -7,7 +7,7 @@ >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.3.3_operators and conditionals.gh) {% endif %} -#####Знание как работать с числовыми данными - необходимый навык при изучении использования Grasshopper. Grasshopper содержит много компонентов для выполнения математических операций, определения условий и управления числовыми множествами. +##### Знание как работать с числовыми данными - необходимый навык при изучении использования Grasshopper. Grasshopper содержит много компонентов для выполнения математических операций, определения условий и управления числовыми множествами. В математике, числа организуются в множества и с двумя из них вы, возможно, знакомы: @@ -16,7 +16,7 @@ Несмотря на то, что существуют и другие типы числовых множеств, эти два интересует нас больше всего, потому что они активно используются в Grasshopper. Хотя существуют и ограничения в точном представлении этих множеств в цифровой среде, мы можем аппроксимировать их с высокой степенью точности. В дополнение, следует понимать, что различие между Целыми числами и Числами с плавающей точкой соответствует различию между дискретными и непрерывными диапазонами. В этой главе, мы собираемся исследовать различные методы работы и определения различных числовых множеств. -####1.3.3.1. ВКЛАДКА MATHS +#### 1.3.3.1. ВКЛАДКА MATHS Большинство компонентов, работающих с математическими операциями и функциями, располагаются во вкладке Math: ![](images/1-3-3/1-3-3_01-the-math-tab.png) @@ -30,7 +30,7 @@ 7. Свиток Time включает набор компонентов, которые позволяют создавать примеры даты и времени. 8. Свиток Utility - это 'мешок' с полезными компонентами, которые можно использовать в различных математических уравнениях. Зайдите сюда, если вы пытаетесь найти максимальные и минимальные значения двух списков чисел; или среднее в группе чисел. -####1.3.3.2. ОПЕРАТОРЫ +#### 1.3.3.2. ОПЕРАТОРЫ Как было указано ранее, операторы - это наборы компонентов, которые используют алгебраические функции с двумя числовыми значениями входа, которые дают одно значение выхода. @@ -42,7 +42,7 @@ ![](images/1-3-3/1-3-3_02-operators.png) -####1.3.3.3. УСЛОВНЫЕ ОПЕРАТОРЫ +#### 1.3.3.3. УСЛОВНЫЕ ОПЕРАТОРЫ Почти каждый язык программирования имеет метод определения условных выражений. В большинстве случаев, программист создает части кода, чтобы задать простой вопрос "Что если". Что если область контура пола превышает программные требования? @@ -96,7 +96,7 @@ False. Компонент повторяет этот процесс со спи ![](images/1-3-3/1-3-3_06-smaller-than.png) -####1.3.3.4. ТРИГОНОМЕТРИЧЕСКИЕ КОМПОНЕНТЫ +#### 1.3.3.4. ТРИГОНОМЕТРИЧЕСКИЕ КОМПОНЕНТЫ {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} @@ -193,7 +193,7 @@ thead {display: none} ![](images/1-3-3/1-3-3_21-spiral.png) -####1.3.3.5. ВЫРАЖЕНИЯ +#### 1.3.3.5. ВЫРАЖЕНИЯ {% if gitbook.generator == "pdf" or "mobi" or "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/ru/1-foundations/1-3/4_domains-color.md b/ru/1-foundations/1-3/4_domains-color.md index 2fc6d79..e7cc9e5 100644 --- a/ru/1-foundations/1-3/4_domains-color.md +++ b/ru/1-foundations/1-3/4_domains-color.md @@ -4,7 +4,7 @@ td:nth-child(3) {font-size: 70%;width: 15%;} td {background-color: #F9F9F9;} thead {display: none} -###1.3.4. Диапазоны и Цвета +### 1.3.4. Диапазоны и Цвета {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -12,7 +12,7 @@ thead {display: none} >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.3.4_domains and color.gh) {% endif %} -#####Цветовое круг - это модель организации цветов, основанная на их тоне. В Grasshopper цвета могут определяться по значению их тона в диапазоне от 0.0 до 1.0. Диапазоны используются для определения диапазона всех возможных значений между числовым набором и нижней границей (А) и верхней границев (В). +##### Цветовое круг - это модель организации цветов, основанная на их тоне. В Grasshopper цвета могут определяться по значению их тона в диапазоне от 0.0 до 1.0. Диапазоны используются для определения диапазона всех возможных значений между числовым набором и нижней границей (А) и верхней границев (В). ![](images/1-3-4/1-3-4_01-color-wheel.png) >В цветовом круге, тон соответствует углу. Grasshopper взял эти 0-360 диапазоны и перенес их на значения от нуля до единицы. diff --git a/ru/1-foundations/1-3/5_booleans-logical-operators.md b/ru/1-foundations/1-3/5_booleans-logical-operators.md index 985fa55..3a8326a 100644 --- a/ru/1-foundations/1-3/5_booleans-logical-operators.md +++ b/ru/1-foundations/1-3/5_booleans-logical-operators.md @@ -1,11 +1,11 @@ -###1.3.5. Булевые и Логические Операторы +### 1.3.5. Булевые и Логические Операторы {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.3.5_booleans and logical operators.gh) {% endif %} -####1.3.5.1. БУЛЕВЫЕ ЗНАЧЕНИЯ +#### 1.3.5.1. БУЛЕВЫЕ ЗНАЧЕНИЯ Числовые переменные могут хранить целый ряд различных чисел. Булевые переменные могут хранить только два значения, обозначаемые как Да или Нет, Правда или Ложь, 1 или 0. Очевидно, мы никогда не сможем использовать булевые значения для выполнения расчетов из-за их ограниченного диапазона. Мы можем использовать булевые значения для определения условий. ![](images/1-3-5/1-3-5_001-boolean-parameter.png) @@ -21,7 +21,7 @@ Grasshopper также содержит объекты, которые пров ![](images/1-3-5/1-3-5_003-includes.png) >Компонент Includes проверяет включено ли число 6.8 в диапазон 0 - 10. Возвращается булевое значение Правда. -####1.3.5.2. ЛОГИЧЕСКИЕ ОПЕРАТОРЫ +#### 1.3.5.2. ЛОГИЧЕСКИЕ ОПЕРАТОРЫ Логические операторы, в своем большинстве, работают с булевыми значениями и очень логичны. Как вы помните, булевые значения могут иметь только два значения. Булевая математика была разработана Джорджом Буле (1815-1864) и сегодня она является diff --git a/ru/1-foundations/1-4/0_designing-with-lists.md b/ru/1-foundations/1-4/0_designing-with-lists.md index 531072a..99474fa 100644 --- a/ru/1-foundations/1-4/0_designing-with-lists.md +++ b/ru/1-foundations/1-4/0_designing-with-lists.md @@ -1,5 +1,5 @@ ## 1.4. Проектирование с использованием списков -####Одна из самых мощных характеристик Grasshopper - это способность быстро строить и изменять списки данных. Эта глава объяснит, как создавать, изменять и визуализировать список данных. +#### Одна из самых мощных характеристик Grasshopper - это способность быстро строить и изменять списки данных. Эта глава объяснит, как создавать, изменять и визуализировать список данных. ![IMAGE](images/1-4/1-4_001-designing-with-lists.png) diff --git a/ru/1-foundations/1-4/1_curve-geometry.md b/ru/1-foundations/1-4/1_curve-geometry.md index 9d3b32b..28276fe 100644 --- a/ru/1-foundations/1-4/1_curve-geometry.md +++ b/ru/1-foundations/1-4/1_curve-geometry.md @@ -1,6 +1,6 @@ ### 1.4.1. ГЕОМЕТРИЯ КРИВОЙ -#####NURBS (неоднородные рациональные Б-сплайны) - математическое представление, которое может точно смоделировать любую форму из простой 2D линии, круга, арки или коробки в самую сложную 3D произвольной формы органическую поверхность или тело. Благодаря своей гибкости и точности, NURBS модели могут использоваться в любом процессе от иллюстрации и анимации до производства. +##### NURBS (неоднородные рациональные Б-сплайны) - математическое представление, которое может точно смоделировать любую форму из простой 2D линии, круга, арки или коробки в самую сложную 3D произвольной формы органическую поверхность или тело. Благодаря своей гибкости и точности, NURBS модели могут использоваться в любом процессе от иллюстрации и анимации до производства. Так как кривая является геометрическим объектом, она обладает некоторым числом характеристик, которые можно использовать для ее описания или анализа. Например, каждая кривая имеет начальную координату, и каждая кривая имеет конечную координату. Когда расстояние между этими двумя координатами равно нулю, кривая замкнута. Также, у каждой кривой есть некое число контрольных точек, если все эти точки расположены на одной плоскости, кривая, в целом, будет планарной. Некоторые характеристики применимы ко всей кривой, в целом, в то время как другие применимы к особым точкам на кривой. Например, планарность - это универсальная характеристика, в то время как тангенс векторы - это узкая характеристика. Также, некоторые характеристики применимы только к некоторым типам кривых. На данный момент мы обсудили некоторые компоненты Grasshopper из раздела Primitive Curve, такие как линии, круги, эллипсы и арки. @@ -18,7 +18,7 @@ 2. Точка редактирования 3. Контрольная точка -####1.4.1.1. КРИВЫЕ NURBS +#### 1.4.1.1. КРИВЫЕ NURBS **Порядок:** Порядок это положительное целое число. Обычно это число 1, 2, 3 или 5, но это может быть любое положительное целое число. Порядок кривой определяет степень влияния контрольных точек на кривую, где чем выше порядок, тем больше степень влияния. NURBS линии и полилинии обычно имеют порядок 1, NURBS круги - порядок 2, большая часть кривых произвольной формы порядок 3 или 5. **Контрольные точки:** Контрольные точки - это списки точек, у которых порядок+1, по меньшей мере. Один из самых легких способов изменить форму NURBS кривой - переместить контрольные точки. @@ -40,7 +40,7 @@ NNURBS кривые образуют узел как результат разл ![IMAGE](images/1-4-1/1-4-1_005-degree-three.png) >D3 это самый распространенный тип NURBS кривой и он включен по умолчанию в Rhino. Возможно вы знакомы с визуальной прогрессией сплайна, даже хотя узлы и появляются в странных местах. -####1.4.1.2. КОМПОНЕНТЫ СПЛАЙН GRASSHOPPER +#### 1.4.1.2. КОМПОНЕНТЫ СПЛАЙН GRASSHOPPER {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/ru/1-foundations/1-4/2_what-is-a-list.md b/ru/1-foundations/1-4/2_what-is-a-list.md index daa81c1..876faef 100644 --- a/ru/1-foundations/1-4/2_what-is-a-list.md +++ b/ru/1-foundations/1-4/2_what-is-a-list.md @@ -1,6 +1,6 @@ ### 1.4.2. Что такое Список? -#####Полезно думать о Grasshopper в рамках потока, так как графический интерфейс спроектирован таким образом, чтобы данные входили в и выходили из разных типов компонентов. Тем не менее, именно данные определяют, какая информация будет входить и выходить из компонентов. Понимание того, как работать со списком данных критично для понимания плагина Grasshopper. +##### Полезно думать о Grasshopper в рамках потока, так как графический интерфейс спроектирован таким образом, чтобы данные входили в и выходили из разных типов компонентов. Тем не менее, именно данные определяют, какая информация будет входить и выходить из компонентов. Понимание того, как работать со списком данных критично для понимания плагина Grasshopper. В целом, Grasshopper имеет два типа данных: постоянные и изменяемые. Даже при том, что типы данных имеют разные характеристики, обычно Grasshopper хранит эти данные в массиве, в списке переменных. diff --git a/ru/1-foundations/1-4/3_data-stream-matching.md b/ru/1-foundations/1-4/3_data-stream-matching.md index 8a826fa..c0210da 100644 --- a/ru/1-foundations/1-4/3_data-stream-matching.md +++ b/ru/1-foundations/1-4/3_data-stream-matching.md @@ -5,7 +5,7 @@ >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.4.3_data matching.gh) {% endif %} -#####Соединение данных - это проблема, для которой нет одного решения. Это происходит, когда компонент имеет доступ к входам различного размера. Изменение алгоритма соединения данных может привести к значительно отличающимся результатам. +##### Соединение данных - это проблема, для которой нет одного решения. Это происходит, когда компонент имеет доступ к входам различного размера. Изменение алгоритма соединения данных может привести к значительно отличающимся результатам. Представьте компонент, который создает сегменты линии между точками. Он будет иметь два параметра ввода, которые оба будут предоставлять координаты точек (Список А и Список Б): diff --git a/ru/1-foundations/1-4/4_creating-lists.md b/ru/1-foundations/1-4/4_creating-lists.md index 782f856..746d77c 100644 --- a/ru/1-foundations/1-4/4_creating-lists.md +++ b/ru/1-foundations/1-4/4_creating-lists.md @@ -5,9 +5,9 @@ >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.4.4_list creation.gh) {% endif %} -#####Существуют много различных способов генерировать списки в Grasshopper. Ниже, мы рассмотрим несколько разных способов генерирования списков и затем посмотрим на то, как данные могут использоваться для передачи информации в видовое окно посредством визуализации. +##### Существуют много различных способов генерировать списки в Grasshopper. Ниже, мы рассмотрим несколько разных способов генерирования списков и затем посмотрим на то, как данные могут использоваться для передачи информации в видовое окно посредством визуализации. -####1.4.4.1. СОЗДАНИЕ СПИСКА ВРУЧНУЮ +#### 1.4.4.1. СОЗДАНИЕ СПИСКА ВРУЧНУЮ Возможно, самый простой способ создать список (и один из самых просматриваемых методов) - это вручную прописать список значений в параметр. Использование этого метода накладывает ответственность на пользователя, потому что этот метод основывается на прямом вводе данных пользователем (т.е. постоянных данных) для создания списка. Чтобы изменить значение списка, пользователь должен вручную прописать это в каждом отдельном значении, что может представлять некоторую сложность, если в списке много записей. Существует несколько способов создать список вручную. Первый способ - использовать параметр Number. Кликниет правой клавишей мыши по параметру Number и выберите "Manage Number Collection". ![IMAGE](images/1-4-4/1-4-4_001-manual-list-creation.png) @@ -19,7 +19,7 @@ ![IMAGE](images/1-4-4/1-4-4_002-panel.png) -####1.4.4.2. КОМПОНЕНТ RANGE +#### 1.4.4.2. КОМПОНЕНТ RANGE Компонент Range можно найти в разделе Sets/Sequence/Range, он создает список равноотстоящих чисел между меньшими и большими значениями, называемыми Domain (диапазон). Диапазон (также иногда называемый интервал) - это каждое возможное число между двумя числовыми экстремумами. Компонент Range разделяет числовой диапазон на равные сегменты и выдает список значений. @@ -40,13 +40,13 @@ ![IMAGE](images/1-4-4/1-4-4_005-construct-domain.png) >Чтобы создать Range из диапазона, который не начинается с нуля, используйте компонент Construct Domain. -####1.4.4.3. КОМПОНЕНТ SERIES +#### 1.4.4.3. КОМПОНЕНТ SERIES Компонент Series похож на компонент Range тем, что тоже создает списки чисел. Тем не менее, компонент Series отличается, потому что создает набор дискретных чисел, основывающихся на начальном значении, размере шага и числе значений в последовательности. ![IMAGE](images/1-4-4/1-4-4_006-series.png) >Компонент Series создает список, основанный на начальном значении, значении шага и количестве значений в списке. -###1.4.4.4. КОМПОНЕНТ RANDOM +### 1.4.4.4. КОМПОНЕНТ RANDOM Компонент Random (Sets/Sequence/Random) может быть использован для генерации списка псевдо случайных чисел. Их называют "псевдо" случайными, потому что числовая последовательность уникальна, но стабильна для каждого значения seed. Таким образом, вы можете сгенерировать полностью новый набор случайных чисел изменяя значение seed (S вход). Диапазон, как в предыдущем примере, это определяемый интервал между двумя числовыми экстремумами. ![IMAGE](images/1-4-4/1-4-4_007-random.png) diff --git a/ru/1-foundations/1-4/5_list-visualization.md b/ru/1-foundations/1-4/5_list-visualization.md index 5551ba8..580dc55 100644 --- a/ru/1-foundations/1-4/5_list-visualization.md +++ b/ru/1-foundations/1-4/5_list-visualization.md @@ -5,7 +5,7 @@ >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.4.5_list visualization.gh) {% endif %} -#####Понимание работы со списками в Grasshopper может быть трудно без возможности видеть как данные перетекают из одного компонента в другой. Существует несколько способов визуализации списков, которые могут помочь понять и работать с данными. +##### Понимание работы со списками в Grasshopper может быть трудно без возможности видеть как данные перетекают из одного компонента в другой. Существует несколько способов визуализации списков, которые могут помочь понять и работать с данными. Существует много разных способов визуализации списка данных. Самый распространенный способ - это создать некую геометрию со списком данных. Затем соединяя выход R компонента Range со входом Y компонента Construct Point, мы сможем увидеть массив точек в направлении Y. @@ -13,13 +13,13 @@ Давайте посмотрим на некоторые компоненты, которые могут помочь нам понять данные. -####1.4.5.1. КОМПОНЕНТ POINT LIST +#### 1.4.5.1. КОМПОНЕНТ POINT LIST Компонент Point List - это невероятно полезный инструмент для визуализации порядка в наборе точек в списке. Главным образом, компонент Point List размещает число индекс элемента рядом с точкой геометрии в видовом окне. Вы также можете указать хотите ли вы или нет указывать числовые тэги, соединительные линии или размер текстовых тэгов. ![IMAGE](images/1-4-5/1-4-5_002-point-list.png) >Вы можете визуализировать порядок набора точек, используя компонент Point List. -####1.4.5.2. КОМПОНЕНТ TEXT TAGS +#### 1.4.5.2. КОМПОНЕНТ TEXT TAGS Компонент text tag позволяет отобразить небольшие текстовые типы данных (набор знаков ASCII) в видовом окне как элементы обратной связи. Текст и расположение определяются как параметры ввода. Когда текстовые тэги запекаются в сцене, они превращаются в Text Dots (текстовые точки). Другой занимательный момент, касающийся Текстовых Тэгов, они независимы от видового окна - это значит, что тэги всегда обращены к камере (включая вид перспективы) и они всегда остаются того же размера на экране, независимо от ваших настроек масштаба. ![IMAGE](images/1-4-5/1-4-5_003-text-tags.png) @@ -30,7 +30,7 @@ ![IMAGE](images/1-4-5/1-4-5_004-text-tag-3d.png) >Вы также можете использовать компонент Text Tag 3d для визуализации информации подобно Текстовому объекту в Rhino. -####1.4.5.3. COLOR +#### 1.4.5.3. COLOR Еще одна из вещей, которые мы можем сделать для визуализации списка данных, - это присвоить геометрии цвет. У Grasshopper ограниченные возможности рендера, но мы можем контролировать простые Open GL настройки, такие как цвет, отраженный цвет, прозрачность и т.д. Значение L0 представляет нижную границу (левая сторона) градиента, в то время как значение L1 представляет верхнюю границу (правая сторона). Эти значения совпадают с началом и концом нашего диапазона. T-значения - это элементы списка, который будет перенесен где-то внутри диапазона L0 и L1. Выход градиента - это список цветовых значений RGB, которые соответствуют каждой точке в нашем списке. Кликните правой клавишей мыши по Gradient, чтобы настроить одну из преднастроек градиента или определить ваш собственный, используя цветовые точки. ![IMAGE](images/1-4-5/1-4-5_005-custom-preview.png) diff --git a/ru/1-foundations/1-4/6_list-management.md b/ru/1-foundations/1-4/6_list-management.md index 78f176a..2d14e42 100644 --- a/ru/1-foundations/1-4/6_list-management.md +++ b/ru/1-foundations/1-4/6_list-management.md @@ -5,40 +5,40 @@ >Файлы упражнения, которые сопровождают этот раздел: [Download](../../appendix/A-2/gh-files/1.4.6_list management.gh) {% endif %} -#####Одна из самых мощных характеристик Grasshopper - это способность быстро строить и изменять различные списки данных. Мы можем хранить много различных типов данных в списке (числа, точки, векторы, кривые, поверхности, брепы и т.д.), существуют полезные для этого инструменты в разделе Sets/List. +##### Одна из самых мощных характеристик Grasshopper - это способность быстро строить и изменять различные списки данных. Мы можем хранить много различных типов данных в списке (числа, точки, векторы, кривые, поверхности, брепы и т.д.), существуют полезные для этого инструменты в разделе Sets/List. -####1.4.6.1. ДЛИНА СПИСКА +#### 1.4.6.1. ДЛИНА СПИСКА Компонент List Length (Sets/List/List Length) измеряет длину списка. Из-за того, что наши списки всегда начинаются с нуля, самый большой возможный индекс в списке равняется длине списка минус один. В этом примере, мы соединили наш базовый Список с входом L компонента List Length, показывая 6 значений в списке. ![IMAGE](images/1-4-6/1-4-6_001-list-length.png) -####1.4.6.2. КОМПОНЕНТ LIST ITEM +#### 1.4.6.2. КОМПОНЕНТ LIST ITEM Наш список вводится в компонент List Item (Sets/List/List Item), чтобы выносить особые элементы данных изнутри массива данных. При получении индивидуальных элементов списка, мы должны указать i вход, который соответствует индекс числу, которое мы хотели бы извлечь. Мы можем внести одно целое или список целых чисел в i вход в зависимости от того, как много элементов мы хотели бы извлечь. Вход L определяет базовых список, который мы будем анализировать. В этом примере, мы установили i вход на 2, так что компонент List Item выдает элементы данных, связанных с 3-м вводным числом в нашем списке. ![IMAGE](images/1-4-6/1-4-6_002-list-item.png) -####1.4.6.3. КОМПОНЕНТ REVERSE LIST +#### 1.4.6.3. КОМПОНЕНТ REVERSE LIST Мы можем инвертировать порядок в нашем списке, используя компонент Reverse List (Sets/ List/Reverse). Если мы введем список возрастающих чисел от 0.0 до 50.0 в компонент Reverse List; выход выдаст убывающий список от 50.0 до 0.0. ![IMAGE](images/1-4-6/1-4-6_003-reverse-list.png) -####1.4.6.4. КОМПОНЕНТ SHIFT LIST +#### 1.4.6.4. КОМПОНЕНТ SHIFT LIST Компонент Shift List (Sets/Sequence/Shift List) будет либо перемещать элементы в списке вверх или вниз на какой-то шаг, в зависимости от значения смещения. Мы подключили выход List ко входу Shift-L, в тоже время подключив число ко входу Shift-S. Если мы установим смещение на -1, все значения списка будут смещаться вниз на одно число. Точно также, если мы изменим смещение на +1, все значения списка будут смещаться вверх на одно число. Если вход Wrap равняется True (правда), то элементы, которые не попадают в границы, будут крепиться к началу или концу списка. В этом примере, мы поставили значение смещения на +1, так что наш список смещается на одно значение вверх. Теперь, нам предстоит решить, как нам поступить с первым значением. Если мы установим значение Wrap на False (ложь), то первое значение будет смещаться вверх и выходить из списка, главным образом, удаляя это значение из набора данных (так что длина списка на один меньше, чем была до этого). Тем не менее, если мы установим значение Wrap на True, первое значение переместиться к концу списка ![IMAGE](images/1-4-6/1-4-6_004-shift-list.png) -####1.4.6.5. КОМПОНЕНТ INSERT ITEMS +#### 1.4.6.5. КОМПОНЕНТ INSERT ITEMS Компонент Insert Items (Sets/Lists/Insert Items) позволяет вставлять набор элементов в список. Для того чтобы это все работало как надо, вам необходимо знать элементы, которые вы хотите вставить и индекс положение для каждого нового элемента. В примере ниже, мы вставим буквы A, B и C на индекс положение три. ![IMAGE](images/1-4-6/1-4-6_005-insert-item.png) -####1.4.6.6. КОМПОНЕНТ WEAVE +#### 1.4.6.6. КОМПОНЕНТ WEAVE Компонент Weave (Sets/Lists/Weave) смешивает два или более списка вместе, на основе указанного паттерна плетения (P вход). Когда паттерн и направление (поток) не совпадают идеально, этот компонент может либо вставить неизвестные значения в выходы потоков или может игнорировать потоки, которые уже были исчерпаны. ![IMAGE](images/1-4-6/1-4-6_006-weave.png) -####1.4.6.7. КОМПОНЕНТ CULL PATTERN +#### 1.4.6.7. КОМПОНЕНТ CULL PATTERN Компонент Cull (Sets/Sequence/Cull Pattern) удаляет элементы в списке, используя повторяющуюся битовую маску. Битовая маска определяется как список булевых значений. Битовая маска повторяется до тех пор, пока все элементы из списка данных не будут определены. ![IMAGE](images/1-4-6/1-4-6_007-cull-pattern.png) diff --git a/ru/1-foundations/1-5/0_designing-with-data-trees.md b/ru/1-foundations/1-5/0_designing-with-data-trees.md index 8327c3c..5e0e940 100644 --- a/ru/1-foundations/1-5/0_designing-with-data-trees.md +++ b/ru/1-foundations/1-5/0_designing-with-data-trees.md @@ -1,5 +1,5 @@ -##1.5. ПРОЕКТИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ДЕРЕВЬЕВ ДАННЫХ +## 1.5. ПРОЕКТИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ДЕРЕВЬЕВ ДАННЫХ -####При увеличении сложности ваших определений, объем данных также увеличивается. Чтобы эффективно использовать Grasshopper, важно понимать, как хранятся большие объемы данных, как к ним можно получить доступ и как с ними обращаться. +#### При увеличении сложности ваших определений, объем данных также увеличивается. Чтобы эффективно использовать Grasshopper, важно понимать, как хранятся большие объемы данных, как к ним можно получить доступ и как с ними обращаться. ![IMAGE](images/1-5/1-5_001-designing-with-data-trees.png) diff --git a/ru/1-foundations/1-5/1_surface-geometry.md b/ru/1-foundations/1-5/1_surface-geometry.md index 8b7bf98..3cbdacd 100644 --- a/ru/1-foundations/1-5/1_surface-geometry.md +++ b/ru/1-foundations/1-5/1_surface-geometry.md @@ -1,6 +1,6 @@ -###1.5.1. Геометрия Поверхности +### 1.5.1. Геометрия Поверхности -#####NURBS (неоднородные рациональные Б-сплайны) - математическое представление, которое может точно смоделировать любую форму из простой 2D линии, круга, арки или коробки в самую сложную 3D произвольной формы органическую поверхность или тело. Благодаря своей гибкости и точности, NURBS модели могут использоваться в любом процессе от иллюстрации и анимации до производства. +##### NURBS (неоднородные рациональные Б-сплайны) - математическое представление, которое может точно смоделировать любую форму из простой 2D линии, круга, арки или коробки в самую сложную 3D произвольной формы органическую поверхность или тело. Благодаря своей гибкости и точности, NURBS модели могут использоваться в любом процессе от иллюстрации и анимации до производства. В отличие от нескольких примитивных типов поверхности, таких как сфера, конусы, плоскости и цилиндры, Rhino поддерживает три типа поверхностей свободных форм, самая полезная из которых NURBS поверхность. Как и кривые, все возможные формы поверхности могут быть представлены NURBS поверхностью, которая является запасной по умолчанию в Rhino. Она также, на данный момент, является самой полезной поверхностью определения и именно на ней мы и сосредоточимся. @@ -10,7 +10,7 @@ 3. Плоскость примитив [плоскость, ширина, высота] 4. Конус примитив [плоскость, радиус, высота] -####1.5.1.1. NURBS ПОВЕРХНОСТИ +#### 1.5.1.1. NURBS ПОВЕРХНОСТИ NURBS поверхности очень похожи на NURBS кривые. Такие же алгоритмы используются для вычисления формы, нормалей, тангенсов, кривизны и других характеристик, но существуют и явные отличия. Например, кривые имеют тангенс векторы и нормальные плоскости, в то время как поверхности имеют нормальные векторы и тангенс плоскости. Это означает, что у кривых отсутствует ориентация, в то время как у поверхности отсутствует направление. В случае NURBS поверхностей, фактически два направления заложены в геометрию, потому что NURBS поверхности - это прямоугольные сетки кривых {u} и {v}. И даже хотя эти направления часто произвольны, мы все-равно их используем, потому что они облегчают нам жизнь. ![IMAGE](images/1-5-1/1-5-1_002-nurbs-surface.png) @@ -34,7 +34,7 @@ NURBS поверхности очень похожи на NURBS кривые. Т Grasshopper занимается NURBS поверхностями схожим образом как Rhino, потому что он построен на том же самом ядре операций, которые необходимы для генерации поверхности. Тем не менее, из-за того, что Grasshopper отображает поверхность поверх видового окна Rhino (именно поэтому, вы не можете выбрать геометрию, созданную через Grasshopper, в видовом окне, до тех пор, пока вы не запечете результаты в этой сцене) некоторые из настроек mesh слегка ниже, чтобы держать скорость вычислений Grasshopper достаточно высоко. Вы могли заметить некоторую граненность поверхности mesh, но это ожидаемо и является результатом настроек прорисовки Grasshopper. Любая запеченная геометрия будет все равно использовать самые высокие настройки mesh. -####1.5.1.2. ПРОЕЦИРОВАНИЕ ПОВЕРХНОСТЕЙ +#### 1.5.1.2. ПРОЕЦИРОВАНИЕ ПОВЕРХНОСТЕЙ В предыдущем разделе мы объяснили, что NURBS поверхности содержат их собственные координаты пространства, установленные диапазонами u и v. Это означает, что двух-пространственная геометрия, которая определяется координатами x и y, может быть перенесена на пространство uv. Геометрия будет растягиваться и изменяться в ответ на кривизну поверхности. В этом отличие от простого проецирования 2d геометрии на поверхность, где векторы прорисовываются из 2d геометрии в указанном направлении пока они не пересекутся с поверхностью. ![IMAGE](images/1-5-1/1-5-1_005-surface-mapping.png) @@ -48,7 +48,7 @@ Grasshopper занимается NURBS поверхностями схожим Чтобы разместить скрученную коробку на поверхности, диапазон поверхности должен быть разделен, чтобы создать сетку на участке поверхности. Скрученная коробка создается прорисовкой векторов нормали в углах каждого участка до желаемой высоты и созданием коробки, определяемой конечными точками тех векторов и угловых точек участка. -####1.5.1.3. ОПРЕДЕЛЕНИЕ ПРЕОБРАЗОВАНИЯ +#### 1.5.1.3. ОПРЕДЕЛЕНИЕ ПРЕОБРАЗОВАНИЯ {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/ru/1-foundations/1-5/2_what-is-a-data-tree.md b/ru/1-foundations/1-5/2_what-is-a-data-tree.md index a0fc4eb..d92e4a0 100644 --- a/ru/1-foundations/1-5/2_what-is-a-data-tree.md +++ b/ru/1-foundations/1-5/2_what-is-a-data-tree.md @@ -1,6 +1,6 @@ ### 1.5.2. Что такое Дерево Данных? -#####Дерево данных - это иерархическая структура для хранения данных, состоящая из списков. Деревья данных создаются, когда компонент grasshopper структурируется, чтобы принять набор данных и вывести множественные наборы данных. Grasshopper работает с этими новыми данными, размещая их в под-списки. Эти под-списки работают таким же образом, как и структуры папок на вашем компьютере, а именно, чтобы получить доступ к индексированным элементам требуется пройти по путям, которые проинформированы своим поколением родительских списков и их собственными под-индексами. +##### Дерево данных - это иерархическая структура для хранения данных, состоящая из списков. Деревья данных создаются, когда компонент grasshopper структурируется, чтобы принять набор данных и вывести множественные наборы данных. Grasshopper работает с этими новыми данными, размещая их в под-списки. Эти под-списки работают таким же образом, как и структуры папок на вашем компьютере, а именно, чтобы получить доступ к индексированным элементам требуется пройти по путям, которые проинформированы своим поколением родительских списков и их собственными под-индексами. Это становится возможным иметь множественные списки данных внутри одного параметра. Как только становятся доступны множественные списки, возникает необходимость в способе распознавания каждого отдельного списка. Дерево данных, по сути, список списков или, иногда, список списков списков (и т.д.). @@ -13,7 +13,7 @@ ![IMAGE](images/1-5-2/1-5-2_002-list-data-tree.png) -####1.5.2.1. ВИЗУАЛИЗАЦИЯ ДЕРЕВА ДАННЫХ +#### 1.5.2.1. ВИЗУАЛИЗАЦИЯ ДЕРЕВА ДАННЫХ {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/ru/1-foundations/1-5/3_creating-data-trees.md b/ru/1-foundations/1-5/3_creating-data-trees.md index 6579d0e..7693527 100644 --- a/ru/1-foundations/1-5/3_creating-data-trees.md +++ b/ru/1-foundations/1-5/3_creating-data-trees.md @@ -6,29 +6,29 @@ {% endif %} -#####В Grasshopper есть инструменты для изменения структуры дерева данных. Эти инструменты могут помочь вам получить определенную информацию, касающуюся этого дерева, и изменить способ хранения, расположения и идентификации. +##### В Grasshopper есть инструменты для изменения структуры дерева данных. Эти инструменты могут помочь вам получить определенную информацию, касающуюся этого дерева, и изменить способ хранения, расположения и идентификации. Давайте посмотрим на некоторые манипуляции с деревом данных и визуализируем то, как они влияют на дерево. -####1.5.3.1. FLATTEN +#### 1.5.3.1. FLATTEN Flatten удаляет все уровни Дерева Данных и оставляет только один Список. Применяя компонент Flatten (Sets/Tree/Flatten) к выходу P компонента Divide Curve, мы можем использовать Param Viewer для визуализации новой структуры данных. ![IMAGE](images/1-5-3/1-5-3_001-flatten.png) >В Param Viewer мы можем увидеть, что сейчас у нас только 1 ветка, содержащая список из 48 точек. -####1.5.3.2. GRAFT TREE +#### 1.5.3.2. GRAFT TREE Grafting создает новую Ветку для каждого Элемента Данных. Если мы запустим данные через компонент Graft Tree (Sets/Tree/Graft Tree), каждая точка деления сейчас имеет свою отдельную ветку, а не делит ветку с другими точками делениями на той же самой кривой. ![IMAGE](images/1-5-3/1-5-3_002-graft.png) >В Param Viewer мы можем увидеть, какими были данные с 8 ветками из 6 элементов каждая и что сейчас мы имеем 8 веток с 6 под-ветками, содержащими по одному элементу каждая. -####1.5.3.3. SIMPLIFY TREE +#### 1.5.3.3. SIMPLIFY TREE Simplify удаляет накладывающиеся Ветки в Дереве данных. Если мы запустим данные через компонент Simplify Tree (Sets/Tree/Simplify Tree), то первая ветка, не содержащая данных, будет удалена. ![IMAGE](images/1-5-3/1-5-3_003-simplify.png) >В Param Viewer у нас все равно имеется 8 веток из 6 элементов каждая, но первая ветка была удалена. -####1.5.3.4. FLIP MATRIX +#### 1.5.3.4. FLIP MATRIX Компонент Flip Matrix (Sets/Tree/Flip Matrix) меняет местами "Ряды" и "Колонки" Дерева Данных с двумя индекс путями. ![IMAGE](images/1-5-3/1-5-3_004-flip-matrix.png) @@ -41,7 +41,7 @@ Simplify удаляет накладывающиеся Ветки в Дерев 2. Grafted выход P 3. Simplified выход P -####1.5.3.5. THE PATH MAPPER +#### 1.5.3.5. THE PATH MAPPER Компонент Path Mapper (Sets/Tree/Path Mapper) позволяет вам выполнять лексические действия с деревьями данных. Лексические действия - это логические переносы между путями данных и индексы, которые определяются текстовыми (лексическими) масками и паттернами. ![IMAGE](images/1-5-3/1-5-3_006-path-mapper-a.png) @@ -51,7 +51,7 @@ Simplify удаляет накладывающиеся Ветки в Дерев 3. Mapping редактор 4. Вы можете изменить дерево данных путем еще одного переноса индекса пути и нужной ветки. -####1.5.3.6. WEAVING DEFINITION +#### 1.5.3.6. WEAVING DEFINITION {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/ru/1-foundations/1-6/0_Getting Started with Meshes.md b/ru/1-foundations/1-6/0_Getting Started with Meshes.md index 9203713..bc9446b 100644 --- a/ru/1-foundations/1-6/0_Getting Started with Meshes.md +++ b/ru/1-foundations/1-6/0_Getting Started with Meshes.md @@ -1,5 +1,5 @@ ## 1.6. Начало работы с Mesh -####В области вычислительного моделирования, mesh - одна из самых распространенных форм представления 3D геометрии. Геометрия Mesh может быть легковесной и гибкой альтернативой работе с NURBS и используется везде, начиная от рендера и визуализации и заканчивая цифровым производством и 3D печатью. Эта глава представляет собой введение в то, как работать с геометрией Mesh в Grasshopper. +#### В области вычислительного моделирования, mesh - одна из самых распространенных форм представления 3D геометрии. Геометрия Mesh может быть легковесной и гибкой альтернативой работе с NURBS и используется везде, начиная от рендера и визуализации и заканчивая цифровым производством и 3D печатью. Эта глава представляет собой введение в то, как работать с геометрией Mesh в Grasshopper. ![IMAGE](images/cover.png) diff --git a/ru/1-foundations/1-6/1_What is a Mesh.md b/ru/1-foundations/1-6/1_What is a Mesh.md index 27d06e0..6ac27c2 100644 --- a/ru/1-foundations/1-6/1_What is a Mesh.md +++ b/ru/1-foundations/1-6/1_What is a Mesh.md @@ -1,13 +1,13 @@ ### 1.6.1 Что такое Mesh? -#####Mesh - это набор четырехугольников и треугольников, который образует поверхность или твердое тело. В этой секции обсуждается структура объекта Mesh, которая включает вершины, ребра и поверхности, а также дополнительные характеристики mesh, такие как цвет и нормали. +##### Mesh - это набор четырехугольников и треугольников, который образует поверхность или твердое тело. В этой секции обсуждается структура объекта Mesh, которая включает вершины, ребра и поверхности, а также дополнительные характеристики mesh, такие как цвет и нормали. ![IMAGE](images/1-6-1/01_mesh-structure.png) >1. Вершины Mesh 2. Ребра Mesh 3. Поверхности Mesh -####1.6.1.1 Основное строение Mesh +#### 1.6.1.1 Основное строение Mesh Grasshopper определяет mesh, используя структуру данных Face-Vertex. На самом примитивном уровне, это структура представляет собой набор точек, которые группируются в полигоны. Точки mesh называются vertices (вершины), а полигоны - faces. Чтобы создать mesh, нам требуется список вершин и система группирования этих вершин в полигоны. @@ -61,7 +61,7 @@ Face - это структурированный список из трех-че >1. Четырехугольный полигон с индексами 0,1,2,3 2. Четырехугольный полигон с индексами 0,3,1,2 -####1.6.1.2 Скрытые данные Mesh +#### 1.6.1.2 Скрытые данные Mesh В дополнение к полигонам и вершинам, есть и другая информация о mesh, которую мы хотим использовать. В mesh, основанной на Face-Vertex, такие данные как *edges* (ребра) и *normals* (нормали) рассчитываются непрямо, на основе данных полигона и вершин. Этот раздел описывает способы получение этой информации. @@ -108,7 +108,7 @@ Grasshopper также допускает четырехугольные пол >1. Нормали, установленные в соответствии с нормалями полигонов, дают в итоге в дискретное полигональное затенение 2. Смежные нормали полигонов усреднены вместе для создания нормали вершин, что приводит к сглаженному затенению полигона -####1.6.1.3 Свойства Mesh +#### 1.6.1.3 Свойства Mesh Mesh могут быть также приписаны дополнительные свойства либо вершин либо полигонов. Самое простое из этого - это цвет вершины, который описывается ниже, но существуют и другие свойства, такие как текстура UV координат. (Некоторые программы даже позволяют нормалям вершин быть назначенными как аттрибуты вместо того, чтобы быть извлеченным из полигона и вершин, которые могут предоставить даже больше адаптивности во внешнем виде отрендеренной поверхности.) @@ -125,7 +125,7 @@ Mesh могут быть также приписаны дополнительн >1. Красный, зеленый и голубой цвета приписаны к трем вершинам mesh 2. Итоговая mesh интерполирует цвета вершин -####1.6.1.4 Упражнение +#### 1.6.1.4 Упражнение {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) {% else %} diff --git a/ru/1-foundations/1-6/2_Understanding Topology.md b/ru/1-foundations/1-6/2_Understanding Topology.md index ccd7188..54f983d 100644 --- a/ru/1-foundations/1-6/2_Understanding Topology.md +++ b/ru/1-foundations/1-6/2_Understanding Topology.md @@ -1,6 +1,6 @@ ### 1.6.2 Понимание Топологии -#####В то время как вершины mesh содержат информацию о расположении, связи между вершинами дают геометрии mesh ее уникальную структуру и гибкость. +##### В то время как вершины mesh содержат информацию о расположении, связи между вершинами дают геометрии mesh ее уникальную структуру и гибкость. ![IMAGE](images/1-6-2/01_meshMorph2.png) @@ -30,7 +30,7 @@ >Топологически эквивалентные кружка и пончик -####1.6.2.2 Характеристики Mesh +#### 1.6.2.2 Характеристики Mesh **Ориентируемый** @@ -66,7 +66,7 @@ Mesh считается *ориентируемой* если имеются х Как геометрия mesh отличается от геометрии NURBS? В каких случаях вы захотите использовать одну вместо другой? -#####Параметризация +##### Параметризация В предыдущей главе, мы видели, что поверхности NURBS определяются как последовательность кривых NURBS, направленных в двух направлениях. Эти направления отмечаются как U и V и позволяют параметризировать NURBS поверхность в соответствии с двух-пространственным диапазоном поверхности. Кривые, сами по себе, хранятся как уравнения в компьютере, позволяя рассчитать итоговую поверхность до какой угодно малой степени точности. Тем не менее, может быть сложно комбинировать множество NURBS поверхностей вместе. Объединяя две NURBS поверхности, мы получим полиповерхность, где различные секции геометрии будет иметь различные UV параметры и файлы кривых. Mesh, с другой стороны, состоят из дискретного числа точно определенных вершин и полигонов. Связь вершин, обычно, не может быть определена простыми UV координатами и из-за того, что полигоны дискретны, степень точность встроена в mesh и может быть изменена только исправлением mesh и добавлением больше полигонов. Отсутствие UV координат, тем не менее, дает mesh гибкость, чтобы справиться с более сложной геометрией при помощи одной mesh, вместо использования полиповерхности, как при работе с NURBS. @@ -74,7 +74,7 @@ Mesh, с другой стороны, состоят из дискретного >Примечание - хотя у mesh и нет скрытой UV параметризации, иногда полезно определить такую параметризацию, чтобы перенести текстуру или файл изображения на геометрию mesh для рендера. Некоторое моделирующее ПО, в таких случаях, принимает UV координаты вершины mesh за *характеристику * (как цвет вершины), которой можно управлять и изменять. Они, обычно, определены и не полностью определены самой mesh. -#####Локальное и Глобальное влияние +##### Локальное и Глобальное влияние Еще одна важная разница - степень того, как локальное изменение в mesh или NURBS геометрии влияет на всю форму. Mesh геометрия полностью локальна. Перемещая одну вершину, мы повлияем только на тот полигон, который смежен с этой вершиной. В NURBS поверхностях степень влияния более сложная и зависит от степени поверхности, также как и веса и узлов контрольных точек. В общем, тем не менее, перемещение одной контрольной точки в NURBS поверхности создает более глобальные изменения в геометрии. diff --git a/ru/1-foundations/1-6/3_Creating Meshes.md b/ru/1-foundations/1-6/3_Creating Meshes.md index 069069c..425a7a1 100644 --- a/ru/1-foundations/1-6/3_Creating Meshes.md +++ b/ru/1-foundations/1-6/3_Creating Meshes.md @@ -1,13 +1,13 @@ ### 1.6.3 Создание Mesh -#####В последнем разделе мы рассмотрели основные структуры mesh. В этом разделе мы представим краткое введение в различные способы создания геометрии mesh. +##### В последнем разделе мы рассмотрели основные структуры mesh. В этом разделе мы представим краткое введение в различные способы создания геометрии mesh. Существует три основных способа создания геометрии mesh в Grasshopper: 1. Начать с mesh примитивы 2. Вручную создать mesh из полигонов и вершин 3. Конвертировать NURBS геометрию в mesh -####1.6.3.1 Примитивы +#### 1.6.3.1 Примитивы В Grasshopper есть несколько простых компонентов mesh примитивы: @@ -17,13 +17,13 @@ 3. **Mesh Sphere** - этот примитив нуждается в базовой плоскости для определения центра и ориентации сферы, радиус для размера и значения U и V для определения числа полигонов. 4. **Mesh Sphere Ex** - также известный как Квадрошар, этот примитив создает сферу, состоящую из шести участков, которые разделены в соответствии с входом C. Квадрошар - это топологический эквивалент куба, хотя он и геометрически сферический. -####1.6.3.2 Создание Mesh +#### 1.6.3.2 Создание Mesh ![IMAGE](images/1-6-3/construct-mesh.png) Как мы видели в предыдущем разделе, компонент **Construct Mesh** может быть использован, чтобы непосредственно создать mesh из списка вершин и из списка полигонов (и из дополнительного списка цветов вершин). Создание целой mesh вручную может быть невероятно утомительным, поэтому этот компонент чаще используется с существующим списком полигонов и вершин, которые были извлечены используя компонент **Deconstruct Mesh** на существующую mesh. -####1.6.3.3 NURBS в Mesh +#### 1.6.3.3 NURBS в Mesh Возможно, самый распространенный способ создания сложной mesh - ее генерирование на основе геометрии NURBS. Индивидуальные поверхности NURBS могут быть конвертированы в mesh используя компонент **Mesh Surface** , он просто разделяет поверхность вдоль ее UV координат и создает четырехугольные полигоны. Этот компонент позволяет вводить число U и V подразделений для получаемой mesh. @@ -35,7 +35,7 @@ ПРИМЕЧАНИЕ: в целом, гораздо легче конвертировать NURBS геометрию в объект mesh, чем наоборот. И если UV координаты NURBS поверхности - несложные для конвертации в четырехугольные полигоны mesh, то обратное не всегда верно, так как mesh может содержать комбинацию треугольников и четырехугольников таким образом, что извлечь систему координат UV не просто. -####1.6.3.4 Упражнение +#### 1.6.3.4 Упражнение В этом упражнении мы используем основные Mesh примитивы, выполним изменение вершин и, затем, присвоим цвета, основываясь на нормали векторов для аппроксимации процесса рендера. diff --git a/ru/1-foundations/1-6/4_Mesh Operations.md b/ru/1-foundations/1-6/4_Mesh Operations.md index ee63c3f..6eee144 100644 --- a/ru/1-foundations/1-6/4_Mesh Operations.md +++ b/ru/1-foundations/1-6/4_Mesh Operations.md @@ -1,8 +1,8 @@ ### 1.6.4 Операции с Mesh -#####В последнем разделе мы рассмотрели основные структуры mesh. В этом разделе мы рассмотрим способы работы с геометрией mesh. +##### В последнем разделе мы рассмотрели основные структуры mesh. В этом разделе мы рассмотрим способы работы с геометрией mesh. -####1.6.4.1 Smooth +#### 1.6.4.1 Smooth ![IMAGE](images/1-6-4/smooth.png) @@ -17,7 +17,7 @@ 4. 25 итераций 5. 50 итераций -####1.6.4.2 Blur +#### 1.6.4.2 Blur ![IMAGE](images/1-6-4/blur.png) @@ -30,7 +30,7 @@ 4. 12 итераций 5. 20 итераций -####1.6.4.3 Triangulate +#### 1.6.4.3 Triangulate ![IMAGE](images/1-6-4/triangulate.png) @@ -41,7 +41,7 @@ 2. Добавленные ребра в соответствии с самым коротким расстоянием через четырехугольники 3. 3. Триангулированная итоговая mesh -####1.6.4.4 Weld +#### 1.6.4.4 Weld ![IMAGE](images/1-6-4/weld.png) diff --git a/ru/1-foundations/1-6/5_Mesh Interactions.md b/ru/1-foundations/1-6/5_Mesh Interactions.md index b59241c..06ae970 100644 --- a/ru/1-foundations/1-6/5_Mesh Interactions.md +++ b/ru/1-foundations/1-6/5_Mesh Interactions.md @@ -1,9 +1,9 @@ ### 1.6.5 Взаимодействие Mesh -#####Этот раздел рассматривает способы взаимодействия Объектов Mesh с другими объектами, такими как определение ближайших точек или объединение множества mesh вместе. +##### Этот раздел рассматривает способы взаимодействия Объектов Mesh с другими объектами, такими как определение ближайших точек или объединение множества mesh вместе. -####1.6.5.1 Геометрия Mesh и Точки +#### 1.6.5.1 Геометрия Mesh и Точки **Inclusion** @@ -38,7 +38,7 @@ Компонент **Mesh Eval** использует параметр mesh как вход и выдает исходную точку, а также нормаль и цвет в этой точке. Цвет и нормаль рассчитываются как интерполяции цветов вершин и нормалей вершин, используя те же самые барицентрические координаты как параметр mesh. -####1.6.5.2 Объединение Геометрии Mesh +#### 1.6.5.2 Объединение Геометрии Mesh **Mesh Join** @@ -59,7 +59,7 @@ Mesh в Grasshopper имеет набор булевых операций пох 4. Объединение Mesh -####1.6.5.3 Intersections (Пересечения) и Occlusions (Преграды) +#### 1.6.5.3 Intersections (Пересечения) и Occlusions (Преграды) **Intersect** diff --git a/ru/1-foundations/1-6/6_Working with Mesh Geometry.md b/ru/1-foundations/1-6/6_Working with Mesh Geometry.md index 42eb353..b23de10 100644 --- a/ru/1-foundations/1-6/6_Working with Mesh Geometry.md +++ b/ru/1-foundations/1-6/6_Working with Mesh Geometry.md @@ -1,6 +1,6 @@ ### 1.6.6 Работа с геометрией Mesh -#####В этом разделе мы будем работать над производством твердого тела mesh. К концу этого упражнения у нас будет динамическое определение для производства индивидуальных ваз, которые можно напечатать на 3D принтере. +##### В этом разделе мы будем работать над производством твердого тела mesh. К концу этого упражнения у нас будет динамическое определение для производства индивидуальных ваз, которые можно напечатать на 3D принтере. {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/ru/2-extensions/2-1/2_HalfEdge_Data.md b/ru/2-extensions/2-1/2_HalfEdge_Data.md index a56e5a6..68a2bce 100644 --- a/ru/2-extensions/2-1/2_HalfEdge_Data.md +++ b/ru/2-extensions/2-1/2_HalfEdge_Data.md @@ -1,4 +1,4 @@ -###2.1.2. Данные Half Edge +### 2.1.2. Данные Half Edge В пособии Grasshopper мы рассматривали как Grasshopper определяет mesh, используя структуру данных Полигон-Вершина. Это, относительно, простая структура данных, она широко используется в приложениях, которые используют mesh, но может быть неэффективной для вычисления более сложных алгоритмов. Аддон Element\* реструктурирует mesh, используя данные Half-Edge: структура данных, ориентированная на ребрах, которая выдает удобные запросы о смежных вершинах, полигонах и ребрах, что может улучшить скорость и производительность алгоритма. Эта структура способна сохранять информацию о вершинах, ребрах и полигонах. Этот метод способствует созданию новых паттернов и геометрий, основанных на топологических отношениях базовой геометрии. @@ -6,10 +6,10 @@ ![IMAGE](images/2-1-2/2-1-2_001_Half-Edge.png) -####2.1.2.1 Связанность Half-Edge +#### 2.1.2.1 Связанность Half-Edge Выделенные голубым цветом полу-ребра открыто хранят индексы их конечных точек, смежных полу-ребер и полигонов, к которым они принадлежат. К другой информации (серый цвет) можно получить косвенный доступ. ![IMAGE](images/2-1-2/2-1-2_002_Half-Edge.png) -####2.1.2.2 Связанность Вершин +#### 2.1.2.2 Связанность Вершин Выделенная голубым цветом вершина открыто хранит индекс одной из ее исходящих полу-ребер. К другой информации (серый цвет) можно получить косвенный доступ. ![IMAGE](images/2-1-2/2-1-2_003_Half-Edge.png) diff --git a/ru/2-extensions/2-1/3_Components.md b/ru/2-extensions/2-1/3_Components.md index 59d07ce..ab5a15a 100644 --- a/ru/2-extensions/2-1/3_Components.md +++ b/ru/2-extensions/2-1/3_Components.md @@ -1,8 +1,8 @@ -###2.1.3. Компоненты Element* +### 2.1.3. Компоненты Element* ![IMAGE](images/2-1-3/2-1-3_001_Components-Tabs.png) -####2.1.3.1 Analyse (Анализ) +#### 2.1.3.1 Analyse (Анализ) ![IMAGE](images/2-1-3/2-1-3_002_Analyse-Components.png) >1. Mesh Closest Point @@ -25,7 +25,7 @@ -####2.1.3.2 Data (Данные) +#### 2.1.3.2 Data (Данные) ![IMAGE](images/2-1-3/2-1-3_003_Data-Components.png) >1. Data Visualizer @@ -59,7 +59,7 @@ ![IMAGE](images/2-1-3/2-1-3_006_Vertex-Neighbors.png) > **Vertex Neighbors** - Вершины, соседние вершины, соседние ребра, центры соседнего полигона -####2.1.3.3 Primitives (Примитивы) +#### 2.1.3.3 Primitives (Примитивы) Element\* предоставляет четыре дополнительных mesh примитива: додекаэдр, тетраэдр, октаэдр и икосаэдр. Эти компоненты берут одно число как вход для радиуса и производят несколько mesh, с центром в начале системы координат и состоящих из одного полигона на одной стороне. Добавив Куб, который является уже встроенным примитивом в Grasshopper, они представляют пять Платоновых тел. @@ -69,13 +69,13 @@ Element\* предоставляет четыре дополнительных m 3. Октаэдр 4. Икосаэдр -####2.1.3.4 Smooth (Сглаживание) +#### 2.1.3.4 Smooth (Сглаживание) **Element\* Smooth** предоставляет оптимизированный сглаженный алгоритм, который более продуктивен, чем компонент Grasshopper **Smooth Mesh** для огромных массивов данных. Он использует алгоритм Lapacian Smoothing для Half-Edge структурированных mesh. Он не меняет топологию или количество вершин спаенных mesh, но он будет объединять идентичные вершины, если имеются любые дубликаты, причиной которых является неспаенная mesh. Мы можем указать силу сглаживания, граничные условия, граничную точность, а также число итераций. ![IMAGE](images/2-1-3/2-1-3_008_Smooth.png) -####2.1.3.5 Subdivide (Подразделение) +#### 2.1.3.5 Subdivide (Подразделение) **Element\* Catmull Clark Subdivision** @@ -90,7 +90,7 @@ Element\* предоставляет четыре дополнительных m >1. Constant Quad подразделение 2. Catmull Clark подразделение -####2.1.3.6 Transform (Трансформация) +#### 2.1.3.6 Transform (Трансформация) ![IMAGE](images/2-1-3/2-1-3_010_Transform-Components.png) >1. Mesh Windown @@ -126,7 +126,7 @@ Element\* предоставляет четыре дополнительных m 2. Mesh Frame 3. Икосаэдр, измененный вместе с mesh фреймингом, затем применено утолщение и подразделение -####2.1.3.7 Utility +#### 2.1.3.7 Utility ![IMAGE](images/2-1-3/2-1-3_012_Utility-Component.png) >1. Mesh Combine & Clean diff --git a/ru/2-extensions/2-1/4_Exercise.md b/ru/2-extensions/2-1/4_Exercise.md index 7ff3bcb..b467500 100644 --- a/ru/2-extensions/2-1/4_Exercise.md +++ b/ru/2-extensions/2-1/4_Exercise.md @@ -1,6 +1,6 @@ -###2.1.4. Упражнение +### 2.1.4. Упражнение -#####В этом разделе мы проработаем простое упражнение, взяв примитивы Element* за основу. Мы внедрим half-edge структуру данных, а также используем обе характеристики компонентов трансформации (uniform и per vertex) +##### В этом разделе мы проработаем простое упражнение, взяв примитивы Element* за основу. Мы внедрим half-edge структуру данных, а также используем обе характеристики компонентов трансформации (uniform и per vertex) ![IMAGE](images/2-1-4/2-1-4_000_Cover.png) {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} diff --git a/ru/2-extensions/2-1/5_Architectural Case Study.md b/ru/2-extensions/2-1/5_Architectural Case Study.md index 8943107..4805617 100644 --- a/ru/2-extensions/2-1/5_Architectural Case Study.md +++ b/ru/2-extensions/2-1/5_Architectural Case Study.md @@ -1,11 +1,11 @@ -###2.1.5. Element* Изучение применения в архитектуре +### 2.1.5. Element* Изучение применения в архитектуре -#####В этом разделе мы проработает простой пример, в качестве введения в работу с инструментами Element. Мы изучим некоторые паттерны и обработку фасадов в области архитектуры, где мы подключим структуру данных Half Edge вместе с базовыми компонентами Element без использования характеристик per vertex. +##### В этом разделе мы проработает простой пример, в качестве введения в работу с инструментами Element. Мы изучим некоторые паттерны и обработку фасадов в области архитектуры, где мы подключим структуру данных Half Edge вместе с базовыми компонентами Element без использования характеристик per vertex. ![IMAGE](images/2-1-5/2-1-5_001_Main-Render.jpg) -####2.1.5.1 Пример 1 +#### 2.1.5.1 Пример 1 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) @@ -87,7 +87,7 @@ thead {display: none} ![IMAGE](images/2-1-5/2-1-5_022_Definition.png) --- -####2.1.5.2 Пример 2 +#### 2.1.5.2 Пример 2 {% if gitbook.generator == "pdf" or gitbook.generator == "mobi" or gitbook.generator == "epub" %} >Файлы упражнения, которые сопровождают этот раздел: [http://grasshopperprimer.com/appendix/A-2/1_gh-files.html](http://grasshopperprimer.com/appendix/A-2/1_gh-files.html) diff --git a/ru/README.md b/ru/README.md index 8afd59c..3d41a41 100644 --- a/ru/README.md +++ b/ru/README.md @@ -1,12 +1,12 @@ -#Пособие по Grasshopper (RU) -##Третье издание V3.3 +# Пособие по Grasshopper (RU) +## Третье издание V3.3 ![Primer Release Cover](0-about/images/GHP3_5Pages.png) > Grasshopper - это редактор графических алгоритмов, тесно связанный с 3-D моделирующими инструментами программы Rhino, позволяя дизайнерам создавать генераторы форм от самых простых до захватывающих дух. -###ДОБРО ПОЖАЛОВАТЬ +### ДОБРО ПОЖАЛОВАТЬ Перед вами третье издание пособия по Grasshopper. Данное пособие было написано Эндрю О.Пэйн из Lift Architects для Rhino4 и Grasshopper версии 0.6.0007, в момент публикования оно представляло собой гигантское обновление для, и так, уже мощной платформы Grasshopper. В данный момент мы стоим перед следующим важным изменением в развитии Grasshopper и, поэтому, было подготовлено необходимое обновление существующего пособия. Мы взволнованы предстоящим добавлением данного обновленного пособия, а теперь и *интернет-пособия*, к тому невероятному вкладу, который уже внесли члены сообщества Grasshopper. Уже имея превосходную базу, взятую за основу, наша команда в [Mode Lab](http://modelab.is) отправились создавать и развивать третье издание. Такая переработка имеющегося материала предоставила нам полный гид для наиболее современной версии Grasshopper 0,90076, подчеркивая, как нам кажется, обновления самых восхитительных функций. Обновленные тексты, графика и примеры работ направлены на то, чтобы обучить визуальному программированию даже самого начинающего новичка, а также провести быстрое введение в Генеративное Проектирование для опытного пользователя. Цель этого пособия в том, чтобы служить полевым гидом для новичков и давних пользователей, направленным на изучение азов использования Grasshopper в их творческой деятельности. @@ -69,7 +69,7 @@ RhinoScript или Python, Grasshopper не требует знания абст http://www.grasshopper3d.com/page/download-1 -###ФОРУМ +### ФОРУМ Форум Grasshopper - очень активный и предлагает прекрасный ресурс для размещения вопросов/ответов и нахождения помощи по всему, чего угодно. Форум делится на следующие категории: обсуждение общих @@ -87,5 +87,5 @@ http://www.grasshopper3d.com/notes/index/allNotes http://discourse.mcneel.com/ -###ИНФОРМАЦИЯ ПО ЛИЦЕНЗИИ +### ИНФОРМАЦИЯ ПО ЛИЦЕНЗИИ Пособие по Grasshopper - лицензировано в Creative Commons Attribution - NonCommercial-ShareAlike 3.0 Unported license. Полный текст этой лицензии доступен по этому адресу: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode diff --git a/ru/SUMMARY.md b/ru/SUMMARY.md index 602cc91..f3b9bf8 100644 --- a/ru/SUMMARY.md +++ b/ru/SUMMARY.md @@ -40,7 +40,7 @@ * [Операции с Mesh](1-foundations/1-6/4_Mesh Operations.md) * [Взаимодействие Mesh](1-foundations/1-6/5_Mesh Interactions.md) * [Работа с геометрией Mesh](1-foundations/1-6/6_Working with Mesh Geometry.md) -#КНИГА 2 - Расширения +# КНИГА 2 - Расширения * [Расширения](2-extensions/2-extensions.md) * [Element*](2-extensions/2-1/0_Element.md) * [Введение](2-extensions/2-1/1_Element_Intro.md) diff --git a/ru/appendix/A-1/0_index-of-components.md b/ru/appendix/A-1/0_index-of-components.md index c833391..3db8e72 100644 --- a/ru/appendix/A-1/0_index-of-components.md +++ b/ru/appendix/A-1/0_index-of-components.md @@ -19,12 +19,12 @@ thead {display: none} ## 2.1. Индекс -#####Этот индекс содержит дополнительную информацию по всем компонентам, использованным в этом пособии, а также другие компоненты, которые могут оказаться вам полезными. Это небольшое введение в более чем 500 компонентов в плагине Grasshopper. +##### Этот индекс содержит дополнительную информацию по всем компонентам, использованным в этом пособии, а также другие компоненты, которые могут оказаться вам полезными. Это небольшое введение в более чем 500 компонентов в плагине Grasshopper. Параметры -- -####Geometry +#### Geometry |||| |--|--|--| |P.G.Crv|Curve Parameter
Представляет набор геометрии Curve (кривая). Геометрия Curve - это общий знаменатель всех типов кривых в Grasshopper.|![IMAGE](images/PGCrv.png)| @@ -34,7 +34,7 @@ thead {display: none} |P.G.Pt|Point Parameter
Параметр Point (точка) способен хранить постоянные данные. Вы можете настроить запись постоянных данных через меню Parameter.|![IMAGE](images/PGPt.png)| |P.G.Srf|Surface Parameter
Представляет набор геометрии Surface (поверхность). Surface геометрия - это общий знаменатель всех типов поверхности в Grasshopper.|![IMAGE](images/PGSrf.png)| -####Primitive +#### Primitive |||| |--|--|--| |P.P.Bool|Boolean Parameter
Представляет набор Булевых значений (Правда/Ложь).|![IMAGE](images/PPBool.png)| @@ -45,7 +45,7 @@ thead {display: none} |P.P.Num|Number Parameter
Представляет набор численных значений с плавающей точкой. Параметры Number способны хранить постоянные данные. Вы можете настроить запись постоянных данных через меню Parameter.|![IMAGE](images/PPNum.png)| |P.P.Path|File Path
Содержит набор путей файла.|![IMAGE](images/PPPath.png)| -####Input +#### Input |||| |--|--|--| |P.I.Toggle|Boolean Toggle
Переключатель булевых значений (правда/ложь).|![IMAGE](images/PIToggle.png)| @@ -57,7 +57,7 @@ thead {display: none} |P.I.Panel|Panel
Panel (панель) для разных заметок и текстовых значений. Обычно, это неактивный объект, который позволяет вам добавлять комментарии или объяснения к Документу. Панели могут получать информацию откуда угодно. Если вы подключите параметр выхода в панель, вы увидите содержание этого параметра в реальном времени. Все данные в Grasshopper можно просматривать таким образом. Панели также могут передавать их содержание в текстовый файл.|![IMAGE](images/PIPanel.png)| |P.I.List|Value List
Предоставляет список преднастроенных значений из которых можно выбрать.|![IMAGE](images/PIList.png)| -####Utilities +#### Utilities |||| |--|--|--| |P.U.Cin|Cluster Input
Представляет параметр Cluster Input.|![IMAGE](images/PUCin.png)| @@ -70,7 +70,7 @@ thead {display: none} Maths -- -####Domain +#### Domain |||| |--|--|--| |M.D.Bnd|Bounds
Создает числовой диапазон, который содержит список чисел.|![IMAGE](images/MDBnd.png)| @@ -84,7 +84,7 @@ Maths |M.D.ReMap|Remap Numbers
Переносит числа в новый числовой диапазон.|![IMAGE](images/MDReMap.png)| -####Operators +#### Operators |||| |--|--|--| |M.O.Add|Addition
Математическое добавление.|![IMAGE](images/MOAdd.png)| @@ -99,13 +99,13 @@ Maths |M.O.Similar|Similarity
Проверяет на сходство двух чисел.|![IMAGE](images/MOSimilar.png)| |M.O.Sub|Subtraction
Математическое извлечение.|![IMAGE](images/MOSub.png)| -####Script +#### Script |||| |--|--|--| |M.S.Eval|Evaluate
Определяет выражение с гибкими числами переменных.|![IMAGE](images/MSEval.png)| |M.S.Expression|Expression
Определяет выражение.|![IMAGE](images/MSExpression.png)| -####Trig +#### Trig |||| |--|--|--| |M.T.Cos|Cosine
Вычисляет косинус значения.|![IMAGE](images/MTCos.png)| @@ -113,7 +113,7 @@ Maths |M.T.Rad|Radians
Конвертирует угол, указанный в градусах, в радианы.|![IMAGE](images/MTRad.png)| |M.T.Sin|Sine
Вычисляет синус значения.|![IMAGE](images/MTSin.png)| -####Utilities +#### Utilities |||| |--|--|--| |M.U.Avr|Average
Проверяет среднее арифметическое для набора элементов.|![IMAGE](images/MUAvr.png)| @@ -123,7 +123,7 @@ Maths Sets -- -####List +#### List |||| |--|--|--| |S.L.Combine|Combine Data
Сочетает не-неизвестные значения из нескольких входов.|![IMAGE](images/SLCombine.png)| @@ -142,7 +142,7 @@ Sets |S.L.Sort|Sort List
Сортирует список числовых ключей. Чтобы что-то отсортировать, это должно быть сначала сопоставлено. Большинство типов данных не может быть сопоставлена, Numbers и Strings - единственное исключение. Если вы хотите отсортировать другие типы данных, такие как кривые, сначала вам потребуется создать список ключей.|![IMAGE](images/SLSort.png)| |S.L.Weave|Weave
Соединяет набор вводных данных используя определенный шаблон. Шаблон определяется как список индекс значений (целых), которые определяют порядок, в котором вводные данные собираются.|![IMAGE](images/SLWeave.png)| -####Sets +#### Sets |||| |--|--|--| |S.S.Culli|Cull Index
Cull (удаляет) проиндексированные элементы в списке.|![IMAGE](images/SSCulli.png)| @@ -154,7 +154,7 @@ Sets |S.S.Repeat|Repeat Data
Повторяет паттерн до тех пор, пока не достигнет определенной длины.|![IMAGE](images/SSRepeat.png)| |S.S.Series|Series
Создает последовательность чисел. Числа распределены в соответствии со значением {Step}. Если вам необходимо распределить числа внутри фиксированного числового порядка, то используйте компонент [Range].|![IMAGE](images/SSSeries.png)| -####Tree +#### Tree |||| |--|--|--| |S.T.Explode|Explode Tree
Извлекает все ветки из дерева.|![IMAGE](images/STExplode.png)| @@ -171,21 +171,21 @@ Sets Vector -- -####Grid +#### Grid |||| |--|--|--| |V.G.HexGrid|Hexagonal
2D сетка с шестиугольными ячейками.|![IMAGE](images/VGHexGrid.png)| |V.G.RecGrid|Rectangular
2D сетка с прямоугольными ячейками.|![IMAGE](images/VGRecGrid.png)| |V.G.SqGrid|Square
2D сетка с квадратными ячейками|![IMAGE](images/VGSqGrid.png)| -####Point +#### Point |||| |--|--|--| |V.P.Pt|Construct Point
Построение точки из координат {xyz}.|![IMAGE](images/VPPt.png)| |V.P.pDecon|Deconstruct
Разбирает точку на ее компоненты.|![IMAGE](images/VPpDecon.png)| |V.P.Dist|Distance
Вычисляет Евклидовое расстояние между координатами двух точек.|![IMAGE](images/VPDist.png)| -####Vector +#### Vector |||| |--|--|--| |V.V.X|Unit X
Unit вектор параллелен мировой оси {x}.|![IMAGE](images/VVX.png)| @@ -195,17 +195,17 @@ Vector Curve -- -####Analysis +#### Analysis |||| |--|--|--| |C.A.CP|Control Points
Извлекает контрольные точки nurbs и узлы кривой.|![IMAGE](images/CACP.png)| -####Division +#### Division |||| |--|--|--| |C.D.Divide|Divide Curve
Разделяет кривую на равные по длине сегменты.|![IMAGE](images/CDDivide.png)| -####Primitive +#### Primitive |||| |--|--|--| |C.P.Cir|Circle
Создает круг, определяемый основной плоскостью и радиусом.|![IMAGE](images/CPCir.png)| @@ -214,7 +214,7 @@ Curve |C.P.Line|Line SDL
Создает линейный сегмент, определяемый начальной точкой, тангенсом и длиной.|![IMAGE](images/CPLine.png)| |C.P.Polygon|Polygon
Создает полигон с дополнительными круглыми ребрами.|![IMAGE](images/CPPolygon.png)| -####Spline +#### Spline |||| |--|--|--| |C.S.IntCrv|Interpolate
Создает интерполируемую кривую через набор точек.|![IMAGE](images/CSIntCrv.png)| @@ -222,7 +222,7 @@ Curve |C.S.Nurbs|Nurbs Curve
Строит кривую nurbs из контрольных точек.|![IMAGE](images/CSNurbs.png)| |C.S.PLine|PolyLine
Создает полилинию, соединяющую некоторое число точек.|![IMAGE](images/CSPLine.png)| -####Util +#### Util |||| |--|--|--| |C.U.Explode|Explode
Разбивает кривую на маленькие сегменты.|![IMAGE](images/CUExplode.png)| @@ -232,12 +232,12 @@ Curve Surface -- -####Analysis +#### Analysis |||| |--|--|--| |S.A.DeBrep|Deconstruct Brep
Разбирает brep на ее составляющие.|![IMAGE](images/SADeBrep.png)| -####Freeform +#### Freeform |||| |--|--|--| |S.F.Boundary|Boundary Surfaces
Создает плоскую поверхность из коллекции граничных ребер кривых.|![IMAGE](images/SFBoundary.png)| @@ -247,12 +247,12 @@ Surface |S.F.RevSrf|Revolution
Создает поверхность вращения.|![IMAGE](images/SFRevSrf.png)| |S.F.Swp2|Sweep2
Создает загнутую поверхность с двумя rail кривыми.|![IMAGE](images/SFSwp2.png)| -####Primitive +#### Primitive |||| |--|--|--| |S.P.BBox|Bounding Box
Solve ориентированная геометрия граничных прямоугольников.|![IMAGE](images/SPBBox.png)| -####Util +#### Util |||| |--|--|--| |S.U.SDivide|Divide Surface
Генерирует сетку точек {uv} на поверхности.|![IMAGE](images/SUSDivide.png)| @@ -261,7 +261,7 @@ Surface Mesh -- -####Triangulation +#### Triangulation |||| |--|--|--| |M.T.Voronoi|Voronoi
Плоскостная диаграмма Вороного для коллекции точек.|![IMAGE](images/MTVoronoi.png)| @@ -269,17 +269,17 @@ Mesh Transform -- -####Affine +#### Affine |||| |--|--|--| |T.A.RecMap|Rectangle Mapping
Трансформирует геометрию из одного прямоугольника в другой.|![IMAGE](images/TARecMap.png)| -####Array +#### Array |||| |--|--|--| |T.A.ArrLinear|Linear Array
Создает линейный массив геометрии.|![IMAGE](images/TAArrLinear.png)| -####Morph +#### Morph |||| |--|--|--| |T.M.Morph|Box Morph
Превращение объекта в скрученную коробку.|![IMAGE](images/TMMorph.png)| @@ -288,23 +288,23 @@ Transform Display -- -####Color +#### Color |||| |--|--|--| |D.C.HSL|Colour HSL
Создает цвет из плавающих точек {HSL} каналов.|![IMAGE](images/DCHSL.png)| -####Dimensions +#### Dimensions |||| |--|--|--| |D.D.Tag|Text tags
Компонент текстовый тэг позволяет рисовать небольшие Strings в видовом окне как элементы обратной связи. Текст и расположение определяются как параметры ввода. Когда текстовые тэги запекаются, они превращаются в Text Dots (текстовые точки).|![IMAGE](images/DDTag.png)| |D.D.Tag3D|Text Tag 3D
Представляет список 3D текстовых тэгов в видовом окне Rhino|![IMAGE](images/DDTag3D.png)| -####Preview +#### Preview |||| |--|--|--| |D.P.Preview|Custom Preview
Позволяет настраивать предпросмотр геометрии.|![IMAGE](images/DPPreview.png)| -####Vector +#### Vector |||| |--|--|--| |D.V.Points|Point List
Отображает подробные данные о списках точек.|![IMAGE](images/DVPoints.png)| diff --git a/ru/appendix/A-2/0_resources.md b/ru/appendix/A-2/0_resources.md index 407b3ad..fa9fdff 100644 --- a/ru/appendix/A-2/0_resources.md +++ b/ru/appendix/A-2/0_resources.md @@ -1,8 +1,8 @@ -##2.3. Ресурсы +## 2.3. Ресурсы -#####Существует множество ресурсов доступных для дальнейшего изучения Grasshopper и концептов параметрического проектирования. Также существует больше сотни плагинов и аддонов, которые расширяют функциональность Grasshopper. Ниже некоторые наши любимые ресурсы. +##### Существует множество ресурсов доступных для дальнейшего изучения Grasshopper и концептов параметрического проектирования. Также существует больше сотни плагинов и аддонов, которые расширяют функциональность Grasshopper. Ниже некоторые наши любимые ресурсы. -###Сообщества по плагинам +### Сообщества по плагинам -##About This Primer +## About This Primer -###Authors +### Authors ![IMAGE](images/akos.png) -#####Gil Akos, Mode Lab +##### Gil Akos, 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 @@ -27,7 +27,7 @@ http://modelab.is/education ![IMAGE](images/parsons.png) -#####Ronnie Parsons, Mode Lab +##### 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 @@ -39,7 +39,7 @@ http://modelab.is/education ![IMAGE](images/modelab.png) -#####Mode Lab Team: +##### Mode Lab Team: -###Contributors +### Contributors ![IMAGE](images/payne.png) -#####Andrew Payne, Principal, Lift Architects +##### 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 @@ -85,7 +85,7 @@ http://www.grasshopper3d.com/ -###LICENSING INFORMATION +### LICENSING INFORMATION The Grasshopper Primer is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license. The full text of this license is available here: http://creativecommons.org/licenses/by-nc-sa/3.0/us/legalcode Under this license, you are free: