# Flow Nodes

Nodes available in the Giraffe Flow Builder. Each node processes inputs and produces outputs within a flow graph.

Flows are visual node graphs that process each RawSection (feature) through a series of transforms, producing StackedSections with computed properties like `_height`, `_area`, etc.

We can publish inputs so they are surfaced at the feature level using the **Input Parameter** Node, which can be configured inside the "data" property of the node. For example:

```json
{
  "id": "node-instance-1",
  "type": "71b71b93-a9ed-432f-94c4-b19cf60aa85b",
  "position": { "x": 88, "y": 375 },
  "data": {
    "name": "radius",
    "type": "number",
    "description": "the radius of the circle",
    "defaultValue": 2
  }
}
```

Then when the feature is processed, it will use its individual parameters inside its flow properties:

```json
{
  "type": "Feature",
  "geometry": {
    "type": "Polygon",
    "coordinates": [[[...]]]
  },
  "properties": {
    "flow": {
      "id": "circle-at-centroid-flow",
      "inputs": {
        "radius": 3.01
      }
    }
  }
}
```

## Constants

| Node | Description |
|------|-------------|
| [E](nodes/93726d5a-6ae5-49ad-a8b7-feef39baed83) | the mathematical constant e |
| [Infinity](nodes/d6ad7c23-c608-4bbf-b9a7-38c7aea87d50) | the mathematical constant infinity (∞) |
| [Pi](nodes/ab9b509b-2940-42e0-b931-e9710e887a85) | the mathematical constant pi (π) |

## Construct Geometry

| Node | Description |
|------|-------------|
| [Circle](nodes/e7ca9d3b-d420-45bd-8204-ad437fd2e413) | construct a circle |
| [Construct Cartesian](nodes/486a80b2-0aa5-4396-8f58-715ab6e7ba35) | construct a cartesian feature from a geometry |
| [Line](nodes/cd771e94-3b50-482b-80da-0ab6ec72ddd8) | construct a line |
| [Line SDL](nodes/b0c2e553-7678-4159-bd2c-74cfeeedeebe) | construct a line from a start point, direction and length |
| [Line String From Points](nodes/f3d933d8-3009-459a-bb09-4894068171ae) | construct a lineString from points |
| [Meta Ball](nodes/eaf221b5-db69-4ac2-958e-67ccaca3988c) | construct a meta ball from points and charges |
| [Perlin Noise 2D](nodes/d7fe185c-b927-4719-851c-aded1312a260) | generate 2D perlin noise |
| [Polygon From Bounding Box](nodes/2207258d-3594-479f-aeef-dffee9e8b1ec) | construct a polygon from a bounding box |
| [Polygon From Points](nodes/c50c836a-c38b-43ef-ab72-30c49256a10f) | construct a polygon from points |
| [Rectangle](nodes/745766ef-f943-4627-9b44-e680354d12f6) | construct a rectangle |

## Data Flow

| Node | Description |
|------|-------------|
| [Filter](nodes/43b893ff-f435-4d0a-8757-fb068f9bdd4d) | select features matching a condition |
| [Flat Map](nodes/294538e6-0b31-40bd-bb0b-28ccd078a5ed) | map a function over a list and flatten the result |
| [Map](nodes/c07b99b3-d68d-4387-819e-76c095df9a40) | iterates a function over a list |
| [Reduce](nodes/49777c05-c181-4997-b604-c3448d6eaf96) | reduce a list to a single value using a function |
| [Ternary If](nodes/dcc2c207-79d4-4bc1-a4b6-607cd80abe2d) | choose a value based on a condition |
| [Weave](nodes/a728b5fc-d025-4dff-a9dd-c4133b9ebc41) | combine two lists into a single list, alternating items from each list |

## Display

| Node | Description |
|------|-------------|
| [Blend Colors](nodes/d629f13a-f7c3-4ae3-a74b-8ee89718520d) | blend two colors together |
| [Construct Color](nodes/e332ee5d-dccb-4496-a7c3-16dd00a4c7d6) | construct an rgb color |
| [Mix Colors](nodes/5115458d-28e0-41eb-8095-c29d7407f2e8) | interpolate between two colors |
| [Saturate Color](nodes/db43f43a-de19-463f-9806-0258c56df647) | saturate a color |

## General

