// Get the SceneObject associated with the entity (returns a CompletableFuture)
systemManager.findSystem<SceneObjectSystem>().getSceneObject(entity)?.thenAccept { sceneObject ->
if (sceneObject is PanelSceneObject) {
// Now you can work with the panel
}
}
class PanelSceneObject : SceneObject
PanelSceneObject
(
scene
, ctx
, intent
, ent
, config
, displayCreator
)
| Parameters
scene:
Scene?
ctx:
SpatialContext
intent:
Intent
ent:
Entity?
config:
PanelConfigOptions
displayCreator:
Function4
Returns |
PanelSceneObject
(
scene
, ctx
, id
, ent
, config
, displayCreator
)
| Parameters
scene:
Scene?
ctx:
SpatialContext
id:
Class?
ent:
Entity?
config:
PanelConfigOptions
displayCreator:
Function4
Returns |
PanelSceneObject
(
scene
, ctx
, ent
, config
, getView
, displayCreator
)
| Parameters
scene:
Scene?
ctx:
SpatialContext
ent:
Entity?
config:
PanelConfigOptions
getView:
Function1
displayCreator:
Function4
Returns |
PanelSceneObject
(
scene
, ctx
, id
, ent
, config
, displayCreator
)
| Parameters
scene:
Scene?
ctx:
SpatialContext
id:
Int
ent:
Entity?
config:
PanelConfigOptions
displayCreator:
Function4
Returns |
PanelSceneObject
(
scene
, ent
, config
)
|
Signature
constructor(scene: Scene?, ent: Entity?, config: PanelConfigOptions = PanelConfigOptions()) Parameters Returns |
display
: PanelDisplay?
[Get] |
Gets the PanelDisplay associated with this panel, or null if no display is attached. Most commonly display is null for Direct-To-Surface rendered panels.
Signature
val display: PanelDisplay? |
entity
: Entity?
[Get] |
Signature
val entity: Entity? |
handle
: Long
[Get] |
Signature
var handle: Long |
layer
: SceneLayer?
[Get] |
Gets the layer used by this panel.
Signature
val layer: SceneLayer? |
materials
: List?
[Get] |
Read-only list of SceneMaterials created from this SceneObject's mesh property.
You can read materials from this list and modify their properties (e.g., colors, textures), but you cannot replace a material at a specific index with a different material object. Changes to material properties will be unique to this SceneObject, but these materials will inherit any changes made in the SceneMesh they come from.
Materials are lazily populated on first access. This triggers material instance creation and marks the entity as dirty for rendering. If you don't need to customize materials, avoid accessing this property to improve performance.
Example usage:
// ✅ Allowed: Read and modify material properties
sceneObject.materials?.get(0)?.setColor(Color4(1f, 0f, 0f, 1f))
sceneObject.materials?.getOrNull(1)?.setTexture("albedo", myTexture)
sceneObject.materials?.forEach { it.setRoughness(0.5f) }
// ❌ Not allowed: Replace material at index (compile error)
// sceneObject.materials?.set(0, differentMaterial) // Compile error - List is immutable
// sceneObject.materials[0] = differentMaterial // Compile error - no set operator
Signature
val materials: List<SceneMaterial>? |
mesh
: SceneMesh?
[Get][Set] |
Reference to the SceneMesh used by this SceneObject. This property is a reference to the underlying mesh resource. Changes to the SceneMesh or its SceneMaterials will be reflected across all SceneObjects that reference it.
Signature
var mesh: SceneMesh? |
panelShapeConfig
: PanelShapeConfig?
[Get] |
Gets the config used to create this panel.
Signature
val panelShapeConfig: PanelShapeConfig? |
rootView
: View?
[Get] |
Gets the root View of the panel's display.
Signature
val rootView: View |
shapeType
: PanelShapeType
[Get] |
Signature
val PanelSceneObject.shapeType: PanelShapeType |
surface
: Surface
[Get] |
Gets the Surface associated with this panel.
Signature
val surface: Surface |
swapchain
: SceneSwapchain?
[Get] |
Gets the SceneSwapchain associated with this panel.
Signature
val swapchain: SceneSwapchain? |
texture
: SceneTexture?
[Get] |
Gets the texture used by this panel.
Signature
val texture: SceneTexture? |
addInputListener
(
listener
)
|
Add an input listener to this SceneObject.
Signature
fun addInputListener(listener: InputListener): Long Parameters Returns
Long
|
attachDisplay
(
ctxt
, clickButtons
, displayCreator
)
|
Signature
fun attachDisplay(ctxt: SpatialContext, clickButtons: Int, displayCreator: (PanelSurface) -> PanelDisplay) Parameters |
createIsdkComponents
(
entity
)
|
Creates the IsdkPanelDimensions and IsdkCurvedPanel components for the given entity, if they do not already exist. This method also updates the properties of these components from the PanelSceneObject properties.
This method is normally invoked by the IsdkComponentCreationSystem - you will only need to call this method directly if IsdkSystem is disabled.
Signature
fun PanelSceneObject.createIsdkComponents(entity: Entity) Parameters
entity:
Entity |
destroy
()
|
Destory this SceneObject.
Signature
fun destroy() |
destroyInternal
()
|
Destroy this SceneObject's native components.
Signature
open override fun destroyInternal() |
detachDisplay
()
|
Signature
fun detachDisplay() |
getDisplay
()
DeprecatedUse property 'display' instead |
Gets the PanelDisplay associated with this panel.
Signature
fun getDisplay(): PanelDisplay Throws
IllegalStateException
|
getLayer
()
DeprecatedUse property 'layer' instead |
Gets the layer used by this panel.
Signature
fun getLayer(): SceneLayer? |
getPanelShapeConfig
()
DeprecatedUse property 'panelShapeConfig' instead |
Gets the config used used to create this panel.
Signature
fun getPanelShapeConfig(): PanelShapeConfig? |
getSurface
()
DeprecatedUse property 'surface' instead |
Gets the Surface associated with this panel.
Signature
fun getSurface(): Surface Returns
Surface
|
getSwapchain
()
DeprecatedUse property 'swapchain' instead |
Gets the SceneSwapchain associated with this panel.
Signature
fun getSwapchain(): SceneSwapchain? |
getTexture
()
DeprecatedUse property 'texture' instead |
Gets the texture used by this panel.
Signature
fun getTexture(): SceneTexture? |
onClick
(
hitInfo
, sourceOfInput
)
| |
onClickDown
(
hitInfo
, sourceOfInput
)
|
Handler for click downs on this SceneObject. Use onClick() to ensure user releases the click on the SceneObject.
Signature
fun onClickDown(hitInfo: HitInfo, sourceOfInput: Entity) |
onHoverStart
(
sourceOfInput
)
|
Handler for the start of hovers on this SceneObject.
Signature
open fun onHoverStart(sourceOfInput: Entity) Parameters |
onHoverStop
(
sourceOfInput
)
|
Handler for the termination of hovers on this SceneObject.
Signature
open fun onHoverStop(sourceOfInput: Entity) Parameters |
onInput
(
hitInfo
, sourceOfInput
, changed
, buttonState
, downTime
)
|
Handler to handle generic input.
Signature
open fun onInput(hitInfo: HitInfo, sourceOfInput: Entity, changed: Int, buttonState: Int, downTime: Long): Boolean Parameters
changed:
Int
buttonState:
Int
downTime:
Long
Returns
Boolean
|
onPointerEvent
(
hitInfo
, type
, sourceOfInput
, scrollInfo
, semanticType
)
|
Handler to handle pointer events on this SceneObject.
Signature
open fun onPointerEvent(hitInfo: HitInfo, type: Int, sourceOfInput: Entity, scrollInfo: Vector2, semanticType: Int = SemanticType.Unknown.id) Parameters
type:
Int
semanticType:
Int
|
removeInputListener
(
id
)
|
Remove an input listener by id.
Signature
fun removeInputListener(id: Long) Parameters
id:
Long
|
reshape
(
shapeConfig
)
|
Destroy and recreate the PanelShape with the given config.
Signature
fun reshape(shapeConfig: PanelShapeConfig) Parameters |
resize
(
newWidthInPx
, newHeightInPx
)
|
Resizes the panel to the specified dimensions in pixels. This will recreate the panel surface and call resize on the panel display.
Signature
fun resize(newWidthInPx: Int, newHeightInPx: Int) Parameters
newWidthInPx:
Int
newHeightInPx:
Int
|
setIsVisible
(
isVisible
)
|
Set whether this SceneObject is visible.
Signature
fun setIsVisible(isVisible: Boolean) Parameters
isVisible:
Boolean
|
setLocalNodePose
(
node
, pose
)
|
Sets the local transform of the node (relative to it's parent) to the input pose
Signature
fun setLocalNodePose(node: Int, pose: Pose) Parameters
node:
Int
|
setLocalNodePoses
(
nodePoses
)
|
Sets the local transforms of multiple nodes (relative to their parents) using a map of node ids to poses. This is more efficient than calling setLocalNodePose multiple times as it performs a single batch update.
Signature
fun setLocalNodePoses(nodePoses: Map<Int, Pose>) Parameters
nodePoses:
Map
|
setLocalNodePoses
(
poses
)
|
Sets the local transforms of multiple nodes (relative to their parents) using a list of poses. This is more efficient than calling setLocalNodePose multiple times as it performs a single batch update. Nodes are indexed sequentially starting from 0.
Signature
fun setLocalNodePoses(poses: List<Pose>) Parameters
poses:
List
|
setLocalNodePosesRange
(
fromNode
, count
, poses
)
|
Sets the local transforms of a range of nodes (relative to their parents) using a list of poses. This is more efficient than calling setLocalNodePose multiple times as it performs a single batch update.
Signature
fun setLocalNodePosesRange(fromNode: Int, count: Int, poses: List<Pose>) Parameters
fromNode:
Int
count:
Int
poses:
List
|
setLocalNodeTransformsBatch
(
nodes
, transforms
, components
)
|
Sets the local transforms of multiple nodes (relative to their parents) using direct FloatArray buffers. This is the most efficient way to update multiple nodes as it avoids intermediate object allocations. Use this for performance-critical batch updates.
Transform data format depends on components flags:
Components not set will retain their previous values.
Signature
fun setLocalNodeTransformsBatch(nodes: IntArray, transforms: FloatArray, components: Int = TRANSFORM_TRANSLATION_ROTATION) Parameters
nodes:
IntArray
transforms:
FloatArray
components:
Int
|
setLocalNodeTransformsRange
(
fromNode
, toNode
, transforms
, components
)
|
Sets the local transforms of a contiguous range of nodes (relative to their parents) using direct FloatArray buffers. This is the most efficient way to update a range of nodes as it avoids intermediate object allocations. Use this for performance-critical batch updates.
Transform data format depends on components flags:
Components not set will retain their previous values.
Signature
fun setLocalNodeTransformsRange(fromNode: Int, toNode: Int, transforms: FloatArray, components: Int = TRANSFORM_TRANSLATION_ROTATION) Parameters
fromNode:
Int
toNode:
Int
transforms:
FloatArray
components:
Int
|
setPosition
(
position
)
|
Set the 3D position of this SceneObject.
Signature
fun setPosition(position: Vector3) Parameters |
setPosition
(
x
, y
, z
)
|
Set the 3D position of this SceneObject.
Signature
fun setPosition(x: Float, y: Float, z: Float) Parameters
x:
Float
y:
Float
z:
Float
|
setRotation
(
pitch
, yaw
, roll
)
|
Set the rotation of this SceneObject.
Signature
fun setRotation(pitch: Float, yaw: Float, roll: Float) Parameters
pitch:
Float
yaw:
Float
roll:
Float
|
setRotationQuat
(
quat
)
|
Set the rotation of this SceneObject.
Signature
fun setRotationQuat(quat: Quaternion) Parameters |
setRotationQuat
(
x
, y
, z
, w
)
|
Set the rotation of this SceneObject.
Signature
fun setRotationQuat(x: Float, y: Float, z: Float, w: Float) Parameters
x:
Float
y:
Float
z:
Float
w:
Float
|
setScale
(
scale
)
|
Set the scale of the model. The default value is 1.0f.
Signature
open override fun setScale(scale: Vector3) Parameters |
setSceneMesh
(
mesh
, name
)
| |
shouldFrustumCull
(
cull
)
|
Whether this SceneObject can be frustum culled (default is true)
Signature
fun shouldFrustumCull(cull: Boolean) Parameters
cull:
Boolean
|
stopInput
(
sourceOfInput
, downTime
)
|
This function calls the stopInput function on all InputListener for this SceneObject. This is called automatically by Scene when handling inputs.
Signature
open fun stopInput(sourceOfInput: Entity, downTime: Long) Parameters
downTime:
Long
|
updateAnimationTrackToTime
(
track
, timeInSeconds
)
|
Update the local transforms of the model to match the given animation track at the specified time (matching keyframe time in the glTF).
Track can be found from SceneMesh.getAnimationTracks
Signature
fun updateAnimationTrackToTime(track: Int, timeInSeconds: Float) Parameters
track:
Int
timeInSeconds:
Float
|
updateIsdkComponentProperties
(
entity
)
|
Updates the properties of the IsdkPanelDimensions and IsdkCurvedPanel components of the given entity to keep them in sync with the SpatialSDK Toolkit PanelSceneObject.
This method is normally invoked by the IsdkSystem - you will only need to call this method directly if IsdkSystem is disabled.
This method updates the dimensions and local offset of the IsdkPanelDimensions component based on the panel's shape configuration. If the entity does not have an IsdkPanelDimensions component, this method will do nothing.
For QUAD-shaped panels, the width and height are updated based on the panel's shape configuration or the quad configuration options. The local offset is recalculated if necessary, and the field of view (FOV) is set to 0.0f.
For CYLINDER-shaped panels, the width, height, and radius are updated based on the panel's shape configuration or the cylinder configuration options. The FOV is calculated from the radius and width to ensure the correct curvature.
If the panel's shape type is neither of these, a warning is logged, and the method returns without making any changes.
Signature
fun PanelSceneObject.updateIsdkComponentProperties(entity: Entity) Parameters
entity:
Entity |
updateNodeLocalPoseToObjectPose
(
node
, pose
)
|
Sets the local transform of a node (relative to it's parent) such that the resulting object transform (relative to the model) is placed at the input pose
WARNING: This may be an expensive operation as it recalculates object positions
Signature
fun updateNodeLocalPoseToObjectPose(node: Int, pose: Pose) Parameters
node:
Int
|
updateSceneMesh
(
meshModifier
)
|
Modify and update this SceneObject's mesh.
Signature
fun updateSceneMesh(meshModifier: SceneMesh.() -> Unit) Parameters
meshModifier:
Function1
|