# Geometry and Data Introduction

## Geometry in Grasshopper

Please also take a look at the page of the Introduction Grasshopper Geometry. On this page you will find essential information of the geometry which you will use in Grasshopper. It is important that you know the terms used in defining the components of the geometry, because you will often build geometry from scratch.

Grasshopper is used to create definitions which produce 3D models, represented by geometry in Rhino. So to work with Grasshopper you need to have at least some basic understanding of geometry in Rhino.
Grasshopper primarily uses NURBS geometry. NURBS geometry is not unique to Rhino and is used in various other software packages like Maya, Catia etc. NURBS geometry is mathematically defined, therefore very suitable for use in a parametric system. It enables you to get information on each point or part of the geometry.
The strength of Grasshopper is that it can extract accurate data from geometry for analyses or for generation of additional geometry. Of course you need to know what you can extract from the geometry. Therefore knowledge about the components of the geometry is crucial.
There is also another issue you will have to content with. You will have to define every step in making the geometry in Grasshopper. That also means that rotating, moving and scaling an object also requires an accurate description of direction, axis or starting points and amount.

## Working with Data

A Grasshopper definition is all about components, their actions and the connections between components. These connections, shown as wires in Grasshopper, carry information throughout the definition. This information can be simple numerical values, or references to geometry such as points, lines and surfaces. The way this information is organized, is crucial for Grasshopper's understanding of how to interpret the data.

For example: If you have a list of 10 points and you want to create a line, the most obvious solution would be to create a line through all these points. However, those 10 points could also be used to create 5 lines, each between a set of 2 of those 10 points.

To define this difference, and in this way order the data, Grasshopper uses a list of numbered objects. In the example the list of 10 points will be a "flat list", as all points are at the same level. The list of 5 times 2 points will be a "list of lists", or *data-tree*.

How the data is structured can be seen in the way the connections between modules are displayed . The connections can be displayed in three ways:

- a single line
- the connection carries a single value
- a double line
- the connection carries a list of values
- a double dashed line
- the connection carries a list of lists

As you will discover, this is a key part of Grasshopper. For more complex definitions you really need to grasp the principles of data trees. But don't worry. In this stage we will try to avoid all but the simplest manipulation of data trees and lists.