| Node | Description |
|------|-------------|
| [Evaluate Block](nodes/c089be43-dccb-413f-8fb0-a435b6c60a9b) | evaluate a block to its features |
| [Evaluate Feature](nodes/8095e934-4965-41fc-86ed-296b9078741d) | evaluate a feature |
| [Evaluate Flow](nodes/4b0645ac-8314-4087-b5ba-d5993c83d30e) | evaluate a flow |
| [Find And Replace String](nodes/2360c45d-3675-42ca-80bb-0d899857f033) | find and replace a string |
| [Identity](nodes/0662ac93-32e1-4e4d-97f8-feaad4a51c19) | outputs the value that is passed in |
| [Insert Block](nodes/1d9fddc3-ec7b-4f96-99e1-981b37a12405) | insert a block |
| [Join Strings](nodes/e24b79fd-cee3-4e85-a90d-978c0e05dc60) | join a list of strings |
| [Panel](nodes/c8a6bd5d-2b18-4076-b272-d1759f49ab32) | a panel |
| [Reader](nodes/ab62ba2f-ae3c-4670-b494-814760721566) | read a value |
| [Split String](nodes/9f68b80f-1ceb-4b81-8c14-e05447692431) | split a string into a list of strings |
| [String Contains](nodes/a18a80e5-60d0-4cf7-bd83-24c88eb4f207) | check if a string contains another string |
| [Stringify](nodes/0e9542dd-f71f-4331-acfd-ec03a600d031) | stringify an object |

## Generative

| Node | Description |
|------|-------------|
| [Apartment Transform](nodes/b1ac3f98-a229-4179-9eb8-1b4cc99fc0fd) | get transform parameters for apartment |
| [Envelope Transform](nodes/7bc5a2c9-09fe-47f8-961d-f8986f0b76b0) | get transform parameters for envelope |
| [Grid Fill](nodes/8a4353ce-27ce-413b-aeb6-6508a179dd50) | fills input feature with grid of points. |
| [Internal And External Walls](nodes/e04428af-3f09-4892-b403-b3ac17384f1b) | internal and external walls with adjacency code |
| [Parking Lots Transform](nodes/8354216e-d113-4a2a-93c6-6bd7e3c56376) | get transform parameters for parking lots |
| [Pattern Book](nodes/daf90960-ae06-4503-a73d-148c1628dfd4) | A pattern book used to deploy design patterns to the selected site. |
| [Roads](nodes/475493ee-ca0c-44b2-a45e-f63db05b23d9) | generates road polygons with pavement from line strings. Creates road and sidewalk features with customizable heights and colors. |
| [Site Fill](nodes/306e3614-7382-4c8a-8a51-2a79f7742b7c) | fills a site polygon with spine lines and excess areas. optionally generates an inner grid pattern within the site boundary. |
| [Skeleton Transform](nodes/0a2ab031-0a5e-467b-a31b-bcffbff8390f) | get transform parameters for skeleton editor |
| [Subdivide Lots Transform](nodes/37fc5b1a-8670-4e63-8a50-46110eac4c27) | get transform parameters for lot subdivision |
| [Subdivide Mix](nodes/99586517-454e-4da2-8ba0-7ee46bca7b72) | subdivides polygon with dwellings into smaller parcels using a subdivision algorithm. generates site boundaries and envelope features. |
| [Subdivide Mix Transform](nodes/347ea3ee-3a60-4de5-a825-2b6634f6a5e1) | get transform parameters for mix subdivision |
| [Subdivide Rectangles Transform](nodes/d11c629a-ecc1-4707-8022-ad999a344d34) | get transform parameters for rectangle subdivision |

## Geometric Operations

