> ## Documentation Index
> Fetch the complete documentation index at: https://docs.speckle.systems/llms.txt
> Use this file to discover all available pages before exploring further.

# RenderTree

> The render tree is the core data structure that the viewer uses to render geometry.

## Constructors

### constructor

```typescript theme={null}
constructor(tree: WorldTree, subtreeRoot: TreeNode)
```

The recommended way of spawing render trees is via [*getRenderTree*](/developers/viewer/world-tree-api#getrendertree) method in [*WorldTree*](/developers/viewer/world-tree-api).

**Parameters**

* **tree**: [*WorldTree*](/developers/viewer/world-tree-api)
* **subtreeRoot**: [*TreeNode*](/developers/viewer/world-tree-api#treenode)

**Returns**: [***RenderTree***](/developers/viewer/render-tree-api)

## Accessors

### id

```typescript theme={null}
get id(): string
```

Gets the id of the render tree's root node.

**Returns**: string

## Methods

### buildRenderTree

```typescript theme={null}
buildRenderTree(geometryConverter: GeometryConverter): Promise<boolean>
```

Builds the render tree using the provided [*GeometryConverter*](/developers/viewer/geometry-converter-api). Building can be interrupted by calling [*cancelBuild*](/developers/viewer/render-tree-api#cancelBuild). 'Building' the render tree, means constructing each node's [*NodeRenderView*](/developers/viewer/render-view-api), preparing all geometry and materials, and executing any required transformations. This operation should only be carrired out once, as re-building an already built tree is not possible.

**Parameters**

* **geometryConverter**: The [*GeometryConverter*](/developers/viewer/geometry-converter-api) to use in building the tree

**Returns**: A promise which resolves to a boolean indicating if the building process completed successfully (true) or was interrupted (false).

### cancelBuild

```typescript theme={null}
cancelBuild(): void
```

Cancel any tree building operations that might be taking place. If no building is taking place, nothing happens.

**Parameters**

* **subtreeId**: The [*TreeNode*](/developers/viewer/render-tree-api#treenode) to add as a subtree

**Returns**: void

### computeTransform

```typescript theme={null}
computeTransform(node: TreeNode): Matrix4
```

Computes the final world space transformation for the given [*TreeNode*](/developers/viewer/world-tree-api#treenode).

<Warning>
  For non instanced nodes, this function will return the identity transformation since speckle does not define a local space (yet) and all geometry is in world space. This function **will not** take any runtime user defined transformations into account.
</Warning>

**Parameters**

* **node**: [*TreeNode*](/developers/viewer/world-tree-api#treenode)

**Returns**: [*Matrix4*](https://threejs.org/docs/index.html?q=matrix#api/en/math/Matrix4)

### getAtomicParent

```typescript theme={null}
getAtomicParent(node: TreeNode): TreeNode
```

Gets the closest atomic parent of the provided node. An atomic node represents a standalone object. E.g a door, a window, rather than pieces of a standalone object E.g the door's handle, the window's frame.

**Parameters**

* **node**: [*TreeNode*](/developers/viewer/world-tree-api#treenode)

**Returns**: [*TreeNode*](/developers/viewer/render-tree-api#treenode)\[]

### getInstances

```typescript theme={null}
getInstances(): { [id: string]: Record<string, TreeNode> }
```

Calls the underlying WorldTree [*getInstances*](/developers/viewer/world-tree-api#getinstances) with the render tree's id as the argument.

**Returns**: A dictionary where each instance id holds a record of [*TreeNode*](/developers/viewer/render-tree-api#treenode) grouped by their instance unique id.

### getRenderableNodes

```typescript theme={null}
getRenderableNodes(...types: SpeckleType[]): TreeNode[]
```

Gets all renderable nodes of the specified [*SpeckleType*](/developers/viewer/geometry-converter-api#speckletype)s.

**Parameters**

* **types**: Variable number of [*SpeckleType*](/developers/viewer/geometry-converter-api#speckletype) values

**Returns**: [*TreeNode\[\]*](/developers/viewer/render-tree-api#treenode)

### getRenderableRenderViews

```typescript theme={null}
getRenderableRenderViews(...types: SpeckleType[]): NodeRenderView[]
```

Same as [*getRenderableNodes*](/developers/viewer/render-tree-api#getrenderablerenderviews), but returns the mapped [*NodeRenderView*](/developers/viewer/render-view-api)s of the renderable nodes.

**Parameters**

* **node**: Variable number of [*SpeckleType*](/developers/viewer/geometry-converter-api#speckletype) values

**Returns**: [*NodeRenderView\[\]*](/developers/viewer/render-view-api)

### getRenderViewNodesForNode

```typescript theme={null}
getRenderViewNodesForNode(node: TreeNode): TreeNode[]
```

Returns all [*TreeNode*](/developers/viewer/world-tree-api#treenode)s that have a displayable [*NodeRenderView*](/developers/viewer/render-view-api) descending from *node*.

**Parameters**

* **node**: [*TreeNode*](/developers/viewer/render-tree-api#treenode)

**Returns**: [*TreeNode\[\]*](/developers/viewer/render-tree-api#treenode)

### getRenderViewsForNode

```typescript theme={null}
getRenderViewsForNode(node: TreeNode): NodeRenderView[]
```

Gets all displayable [*NodeRenderView*](/developers/viewer/render-view-api)s descending from *node*.

**Parameters**

* **node**: [*TreeNode*](/developers/viewer/render-tree-api#treenode)

**Returns**: [*NodeRenderView\[\]*](/developers/viewer/render-view-api)

### getRenderViewsForNodeId

```typescript theme={null}
getRenderViewsForNodeId(id: string): NodeRenderView[]
```

Gets all displayable [*NodeRenderView*](/developers/viewer/render-view-api)s descending from the node with the provided *id*.

**Parameters**

* **id**: Id of the node to gather [*NodeRenderView*](/developers/viewer/render-view-api)s for

**Returns**: [*NodeRenderView\[\]*](/developers/viewer/render-view-api)

### purge

```typescript theme={null}
purge(): void
```

Purges the render tree.

<Warning>
  Purges render trees are no longer usable.
</Warning>

**Returns**: void
