# SceneNode \ Assembly

These nodes work with a part’s **assembly state** in a VR assembly. In SimLab’s assembly system a part moves through three stages — think of a screw: all the way out (**fully disassembled**), dropped into place but not tightened (**partially assembled**), or tightened all the way down (**fully assembled**). One node reads a part’s current state; the other sets a part to a state you choose.

These are run-once actions — they do their work the moment they are triggered. To *continuously watch* a part and react the instant it becomes assembled or taken apart, use the assembly **state** nodes on the **Assembly** page; for assembly **events**, see the **Events** page.

## What’s on this page

- **Get Node Assembly State** — read a part’s current state as text (Fully Assembled, Partially Assembled, or Fully Disassembled).
- **Set Node Assembly State** — set a part to a chosen state.

---

### Get Node Assembly State

Checks one part in a VR assembly and tells you, as a short piece of text, how far along it is — fully together, fully apart, or somewhere in between.

#### What it does

Give this node a part from your scene and run it, and it reports that part’s current assembly state. In SimLab’s assembly system a part moves through three stages — think of a screw: all the way out (fully apart), dropped into place but not yet tightened (partway together), or tightened down (fully together). The node hands you back one of three words for exactly that: `Fully Assembled`, `Fully Disassembled`, or `Partially Assembled`.

It only reads the part’s state — it never moves, tightens, or changes the part in any way. Because the answer comes back as text, you can show it on screen, compare it, or branch on it to drive the rest of your scene.

#### Inputs

<table id="bkmrk-port-type-what-to-co"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s Execute output. The node checks the part’s state the moment this fires.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part you want to check — for example a `Bolt_01` object from your assembly. The node reports on this part’s own assembly state.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished. Wire it to whatever should happen next.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same part you connected, passed straight back out unchanged so you can keep wiring from it to the next node.</td></tr><tr><td style="white-space: nowrap;">**State**</td><td style="white-space: nowrap;">Text</td><td>The part’s current state as text — one of `Fully Assembled`, `Fully Disassembled`, or `Partially Assembled`. Show it on screen, or compare it to decide what your scene does next.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-bolt"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>`Bolt_01`</td></tr><tr><td style="white-space: nowrap;">**SceneNode** output</td><td>`Bolt_01` — the same part, handed back so you can keep wiring from it</td></tr><tr><td style="white-space: nowrap;">**State** output</td><td>`Partially Assembled` — the bolt has been dropped into place but not yet tightened all the way down</td></tr></tbody></table>

#### Tips

- A part that is dropped into place but not tightened comes back as `Partially Assembled` — `Fully Assembled` means the part is both in place *and* secured.
- Because the answer is text, compare it against one of the three exact words (such as `Fully Assembled`) when you want your scene to react to a particular state.
- This node reads the state at the moment you run it. To react the instant a part becomes fully together or fully apart instead, use the matching state nodes on the **Assembly** page.

---

### Set Node Assembly State

Forces a part in your scene into a chosen assembly state — fully assembled, fully disassembled, or partially assembled.

#### What it does

Pick a part (a scene node) and a state, and this node sets that part to the state you chose. Use `Fully Assembled` to mark it as completely put together, `Fully Disassembled` to mark it as fully taken apart, or `Partially Assembled` for the in-between stage. This is handy for setting up a starting condition — for example, putting a model into its fully disassembled state at the beginning of a training exercise so the trainee can build it up.

The part you pass in is handed straight back out unchanged, so you can keep wiring more steps onto the same part right after this one.

#### Inputs

<table id="bkmrk-port-type-what-to-co-0"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Wire this from the previous node’s Execute output.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part whose assembly state you want to set. You can connect more than one part to set them all at once.</td></tr><tr><td style="white-space: nowrap;">**State**</td><td style="white-space: nowrap;">Choice</td><td>The state to apply: `Fully Assembled`, `Fully Disassembled`, or `Partially Assembled`. Defaults to `Fully Assembled`.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-0"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the node has finished.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same part you connected, passed straight back out unchanged so you can keep wiring from it.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-engi"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>`Engine_Block`</td></tr><tr><td style="white-space: nowrap;">**State** input</td><td>`Fully Disassembled` — sets the engine to its fully taken-apart state at the start of the lesson</td></tr><tr><td style="white-space: nowrap;">**SceneNode** output</td><td>`Engine_Block` — the same part, handed back so you can chain the next step onto it</td></tr></tbody></table>

#### Tips

- Use this to set up a known starting point — for example, fully assembled to begin a disassembly drill, or fully disassembled to begin an assembly drill.
- `Partially Assembled` marks the part as neither fully together nor fully apart, which is useful for picking up a scenario midway through.