diff --git a/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs b/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs index 5879309fd4e5b4203d4de2469d840a658ce258d1..de7c51f19b00ca28d6f51d6d25615f0665c1dd7c 100644 --- a/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs +++ b/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs @@ -1713,7 +1713,7 @@ namespace ETSI.ARF.OpenAPI.WorldAnalysis /// The pose value /// </summary> [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public MatrixPoseValue Value { get; set; } + public PoseValue Value { get; set; } /// <summary> /// The URL to use for subscription (if available), see [/pose/subscriptions] diff --git a/Runtime/Scripts/WorldAnalysisInterface.cs b/Runtime/Scripts/WorldAnalysisInterface.cs index 24f1b3b3d8251b23636c56d3a3b609465b5b64ac..163b04948c5dcba260bfb26066676dfcc53e5c74 100644 --- a/Runtime/Scripts/WorldAnalysisInterface.cs +++ b/Runtime/Scripts/WorldAnalysisInterface.cs @@ -2,8 +2,6 @@ using ETSI.ARF.OpenAPI.WorldAnalysis; public interface WorldAnalysisInterface { - public static WorldAnalysisInterface Instance; - #region ResponseCode /// <summary> diff --git a/Runtime/Scripts/WorldAnalysisREST.cs b/Runtime/Scripts/WorldAnalysisREST.cs new file mode 100644 index 0000000000000000000000000000000000000000..a49700175405c461902f105d4eac179db1c7e876 --- /dev/null +++ b/Runtime/Scripts/WorldAnalysisREST.cs @@ -0,0 +1,101 @@ +using UnityEngine; +using ETSI.ARF.OpenAPI.WorldAnalysis; +using static WorldAnalysisInterface; + +//Implementation of the WorldAnalysis interface +public class WorldAnalysisREST : MonoBehaviour, WorldAnalysisInterface +{ + + #region Unity_Methods + + /// <summary> + /// Unity Awake Method + /// </summary> + protected void Awake() + { + } + + /// <summary> + /// Unity Start Method + /// </summary> + protected void Start() + { + } + + /// <summary> + /// Unity Update Method + /// </summary> + protected void Update() + { + } + + #endregion + + + #region ARF_API + + public AskFrameRateResult SetPoseEstimationFramerate(string token, PoseConfigurationTrackableType type, EncodingInformationStructure encodingInformation, int minimumFramerate) + { + return AskFrameRateResult.NOT_SUPPORTED; ///We cannot set any framerate for tracking on ARKit and ARCore + } + + public PoseEstimationResult GetLastPose(string token, string uuid, Mode_WorldAnalysis mode, out ETSI.ARF.OpenAPI.WorldAnalysis.Pose pose) + { + pose = null; + return PoseEstimationResult.OK; + } + + + public PoseEstimationResult[] GetLastPoses(string token, string[] uuids, Mode_WorldAnalysis [] modes, out ETSI.ARF.OpenAPI.WorldAnalysis.Pose[] poses) + { + poses = null; + return null; + } + + public InformationSubscriptionResult SubscribeToPose(string token, string uuid, Mode_WorldAnalysis mode, PoseCallback callback, ref int validity, out string subscriptionUUID) + { + subscriptionUUID = ""; + return InformationSubscriptionResult.OK; + } + + public InformationSubscriptionResult[] SubscribeToPoses(string token, string[] uuids, Mode_WorldAnalysis [] modes, PoseCallback callback, ref int validity, out string[] subscriptionUUIDs) + { + subscriptionUUIDs = null; + return null; + } + + public InformationSubscriptionResult GetSubsription(string token, string subscriptionUUID, out PoseCallback callback, out string target, out Mode_WorldAnalysis mode, out int validity) + { + callback = null; + target = ""; + mode = Mode_WorldAnalysis.TRACKABLES_TO_DEVICE; + validity = 0; + return InformationSubscriptionResult.OK; + } + + public InformationSubscriptionResult UpdateSubscription(string token, string subscriptionUUID, Mode_WorldAnalysis mode, int validity, PoseCallback callback) + { + return InformationSubscriptionResult.OK; + } + + public InformationSubscriptionResult UnSubscribeToPose(string subscriptionUUID) + { + return InformationSubscriptionResult.OK; + } + + public CapabilityResult GetCapabilities(string token, out Capability[] capabilities) + { + capabilities = null; + return CapabilityResult.OK; + } + + public CapabilityResult GetCapability(string token, string uuid, out bool isSupported, out TypeWorldStorage type, out Capability capability) + { + isSupported = false; + type = TypeWorldStorage.UNKNOWN; + capability = null; + return CapabilityResult.OK; + } + + #endregion +} \ No newline at end of file diff --git a/Runtime/Scripts/WorldAnalysisREST.cs.meta b/Runtime/Scripts/WorldAnalysisREST.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..deeb2e10e21b0664c0cf9a6d5dc699852c6cf1aa --- /dev/null +++ b/Runtime/Scripts/WorldAnalysisREST.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0885b8471e62a34599778bb8e199c52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/WorldAnalysisUnityHelper.cs b/Runtime/Scripts/WorldAnalysisUnityHelper.cs new file mode 100644 index 0000000000000000000000000000000000000000..28620378eb22ff35d6147767909f0944c5cc7943 --- /dev/null +++ b/Runtime/Scripts/WorldAnalysisUnityHelper.cs @@ -0,0 +1,67 @@ +using System; +using UnityEngine; + +public class WorldAnalysisUnityHelper +{ + /// <summary> + /// Convert a float array of length 3 to a Vector3 + /// </summary> + /// <param name="value">the values to convert</param> + /// <returns></returns> + /// <exception cref="ArgumentException"></exception> + public static Vector3 ConvertETSIVector3ToUnity(ETSI.ARF.OpenAPI.WorldAnalysis.Vector3 value) + { + if (value.Count == 3) return new Vector3(value[0], value[1], value[2]); + throw new ArgumentException("The numer of floats in the value parameter must be 3!"); + } + + /// <summary> + /// Convert a float array of length 4 to a Quaternion + /// </summary> + /// <param name="value">the values to convert</param> + /// <returns></returns> + /// <exception cref="ArgumentException"></exception> + public static Quaternion ConvertETSIARFQuaternionToUnity(ETSI.ARF.OpenAPI.WorldAnalysis.Quaternion value) + { + if (value.Count == 4) return new Quaternion(value[0], value[1], value[2], value[3]); + throw new ArgumentException("The numer of floats in the value parameter must be 4!"); + } + + /// <summary> + /// Convert a float array of length 16 to a Matrix + /// </summary> + /// <param name="matrix"></param> + /// <returns></returns> + public static Matrix4x4 ConvertETSIARFTransform3DToUnity(ETSI.ARF.OpenAPI.WorldAnalysis.Transform3D value) + { + if (value.Count == 16) + { + Matrix4x4 resul = new Matrix4x4(); + resul[0, 0] = value[0]; + resul[0, 1] = value[1]; + resul[0, 2] = value[2]; + resul[0, 3] = value[3]; + + resul[1, 0] = value[4]; + resul[1, 1] = value[5]; + resul[1, 2] = value[6]; + resul[1, 3] = value[7]; + + resul[2, 0] = value[8]; + resul[2, 1] = value[9]; + resul[2, 2] = value[10]; + resul[2, 3] = value[11]; + + resul[3, 0] = value[12]; + resul[3, 1] = value[13]; + resul[3, 2] = value[14]; + resul[3, 3] = value[15]; + + return resul; + } + else + { + throw new ArgumentException("The numer of floats in the value parameter must be 16!"); + } + } +} \ No newline at end of file diff --git a/Runtime/Scripts/WorldAnalysisUnityHelper.cs.meta b/Runtime/Scripts/WorldAnalysisUnityHelper.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..56b4a1ced622b28034432dc0f32a082832c8ebb3 --- /dev/null +++ b/Runtime/Scripts/WorldAnalysisUnityHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa241d7ddbd18184dae8dbe6b8c75a7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: