# WARNING: Please don't edit this file. It was generated by Python/WinRT v1.0.0-beta.10

import datetime
import sys
import types
import typing

import winsdk.system
import winsdk.windows.foundation
import winsdk.windows.foundation.collections
import winsdk.windows.foundation.numerics
import winsdk.windows.graphics.directx
import winsdk.windows.perception.spatial
import winsdk.windows.storage.streams

Self = typing.TypeVar('Self')

class SpatialSurfaceInfo(winsdk.system.Object):
    id: winsdk.system.Guid
    update_time: datetime.datetime
    @staticmethod
    def _from(obj: winsdk.system.Object, /) -> SpatialSurfaceInfo: ...
    @typing.overload
    def try_compute_latest_mesh_async(self, max_triangles_per_cubic_meter: winsdk.system.Double, /) -> winsdk.windows.foundation.IAsyncOperation[SpatialSurfaceMesh]: ...
    @typing.overload
    def try_compute_latest_mesh_async(self, max_triangles_per_cubic_meter: winsdk.system.Double, options: typing.Optional[SpatialSurfaceMeshOptions], /) -> winsdk.windows.foundation.IAsyncOperation[SpatialSurfaceMesh]: ...
    def try_get_bounds(self, coordinate_system: typing.Optional[winsdk.windows.perception.spatial.SpatialCoordinateSystem], /) -> typing.Optional[typing.Optional[winsdk.windows.perception.spatial.SpatialBoundingOrientedBox]]: ...

class SpatialSurfaceMesh(winsdk.system.Object):
    coordinate_system: typing.Optional[winsdk.windows.perception.spatial.SpatialCoordinateSystem]
    surface_info: typing.Optional[SpatialSurfaceInfo]
    triangle_indices: typing.Optional[SpatialSurfaceMeshBuffer]
    vertex_normals: typing.Optional[SpatialSurfaceMeshBuffer]
    vertex_position_scale: winsdk.windows.foundation.numerics.Vector3
    vertex_positions: typing.Optional[SpatialSurfaceMeshBuffer]
    @staticmethod
    def _from(obj: winsdk.system.Object, /) -> SpatialSurfaceMesh: ...

class SpatialSurfaceMeshBuffer(winsdk.system.Object):
    data: typing.Optional[winsdk.windows.storage.streams.IBuffer]
    element_count: winsdk.system.UInt32
    format: winsdk.windows.graphics.directx.DirectXPixelFormat
    stride: winsdk.system.UInt32
    @staticmethod
    def _from(obj: winsdk.system.Object, /) -> SpatialSurfaceMeshBuffer: ...

class SpatialSurfaceMeshOptions(winsdk.system.Object):
    vertex_position_format: winsdk.windows.graphics.directx.DirectXPixelFormat
    vertex_normal_format: winsdk.windows.graphics.directx.DirectXPixelFormat
    triangle_index_format: winsdk.windows.graphics.directx.DirectXPixelFormat
    include_vertex_normals: winsdk.system.Boolean
    supported_triangle_index_formats: typing.ClassVar[typing.Optional[winsdk.windows.foundation.collections.IVectorView[winsdk.windows.graphics.directx.DirectXPixelFormat]]]
    supported_vertex_normal_formats: typing.ClassVar[typing.Optional[winsdk.windows.foundation.collections.IVectorView[winsdk.windows.graphics.directx.DirectXPixelFormat]]]
    supported_vertex_position_formats: typing.ClassVar[typing.Optional[winsdk.windows.foundation.collections.IVectorView[winsdk.windows.graphics.directx.DirectXPixelFormat]]]
    @staticmethod
    def _from(obj: winsdk.system.Object, /) -> SpatialSurfaceMeshOptions: ...
    def __new__(cls: typing.Type[SpatialSurfaceMeshOptions]) -> SpatialSurfaceMeshOptions:...

class SpatialSurfaceObserver(winsdk.system.Object):
    @staticmethod
    def _from(obj: winsdk.system.Object, /) -> SpatialSurfaceObserver: ...
    def __new__(cls: typing.Type[SpatialSurfaceObserver]) -> SpatialSurfaceObserver:...
    def get_observed_surfaces(self) -> typing.Optional[winsdk.windows.foundation.collections.IMapView[winsdk.system.Guid, SpatialSurfaceInfo]]: ...
    @staticmethod
    def is_supported() -> winsdk.system.Boolean: ...
    @staticmethod
    def request_access_async() -> winsdk.windows.foundation.IAsyncOperation[winsdk.windows.perception.spatial.SpatialPerceptionAccessStatus]: ...
    def set_bounding_volume(self, bounds: typing.Optional[winsdk.windows.perception.spatial.SpatialBoundingVolume], /) -> None: ...
    def set_bounding_volumes(self, bounds: typing.Iterable[winsdk.windows.perception.spatial.SpatialBoundingVolume], /) -> None: ...
    def add_observed_surfaces_changed(self, handler: winsdk.windows.foundation.TypedEventHandler[SpatialSurfaceObserver, winsdk.system.Object], /) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_observed_surfaces_changed(self, token: winsdk.windows.foundation.EventRegistrationToken, /) -> None: ...

