//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Foundation.Numerics.idl";
import "Windows.Perception.idl";
import "Windows.Storage.Streams.idl";
import "Windows.System.RemoteSystems.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        namespace Collections
        {
            runtimeclass ValueSet;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;
    }
}
namespace Windows
{
    namespace Foundation
    {
        namespace Numerics
        {
            typedef struct Matrix4x4 Matrix4x4;

            typedef struct Plane Plane;

            typedef struct Quaternion Quaternion;

            typedef struct Vector3 Vector3;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Perception
    {
        runtimeclass PerceptionTimestamp;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IInputStream;

            interface IOutputStream;
        }
    }
}
namespace Windows
{
    namespace System
    {
        namespace RemoteSystems
        {
            runtimeclass RemoteSystemSession;
        }
    }
}
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            typedef enum SpatialAnchorExportPurpose SpatialAnchorExportPurpose;

            typedef enum SpatialEntityWatcherStatus SpatialEntityWatcherStatus;

            typedef enum SpatialLocatability SpatialLocatability;

            typedef enum SpatialLookDirectionRange SpatialLookDirectionRange;

            typedef enum SpatialMovementRange SpatialMovementRange;

            typedef enum SpatialPerceptionAccessStatus SpatialPerceptionAccessStatus;

            typedef struct SpatialBoundingBox SpatialBoundingBox;

            typedef struct SpatialBoundingFrustum SpatialBoundingFrustum;

            typedef struct SpatialBoundingOrientedBox SpatialBoundingOrientedBox;

            typedef struct SpatialBoundingSphere SpatialBoundingSphere;

            typedef struct SpatialRay SpatialRay;

            interface ISpatialAnchor;

            interface ISpatialAnchor2;

            interface ISpatialAnchorExportSufficiency;

            interface ISpatialAnchorExporter;

            interface ISpatialAnchorExporterStatics;

            interface ISpatialAnchorManagerStatics;

            interface ISpatialAnchorRawCoordinateSystemAdjustedEventArgs;

            interface ISpatialAnchorStatics;

            interface ISpatialAnchorStore;

            interface ISpatialAnchorTransferManagerStatics;

            interface ISpatialBoundingVolume;

            interface ISpatialBoundingVolumeStatics;

            interface ISpatialCoordinateSystem;

            interface ISpatialEntity;

            interface ISpatialEntityAddedEventArgs;

            interface ISpatialEntityFactory;

            interface ISpatialEntityRemovedEventArgs;

            interface ISpatialEntityStore;

            interface ISpatialEntityStoreStatics;

            interface ISpatialEntityUpdatedEventArgs;

            interface ISpatialEntityWatcher;

            interface ISpatialLocation;

            interface ISpatialLocation2;

            interface ISpatialLocator;

            interface ISpatialLocatorAttachedFrameOfReference;

            interface ISpatialLocatorPositionalTrackingDeactivatingEventArgs;

            interface ISpatialLocatorStatics;

            interface ISpatialStageFrameOfReference;

            interface ISpatialStageFrameOfReferenceStatics;

            interface ISpatialStationaryFrameOfReference;

            runtimeclass SpatialAnchor;

            runtimeclass SpatialAnchorExportSufficiency;

            runtimeclass SpatialAnchorExporter;

            runtimeclass SpatialAnchorManager;

            runtimeclass SpatialAnchorRawCoordinateSystemAdjustedEventArgs;

            runtimeclass SpatialAnchorStore;

            runtimeclass SpatialAnchorTransferManager;

            runtimeclass SpatialBoundingVolume;

            runtimeclass SpatialCoordinateSystem;

            runtimeclass SpatialEntity;

            runtimeclass SpatialEntityAddedEventArgs;

            runtimeclass SpatialEntityRemovedEventArgs;

            runtimeclass SpatialEntityStore;

            runtimeclass SpatialEntityUpdatedEventArgs;

            runtimeclass SpatialEntityWatcher;

