> For the complete documentation index, see [llms.txt](https://wiki.mksdtech.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.mksdtech.com/beam/beam-for-rhinoceros/grasshopper.md).

# Grasshopper®

BEAM components for Grasshopper®

BEAM adds a **BEAM** tab to Grasshopper. Its components read and write BEAM data in the Rhino document, manage levels and parameters, and export *.beam* and IFC files.

Download the [example .3dm and .gh files](https://drive.google.com/drive/folders/1-c0nPBFhAzqdBlIb9JXKcCsJCKdWn86q?usp=sharing).

{% hint style="success" %}
Use Grasshopper to create many families at once, for example one family per façade panel with its own area parameter. Or keep a parametric script that bakes geometry with BEAM data, ready to export and update the Revit model.
{% endhint %}

## How the components work

* **Referenced or baked.** The Write components update objects referenced from Rhino. If the geometry is not referenced, they bake it first. Use the **Layer** input to choose the layer, with `::` for sublayers.
* **Refresh.** List components such as **Families** and **Levels** have an optional **Refresh** input to read the document again.
* **Names.** Names and values cannot contain ``\ : { } [ ] | ; < > ? ` ~ " /``.

## Blocks

| Component                  | What it does                            | Inputs  | Outputs |
| -------------------------- | --------------------------------------- | ------- | ------- |
| **List Block Definitions** | Lists block definition names            | Refresh | Blocks  |
| **Find Blocks by Name**    | Finds instances of a block definition   | Name    | Blocks  |
| **Find Blocks by Mark**    | Finds instances by Mark                 | Mark    | Blocks  |
| **Find Blocks By Id**      | Finds instances by GUID                 | Id      | Blocks  |
| **Get Block Geometry**     | Gets the geometry of a block definition | Name    | Objects |

The **Block** parameter holds a Rhino block instance.

## Document

| Component                                                 | What it does                                           | Inputs                                                                                                                                                                                              | Outputs                                              |
| --------------------------------------------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| **Families**                                              | Lists the families in the document                     | Refresh                                                                                                                                                                                             | Families                                             |
| **Get Family Objects**                                    | Gets the objects of a family                           | Family                                                                                                                                                                                              | Objects                                              |
| **Categories**                                            | Outputs a category. Pick it from the right-click menu. |                                                                                                                                                                                                     | Category                                             |
| **Category Parameters**                                   | Lists the parameters bound to a category               | Category                                                                                                                                                                                            | Parameters                                           |
| **Parameters**                                            | Lists the custom parameters                            | Refresh                                                                                                                                                                                             | Parameters                                           |
| **Parameter Info**                                        | Describes a parameter                                  | Parameter                                                                                                                                                                                           | Name, Instance/Type, Type, Parameter Set, Categories |
| **Create or Edit Parameter**                              | Creates or changes a parameter                         | Name, Instance, Type, Categories, Parameter Set                                                                                                                                                     | Parameter                                            |
| **Delete Parameter**                                      | Deletes a parameter                                    | Name                                                                                                                                                                                                |                                                      |
| **Get Project Information** / **Set Project Information** | IFC project information                                | Name, Long Name, Description, Phase                                                                                                                                                                 |                                                      |
| **Get Location** / **Set Location**                       | IFC site and building                                  | Longitude, Latitude, Site Name, Site Description, Building Name, Building Description                                                                                                               |                                                      |
| **Get Postal Address** / **Set Address**                  | IFC address                                            | Purpose, Description, User Defined Purpose, Internal Location, Address Line 1, Address Line 2, Postal Box, Town, Region, Postal Code, Country, Assign Address to Building?, Assign Address to Site? |                                                      |
| **Get File Header** / **Set File Header**                 | IFC file header                                        | Description, Author Name, Author Email, Organization, Authorization                                                                                                                                 |                                                      |

For **Create or Edit Parameter**, set **Instance** to `True` for an instance parameter or `False` for a type parameter. **Type** is one of `Angle`, `Area`, `Integer`, `Length`, `Number`, `Text`, `Volume`, `YesNo`, `Url`.

## Levels

| Component                       | What it does                                              | Inputs        | Outputs |
| ------------------------------- | --------------------------------------------------------- | ------------- | ------- |
| **Levels**                      | Lists the levels                                          | Refresh       | Levels  |
| **Create or Edit Level**        | Creates a level, or changes the height of an existing one | Name, Height  |         |
| **Delete Level**                | Deletes a level. The last level cannot be deleted.        | Name          |         |
| **Get Level Height**            | Gets the height of a level                                | Name          | Height  |
| **Get Level By Height**         | Gets the level at exactly this height                     | Height        | Level   |
| **Get Closest Level By Height** | Gets the closest level below a height                     | Height        | Level   |
| **Assign Level to Family**      | Sets the level of a family                                | Family, Level |         |
| **Get Level of Family**         | Gets the level of a family                                | Family        | Level   |
| **Assign Level to Block**       | Sets the level of a block instance                        | Block, Level  |         |
| **Get Level of Block**          | Gets the level of a block instance                        | Block         | Level   |

## Read

| Component                 | What it does                    | Inputs | Outputs                             |
| ------------------------- | ------------------------------- | ------ | ----------------------------------- |
| **Get Object Parameters** | Reads object properties         | Object | Family, Subcategory, Material, Data |
| **Get Family Parameters** | Reads family parameters         | Family | Category, Parameters, Values        |
| **Get Block Parameters**  | Reads block instance parameters | Block  | Category, Parameters, Values        |
| **Get Curve Parameters**  | Reads curve data                | Curve  | Set, Data, Parameters, Values       |
| **Get Point Parameters**  | Reads point data                | Point  | Set, Data, Parameters, Values       |
| **Get Object User Text**  | Reads Rhino user text           | Object | Keys, Values                        |

## Write

| Component                     | What it does                                             | Inputs                                                     |
| ----------------------------- | -------------------------------------------------------- | ---------------------------------------------------------- |
| **Set Object Parameters**     | Sets object properties                                   | Geometry, Family, Subcategory, Material, Data, Layer, Bake |
| **Set Family Parameters**     | Sets the category and parameter values of a family       | Family, Category, Parameters, Values, Instance             |
| **Set Ifc Family Parameters** | Sets the IFC type of a family                            | Family, Type, Predefined Type, Description                 |
| **Set Block Parameters**      | Sets block instance parameter values                     | Block, Parameters, Values                                  |
| **Set Curve Parameters**      | Sets curve data for [URSA](/beam/beam-for-revit/ursa.md) | Curve, Set, Data, Parameters, Values, Layer, Bake          |
| **Set Point Parameters**      | Sets point data for [URSA](/beam/beam-for-revit/ursa.md) | Point, Set, Data, Parameters, Values, Layer, Bake          |

**Parameters** and **Values** are matching lists. In **Set Family Parameters**, a parameter that does not exist yet is created: as an instance parameter if **Instance** is `True`, otherwise as a type parameter.

## Export

| Component        | What it does                                 | Inputs                                   |
| ---------------- | -------------------------------------------- | ---------------------------------------- |
| **Export BEAM**  | Exports objects and blocks to a *.beam* file | Objects, Name, Plane, Export             |
| **Export BLOCS** | Exports blocks to a *.beam* file             | Blocks, Name, Plane, Export              |
| **Export IFC**   | Exports objects to an `.ifc` file            | Objects, Filename, Plane, Schema, Export |

* **Objects** must be referenced from the Rhino document.
* **Plane** is the export origin. The default is World XY.
* **Schema** is `0` for IFC4 or `1` for IFC2x3.

The export runs when you click the **Export** button on the component, or when the **Export** input is `True`.