| Node | Description |
|------|-------------|
| [Align](nodes/ee916a6d-a586-486d-a453-a13f70e40133) | align two features |
| [Along Point](nodes/1e296914-3648-4ad8-8fed-67eae2435a29) | Places points along input features at specified parameters. |
| [Area](nodes/7458e9eb-af94-404b-9126-f77986815d09) | get the area of a shape |
| [Array Along Curve](nodes/79ceae04-d1ab-447e-a0a6-620a475eacb9) | arrays points along input feature. |
| [Axis Aligned Bounding Rectangle](nodes/6cf335c0-e400-4305-bb54-069bd40d97b9) | returns the axis aligned bounding rectangle of a geometry at a given angle |
| [Bezier](nodes/bb4a338e-5309-4cc9-a715-551bf4bcfcf1) | create a bezier curve from a set of points |
| [Boolean Difference](nodes/78de7d3e-f45d-4ca9-a4fa-14848e3db3aa) | returns the difference of two geometries |
| [Boolean Intersection](nodes/62f17dfa-1a7d-4c86-8a3c-888d1f653499) | returns the intersection of multiple geometries |
| [Boolean Union](nodes/84d9052a-1ebf-41b1-a8f0-250a4ed4e220) | returns the union of multiple geometries |
| [Bounding Box](nodes/fb255a14-eb8d-4495-9052-5f6fad4d276b) | returns the bounding box of a geometry |
| [Bounding Box Properties](nodes/e8e38ef9-7c76-4fa8-b048-e78e1e9d5544) | returns the properties of a bounding box |
| [Catmull–Rom](nodes/eef0a916-b106-48df-946e-79d24359ffe3) | create an interpolated curve from a set of points |
| [Centroid](nodes/6a79fa01-dfac-482f-8448-61b060a032a8) | Calculates the centroid of the input feature. |
| [Closest Point](nodes/f5c25b09-6785-486a-bd47-9776d12b371c) | get the closest point on a geometry to a point |
| [Control Points](nodes/c60d862a-9d16-4492-91fc-e335df12c54d) | get the end points of a geometry |
| [Cull Duplicate Points](nodes/d1e32f87-4d77-419d-99ff-f01ce9267111) | remove duplicate points from a geometry |
| [Deconstruct Cartesian](nodes/973b3b78-4ae7-4418-a4dd-cb6be12564ef) | deconstruct a cartesian feature into its components |
| [Deconstruct Frame](nodes/8216df8c-8bd5-4a8f-9d30-9bef9058539d) | deconstruct a frame into its components |
| [Deserialize](nodes/2c8c7a2c-ffd4-4a79-80bb-2f176b8dbc68) | deserialize raw geometry |
| [Distance](nodes/c65670d0-f990-41a3-8fb3-ab02c8a46bb9) | get the distance between two points |
| [Distribute](nodes/cf9c23ee-909c-45c7-af65-bd8a1436c21f) | distribute features along a direction |
| [Divide Distance](nodes/78e9a4fc-7baf-40ac-9aef-6b8839e02adf) | divide a line into equal distance points |
| [Divide Line](nodes/ccec824c-2c58-4e0b-9ab9-28cd97911d2b) | divide a line into an equal number of points |
| [Enclosed Polygons](nodes/b6e06210-a669-4ac9-aa80-f327749ce0dd) | returns polygons created by overlapping/intersecting input geometry. |
| [End Points](nodes/68f4ca7e-e710-46a2-907a-ca7568b2141f) | get the end points of a polyline |
| [Explode](nodes/e1bcaf95-90d8-43cb-8323-639e7b59de19) | explodes input geometry into points and lines. |
| [Extend Polyline](nodes/f3f2e0ae-0764-40e5-a446-039fff66b47b) | extend a polyline at both ends by a given length |
| [Fillet Corners](nodes/14be0aab-eca9-4182-988e-4217a75d8c95) | fillet corners of a polyline |
| [Flip Polyline](nodes/781dbf10-f4b0-4ab4-9759-37fa6eeabe37) | flip a polyline |
| [Forward Project](nodes/91ccd5e9-927a-4531-bd7c-1418dbe1e70e) | forward project a feature |
| [Frame On Polyline](nodes/3d292e81-d3c2-45ca-a092-27157df4b66d) | get a horizontal frame along a polyline at a given distance |
| [Get Point Location](nodes/f18ea758-f00d-46a8-8255-a808c2388352) | get the location of a point (xyz) in world coordinates (longitude, latitude) |
| [Get Segments](nodes/308f754d-cd5b-4471-945e-59bffa9ce095) | explode a geometry into segments |
| [Interpolate Points](nodes/6879bba8-516e-450a-8242-428beca3e176) | interpolate between two points |
| [Intersect Lines](nodes/2d9ac3ab-9fd8-4c7d-a44b-282053b7b944) | get the intersection of multiple lines |
| [Join Lines](nodes/d8237bb9-7eee-4dcd-b96d-664b72df2c78) | join multiple lines into a single polyline |
| [Length](nodes/f7fb504c-b7da-4b0e-978e-1fba73f4a76b) | get the length of a polyline |
| [Line Shorten](nodes/18574b39-2a46-4caa-8c9f-b7909cae60c0) | shortens a line from both ends by specified offsets. |
| [Midpoint](nodes/f7d0c2e5-c902-4a93-a538-2a6b0266a2fc) | get the midpoint of a line or polyline |
| [Minimum Bounding Rectangle](nodes/c4f16fd3-8419-41d6-9280-2b5f7800768f) | returns the minimum bounding rectangle of a geometry |
| [Mirror](nodes/9df3cdfd-33dd-43e7-8bf3-41482492f4c6) | mirror features across a line |
| [Offset Line](nodes/5e23a543-9256-4628-bed0-f6390e57ead4) | Offsets a line by a specified distance. |
| [Offset Polygon](nodes/90564177-4b5f-42e2-8d37-e566f0500554) | Offsets a polygon inward or outward by a specified distance. |
| [Orient](nodes/fc6a5235-e288-4b28-85b1-c642243c8c62) | orient a geometry from one frame to another |
| [Point In Polygon](nodes/dd235b53-f598-4c48-aa02-0472fb380114) | check if a point is inside a polygon |
| [Points In Polygon](nodes/553024a1-ce8e-469f-b3c7-b296ca14b7f9) | check if points are inside a polygon |
| [Pole Of Inaccessibility](nodes/387de1a3-774e-40c6-ab0d-ab8aed8f41e8) | get the best point to place a label inside a polygon |
| [Query Rtree](nodes/75a77b6c-85b7-42df-aefe-998d6833e77e) | query an rtree based on a feature |
| [Random Fill](nodes/755c835a-dddd-40f5-ac2d-8e7ad4105ab7) | fills input feature with random points. |
| [Raycast](nodes/34a29968-429c-4342-86a2-366c4133da9b) | cast a ray and get intersections with polygons |
| [Rebuild Geometry](nodes/e7df4d25-b3cb-47c9-9bf6-f53e221c74c8) | rebuild a geometry with a given factor |
| [Rectangular Array](nodes/a4ebc83e-644c-48f4-9556-d67987fb10b4) | construct a rectangular array |
| [Rotate Vertical](nodes/6574212f-304f-411e-92a1-f201d85bfd48) | rotates a geometry around the vertical axis |
| [Round Corners](nodes/24fafdcf-b248-4dea-b418-ab5bca5ac57b) | Rounds the corners of a polygon or polyline. |
| [Scale](nodes/015603b0-d8a5-479e-8159-02a10e6eb85e) | scales a geometry about a center |
| [Shatter Polyline](nodes/13859b54-5301-4c42-a7bf-2dd3cc99c9b1) | shatter a polyline given a list of parameters |
| [Straight Skeleton](nodes/801456c7-27f5-4660-bdbd-0a2f168ce478) | get the straight skeleton of a polygon |
| [Stroke Dash](nodes/a59aeb6a-7457-49e3-874f-50285bc68ff2) | creates dashed strokes along input feature. |
| [Sub Curve](nodes/a7945a91-d3ef-474c-abb7-4104c0bab2b9) | get a sub curve of a polyline |
| [Translate](nodes/966bed24-b790-4ba5-9322-d473672bd1c2) | translates a geometry along a vector |
| [Tween Polylines](nodes/09c777c6-7782-4975-82a3-0e9aa4cd0350) | tween between two polylines |
| [Unproject](nodes/3167379d-0725-44f8-857f-991e666a3901) | inverse project a feature |
| [Vector Centroid](nodes/f9e497bf-daef-4548-a75d-9cfe17d47387) | returns the centroid of a geometry as a vector |
| [Vector From Line](nodes/001ab85a-e0db-4375-85b4-01f4dc042dcb) | get a vector from the start to the end of a line |

