From 29a370a8c7bff3ab61e5b526fa0d297840e85ba1 Mon Sep 17 00:00:00 2001 From: jlacoche <jeremy.lacoche@orange.com> Date: Wed, 24 Apr 2024 16:36:47 +0200 Subject: [PATCH] Add helper for managing conversions between generated code and Unity, add interface for REST --- .../OpenAPI/Generated/WorldAnalysisOpenAPI.cs | 2 +- Runtime/Scripts/WorldAnalysisInterface.cs | 2 - Runtime/Scripts/WorldAnalysisREST.cs | 101 ++++++++++++++++++ Runtime/Scripts/WorldAnalysisREST.cs.meta | 11 ++ Runtime/Scripts/WorldAnalysisUnityHelper.cs | 67 ++++++++++++ .../Scripts/WorldAnalysisUnityHelper.cs.meta | 11 ++ 6 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 Runtime/Scripts/WorldAnalysisREST.cs create mode 100644 Runtime/Scripts/WorldAnalysisREST.cs.meta create mode 100644 Runtime/Scripts/WorldAnalysisUnityHelper.cs create mode 100644 Runtime/Scripts/WorldAnalysisUnityHelper.cs.meta diff --git a/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs b/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs index 5879309..de7c51f 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 24f1b3b..163b049 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 0000000..a497001 --- /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 0000000..deeb2e1 --- /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 0000000..2862037 --- /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 0000000..56b4a1c --- /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: -- GitLab