# PlanarEmbeddedSubspace

## Functions summary

|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable @https://developer.android.com/reference/kotlin/androidx/compose/ui/UiComposable https://developer.android.com/reference/kotlin/androidx/xr/compose/spatial/PlanarEmbeddedSubspace.composable#PlanarEmbeddedSubspace(androidx.xr.compose.subspace.layout.SubspaceModifier,kotlin.Function1)( modifier: https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier, content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable @https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SubspaceComposable https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialBoxScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html )` Creates a 3D space for spatial content that is embedded within and positioned by a 2D container. |

## Functions

### PlanarEmbeddedSubspace

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/spatial/Subspace.kt+function:PlanarEmbeddedSubspace)

```
@Composable
@UiComposable
fun PlanarEmbeddedSubspace(
    modifier: SubspaceModifier = SubspaceModifier,
    content: @Composable @SubspaceComposable SpatialBoxScope.() -> Unit
): Unit
```

Creates a 3D space for spatial content that is embedded within and positioned by a 2D container.

A `PlanarEmbeddedSubspace` acts as a bridge between a 2D layout context and a 3D spatial scene. It must be placed within a composable that provides a 2D surface in the 3D world, such as `SpatialPanel`, `https://developer.android.com/reference/kotlin/androidx/xr/compose/spatial/Orbiter.composable#Orbiter(androidx.xr.compose.spatial.ContentEdge.Horizontal,androidx.compose.ui.unit.Dp,androidx.xr.compose.spatial.OrbiterOffsetType,androidx.compose.ui.Alignment.Horizontal,androidx.xr.compose.subspace.layout.SpatialShape,androidx.compose.ui.unit.Dp,kotlin.Boolean,kotlin.Function0)`, or a custom component built on similar principles.

The `PlanarEmbeddedSubspace` itself is laid out like a regular 2D composable, respecting the constraints and positioning of its parent. The 3D content placed inside it is then positioned relative to this 2D-defined area.

Key behaviors:

- **Layout:** The width and height are determined by the parent 2D layout. The depth (Z-axis) constraints are inherited from the surrounding spatial environment, allowing content to extend forwards and backwards from the 2D surface.

- **Content:** The `content` lambda is a `@SubspaceComposable` scope, where you can place 3D elements like `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialBox.composable#SpatialBox(androidx.xr.compose.subspace.layout.SubspaceModifier,androidx.xr.compose.subspace.layout.SpatialAlignment,kotlin.Boolean,kotlin.Function1)`.

- **Environment:** This composable is a no-op and renders nothing in non-XR environments (e.g., phones and tablets).

```kotlin
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
import androidx.xr.compose.spatial.PlanarEmbeddedSubspace
import androidx.xr.compose.subspace.SpatialPanel
import androidx.xr.compose.subspace.SubspaceComposable
import androidx.xr.compose.subspace.layout.SubspaceModifier
import androidx.xr.compose.subspace.layout.offset

@Composable
@SubspaceComposable
fun PanelWithPlanarEmbeddedSubspace() {
    // A PlanarEmbeddedSubspace is placed inside a SpatialPanel.
    // The 3D content inside the PlanarEmbeddedSubspace is positioned
    // relative to the 2D area of the SpatialPanel.
    // Here we place it in a Row to demonstrate that it participates in 2D layout.
    SpatialPanel {
        Row {
            Text("2D content")

            PlanarEmbeddedSubspace {
                // The content of a PlanarEmbeddedSubspace must be a SubspaceComposable.
                // Here we use another SpatialPanel to host 2D content. However,
                // this could be any 3D content (i.e. glTFs).
                SpatialPanel(SubspaceModifier.offset(z = (-50).dp)) {
                    Text("Embedded 3D content")
                }
            }
        }
    }
}
```

| Parameters |
|---|---|
| `modifier: https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier = SubspaceModifier` | The `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier` to be applied to the content of this Subspace. |
| `content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable @https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SubspaceComposable https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/SpatialBoxScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | The `@SubspaceComposable` 3D content to render within this subspace. |

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/spatial/Subspace.composable#Subspace(androidx.xr.compose.subspace.layout.SubspaceModifier,kotlin.Function1)` | For creating a top-level, application-anchored spatial scene. |