# PredefinedDynamicNodes

This page documents the `PredefinedDynamicNodes` collection on `Data_PartSwitch`.

## Purpose

`PredefinedDynamicNodes` defines attach nodes that should exist on the part outside of any one variant-specific transformer.

## Source-backed role

The runtime `PartSwitchSelectable` exposes `PredefinedDynamicNodes` as a special child selectable, and `Module_PartSwitch.HandleInOabInitialization()` creates or repositions these nodes before applying variants.

## Expected data shape

Entries are `AttachNodeDefinition`-style objects. The runtime accesses at least these fields:

* `nodeID`
* `size`
* `position`
* `orientation`

## OAB behavior

During OAB initialization, V-SwiFT checks whether each predefined node already exists:

* if the node exists, its local position is refreshed
* if the node does not exist, V-SwiFT creates it as a dynamic stack node

## Example

```patch
PredefinedDynamicNodes: [
    {
        nodeID: side_mount,
        size: 1,
        position: { x: 0.5, y: 0.0, z: 0.0 },
        orientation: { x: 1.0, y: 0.0, z: 0.0 }
    }
];
```

## Notes

Use `PredefinedDynamicNodes` for stable node definitions that should exist regardless of the currently active variant. Use `AttachNodeAdder` when the node change itself is part of a specific variant choice.