            runtimeclass SpatialLocation;

            runtimeclass SpatialLocator;

            runtimeclass SpatialLocatorAttachedFrameOfReference;

            runtimeclass SpatialLocatorPositionalTrackingDeactivatingEventArgs;

            runtimeclass SpatialStageFrameOfReference;

            runtimeclass SpatialStationaryFrameOfReference;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Perception.Spatial.SpatialBoundingVolume*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Perception.Spatial.SpatialBoundingVolume*>;

                interface Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>;

                interface Windows.Foundation.Collections.IMapView<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IMapView<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialAnchorExportSufficiency*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialAnchorStore*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialPerceptionAccessStatus>;

                interface Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialStageFrameOfReference*>;

                interface Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialBoundingBox>;

                interface Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialBoundingFrustum>;

                interface Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialBoundingOrientedBox>;

                interface Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialRay>;

                interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialAnchor*, Windows.Perception.Spatial.SpatialAnchorRawCoordinateSystemAdjustedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, Windows.Perception.Spatial.SpatialEntityAddedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, Windows.Perception.Spatial.SpatialEntityRemovedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, Windows.Perception.Spatial.SpatialEntityUpdatedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialLocator*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialLocator*, Windows.Perception.Spatial.SpatialLocatorPositionalTrackingDeactivatingEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            enum SpatialAnchorExportPurpose
            {
                Relocalization = 0,
                Sharing        = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            enum SpatialEntityWatcherStatus
            {
                Created              = 0,
                Started              = 1,
                EnumerationCompleted = 2,
                Stopping             = 3,
                Stopped              = 4,
                Aborted              = 5
            };

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            enum SpatialLocatability
            {
                Unavailable                  = 0,
                OrientationOnly              = 1,
                PositionalTrackingActivating = 2,
                PositionalTrackingActive     = 3,
                PositionalTrackingInhibited  = 4
            };

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            enum SpatialLookDirectionRange
            {
                ForwardOnly     = 0,
                Omnidirectional = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            enum SpatialMovementRange
            {
                NoMovement = 0,
                Bounded    = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            enum SpatialPerceptionAccessStatus
            {
                Unspecified    = 0,
                Allowed        = 1,
                DeniedByUser   = 2,
                DeniedBySystem = 3
            };

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            struct SpatialBoundingBox
            {
                Windows.Foundation.Numerics.Vector3 Center;
                Windows.Foundation.Numerics.Vector3 Extents;
            };

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            struct SpatialBoundingFrustum
            {
                Windows.Foundation.Numerics.Plane Near;
                Windows.Foundation.Numerics.Plane Far;
                Windows.Foundation.Numerics.Plane Right;
                Windows.Foundation.Numerics.Plane Left;
                Windows.Foundation.Numerics.Plane Top;
                Windows.Foundation.Numerics.Plane Bottom;
            };

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            struct SpatialBoundingOrientedBox
            {
                Windows.Foundation.Numerics.Vector3 Center;
                Windows.Foundation.Numerics.Vector3 Extents;
                Windows.Foundation.Numerics.Quaternion Orientation;
            };

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            struct SpatialBoundingSphere
            {
                Windows.Foundation.Numerics.Vector3 Center;
                FLOAT Radius;
            };

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            struct SpatialRay
            {
                Windows.Foundation.Numerics.Vector3 Origin;
                Windows.Foundation.Numerics.Vector3 Direction;
            };

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchor)]
            [uuid(0529E5CE-1D34-3702-BCEC-EABFF578A869)]
            interface ISpatialAnchor : IInspectable
            {
                [propget] HRESULT CoordinateSystem([out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** value);
                [propget] HRESULT RawCoordinateSystem([out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** value);
                [eventadd] HRESULT RawCoordinateSystemAdjusted([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialAnchor*, Windows.Perception.Spatial.SpatialAnchorRawCoordinateSystemAdjustedEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT RawCoordinateSystemAdjusted([in] EventRegistrationToken cookie);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchor)]
            [uuid(ED17C908-A695-4CF6-92FD-97263BA71047)]
            interface ISpatialAnchor2 : IInspectable
            {
                [propget] HRESULT RemovedByUser([out] [retval] boolean* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchorExportSufficiency)]
            [uuid(77C25B2B-3409-4088-B91B-FDFD05D1648F)]
            interface ISpatialAnchorExportSufficiency : IInspectable
            {
                [propget] HRESULT IsMinimallySufficient([out] [retval] boolean* value);
                [propget] HRESULT SufficiencyLevel([out] [retval] DOUBLE* value);
                [propget] HRESULT RecommendedSufficiencyLevel([out] [retval] DOUBLE* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchorExporter)]
            [uuid(9A2A4338-24FB-4269-89C5-88304AEEF20F)]
            interface ISpatialAnchorExporter : IInspectable
            {
                HRESULT GetAnchorExportSufficiencyAsync([in] Windows.Perception.Spatial.SpatialAnchor* anchor, [in] Windows.Perception.Spatial.SpatialAnchorExportPurpose purpose, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialAnchorExportSufficiency*>** operation);
                HRESULT TryExportAnchorAsync([in] Windows.Perception.Spatial.SpatialAnchor* anchor, [in] Windows.Perception.Spatial.SpatialAnchorExportPurpose purpose, [in] Windows.Storage.Streams.IOutputStream* stream, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchorExporter)]
            [uuid(ED2507B8-2475-439C-85FF-7FED341FDC88)]
            interface ISpatialAnchorExporterStatics : IInspectable
            {
                HRESULT GetDefault([out] [retval] Windows.Perception.Spatial.SpatialAnchorExporter** value);
                HRESULT RequestAccessAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialPerceptionAccessStatus>** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchorManager)]
            [uuid(88E30EAB-F3B7-420B-B086-8A80C07D910D)]
            interface ISpatialAnchorManagerStatics : IInspectable
            {
                HRESULT RequestStoreAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialAnchorStore*>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchorRawCoordinateSystemAdjustedEventArgs)]
            [uuid(A1E81EB8-56C7-3117-A2E4-81E0FCF28E00)]
            interface ISpatialAnchorRawCoordinateSystemAdjustedEventArgs : IInspectable
            {
                [propget] HRESULT OldRawCoordinateSystemToNewRawCoordinateSystemTransform([out] [retval] Windows.Foundation.Numerics.Matrix4x4* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchor)]
            [uuid(A9928642-0174-311C-AE79-0E5107669F16)]
            interface ISpatialAnchorStatics : IInspectable
            {
                [overload("TryCreateRelativeTo")] HRESULT TryCreateRelativeTo([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [out] [retval] Windows.Perception.Spatial.SpatialAnchor** value);
                [overload("TryCreateRelativeTo")] HRESULT TryCreateWithPositionRelativeTo([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Foundation.Numerics.Vector3 position, [out] [retval] Windows.Perception.Spatial.SpatialAnchor** value);
                [overload("TryCreateRelativeTo")] HRESULT TryCreateWithPositionAndOrientationRelativeTo([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Foundation.Numerics.Vector3 position, [in] Windows.Foundation.Numerics.Quaternion orientation, [out] [retval] Windows.Perception.Spatial.SpatialAnchor** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchorStore)]
            [uuid(B0BC3636-486A-3CB0-9E6F-1245165C4DB6)]
            interface ISpatialAnchorStore : IInspectable
            {
                HRESULT GetAllSavedAnchors([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>** value);
                HRESULT TrySave([in] HSTRING id, [in] Windows.Perception.Spatial.SpatialAnchor* anchor, [out] [retval] boolean* succeeded);
                HRESULT Remove([in] HSTRING id);
                HRESULT Clear();
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [deprecated("Use SpatialEntityStore instead of SpatialAnchorTransferManager. For more info, see MSDN.", deprecate, Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialAnchorTransferManager)]
            [uuid(03BBF9B9-12D8-4BCE-8835-C5DF3AC0ADAB)]
            interface ISpatialAnchorTransferManagerStatics : IInspectable
            {
                [deprecated("Use SpatialEntityStore instead of SpatialAnchorTransferManager. For more info, see MSDN.", deprecate, Windows.Foundation.UniversalApiContract, 4.0)] HRESULT TryImportAnchorsAsync([in] Windows.Storage.Streams.IInputStream* stream, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IMapView<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>*>** operation);
                [deprecated("Use SpatialEntityStore instead of SpatialAnchorTransferManager. For more info, see MSDN.", deprecate, Windows.Foundation.UniversalApiContract, 4.0)] HRESULT TryExportAnchorsAsync([in] Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Perception.Spatial.SpatialAnchor*>*>* anchors, [in] Windows.Storage.Streams.IOutputStream* stream, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
                [deprecated("Use SpatialEntityStore instead of SpatialAnchorTransferManager. For more info, see MSDN.", deprecate, Windows.Foundation.UniversalApiContract, 4.0)] HRESULT RequestAccessAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialPerceptionAccessStatus>** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialBoundingVolume)]
            [uuid(FB2065DA-68C3-33DF-B7AF-4C787207999C)]
            interface ISpatialBoundingVolume : IInspectable
            {
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialBoundingVolume)]
            [uuid(05889117-B3E1-36D8-B017-566181A5B196)]
            interface ISpatialBoundingVolumeStatics : IInspectable
            {
                HRESULT FromBox([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Perception.Spatial.SpatialBoundingBox box, [out] [retval] Windows.Perception.Spatial.SpatialBoundingVolume** value);
                HRESULT FromOrientedBox([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Perception.Spatial.SpatialBoundingOrientedBox box, [out] [retval] Windows.Perception.Spatial.SpatialBoundingVolume** value);
                HRESULT FromSphere([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Perception.Spatial.SpatialBoundingSphere sphere, [out] [retval] Windows.Perception.Spatial.SpatialBoundingVolume** value);
                HRESULT FromFrustum([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Perception.Spatial.SpatialBoundingFrustum frustum, [out] [retval] Windows.Perception.Spatial.SpatialBoundingVolume** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialCoordinateSystem)]
            [uuid(69EBCA4B-60A3-3586-A653-59A7BD676D07)]
            interface ISpatialCoordinateSystem : IInspectable
            {
                HRESULT TryGetTransformTo([in] Windows.Perception.Spatial.SpatialCoordinateSystem* target, [out] [retval] Windows.Foundation.IReference<Windows.Foundation.Numerics.Matrix4x4>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntity)]
            [uuid(166DE955-E1EB-454C-BA08-E6C0668DDC65)]
            interface ISpatialEntity : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT Anchor([out] [retval] Windows.Perception.Spatial.SpatialAnchor** value);
                [propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.ValueSet** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntityAddedEventArgs)]
            [uuid(A397F49B-156A-4707-AC2C-D31D570ED399)]
            interface ISpatialEntityAddedEventArgs : IInspectable
            {
                [propget] HRESULT Entity([out] [retval] Windows.Perception.Spatial.SpatialEntity** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntity)]
            [uuid(E1F1E325-349F-4225-A2F3-4B01C15FE056)]
            interface ISpatialEntityFactory : IInspectable
            {
                HRESULT CreateWithSpatialAnchor([in] Windows.Perception.Spatial.SpatialAnchor* spatialAnchor, [out] [retval] Windows.Perception.Spatial.SpatialEntity** value);
                HRESULT CreateWithSpatialAnchorAndProperties([in] Windows.Perception.Spatial.SpatialAnchor* spatialAnchor, [in] Windows.Foundation.Collections.ValueSet* propertySet, [out] [retval] Windows.Perception.Spatial.SpatialEntity** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntityRemovedEventArgs)]
            [uuid(91741800-536D-4E9F-ABF6-415B5444D651)]
            interface ISpatialEntityRemovedEventArgs : IInspectable
            {
                [propget] HRESULT Entity([out] [retval] Windows.Perception.Spatial.SpatialEntity** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntityStore)]
            [uuid(329788BA-E513-4F06-889D-1BE30ECF43E6)]
            interface ISpatialEntityStore : IInspectable
            {
                HRESULT SaveAsync([in] Windows.Perception.Spatial.SpatialEntity* entity, [out] [retval] Windows.Foundation.IAsyncAction** action);
                HRESULT RemoveAsync([in] Windows.Perception.Spatial.SpatialEntity* entity, [out] [retval] Windows.Foundation.IAsyncAction** action);
                HRESULT CreateEntityWatcher([out] [retval] Windows.Perception.Spatial.SpatialEntityWatcher** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntityStore)]
            [uuid(6B4B389E-7C50-4E92-8A62-4D1D4B7CCD3E)]
            interface ISpatialEntityStoreStatics : IInspectable
            {
                [propget] HRESULT IsSupported([out] [retval] boolean* value);
                [overload("TryGet")] HRESULT TryGetForRemoteSystemSession([in] Windows.System.RemoteSystems.RemoteSystemSession* session, [out] [retval] Windows.Perception.Spatial.SpatialEntityStore** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntityUpdatedEventArgs)]
            [uuid(E5671766-627B-43CB-A49F-B3BE6D47DEED)]
            interface ISpatialEntityUpdatedEventArgs : IInspectable
            {
                [propget] HRESULT Entity([out] [retval] Windows.Perception.Spatial.SpatialEntity** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialEntityWatcher)]
            [uuid(B3B85FA0-6D5E-4BBC-805D-5FE5B9BA1959)]
            interface ISpatialEntityWatcher : IInspectable
            {
                [propget] HRESULT Status([out] [retval] Windows.Perception.Spatial.SpatialEntityWatcherStatus* value);
                [eventadd] HRESULT Added([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, Windows.Perception.Spatial.SpatialEntityAddedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Added([in] EventRegistrationToken token);
                [eventadd] HRESULT Updated([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, Windows.Perception.Spatial.SpatialEntityUpdatedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Updated([in] EventRegistrationToken token);
                [eventadd] HRESULT Removed([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, Windows.Perception.Spatial.SpatialEntityRemovedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Removed([in] EventRegistrationToken token);
                [eventadd] HRESULT EnumerationCompleted([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialEntityWatcher*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT EnumerationCompleted([in] EventRegistrationToken token);
                HRESULT Start();
                HRESULT Stop();
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialLocation)]
            [uuid(1D81D29D-24A1-37D5-8FA1-39B4F9AD67E2)]
            interface ISpatialLocation : IInspectable
            {
                [propget] HRESULT Position([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propget] HRESULT Orientation([out] [retval] Windows.Foundation.Numerics.Quaternion* value);
                [propget] HRESULT AbsoluteLinearVelocity([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propget] HRESULT AbsoluteLinearAcceleration([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [deprecated("Use AbsoluteAngularVelocityAxisAngle instead of AbsoluteAngularVelocity. For more info, see MSDN.", deprecate, Windows.Foundation.UniversalApiContract, 7.0)] [propget] HRESULT AbsoluteAngularVelocity([out] [retval] Windows.Foundation.Numerics.Quaternion* value);
                [deprecated("Use AbsoluteAngularAccelerationAxisAngle instead of AbsoluteAngularAcceleration. For more info, see MSDN.", deprecate, Windows.Foundation.UniversalApiContract, 7.0)] [propget] HRESULT AbsoluteAngularAcceleration([out] [retval] Windows.Foundation.Numerics.Quaternion* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialLocation)]
            [uuid(117F2416-38A7-4A18-B404-AB8FABE1D78B)]
            interface ISpatialLocation2 : IInspectable
            {
                [propget] HRESULT AbsoluteAngularVelocityAxisAngle([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propget] HRESULT AbsoluteAngularAccelerationAxisAngle([out] [retval] Windows.Foundation.Numerics.Vector3* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialLocator)]
            [uuid(F6478925-9E0C-3BB6-997E-B64ECCA24CF4)]
            interface ISpatialLocator : IInspectable
            {
                [propget] HRESULT Locatability([out] [retval] Windows.Perception.Spatial.SpatialLocatability* value);
                [eventadd] HRESULT LocatabilityChanged([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialLocator*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT LocatabilityChanged([in] EventRegistrationToken cookie);
                [eventadd] HRESULT PositionalTrackingDeactivating([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.SpatialLocator*, Windows.Perception.Spatial.SpatialLocatorPositionalTrackingDeactivatingEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT PositionalTrackingDeactivating([in] EventRegistrationToken cookie);
                HRESULT TryLocateAtTimestamp([in] Windows.Perception.PerceptionTimestamp* timestamp, [in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [out] [retval] Windows.Perception.Spatial.SpatialLocation** value);
                [overload("CreateAttachedFrameOfReferenceAtCurrentHeading")] HRESULT CreateAttachedFrameOfReferenceAtCurrentHeading([out] [retval] Windows.Perception.Spatial.SpatialLocatorAttachedFrameOfReference** value);
                [overload("CreateAttachedFrameOfReferenceAtCurrentHeading")] HRESULT CreateAttachedFrameOfReferenceAtCurrentHeadingWithPosition([in] Windows.Foundation.Numerics.Vector3 relativePosition, [out] [retval] Windows.Perception.Spatial.SpatialLocatorAttachedFrameOfReference** value);
                [overload("CreateAttachedFrameOfReferenceAtCurrentHeading")] HRESULT CreateAttachedFrameOfReferenceAtCurrentHeadingWithPositionAndOrientation([in] Windows.Foundation.Numerics.Vector3 relativePosition, [in] Windows.Foundation.Numerics.Quaternion relativeOrientation, [out] [retval] Windows.Perception.Spatial.SpatialLocatorAttachedFrameOfReference** value);
                [overload("CreateAttachedFrameOfReferenceAtCurrentHeading")] HRESULT CreateAttachedFrameOfReferenceAtCurrentHeadingWithPositionAndOrientationAndRelativeHeading([in] Windows.Foundation.Numerics.Vector3 relativePosition, [in] Windows.Foundation.Numerics.Quaternion relativeOrientation, [in] DOUBLE relativeHeadingInRadians, [out] [retval] Windows.Perception.Spatial.SpatialLocatorAttachedFrameOfReference** value);
                [overload("CreateStationaryFrameOfReferenceAtCurrentLocation")] HRESULT CreateStationaryFrameOfReferenceAtCurrentLocation([out] [retval] Windows.Perception.Spatial.SpatialStationaryFrameOfReference** value);
                [overload("CreateStationaryFrameOfReferenceAtCurrentLocation")] HRESULT CreateStationaryFrameOfReferenceAtCurrentLocationWithPosition([in] Windows.Foundation.Numerics.Vector3 relativePosition, [out] [retval] Windows.Perception.Spatial.SpatialStationaryFrameOfReference** value);
                [overload("CreateStationaryFrameOfReferenceAtCurrentLocation")] HRESULT CreateStationaryFrameOfReferenceAtCurrentLocationWithPositionAndOrientation([in] Windows.Foundation.Numerics.Vector3 relativePosition, [in] Windows.Foundation.Numerics.Quaternion relativeOrientation, [out] [retval] Windows.Perception.Spatial.SpatialStationaryFrameOfReference** value);
                [overload("CreateStationaryFrameOfReferenceAtCurrentLocation")] HRESULT CreateStationaryFrameOfReferenceAtCurrentLocationWithPositionAndOrientationAndRelativeHeading([in] Windows.Foundation.Numerics.Vector3 relativePosition, [in] Windows.Foundation.Numerics.Quaternion relativeOrientation, [in] DOUBLE relativeHeadingInRadians, [out] [retval] Windows.Perception.Spatial.SpatialStationaryFrameOfReference** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialLocatorAttachedFrameOfReference)]
            [uuid(E1774EF6-1F4F-499C-9625-EF5E6ED7A048)]
            interface ISpatialLocatorAttachedFrameOfReference : IInspectable
            {
                [propget] HRESULT RelativePosition([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propput] HRESULT RelativePosition([in] Windows.Foundation.Numerics.Vector3 value);
                [propget] HRESULT RelativeOrientation([out] [retval] Windows.Foundation.Numerics.Quaternion* value);
                [propput] HRESULT RelativeOrientation([in] Windows.Foundation.Numerics.Quaternion value);
                HRESULT AdjustHeading([in] DOUBLE headingOffsetInRadians);
                HRESULT GetStationaryCoordinateSystemAtTimestamp([in] Windows.Perception.PerceptionTimestamp* timestamp, [out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** value);
                HRESULT TryGetRelativeHeadingAtTimestamp([in] Windows.Perception.PerceptionTimestamp* timestamp, [out] [retval] Windows.Foundation.IReference<DOUBLE>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialLocatorPositionalTrackingDeactivatingEventArgs)]
            [uuid(B8A84063-E3F4-368B-9061-9EA9D1D6CC16)]
            interface ISpatialLocatorPositionalTrackingDeactivatingEventArgs : IInspectable
            {
                [propget] HRESULT Canceled([out] [retval] boolean* value);
                [propput] HRESULT Canceled([in] boolean value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialLocator)]
            [uuid(B76E3340-A7C2-361B-BB82-56E93B89B1BB)]
            interface ISpatialLocatorStatics : IInspectable
            {
                HRESULT GetDefault([out] [retval] Windows.Perception.Spatial.SpatialLocator** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialStageFrameOfReference)]
            [uuid(7A8A3464-AD0D-4590-AB86-33062B674926)]
            interface ISpatialStageFrameOfReference : IInspectable
            {
                [propget] HRESULT CoordinateSystem([out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** value);
                [propget] HRESULT MovementRange([out] [retval] Windows.Perception.Spatial.SpatialMovementRange* value);
                [propget] HRESULT LookDirectionRange([out] [retval] Windows.Perception.Spatial.SpatialLookDirectionRange* value);
                HRESULT GetCoordinateSystemAtCurrentLocation([in] Windows.Perception.Spatial.SpatialLocator* locator, [out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** result);
                HRESULT TryGetMovementBounds([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [out] UINT32* __valueSize, [out] [retval] [size_is(, *__valueSize)] Windows.Foundation.Numerics.Vector3** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialStageFrameOfReference)]
            [uuid(F78D5C4D-A0A4-499C-8D91-A8C965D40654)]
            interface ISpatialStageFrameOfReferenceStatics : IInspectable
            {
                [propget] HRESULT Current([out] [retval] Windows.Perception.Spatial.SpatialStageFrameOfReference** value);
                [eventadd] HRESULT CurrentChanged([in] Windows.Foundation.EventHandler<IInspectable*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT CurrentChanged([in] EventRegistrationToken cookie);
                HRESULT RequestNewStageAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialStageFrameOfReference*>** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.Spatial.SpatialStationaryFrameOfReference)]
            [uuid(09DBCCB9-BCF8-3E7F-BE7E-7EDCCBB178A8)]
            interface ISpatialStationaryFrameOfReference : IInspectable
            {
                [propget] HRESULT CoordinateSystem([out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialAnchorStatics, Windows.Foundation.UniversalApiContract, 2.0)]
            [threading(both)]
            runtimeclass SpatialAnchor
            {
                [default] interface Windows.Perception.Spatial.ISpatialAnchor;
                [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.Perception.Spatial.ISpatialAnchor2;
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialAnchorExportSufficiency
            {
                [default] interface Windows.Perception.Spatial.ISpatialAnchorExportSufficiency;
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialAnchorExporterStatics, Windows.Foundation.UniversalApiContract, 7.0)]
            [threading(both)]
            runtimeclass SpatialAnchorExporter
            {
                [default] interface Windows.Perception.Spatial.ISpatialAnchorExporter;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialAnchorManagerStatics, Windows.Foundation.UniversalApiContract, 2.0)]
            [threading(both)]
            runtimeclass SpatialAnchorManager
            {
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialAnchorRawCoordinateSystemAdjustedEventArgs
            {
                [default] interface Windows.Perception.Spatial.ISpatialAnchorRawCoordinateSystemAdjustedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialAnchorStore
            {
                [default] interface Windows.Perception.Spatial.ISpatialAnchorStore;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [deprecated("Use SpatialEntityStore instead of SpatialAnchorTransferManager. For more info, see MSDN.", deprecate, Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialAnchorTransferManagerStatics, Windows.Foundation.UniversalApiContract, 2.0)]
            [threading(both)]
            runtimeclass SpatialAnchorTransferManager
            {
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialBoundingVolumeStatics, Windows.Foundation.UniversalApiContract, 2.0)]
            [threading(both)]
            runtimeclass SpatialBoundingVolume
            {
                [default] interface Windows.Perception.Spatial.ISpatialBoundingVolume;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialCoordinateSystem
            {
                [default] interface Windows.Perception.Spatial.ISpatialCoordinateSystem;
            }

            [activatable(Windows.Perception.Spatial.ISpatialEntityFactory, Windows.Foundation.UniversalApiContract, 4.0)]
            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialEntity
            {
                [default] interface Windows.Perception.Spatial.ISpatialEntity;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialEntityAddedEventArgs
            {
                [default] interface Windows.Perception.Spatial.ISpatialEntityAddedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialEntityRemovedEventArgs
            {
                [default] interface Windows.Perception.Spatial.ISpatialEntityRemovedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialEntityStoreStatics, Windows.Foundation.UniversalApiContract, 4.0)]
            [threading(both)]
            runtimeclass SpatialEntityStore
            {
                [default] interface Windows.Perception.Spatial.ISpatialEntityStore;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialEntityUpdatedEventArgs
            {
                [default] interface Windows.Perception.Spatial.ISpatialEntityUpdatedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialEntityWatcher
            {
                [default] interface Windows.Perception.Spatial.ISpatialEntityWatcher;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialLocation
            {
                [default] interface Windows.Perception.Spatial.ISpatialLocation;
                [contract(Windows.Foundation.UniversalApiContract, 7.0)] interface Windows.Perception.Spatial.ISpatialLocation2;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialLocatorStatics, Windows.Foundation.UniversalApiContract, 2.0)]
            [threading(both)]
            runtimeclass SpatialLocator
            {
                [default] interface Windows.Perception.Spatial.ISpatialLocator;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialLocatorAttachedFrameOfReference
            {
                [default] interface Windows.Perception.Spatial.ISpatialLocatorAttachedFrameOfReference;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialLocatorPositionalTrackingDeactivatingEventArgs
            {
                [default] interface Windows.Perception.Spatial.ISpatialLocatorPositionalTrackingDeactivatingEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.Spatial.ISpatialStageFrameOfReferenceStatics, Windows.Foundation.UniversalApiContract, 4.0)]
            [threading(both)]
            runtimeclass SpatialStageFrameOfReference
            {
                [default] interface Windows.Perception.Spatial.ISpatialStageFrameOfReference;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass SpatialStationaryFrameOfReference
            {
                [default] interface Windows.Perception.Spatial.ISpatialStationaryFrameOfReference;
            }
        }
    }
}