## Inputs Outputs

| Node | Description |
|------|-------------|
| [Input Parameter](nodes/71b71b93-a9ed-432f-94c4-b19cf60aa85b) | exposes an input parameter |
| [Read Feature](nodes/1a4c8f02-f831-4bdd-b2f8-c9b647b10266) | reads the feature that is passed in |
| [Write Features](nodes/ed22a41d-e114-4734-876f-2362d02fc5ce) | writes the features that are passed in |

## Lists

| Node | Description |
|------|-------------|
| [Encapsulate In List](nodes/adc39ca6-b666-413b-b927-8f2f7f465b05) | place an object in a list |
| [Every](nodes/aeffb705-acb8-4a96-9ce3-b997ba59b720) | check if every item in a list satisfies a condition |
| [Filter Null](nodes/5c414178-576d-4d96-8551-582c0eccfce9) | filter null or undefined values from a list |
| [First Item](nodes/27bf350c-28f3-440d-a8ad-0ddc2278d537) | get the first item from a list |
| [Flatten List](nodes/6ded017a-cf13-4cd2-9d91-40c2cef2070a) | flatten a list of lists |
| [Includes](nodes/76451c87-9961-488c-b48a-8604e7e623f5) | check if a list includes a value |
| [Index Of](nodes/932d9851-eb69-44e7-a5aa-55b36fa6a502) | finds an item and its index index in a list |
| [Insert](nodes/48c69c06-cdee-4e35-a509-6f54abeff5af) | insert an item to a list |
| [Last Item](nodes/0c394c98-b1f7-4dfb-80c9-8866c5b92c28) | get the last item from a list |
| [List Item](nodes/9a6cab97-de07-428b-b953-b0a8c74be5c2) | get an item from a list |
| [List Length](nodes/402e6edf-4286-4915-8f9d-954133399d21) | get the length of a list |
| [New List](nodes/48e17370-4ad3-49c4-9103-ea01c4433a38) | create a new empty list |
| [Pop](nodes/9ff308f2-19c4-45e7-ba52-66c2ab3850f4) | pop an item from a list |
| [Push](nodes/34f7aa87-5244-4acf-81f5-3cfeb7d1fd5a) | push an item to a list |
| [Repeat](nodes/d6ec7648-5973-4730-a88c-916106043a08) | repeat a value multiple times |
| [Reverse List](nodes/fa8f428a-aad0-4c80-b122-fca91594c383) | reverse a list |
| [Rotate List](nodes/dc163962-4c9a-49bb-b347-1659c1f78d24) | rotate a list by a number of items |
| [Shift](nodes/b51d5bba-edcb-4758-9e61-f0e72a86521e) | Removes the first item from a list |
| [Shuffle List](nodes/8a82b416-b491-49fc-977a-d8acc472a2ca) | shuffle a list randomly |
| [Some](nodes/2d6dd4ea-85a5-446a-9212-e3ffa631adf5) | check if some items in a list satisfy a condition |
| [Sort Numbers](nodes/021e5918-53c3-44b6-8611-5c7a5c2fe289) | sort a list of numbers |
| [Strip](nodes/43bb7e0a-ee9b-4952-9070-2755ef7cc49d) | strips a list into start, middle, and end. |

