# SpatialGltfModelState

Artifact: [androidx.xr.compose:compose](https://developer.android.com/jetpack/androidx/releases/xr-compose) [View Source](https://cs.android.com/search?q=file:androidx/xr/compose/subspace/SpatialGltfModel.kt+class:androidx.xr.compose.subspace.SpatialGltfModelState) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)


```
@ExperimentalSpatialGltfModelApi
class SpatialGltfModelState : AutoCloseable
```

<br />

*** ** * ** ***

A state object that can be hoisted to observe and control a `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModel.composable#SpatialGltfModel(androidx.xr.compose.subspace.SpatialGltfModelState,androidx.xr.compose.subspace.layout.SubspaceModifier,kotlin.Function0)`.

A `SpatialGltfModelState` can be used to query loading status on the associated `SpatialGltfModel`.

To create and remember a `SpatialGltfModelState`, use `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/rememberSpatialGltfModelState.composable#rememberSpatialGltfModelState(androidx.xr.compose.subspace.SpatialGltfModelSource)`. If a `SpatialGltfModelState` instance is manually created using the constructor, then the caller needs to call `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelState#close()` to free its resources when it is no longer needed.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelState#SpatialGltfModelState(androidx.xr.compose.subspace.SpatialGltfModelSource)(source: https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelSource)` |

| ### Public functions |
|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelState#close()()` |

| ### Public properties |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/xr/scenecore/GltfModelNode>` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelState#nodes()` The subnodes defined in the glTF model. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelStatus` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelState#status()` The current `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelStatus` of the glTF model. |

## Public constructors

### SpatialGltfModelState

Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
SpatialGltfModelState(source: SpatialGltfModelSource)
```

| Parameters |
|---|---|
| `source: https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelSource` | The `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelSource` that defines where to load the 3D model from. |

## Public functions

### close

Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
open fun close(): Unit
```

## Public properties

### nodes

Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
val nodes: List<GltfModelNode>
```

The subnodes defined in the glTF model.

These nodes allow access and manipulation of the pose and scale of the node which could be useful for manipulating the glTF model or positioning content relative to a particular node in the glTF model.

```kotlin
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.material3.Text
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.xr.compose.platform.LocalSession
import androidx.xr.compose.subspace.SpatialGltfModel
import androidx.xr.compose.subspace.SpatialGltfModelSource
import androidx.xr.compose.subspace.SpatialPanel
import androidx.xr.compose.subspace.layout.SpatialRoundedCornerShape
import androidx.xr.compose.subspace.layout.SubspaceModifier
import androidx.xr.compose.subspace.layout.height
import androidx.xr.compose.subspace.layout.offset
import androidx.xr.compose.subspace.layout.width
import androidx.xr.compose.subspace.rememberSpatialGltfModelState
import androidx.xr.scenecore.scene

val session = checkNotNull(LocalSession.current)
val pixelDensity = session.scene.virtualPixelDensity
val modelState =
    rememberSpatialGltfModelState(
        source = SpatialGltfModelSource.fromPath(Paths.get("models", "Dragon_Evolved.gltf"))
    )
SpatialGltfModel(state = modelState) {
    val headNode = modelState.nodes.find { it.name == "head" }
    val density = LocalDensity.current
    if (headNode != null) {
        val offsetX =
            with(density) {
                pixelDensity.convertMetersToPixels(headNode.modelPose.translation.x).toDp()
            }
        val offsetY =
            with(density) {
                pixelDensity.convertMetersToPixels(headNode.modelPose.translation.y).toDp()
            }
        val offsetZ =
            with(density) {
                pixelDensity.convertMetersToPixels(headNode.modelPose.translation.z).toDp()
            }

        SpatialPanel(
            shape = SpatialRoundedCornerShape(CornerSize(25)),
            modifier =
                SubspaceModifier.width(700.dp).height(700.dp).offset(offsetX, offsetY, offsetZ),
        ) {
            Box(
                Modifier.fillMaxSize().background(Color.Blue.copy(alpha = 0.8f)),
                contentAlignment = Alignment.Center,
            ) {
                Text(text = "Head", color = Color.White, fontSize = 30.sp)
            }
        }
    }
}
```

### status

Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
val status: SpatialGltfModelStatus
```

The current `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelStatus` of the glTF model.

It will initially be `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelStatus.Loading` until the model is loaded and ready to be displayed at which point it should be `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelStatus.Loaded`. However, if the model fails to load for any reason, the `status` will be a `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialGltfModelStatus.Failed` with the exception that was thrown.