Skip to content
Snippets Groups Projects
WorldAnalysisUnityHelper.cs 6.99 KiB
Newer Older
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>Converted Unity Vector3</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>Converted Unity Quaternion</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">the values to convert</param>
    /// <returns>Converted Unity Matrix</returns>
    public static Matrix4x4 ConvertETSIARFTransform3DToUnity(ETSI.ARF.OpenAPI.WorldStorage.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!");
        }  
    }

    /// <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})
        {
        }
    }