Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • arf/world-analysis-api-helpers/unity-world-analysis-package
1 result
Show changes
Commits on Source (3)
......@@ -2343,8 +2343,8 @@ namespace ETSI.ARF.OpenAPI.WorldAnalysis
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public TypeWorldStorage Type { get; set; }
[Newtonsoft.Json.JsonProperty("capability", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public Capability Capability { get; set; }
[Newtonsoft.Json.JsonProperty("capabilities", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public System.Collections.Generic.ICollection<Capability> Capabilities { get; set; }
private System.Collections.Generic.IDictionary<string, object> _additionalProperties;
......
using ETSI.ARF.OpenAPI.WorldAnalysis;
using ETSI.ARF.OpenAPI.WorldAnalysis;
using System;
public interface WorldAnalysisInterface
{
public static WorldAnalysisInterface Instance;
#region ResponseCode
/// <summary>
......@@ -81,7 +84,7 @@ public interface WorldAnalysisInterface
/// <param name="mode">trackable/anchor to ar device or opposite RQ-AR8-001 The WA function shall provide the SM function with a pose of either an AR device in relation to a WorldAnchor or a Trackable, or conversely a Trackable or World Anchor in relation to the AR device. </param>
/// <param name="pose">Last estimated pose</param>
/// <returns>The last state of the estimation of this pose</returns>
public PoseEstimationResult GetLastPose(string token, string uuid, Mode_WorldAnalysis mode, out Pose pose);
public PoseEstimationResult GetLastPose(string token, Guid uuid, Mode_WorldAnalysis mode, out Pose pose);
/// <summary>
/// Pull the most recent pose of a multiple trackables and anchors
......@@ -92,7 +95,7 @@ public interface WorldAnalysisInterface
/// <param name="mode">list of trackable/anchor to ar device or opposite RQ-AR8-001 The WA function shall provide the SM function with a pose of either an AR device in relation to a WorldAnchor or a Trackable, or conversely a Trackable or World Anchor in relation to the AR device. </param>
/// <param name="poses">Last estimated pose</param>
/// <returns>The last state of the estimation of this pose</returns>
public PoseEstimationResult[] GetLastPoses(string token, string[] uuids, Mode_WorldAnalysis [] modes, out Pose [] poses);
public PoseEstimationResult[] GetLastPoses(string token, Guid[] uuids, Mode_WorldAnalysis [] modes, out Pose [] poses);
/// <summary>
/// Subscribe to receive the pose data of a given trackable or anchor
......@@ -105,7 +108,7 @@ public interface WorldAnalysisInterface
/// <param name="validity">Subscription validity delay in millisecond</param>
/// <param name="subscriptionUUID "> id of the callback</param>
/// <returns>Result of the subscription</returns>
public InformationSubscriptionResult SubscribeToPose(string token, string uuid, Mode_WorldAnalysis mode, PoseCallback callback, ref int validity, out string subscriptionUUID);
public InformationSubscriptionResult SubscribeToPose(string token, Guid uuid, Mode_WorldAnalysis mode, PoseCallback callback, ref int validity, out Guid subscriptionUUID);
/// <summary>
/// Subscribe to receive the pose data of a multiple trackables and anchors
......@@ -118,7 +121,7 @@ public interface WorldAnalysisInterface
/// <param name="validity">Subscription validity delay in millisecond</param>
/// <param name="subscriptionUUIDs"> id of the callback</param>
/// <returns>List of subscription result</returns>
public InformationSubscriptionResult[] SubscribeToPoses(string token, string[] uuids, Mode_WorldAnalysis [] modes, PoseCallback callback, ref int validity, out string[] subscriptionUUIDs);
public InformationSubscriptionResult[] SubscribeToPoses(string token, Guid[] uuids, Mode_WorldAnalysis [] modes, PoseCallback callback, ref int validity, out Guid[] subscriptionUUIDs);
/// <summary>
/// Get the subscription and the associated callback for collecting a given pose
......@@ -130,7 +133,7 @@ public interface WorldAnalysisInterface
/// <param name="mode">Mode representing the context of the relocalization information (AR device to WorldAnchor/Trackable or WorldAnchor/Trackable to AR device)</param>
/// <param name="validity">Remaining Subscription validity delay in millisecond</param>
/// <returns>The subscription exists or not</returns>
public InformationSubscriptionResult GetSubsription(string token, string subscriptionUUID, out PoseCallback callback, out string target, out Mode_WorldAnalysis mode, out int validity);
public InformationSubscriptionResult GetSubsription(string token, Guid subscriptionUUID, out PoseCallback callback, out Guid target, out Mode_WorldAnalysis mode, out int validity);
/// <summary>
/// Update an existing subscription
......@@ -141,14 +144,14 @@ public interface WorldAnalysisInterface
/// <param name="validity">new validity of the subscription</param>
/// <param name="callback">new callback to use</param>
/// <returns>The subscription has been updated or not</returns>
public InformationSubscriptionResult UpdateSubscription(string token, string subscriptionUUID, Mode_WorldAnalysis mode, int validity, PoseCallback callback);
public InformationSubscriptionResult UpdateSubscription(string token, Guid subscriptionUUID, Mode_WorldAnalysis mode, int validity, PoseCallback callback);
/// <summary>
/// Unsubscribe to a pose
/// </summary>
/// <param name="subscriptionUUID">id of the subscription</param>
/// /// <returns>The unsubscription has been performed or not</returns>
public InformationSubscriptionResult UnSubscribeToPose(string subscriptionUUID);
public InformationSubscriptionResult UnSubscribeToPose(Guid subscriptionUUID);
#endregion
......@@ -171,9 +174,9 @@ public interface WorldAnalysisInterface
/// <param name="uuid">id of the trackable or anchor</param>
/// <param name="isSupported">trackable or anchor can be estimated on current system</param>
/// <param name="type">the specified id corresponds to an anchor or trackable</param>
/// <param name="capability">metadata associated with the pose estimation of this element</param>
/// <param name="capability">list metadata associated with the pose estimation of this element</param>
/// <returns>Capabilities have correctly identified or not</returns>
public CapabilityResult GetCapability(string token, string uuid, out bool isSupported, out TypeWorldStorage type, out Capability capability);
public CapabilityResult GetCapability(string token, Guid uuid, out bool isSupported, out TypeWorldStorage type, out Capability [] capability);
#endregion
}
\ No newline at end of file
using UnityEngine;
using ETSI.ARF.OpenAPI.WorldAnalysis;
using static WorldAnalysisInterface;
using System;
//Implementation of the WorldAnalysis interface
public class WorldAnalysisREST : MonoBehaviour, WorldAnalysisInterface
......@@ -39,46 +40,46 @@ public class WorldAnalysisREST : MonoBehaviour, WorldAnalysisInterface
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)
public PoseEstimationResult GetLastPose(string token, Guid 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)
public PoseEstimationResult[] GetLastPoses(string token, Guid[] 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)
public InformationSubscriptionResult SubscribeToPose(string token, Guid uuid, Mode_WorldAnalysis mode, PoseCallback callback, ref int validity, out Guid subscriptionUUID)
{
subscriptionUUID = "";
subscriptionUUID = Guid.Empty;
return InformationSubscriptionResult.OK;
}
public InformationSubscriptionResult[] SubscribeToPoses(string token, string[] uuids, Mode_WorldAnalysis [] modes, PoseCallback callback, ref int validity, out string[] subscriptionUUIDs)
public InformationSubscriptionResult[] SubscribeToPoses(string token, Guid[] uuids, Mode_WorldAnalysis [] modes, PoseCallback callback, ref int validity, out Guid[] 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)
public InformationSubscriptionResult GetSubsription(string token, Guid subscriptionUUID, out PoseCallback callback, out Guid target, out Mode_WorldAnalysis mode, out int validity)
{
callback = null;
target = "";
target = Guid.Empty;
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)
public InformationSubscriptionResult UpdateSubscription(string token, Guid subscriptionUUID, Mode_WorldAnalysis mode, int validity, PoseCallback callback)
{
return InformationSubscriptionResult.OK;
}
public InformationSubscriptionResult UnSubscribeToPose(string subscriptionUUID)
public InformationSubscriptionResult UnSubscribeToPose(Guid subscriptionUUID)
{
return InformationSubscriptionResult.OK;
}
......@@ -89,7 +90,7 @@ public class WorldAnalysisREST : MonoBehaviour, WorldAnalysisInterface
return CapabilityResult.OK;
}
public CapabilityResult GetCapability(string token, string uuid, out bool isSupported, out TypeWorldStorage type, out Capability capability)
public CapabilityResult GetCapability(string token, Guid uuid, out bool isSupported, out TypeWorldStorage type, out Capability [] capability)
{
isSupported = false;
type = TypeWorldStorage.UNKNOWN;
......
using System;
using System.Collections.Generic;
using UnityEngine;
public class WorldAnalysisUnityHelper
......@@ -7,7 +8,7 @@ public class WorldAnalysisUnityHelper
/// Convert a float array of length 3 to a Vector3
/// </summary>
/// <param name="value">the values to convert</param>
/// <returns></returns>
/// <returns>Converted Unity Vector3</returns>
/// <exception cref="ArgumentException"></exception>
public static Vector3 ConvertETSIVector3ToUnity(ETSI.ARF.OpenAPI.WorldAnalysis.Vector3 value)
{
......@@ -19,7 +20,7 @@ public class WorldAnalysisUnityHelper
/// Convert a float array of length 4 to a Quaternion
/// </summary>
/// <param name="value">the values to convert</param>
/// <returns></returns>
/// <returns>Converted Unity Quaternion</returns>
/// <exception cref="ArgumentException"></exception>
public static Quaternion ConvertETSIARFQuaternionToUnity(ETSI.ARF.OpenAPI.WorldAnalysis.Quaternion value)
{
......@@ -30,9 +31,9 @@ public class WorldAnalysisUnityHelper
/// <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)
/// <param name="matrix">the values to convert</param>
/// <returns>Converted Unity Matrix</returns>
public static Matrix4x4 ConvertETSIARFTransform3DToUnity(ETSI.ARF.OpenAPI.WorldStorage.Transform3D value)
{
if (value.Count == 16)
{
......@@ -64,4 +65,116 @@ public class WorldAnalysisUnityHelper
throw new ArgumentException("The numer of floats in the value parameter must be 16!");
}
}
/// <summary>
/// Function to extract translation from a Matrix4x4
/// </summary>
/// <param name="matrix"></param>
/// <returns></returns>
public static Vector3 ExtractTranslationFromMatrix(Matrix4x4 matrix)
{
return matrix.GetColumn(3);
}
/// <summary>
/// Function to extract rotation from a Matrix4x4
/// </summary>
/// <param name="matrix"></param>
/// <returns></returns>
public static Quaternion ExtractRotationFromMatrix(Matrix4x4 matrix)
{
// Convert the matrix to a Quaternion
return Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1));
}
/// <summary>
/// Duplicated generated code means that we need conversion between similar types
/// </summary>
/// <param name="value">world storage capability</param>
/// <returns>clone</returns>
public static ETSI.ARF.OpenAPI.WorldAnalysis.Capability ConvertWorldStorageCapability(ETSI.ARF.OpenAPI.WorldStorage.Capability value)
{
ETSI.ARF.OpenAPI.WorldAnalysis.Capability resul = new ETSI.ARF.OpenAPI.WorldAnalysis.Capability();
resul.TrackableType = (ETSI.ARF.OpenAPI.WorldAnalysis.TrackableType)((int)value.TrackableType);
resul.EncodingInformation = ConvertWorldStorageEncodingInformation(value.EncodingInformation);
resul.Framerate = value.Framerate;
resul.Latency = value.Latency;
resul.Accuracy = value.Accuracy;
resul.AdditionalProperties = value.AdditionalProperties; // need copy?
return resul;
}
/// <summary>
/// Duplicated generated code means that we need conversion between similar types
/// </summary>
/// <param name="value">world storage encodinginformation</param>
/// <returns>clone</returns>
public static ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure ConvertWorldStorageEncodingInformation(ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure value)
{
ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure resul = new ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure();
resul.DataFormat = (ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructureDataFormat)((int)value.DataFormat);
resul.Version = value.Version;
resul.AdditionalProperties = value.AdditionalProperties; // need copy ?
return resul;
}
/// <summary>
/// Duplicated generated code means that we need conversion between similar types
/// </summary>
/// <param name="value">world storage capability</param>
/// <returns>clone</returns>
public static ETSI.ARF.OpenAPI.WorldStorage.Capability ConvertWorldAnalysisCapability(ETSI.ARF.OpenAPI.WorldAnalysis.Capability value)
{
ETSI.ARF.OpenAPI.WorldStorage.Capability resul = new ETSI.ARF.OpenAPI.WorldStorage.Capability();
resul.TrackableType = (ETSI.ARF.OpenAPI.WorldStorage.TrackableType)((int)value.TrackableType);
resul.EncodingInformation = ConvertWorldAnalysisEncodingInformation(value.EncodingInformation);
resul.Framerate = value.Framerate;
resul.Latency = value.Latency;
resul.Accuracy = value.Accuracy;
resul.AdditionalProperties = value.AdditionalProperties; // need copy?
return resul;
}
/// <summary>
/// Duplicated generated code means that we need conversion between similar types
/// </summary>
/// <param name="value">world analysis encodinginformation</param>
/// <returns>clone</returns>
public static ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure ConvertWorldAnalysisEncodingInformation(ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure value)
{
ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure resul = new ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure();
resul.DataFormat = (ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructureDataFormat)((int)value.DataFormat);
resul.Version = value.Version;
resul.AdditionalProperties = value.AdditionalProperties; // need copy ?
return resul;
}
}
namespace ETSI.ARF.OpenAPI.WorldAnalysis
{
/// <summary>
/// Override generated Vector3 constructor
/// </summary>
public partial class Vector3 : System.Collections.ObjectModel.Collection<float>
{
public Vector3(float x, float y, float z) : base(new List<float> { x, y, z })
{
}
}
/// <summary>
/// Override generated Quaternion constructor
/// </summary>
public partial class Quaternion : System.Collections.ObjectModel.Collection<float>
{
public Quaternion(float x, float y, float z, float w) : base(new List<float> { x, y, z, w})
{
}
}
}
\ No newline at end of file