## Logic

| Node | Description |
|------|-------------|
| [And](nodes/0bcd127d-9103-4934-b716-d8b24787fccc) | check if two values are both true |
| [Equals](nodes/c0fc673b-5123-4fd0-90a2-2c2d12fc206a) | check if two values are equal |
| [Greater Than](nodes/249987bf-188d-4c40-a7c2-73e8a39c3d3f) | check if a value is greater than another value |
| [Greater Than Or Equal](nodes/439af9e3-abb6-4047-a357-fe23ee0a163b) | check if a value is greater than or equal to another value |
| [In Range](nodes/c2b03d44-2e27-4e5e-b0b8-468d5c06dcda) | check if a value is within a specified range (inclusive) |
| [Less Than](nodes/0913d1ba-e5ec-4dd2-8818-9a704ba0bd6d) | check if a value is less than another value |
| [Less Than Or Equal](nodes/d90db033-4e14-4f9a-a64f-4cc6cf5d31d3) | check if a value is less than or equal to another value |
| [Not](nodes/502d56a0-6e23-414a-9118-1a71094c7fba) | negate a boolean value |
| [Not Equals](nodes/e15c6ca6-9528-4b16-a071-4cadf86aa75f) | check if two values are not equal |
| [Nullish Coalescing](nodes/ec324956-114f-4279-a18b-a13f1dfb254d) | Returns the first non-null/undefined value between two inputs. |
| [Or](nodes/dabc0874-2b5a-4c03-b81a-f4f4cd547c11) | check if at least one of two values is true |

## Math

| Node | Description |
|------|-------------|
| [Average](nodes/a2c4b6f8-5d1d-4d0e-8b2e-3c7f9f7f3a0b) | average a list of numbers |
| [Random Color](nodes/56db4c56-9432-482c-845e-5c6097413add) | generate a random color |
| [Series](nodes/da7846c9-55c7-4e6b-b17d-5c8938fb6423) | generate a series of numbers |
| [Sum](nodes/878070b6-cd5f-4dc1-98ca-2c8620b54c7a) | sum a list of numbers |

## Objects

| Node | Description |
|------|-------------|
| [Construct Key Value Pair](nodes/837159d4-ca37-4282-8362-efeefde48dd0) | construct a key-value pair |
| [Construct Object](nodes/43661d6f-2a71-4151-b94e-6b851f3e1d21) | construct an object |
| [Delete Property](nodes/4e9a9d1b-f5e7-43bb-a477-9d76f51781d3) | delete a property from an object. If a list is provided, the property will be deleted from each item in the list |
| [Get Feature Property Name](nodes/6fd14896-a526-4045-9ee6-234279c22535) | get the name of a giraffe property |
| [Group By](nodes/3c1349ec-fe2b-43ae-8570-42ce17748fab) | group items in a list by a key |
| [Group By Ranges](nodes/cd06bcdc-4587-4103-ba6a-e6cfdf5eb893) | group items in a list by ranges of a key. Lower bound is inclusive, upper bound is exclusive |
| [Key By](nodes/8cb0b5c6-1eba-40f4-a9fb-dac7b8abd099) | create an object from a list by a key |
| [Object Entries](nodes/72c4d60c-feed-43b1-b7d6-0ea29370e8b2) | get the entries of an object as a list |
| [Object Keys](nodes/6657aba6-980-4114-a377-222c7d620705) | get the keys of an object as a list |
| [Object Values](nodes/2d51e023-f23a-40d7-93bb-d8f250322fbf) | get the values of an object as a list |
| [Parse](nodes/9fbbeceb-d9f0-45ed-81dd-00ea45ec670e) | parse a string into an object |
| [Pick](nodes/f3330b82-fff3-493f-9fd7-bfbadcce2a2c) | pick items from an object |
| [Read Feature Layer](nodes/7c1850a3-9355-4da9-8c29-f598ca464694) | read a feature |
| [Read Feature Property](nodes/03fbb6ab-bbeb-48f4-8f2f-eb366ac541f8) | read a property from a feature |
| [Read Property](nodes/76bbee5a-a354-4ed2-8e13-7d37f51623b4) | read a property from an object |
| [Spread](nodes/2d3eab6b-a373-4520-a055-2fa00b4f5ee5) | spread values into an object or list |
| [Spread Feature Properties](nodes/17a649c1-5b68-4202-806d-3f5c6957676d) | spread properties into a feature |
| [Write Feature Color](nodes/52bf1d40-a1d2-4ea4-89a5-3b5f2ec95195) | choose a color for a feature |
| [Write Feature Property](nodes/2036b58f-a8ef-4eea-a037-05d8dbc77d5c) | write a property to a feature |
| [Write Property](nodes/2abd0c49-e62f-4139-86fd-c4c127420a3a) | write a property to an object. If a list is provided, the property will be written to each item in the list |

## Primitives

| Node | Description |
|------|-------------|
| [Boolean](nodes/1a1c0651-996b-4a20-950b-bf5c9cc8478f) | a boolean |
| [Color](nodes/d2860fec-fb89-4661-b313-945aceec1b82) | a color |
| [Number](nodes/19321cef-b0c7-427e-9113-2dcd4e014fc3) | a number |
| [String](nodes/de931f93-68d4-4064-851c-3f6465f005be) | a string |
| [Vector](nodes/b1c8f0d2-3e4a-4b8c-9f0d-2e4a4b8c9f0) | a vector |

## Project

| Node | Description |
|------|-------------|
| [Get Block Definitions](nodes/2b2a1a0d-98fb-43e8-a0a6-3683b5264ac9) | get all block definitions from the project |
| [Get Block Id](nodes/f81257fc-96a3-442f-b1e9-9c6a059ba532) | get the id of a block instance |
| [Get Flow](nodes/530f177e-5f98-4c6f-9203-6a5921ddd246) | get a flow |
| [Get Flow Id](nodes/a75b3653-2df1-4535-a5e6-b0f42add11d1) | get the id of a flow |
| [Get Flow Names](nodes/a703bb32-232c-4b69-aac2-b1413ca57288) | get a map of flow names to ids |
| [Get Gltf](nodes/8fca572d-bfd9-4ec1-b418-617915752187) | get the url of a gltf |
| [Get Point In Grid](nodes/559815b1-6d21-49c2-8ecd-776d86e51790) | get a point in the project grid given u and v coordinates |
| [Get Project Grid](nodes/f90595fc-68ae-4e41-b773-97c695a26d13) | get the project grid |
| [Get Project Id](nodes/b0077c06-c760-4d1e-a0fa-26b748b27bc9) | get the id of the project |
| [Get Project Units](nodes/d491ebf2-953e-4c1d-8f25-f1b4ac124d3b) | get the units of the project |
| [Get Raw Features](nodes/6d232493-5311-4a6e-9d8f-91c3a03ab16b) | get all raw features from the project |
| [Get Site Boundary](nodes/6876b40c-fa12-4d3c-a64e-f18ca7dac72c) | get the site boundary |
| [Get Static Layer Id](nodes/1f78a357-b0a9-432e-a032-3208981a63f7) | get the id of a static layer |
| [Get Static Layer Names](nodes/0d76e70e-a768-4e04-b885-087647b54673) | get a map of static layer names to ids |
| [Read Static Layer](nodes/abd88479-c8ce-42e3-99b6-49abf9dfa414) | read a static layer from the project |

## Sets

| Node | Description |
|------|-------------|
| [Add To Set](nodes/31616834-6039-4ab5-8920-825f6e3487dc) | add an item to a set |
| [Difference Sets](nodes/19f5ef08-0999-42b8-9918-5ccef80ac4c7) | find the difference between two sets |
| [Intersect Sets](nodes/769854b7-4880-484a-bc50-0b10e8c30cdd) | find the intersection of two sets |
| [Remove From Set](nodes/a7273336-2a92-469d-a535-5a0618617d0c) | remove an item from a set |
| [Set](nodes/33a90c0f-3826-48ea-acba-20e52024d2e5) | a set |
| [Set Has](nodes/87618fbc-5d5f-4fc7-9f97-bda5478747aa) | check if a set contains an item |
| [Set To Array](nodes/54277529-38ef-4d93-8286-cacbc8728097) | convert a set to an array |
| [Union Sets](nodes/23a4bc22-c08f-4fab-ad2c-f1722982a539) | find the union of two sets |
| [Xor Sets](nodes/48b2b6e4-f15c-48d0-b077-d3a574c40979) | find the symmetric difference between two sets |

## Usage

| Node | Description |
|------|-------------|
| [Apply Usage](nodes/88592822-b6cd-47b7-bdda-d87162434ce6) | Apply a usage to a feature. Applies the usage defaults then the usage categories. Defaults will win over the usage properties. |
| [Get Usage](nodes/70375b6b-122c-4d84-8a2e-3aa5fc204030) | get a usage from a dropdown |
| [Get Usage Data](nodes/ae26fa75-148d-4a73-9ca4-be8dc24a1e14) | get the data for a usage |
| [Get Usage Names](nodes/b00f4361-686c-4169-8aae-db179a7c2ca4) | get the names of all of the usages in the project |

## Vector

| Node | Description |
|------|-------------|
| [Construct Vector](nodes/616e7b15-83ef-4e6c-b696-b191d2e11f87) | construct a vector |
| [Deconstruct Vector](nodes/65f0f9ac-41e9-4c0b-8b8c-5540712b678f) | deconstruct a vector |
| [Unit X](nodes/17b6b9f7-ffbc-4f9f-b7ad-c97070cf200f) | unit vector in the x direction |
| [Unit Y](nodes/294c961b-6be0-4ce0-b170-c15e278d4f37) | unit vector in the y direction |
| [Unit Z](nodes/640ae080-a553-4a38-921a-e16e0011c963) | unit vector in the z direction |
| [Unitize](nodes/9837d2a9-8df8-4012-8e2e-5969d21c098a) | unitize a vector |
| [Vector Cross](nodes/5ae87823-d600-47d5-928e-45546f8e2b11) | get the cross product of two vectors |
| [Vector Dot](nodes/4faf3da3-8920-4a57-a85a-e2404e497889) | get the dot product of two vectors |
| [Vector Length](nodes/c743a73a-014c-4260-9ba9-899996b6b70e) | get the length of a vector |
| [Zero Vector](nodes/9f559208-d7c6-4701-8446-e47a5c439b7b) | [0, 0, 0] |

